From: <ÓÉ Windows Internet Explorer 8 ±£´æ> Subject: Lehigh University: Undergraduate Admissions: Applying to Lehigh: Requirements & Deadlines Date: Wed, 22 Jul 2009 15:36:27 +0800 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_00E5_01CA0AE2.2DAA90C0" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 This is a multi-part message in MIME format. ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/admissions/undergrad/apply/requirements.aspx =EF=BB=BF Lehigh University: Undergraduate Admissions: Applying = to Lehigh: Requirements & Deadlines
= =20 =
------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/Website%20Resources/images/sitewide/print_logo.gif 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 FnNUsGi/WZzGeZzImZzKuZzM2ZyPEAgAOw== ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/Website%20Resources/images/admissions/ti_requirements.gif?Height=0&Width=0&RotateFlipType=RotateNoneFlipNone R0lGODlhGAEVAPMAAG6UtXmbu+rw9MHR3+Do7/X3+qK60JiyyoOjwMvZ5azC1Y2rxdbg6rfJ2mSM sP///yH5BAEAAA8ALAAAAAAYARUAAAT/8MlJq7046827/2AojmRpnmiqrmzrvnDMNHSdFFOtNwwl NIfFoYHz0QaUWpIm+e0Ggslgd2zqetYa9kGlYacNwsSJnXV5lIFBSOQUpoOixny1OKnRCaGGHFMZ cjlMF2ZfNGJZW3Q7FAVACwZ9SQ6UlZR9lpYNegCZAIgSDJQLFJWllKGZlQYSC6oOpA+ilQoTCZoT rw6bD64OrKm7Eg26wq2eeRgEnZQAWxjEqgGgsrrP0agTs56SEqYX0by+wNXGXLpjAZkIFdEBCwvM DlG6vAXM78zs2qOnDv7BAMBTd6nXq1jbHOx7oACXt1fiKhWZxQubqorNFhCMheGAAwAN/zothKYr AIWElp75oqSoWLIH3yyEO0ZpIiVe515N8JXv5iRjBQgiqcSgaNE87nAEpQRqFkeY2R7+K8fR4y+D u4wyQDSL4E4HBHES1ZpnZR+KTYyOZZCHYI+lDgJV8Bltw8xyDhLwU6gV0ClmOJ02IVgrV9R2PrE6 OJs4p4G+TZrhIEBp5N2cm2JWsIrzsmDDU6UG4yjY17O98RxgocQZNIaV+9DOPSx6GMsMnUgZ+Gi3 8W5zny9Q/sUatZR+rsElhh2sc+OTyLH+dC5MMwXTtigVpgowefDSty049biJMsjG1r9WEiO7OwXA EgbAo1bhd8OrGi4PKD46QzQGnZjUX/9kvCUn03KWsNfYZRQMp5oECsAznXo9pCcBMy3BYpyBUE0V 3EzYiTcKMazst8BlFmLlESvtcSjBb3x1IIAlAMh1IHDRBWfBbwX4koeOmqV4ly8rlkMdThUQ5MAB L+UwYgO+7IOOVBmSFl2H3XVFw28ARLFSSqOJYtJuNKCnE0231NhibT7I44ACNlawDCXTcOBZjgdR oA4ADFGiF3ccColgXh8V0J5FleB0SyUg3bhOHlN2WOWGbGKJF41YfEnUaAXUhEBeKJ4pnToDrGmp nJ9WgkCc8WXi5QLdTDjgpZVw1KmG+70566m8yurLA6QeChEFCbhJjm1gwcMoDonqANr/pLsGmc0s AqV22zg6/NiPOrP8YOYuztJ0DgKmpljAfZUpk1Fxz8kKaDkB6CDJouWl+y6vghrzKzHkLvikFxUI 8OV2mEkA11C0PUspkId9E5xVrIRYgWAeucJnqKFV8OuMi7Xb68RKxiqBVQQIAFh4NwaGp4bKJbtS tA0njGxE/3Cc65F2ypPMZTOlmGqGB1CK77QrkyIxdBoS00nQGL+WjUepIlkpm1YFbYFIyDLD6mWL kqPjdda8e6uAUzup79MK+WsO0rHAhfPMH9PUxwCtwZyxw0VjdVp/22zS9AW/PpCrx+nF9PVDHClp dctv3+sPPBr59N2V+dLcaqJmSz0r/89qZyZzn1cNbg7HfEowXOm1Ta7h0Rtu+rcFgT8gj+bpaS3B oovrSYm2fvrXGEF/Or55ccHZ5x5iZ4c2e+bC2Qt649GwUivksAazS7GVvETQAQwkkGrueLMML1YI UF/YZ6nigDH11UsHIeazZfwia93Dt2NlCSSwEsHInwilZHupFuTEEI3tUAteW9oUaNjXhyFFBV3U eQf1JhCWGayHecgiRT0mACMaUQNRzaBG+KyECk0h5zO7ERDGMmE5Aq2tbA6yxKouYLJi0MdsF0Ga KnpgFUncah4oqVX8WAg39z2AY+YAYVSUeKw7MWWDE1CAPACwpw+6aQH0GaE//qcKhGYghxhWW6FD YocV2smMAUr6BaseQICVBCAB0XjKTxjVvr3sEFgow+NigngiuUDRgRnzBXVUkYQpak4FRRFDARDw CQsQoChrjIEkQyCAonigkjecpCYn+chMwoAAntykKEdJylKaMgIAOw== ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/d3f51f39-5050-4192-a0c0-2782518c7812/apply_two.jpg?Thumbnail=true&Width=815&Height=600&RotateFlipType=RotateNoneFlipNone /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC0AScDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDrjeTS xbBY3jhtpZThVLAYz1rHuLKUbA6NDsGAjnJxnPaudfxt4gl4F7BH/uQj+tZ91req3WWn1Cdz/sgD +VZLQt2OhubcYKlj061Tmt2XC/bFU91C8fqa5qbVZ7qRIgr5wAzGRsk/ypXsZ9hd7aTA6liau5Nj aneGGIg3ELH1JFY17c25hZVlXBB6c1VMLlW22ygDklqozfaXjYLsVDwGDcflRcR0fhC7aHVFC8l1 wuWwCfTNd3HM89oTHFGrKzAMM9R15xXnHhxFe+s42Yqd/LZxzXpIAt7aZIJ42nZtxDE7cnr9KylH W5pGXQpyPfSSwGNoFk2kcsRhs5Bx3yKb5rRSRPJkzMG3GMAD8fStGwsgbSKWeaIuCQfLXOefWs65 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 ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/890d6bab-ed79-40d6-9a88-7b9478c21f90/ban_maps.jpg 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 ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/8ff08930-13ac-4a2e-a4f4-22f6d2e66de7/ban_facts.jpg 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 aGW7FYeUpESukzkccjMuqrjTBCJIKpsGXEHhgEnx10FTHOq06cr2l0qVLpUqXSpUulSpdKlS6VKl 0qVLpUqXSpVdFz7H+w+R1kukyHnrme+pp4A3OqbnlHOLSsmtg6DwNy4E69fiyQB5oTRDAkQhRfqi dVUWxbJBIJYLO1ZK3JzYowR3ENUVZy73vM8Zimu7p8RzDpXkHvBchrsWHs37JW0CbV2nsHzhZVll Ek19jXWHLGeTIFhAmMnHmQpsORfuR5USVHcJtxtwSAwJRJFRVTrlmwbFG8SR2Vo2RpBBEMYIIxBB DVBByNev33e5GGOS8unRuBBBlkIIOBBBchBGYqubHOs3uLajv7bMcqtL3GIlPX41dWOQ2822x6Bj xo5QQqOykzHZlTEo3EQobcc2wjL3bQV6nss7SKN8McUbYZC4uaGtAcXfEXABCXfiJVeNQn3d1JIy aSWR0sYAa4uJLQ34Q0kqA3gBlwrsW3I3IV9Auqu8zvMrqsyTIv1fkVdbZPd2MC+yxWSjrlF1DmTn o9pkXxzVv5r4uSdiqO/Tt1zHY2UL2SQwxMkjZoaQxoLWZ6GkBQ1fwjDsrqS9vJmOjllldG9+twLn EOflrcCULk/Ece2psz7HewEbGoGGxubOVY2L1bsN6to4+e5OxAgLXGDte3DaaswWNGgPtA4yyCo0 06AmIoYoqRDseyuuHXTrS2Nw4FXGNilc1wxJyJzIwqUN63hsAtm3VwIGojfMcgTJMcAMwMgcagFx nObZDWBS3+YZTeU7d3aZK3U3GQW1lWN5HeH5bu/CBNlvRRu7hz7pUpA88gu7hEvU2K0tIJPNhijZ LoDVa0A6W/C1QF0t4DIcKhyXd1MzyppJHx6y5C4kanfE5CU1O4nM8a/Z+c5tazsas7XMMos7HDKq nocPn2N/azpmK0WPOOPUFLjkmVLdepKikedMokaMrTMYiVWxFVXr2K2toA8QRsYJHl7tLQNT3fE5 yAK4pi4qTxNczXE9xp89736GBjdRJ0sGTWqSjQuDRgOApmS4thjWUIbOwSHcvxpVvFSZIRi0kw3H 3Yj9i15Nk16M7KcNsnEJQIyVO6r08gz4imabuva9pdKlS6VKl0qVLpUqXSpUulSpdKlS6VKl0qVL pUqXSpUulSpdKlS6VKl0qVLpUqXSpUulSpdKlS6VKl0qVLpUqXSpUulSpdKlS6VKl0qVf//Z ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/ef753a89-b6e8-4185-aaa1-49b9f116afc7/marching.jpg?Thumbnail=true&Width=176&Height=200&RotateFlipType=RotateNoneFlipNone /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACEALADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDyia5a V8PI8oYcLK4598fhWhYI0qRbAwJBXbngYHTNc9Gz5yN3mD7p4A988Z/Kt3RWkRIwNu7zcLjJHP8A XrXIlbQ0i7s2m2oYwDnChQD6+v5DFXYoepxggcH2qkFaSReVBBAGDir64EDnueee1JmpW1DzBaSe Q8qoww4V8blOMgjuM+tc7NcmKXGdpGMY5CgDoeK6u9g82wlCbWfyiFIGecf41xkTI7o0rRRlhjaw JUEemBx6VnJa3MZ7kragyAABZFH3s8g88ZGcetRloriAhU8mUcDb90/hUN3b+Qf3Pyl8ERcsenPP THpU1lYTS7XZJUjUfOChUge3rVWVroSjJnQ+FdX1U2Ulshia3iu4JZIpgSAAxBbPUDkZGeRXXWW+ 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 /9k= ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www4.lehigh.edu/Media/Website%20Resources/images/sitewide/buttons/btn_searchGo.gif R0lGODlhNwAWAMQAAPmsWviWLf3o0v3hw/vDh/7w4fidPPmlS/icOvq7ePiVLPq5c/3jx/738Pmj SPzUqvvKlvq0af748fmqVv7x4/3q1fvNnPzSpfvAgfzcuPvHj/////eOHgAAAAAAAAAAACH5BAAA AAAALAAAAAA3ABYAAAXnICeOZGmeaKqubOu+cCzPdG3f+Kk45JQbl8JmM0iQAgTBUEAIlCiLEcNy AzSGA+VGIDIIt9qCgbTY8DiTTZQWuAqcHMDQONg0DqLDdfCUIEQMZjQRQ3gjBwAHAXMkCUNwImUV ChwIG34zBEMjEAOeCXIbACShoyQUGxkiDxuTMo4bcHVDBAZDESSEG2Mkga4Wl38xthsXIwZXBBxC byIBSgUlaZiWgplLBBBXG8qhBRAQX6ZS1qxrg18bBY7KHAezWIYjaWuWDz+JKAEAAJC996sY5LCh AAMJDZQGKlzIsKHDhxAjzggBADs= ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/css; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/admissions/undergrad/apply/SiteStyleLayout.css BODY { PADDING-BOTTOM: 3em; LINE-HEIGHT: 1.6em; BACKGROUND-COLOR: #dddcda; = MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: = Georgia, "Times New Roman", Times, serif; COLOR: #341c07; FONT-SIZE: = 72%; PADDING-TOP: 0px } A { COLOR: #4e75bb; TEXT-DECORATION: none } A:hover { COLOR: #355080 } HR { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; = BACKGROUND-COLOR: #e6e2df; MARGIN: 0px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; HEIGHT: 1px; COLOR: #e6e2df; CLEAR: both; = BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px } INPUT { FONT-FAMILY: Arial, Helvetica, sans-serif; LETTER-SPACING: 0em; COLOR: = #000000; FONT-SIZE: 11px } TEXTAREA { FONT-FAMILY: Arial, Helvetica, sans-serif; LETTER-SPACING: 0em; COLOR: = #000000; FONT-SIZE: 11px } SELECT { FONT-FAMILY: Arial, Helvetica, sans-serif; LETTER-SPACING: 0em; COLOR: = #000000; FONT-SIZE: 11px } OPTGROUP { FONT-FAMILY: Arial, Helvetica, sans-serif; LETTER-SPACING: 0em; COLOR: = #000000; FONT-SIZE: 11px } TEXTAREA { WIDTH: 250px; HEIGHT: 5em } P { PADDING-BOTTOM: 0px; MARGIN: 0px 0px 1.5em; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; PADDING-TOP: 0px } IMG { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; BORDER-TOP: 0px; = BORDER-RIGHT: 0px } .spacer { LINE-HEIGHT: 0px; HEIGHT: 0px; CLEAR: both; FONT-SIZE: 0px } .left { TEXT-ALIGN: left; WIDTH: 45%; FLOAT: left } .right { TEXT-ALIGN: left; WIDTH: 45%; FLOAT: right } #Form1 { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; PADDING-TOP: 0px } H1 { PADDING-BOTTOM: 1em; LINE-HEIGHT: 1em; MARGIN: 0px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; FONT-SIZE: 2.8em; PADDING-TOP: 0px } H2 { PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1em; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; FONT-SIZE: 2.4em; PADDING-TOP: 0px } H3 { PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1em; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; FONT-SIZE: 2em; PADDING-TOP: 0px } H4 { PADDING-BOTTOM: 0.3em; LINE-HEIGHT: 1.1em; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; FONT-SIZE: 1.5em; FONT-WEIGHT: normal; = PADDING-TOP: 0px } H5 { PADDING-BOTTOM: 1em; LINE-HEIGHT: 1em; MARGIN: 0px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; FONT-SIZE: 1.4em; FONT-WEIGHT: normal; PADDING-TOP: = 0px } H6 { PADDING-BOTTOM: 0.8em; LINE-HEIGHT: 1em; TEXT-TRANSFORM: uppercase; = MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 1.1em; = FONT-WEIGHT: normal; PADDING-TOP: 0px } #pageCt { POSITION: relative; BACKGROUND-COLOR: #fff; MARGIN: 12px auto 0px; = WIDTH: 998px } #gridCt { BORDER-BOTTOM: #dddcda 7px solid; PADDING-BOTTOM: 7px; MARGIN: 7px } #zoneCt { WIDTH: 682px; FLOAT: left } #zone1 { PADDING-BOTTOM: 1.5em; MIN-HEIGHT: 400px; PADDING-LEFT: 56px; = PADDING-RIGHT: 30px; PADDING-TOP: 8px } #zone2 { =09 } #zone3 { WIDTH: 295px; FLOAT: right } #subGridCt { WIDTH: 984px; BACKGROUND: url(../images/admissions/subGrid_bg.gif) = repeat-y } #subGridCt #zoneCt { WIDTH: 818px; FLOAT: right } #subGridCt #zone1 { PADDING-BOTTOM: 1.5em; PADDING-LEFT: 37px; WIDTH: 420px; PADDING-RIGHT: = 0px; FLOAT: left; PADDING-TOP: 8px } #subGridCt #zone2 { WIDTH: 295px; FLOAT: right } #subGridCt #zone3 { WIDTH: 166px; FLOAT: left } .twoColumn#subGridCt #zone1 { WIDTH: 660px; FLOAT: none } #header { Z-INDEX: 1; POSITION: relative; BACKGROUND-COLOR: #502d0e; HEIGHT: = 106px } #header H1 { POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 689px; BACKGROUND: = url(../images/sitewide/logo.gif) no-repeat; HEIGHT: 50px; OVERFLOW: = hidden; TOP: 21px; LEFT: 31px } #header H2 { POSITION: absolute; PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; = PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BACKGROUND-REPEAT: no-repeat; = OVERFLOW: hidden; PADDING-TOP: 0px; LEFT: 747px } #homeLink A { POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 689px; HEIGHT: 50px; = OVERFLOW: hidden; TOP: 21px; LEFT: 31px } #undergradLink A { POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 176px; HEIGHT: 50px; = OVERFLOW: hidden; TOP: 18px; LEFT: 764px } .admissions #header H2 { BACKGROUND-IMAGE: url(../images/admissions/header_admissions.gif); = WIDTH: 192px; HEIGHT: 39px; TOP: 22px } .undergraduate #header H2 { BACKGROUND-IMAGE: url(../images/admissions/header_ugAdmissions.gif); = WIDTH: 192px; HEIGHT: 45px; TOP: 20px } .research #header H2 { BACKGROUND-IMAGE: url(../images/research/header_research.gif); WIDTH: = 170px; HEIGHT: 45px; TOP: 20px } #navGlobal { POSITION: absolute; BACKGROUND-COLOR: #341c07; WIDTH: 768px; BOTTOM: = 0px; HEIGHT: 22px } #navGlobal UL { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; WIDTH: 768px; PADDING-RIGHT: 0px; HEIGHT: 22px; PADDING-TOP: 0px } #navGlobal UL LI { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; FLOAT: left; HEIGHT: 22px; PADDING-TOP: 0px } #navGlobal UL LI A { BACKGROUND-IMAGE: url(../images/sitewide/gnav.gif); TEXT-INDENT: = -9999px; DISPLAY: block; BACKGROUND-REPEAT: no-repeat; HEIGHT: 22px; = OVERFLOW: hidden } #n1 A { WIDTH: 68px; BACKGROUND-POSITION: 0px 0px } .home #n1 A { BACKGROUND-POSITION: 0px -44px } #n1 A:hover { BACKGROUND-POSITION: 0px -22px } .active#n1 A { BACKGROUND-POSITION: 0px -22px } .active#n1 A:hover { BACKGROUND-POSITION: 0px -22px } #n2 A { WIDTH: 106px; BACKGROUND-POSITION: -68px 0px } .about #n2 A { BACKGROUND-POSITION: -68px -44px } #n2 A:hover { BACKGROUND-POSITION: -68px -22px } .active#n2 A { BACKGROUND-POSITION: -68px -22px } .active#n2 A:hover { BACKGROUND-POSITION: -68px -22px } #n3 A { WIDTH: 92px; BACKGROUND-POSITION: -174px 0px } .academics #n3 A { BACKGROUND-POSITION: -174px -44px } #n3 A:hover { BACKGROUND-POSITION: -174px -22px } .active#n3 A { BACKGROUND-POSITION: -174px -22px } .active#n3 A:hover { BACKGROUND-POSITION: -174px -22px } #n4 A { WIDTH: 86px; BACKGROUND-POSITION: -266px 0px } #n4 A:hover { BACKGROUND-POSITION: -266px -22px } .active#n4 A { BACKGROUND-POSITION: -266px -22px } .active#n4 A:hover { BACKGROUND-POSITION: -266px -22px } .research #n4 A { BACKGROUND-POSITION: -266px -44px } #n5 A { WIDTH: 98px; BACKGROUND-POSITION: -352px 0px } .admissions #n5 A { BACKGROUND-POSITION: -352px -44px } #n5 A:hover { BACKGROUND-POSITION: -352px -22px } .active#n5 A { BACKGROUND-POSITION: -352px -22px } .active#n5 A:hover { BACKGROUND-POSITION: -352px -22px } #n6 A { WIDTH: 104px; BACKGROUND-POSITION: -450px 0px } .studentLife #n6 A { BACKGROUND-POSITION: -450px -44px } #n6 A:hover { BACKGROUND-POSITION: -450px -22px } .active#n6 A { BACKGROUND-POSITION: -450px -22px } .active#n6 A:hover { BACKGROUND-POSITION: -450px -22px } #n7 A { WIDTH: 72px; BACKGROUND-POSITION: -554px 0px } .sports #n7 A { BACKGROUND-POSITION: -554px -44px } #n7 A:hover { BACKGROUND-POSITION: -554px -22px } .active#n7 A { BACKGROUND-POSITION: -554px -22px } .active#n7 A:hover { BACKGROUND-POSITION: -554px -22px } #n8 A { WIDTH: 72px; BACKGROUND-POSITION: -626px 0px } .alumni #n8 A { BACKGROUND-POSITION: -626px -44px } #n8 A:hover { BACKGROUND-POSITION: -626px -22px } .active#n8 A { BACKGROUND-POSITION: -626px -22px } .active#n8 A:hover { BACKGROUND-POSITION: -626px -22px } #n9 A { WIDTH: 70px; BACKGROUND-POSITION: -698px 0px } .giving #n9 A { BACKGROUND-POSITION: -698px -44px } #n9 A:hover { BACKGROUND-POSITION: -698px -22px } .active#n9 A { BACKGROUND-POSITION: -698px -22px } .active#n9 A:hover { BACKGROUND-POSITION: -698px -22px } #navGlobal .secondtier { POSITION: absolute; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: = 150px; PADDING-RIGHT: 0px; BACKGROUND: #d6d3bd; HEIGHT: 0px; FONT-SIZE: = 0.9em; OVERFLOW: hidden; PADDING-TOP: 0px } #navGlobal .secondtier UL { PADDING-BOTTOM: 10px; PADDING-LEFT: 0px; WIDTH: auto; PADDING-RIGHT: = 0px; HEIGHT: auto; PADDING-TOP: 15px } #navGlobal .secondtier UL LI { POSITION: relative; PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1.1em; = PADDING-LEFT: 4px; PADDING-RIGHT: 5px; FLOAT: none; HEIGHT: auto; = FONT-SIZE: 1.1em; PADDING-TOP: 0px } #navGlobal .secondtier UL LI A { TEXT-INDENT: 0px; PADDING-LEFT: 15px; WIDTH: auto; BACKGROUND: = url(none); HEIGHT: auto; COLOR: #000000 } #navGlobal .secondtier UL LI A:hover { BACKGROUND: url(../images/admissions/nav_arrow_brown.gif) no-repeat } #photoCt IMG { PADDING-BOTTOM: 7px } #zone1 A { TEXT-DECORATION: underline } #breadCt { PADDING-BOTTOM: 2.5em; MARGIN-LEFT: -34px; FONT-SIZE: 0.9em } #subGridCt #breadCt { MARGIN-LEFT: -21px } #pageTitle IMG { PADDING-BOTTOM: 1.8em } #pageNav { PADDING-BOTTOM: 1em; BACKGROUND-COLOR: #648cb0; PADDING-LEFT: 10px; = PADDING-RIGHT: 5px; PADDING-TOP: 28px } #pageNav UL { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } #pageNav UL LI { PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1.1em; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } #pageNav UL LI A { PADDING-LEFT: 15px; DISPLAY: block; COLOR: #fff; FONT-SIZE: 0.95em } #pageNav UL LI A:hover { BACKGROUND: url(../images/admissions/nav_arrow_white.gif) no-repeat } #pageNav UL LI.arrow { BACKGROUND: url(../images/admissions/nav_arrow.gif) #fff no-repeat 1px = 5px } #pageNav UL LI.open { PADDING-BOTTOM: 7px; BACKGROUND-COLOR: #fff; MARGIN: 0px -5px 4px -1px; = PADDING-LEFT: 17px; PADDING-RIGHT: 0px; PADDING-TOP: 4px } #pageNav UL LI.open A { PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; = COLOR: #4e75bb } #pageNav UL LI.open A:hover { BACKGROUND: none transparent scroll repeat 0% 0% } #pageNav UL LI.open UL { PADDING-TOP: 0.7em } #pageNav UL LI.open UL LI { PADDING-BOTTOM: 0.3em; MARGIN-LEFT: -13px } #pageNav UL LI.open UL LI.current { BACKGROUND: url(../images/admissions/nav_subArrow.gif) no-repeat 1px = 2px } #pageNav UL LI.open UL LI.current A { COLOR: #341c07 } #pageNav UL LI.open UL A { PADDING-LEFT: 13px; COLOR: #341c07; FONT-SIZE: 0.9em } #pageNav UL LI.open UL A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #f78e1e } #footer { TEXT-ALIGN: center; PADDING-BOTTOM: 3.4em; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: = #615448; PADDING-TOP: 1.2em } #footer H6 { COLOR: #502d0e } #footer P { LINE-HEIGHT: 1.2em; MARGIN-BOTTOM: 0em; FONT-SIZE: 0.9em } #footer A { COLOR: #615448 } #footer A:hover { TEXT-DECORATION: underline } #footerNav A { COLOR: #2d1f12; FONT-WEIGHT: bold } .main.admissions #zone1 { MIN-HEIGHT: 160px; PADDING-TOP: 30px } #pathCt { BORDER-BOTTOM: #5f85a8 18px solid; PADDING-BOTTOM: 22px; = BACKGROUND-COLOR: #648cb0 } #pathCt #pathHeader { BACKGROUND-COLOR: #5f85a8; MARGIN-BOTTOM: 22px } #pathCt #pathHeader H4 { PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: = 156px; PADDING-RIGHT: 0px; BACKGROUND: = url(../images/admissions/header_chooseYourPath.gif) no-repeat; HEIGHT: = 18px; OVERFLOW: hidden; PADDING-TOP: 0px } #paths { PADDING-LEFT: 46px } .path { WIDTH: 186px; PADDING-RIGHT: 34px; FLOAT: left } .last.path { PADDING-RIGHT: 0px } .pathPhoto { PADDING-BOTTOM: 10px; BACKGROUND: = url(../images/admissions/path_photo_bg.gif) repeat-y } .last.path .pathPhoto { BACKGROUND: none transparent scroll repeat 0% 0% } .path H4 { COLOR: #b6e5ff } .path UL { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; COLOR: #fff; PADDING-TOP: 0.2em } .path UL LI { PADDING-BOTTOM: 0.5em; LINE-HEIGHT: 1.3em; MARGIN: 0px; PADDING-LEFT: = 8px; PADDING-RIGHT: 0px; BACKGROUND: = url(../images/admissions/bullet_path.gif) no-repeat 0px 0.5em; = PADDING-TOP: 0px } .path A { COLOR: #fff } .path A:hover { TEXT-DECORATION: underline } #admissionsNews { WIDTH: 350px } #admissionsNews .rss-box { WIDTH: 340px } #admissionsNews .rss-items { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: disc; MARGIN: 0px 5px 0px 15px; = PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 0.95em; FONT-WEIGHT: = bold; PADDING-TOP: 0px } #admissionsNews .rss-item { PADDING-BOTTOM: 7px } #admissionsNews .rss-date { COLOR: #d5d4bd } #bannerCt { PADDING-BOTTOM: 7px } #bannerLeft { WIDTH: 144px; FLOAT: left } #bannerRight { WIDTH: 144px; FLOAT: right } #admNav { BACKGROUND-COLOR: #648cb0; MARGIN: 1em 0em } #admNav UL { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } #admNav UL LI { PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; FLOAT: right; PADDING-TOP: 0px } #admNav UL LI A { TEXT-INDENT: -9999px; WIDTH: 115px; DISPLAY: block; BACKGROUND-REPEAT: = no-repeat; HEIGHT: 56px; OVERFLOW: hidden } #a1 A { BACKGROUND-IMAGE: url(../images/admissions/nav_visit.gif) } #a2 A { BACKGROUND-IMAGE: url(../images/admissions/nav_apply.gif) } #zoneTop { WIDTH: 984px; BACKGROUND: url(../images/admissions/zoneTop_bg.gif) = repeat-y } #mainPhoto { WIDTH: 815px; FLOAT: right } #mainPhoto IMG { PADDING-BOTTOM: 7px } #navCt { BORDER-BOTTOM: #fff 7px solid; BACKGROUND-COLOR: #648cb0; WIDTH: 162px; = FLOAT: left; HEIGHT: 367px; OVERFLOW: hidden } #zoneBottom { POSITION: relative; PADDING-BOTTOM: 18px; WIDTH: 984px; BACKGROUND: = url(../images/admissions/zoneBottom_bg.gif) no-repeat 0px 100% } #bottomLeft { WIDTH: 596px; FLOAT: left } #bottomRight { WIDTH: 381px; FLOAT: right } #subGridCtResearch { WIDTH: 984px; BACKGROUND: url(../images/research/subGrid_bg.gif) = repeat-y } #subGridCtResearch #zoneCt { WIDTH: 818px; FLOAT: right } #subGridCtResearch #zone1 { WIDTH: 528px; FLOAT: left; MARGIN-LEFT: -40px; BORDER-RIGHT: #000000 = 1px solid } #subGridCtResearch #zone2 { WIDTH: 242px; FLOAT: right } #subGridCtResearch #zone3 { WIDTH: 166px; FLOAT: left } #subGridCtResearch #zone2a { POSITION: absolute; BORDER-LEFT: #000000 1px solid; WIDTH: 245px; = HEIGHT: 710px; TOP: 330px; LEFT: 748px } #subGridCtResearch #breadCtfeature { =09 } #subGridCtResearch #breadCt { POSITION: absolute; MARGIN-LEFT: 0px; TOP: 322px; LEFT: 190px } #researchtopimage { PADDING-BOTTOM: 14px; PADDING-LEFT: 7px } .sidebarcontent { LINE-HEIGHT: 11px; PADDING-LEFT: 12px; FONT-FAMILY: Helvetica, Arial, = sans-serif; FONT-SIZE: 11px; PADDING-TOP: 20px } .sidebarcontent P { MARGIN: 0px 0px 1em } .sidebarcontent A { COLOR: #345c89; TEXT-DECORATION: underline } .sidebarcontent A:hover { COLOR: #213c5a } .sidebarcontentheader { TEXT-TRANSFORM: uppercase; MARGIN-TOP: 0em; FONT-FAMILY: Helvetica, = Arial, sans-serif; MARGIN-BOTTOM: 0.5em; COLOR: #000000; FONT-SIZE: = 14px; FONT-WEIGHT: bold } #researchNews .rss-box { WIDTH: 150px } #researchNews .rss-items { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px } #researchNews .rss-date { COLOR: #d5d4bd } #researchNav { PADDING-BOTTOM: 1em; TEXT-TRANSFORM: uppercase; BACKGROUND-COLOR: = #d6d4a8; PADDING-LEFT: 10px; PADDING-RIGHT: 5px; FONT-FAMILY: Helvetica, = Arial, sans-serif; FONT-SIZE: 12px; FONT-WEIGHT: bold; PADDING-TOP: 28px } #researchNav UL { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } #researchNav UL LI { PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1.1em; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } #researchNav UL LI A { PADDING-LEFT: 20px; DISPLAY: block; COLOR: #000000; FONT-SIZE: 0.95em; = FONT-WEIGHT: normal } #researchNav UL LI A:hover { BACKGROUND: url(../images/sitewide/black_arrows.gif) no-repeat } #researchNav UL LI.arrow { BACKGROUND: url(../images/sitewide/blue2_arrows.gif) #ffffff no-repeat = 1px 5px } #researchNav UL LI.open { PADDING-BOTTOM: 7px; BACKGROUND-COLOR: #ffffff; MARGIN: 0px -5px 4px = -1px; PADDING-LEFT: 17px; PADDING-RIGHT: 0px; PADDING-TOP: 4px } #researchNav UL LI.open A { PADDING-LEFT: 4px; BACKGROUND: none transparent scroll repeat 0% 0%; = COLOR: #345c89; FONT-WEIGHT: normal } #researchNav UL LI.open A:hover { BACKGROUND: none transparent scroll repeat 0% 0% } #researchNav UL LI.open UL { PADDING-TOP: 0.7em } #researchNav UL LI.open UL LI { PADDING-BOTTOM: 0.3em; MARGIN-LEFT: -13px } #researchNav UL LI.open UL LI.current { BACKGROUND: url(../images/sitewide/nav_subArrow.gif) no-repeat 1px 2px } #researchNav UL LI.open UL LI.current A { COLOR: #000000 } #researchNav UL LI.open UL A { PADDING-LEFT: 13px; COLOR: #000000; FONT-SIZE: 0.9em } #researchNav UL LI.open UL A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #345c89 } .AC-SpotlightArchive { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 10px 0px 0px; = PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #7c7c7c; PADDING-TOP: 0px } .AC-SpotlightArchive LI IMG { FLOAT: left; MARGIN-RIGHT: 10px } .AC-SpotlightArchive LI { PADDING-BOTTOM: 0px; MARGIN: 0px 0px 5px 15px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; CLEAR: both; PADDING-TOP: 0px } .AC-SpotlightArchive A { FONT-WEIGHT: normal; TEXT-DECORATION: none } .AC-SpotlightArchive .AC-SpotlightArchiveGroup { BORDER-BOTTOM: #dbdad9 1px solid; MARGIN: 10px 0px; HEIGHT: 18px; = FONT-SIZE: 14px; FONT-WEIGHT: bold } .slide { DISPLAY: none; HEIGHT: 367px; VISIBILITY: hidden } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/css; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/admissions/undergrad/apply/SiteStyleContentTypes.css .AC-Block { =09 } .AC-BlockHeader { POSITION: relative } .AC-BlockHeader H4 { PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 18px; = OVERFLOW: hidden; PADDING-TOP: 0px } .active.AC-BlockHeader H4 { BACKGROUND-POSITION: 0px -18px } .AC-BlockText { PADDING-BOTTOM: 0.4em; PADDING-LEFT: 23px; PADDING-RIGHT: 15px; = PADDING-TOP: 1.5em } .AC-BlockItem { PADDING-BOTTOM: 0.8em; PADDING-LEFT: 7px; PADDING-RIGHT: 0px; = BACKGROUND: url(../images/admissions/bullet_item.gif) no-repeat 0px = 0.7em; FONT-SIZE: 0.95em; PADDING-TOP: 0px } .AC-Block A { COLOR: #341c07 } .AC-Block A:hover { TEXT-DECORATION: underline } .AC-BlockCtrl { HEIGHT: 18px } .AC-BlockCtrl A { TEXT-INDENT: -9999px; DISPLAY: block; BACKGROUND-REPEAT: no-repeat; = FLOAT: right; HEIGHT: 18px; OVERFLOW: hidden } .AC-BlockFeed { FONT-SIZE: 0.95em; FONT-WEIGHT: bold } .AC-BlockFeed A { PADDING-BOTTOM: 0.8em; PADDING-LEFT: 7px; PADDING-RIGHT: 0px; = BACKGROUND: url(../images/admissions/bullet_item.gif) no-repeat 0px = 0.7em; PADDING-TOP: 0px } .AC-Banner { =09 } .AC-CampusConnection { BACKGROUND-COLOR: #faa61a } .AC-CampusConnection A { COLOR: #341c07 } .AC-CampusConnection A:hover { TEXT-DECORATION: underline } .AC-CampusConnection .AC-BlockHeader { BACKGROUND-COLOR: #f78e1e; HEIGHT: 18px } .AC-CampusConnection .AC-BlockHeader H4 { BACKGROUND-IMAGE: url(../images/sitewide/header_campusConnection.gif); = WIDTH: 162px; FLOAT: left } .AC-CampusConnection .AC-BlockNav { TEXT-TRANSFORM: uppercase; PADDING-LEFT: 7px; FONT-FAMILY: Arial, = Helvetica, sans-serif; FLOAT: left; FONT-SIZE: 0.9em } .AC-CampusConnection .AC-BlockImage { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 14px } .AC-CampusConnection .AC-BlockImage IMG { =09 } .AC-CampusConnection .AC-BlockText { PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.1em; MARGIN: 0.4em auto; = MIN-HEIGHT: 25px; PADDING-LEFT: 0px; WIDTH: 176px; PADDING-RIGHT: 0px; = FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 0.8em; = PADDING-TOP: 2px } .AC-CampusConnection .AC-BlockText .type { TEXT-TRANSFORM: uppercase } .AC-CampusConnection .Gallery.AC-BlockText { PADDING-LEFT: 32px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_gallery.gif) no-repeat } .AC-CampusConnection .Blog.AC-BlockText { PADDING-LEFT: 29px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_blog.gif) no-repeat } .AC-CampusConnection .Video.AC-BlockText { PADDING-LEFT: 34px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_video.gif) no-repeat } .AC-CampusConnection .Profile.AC-BlockText { PADDING-LEFT: 34px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_profile.gif) no-repeat } .AC-CampusConnection .Audio.AC-BlockText { PADDING-LEFT: 34px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_audio.gif) no-repeat } .AC-CampusConnection .Other.AC-BlockText { PADDING-LEFT: 34px; WIDTH: auto; BACKGROUND: = url(../images/admissions/icon_other.gif) no-repeat } .AC-CampusConnection .AC-BlockCtrl { BACKGROUND-COLOR: #f78e1e } .AC-CampusConnection .AC-BlockCtrl A { BACKGROUND-IMAGE: = url(../images/sitewide/ctrl_moreGalleriesBlogsVideos.gif); WIDTH: 198px } .Callout.AC-CampusConnection { =09 } .Callout.AC-CampusConnection .AC-BlockHeader H4 { FLOAT: none } .Callout.AC-CampusConnection .AC-BlockImage IMG { BORDER-BOTTOM: #f78e1e 2px solid; BORDER-LEFT: #f78e1e 2px solid; = MARGIN: 0px auto; BORDER-TOP: #f78e1e 2px solid; BORDER-RIGHT: #f78e1e = 2px solid } .Callout.AC-CampusConnection .Gallery.AC-BlockText { WIDTH: 144px } .Callout.AC-CampusConnection .Blog.AC-BlockText { WIDTH: 147px } .Callout.AC-CampusConnection .Video.AC-BlockText { WIDTH: 142px } .Callout.AC-CampusConnection .Profile.AC-BlockText { WIDTH: 142px } .Callout.AC-CampusConnection .Audio.AC-BlockText { WIDTH: 142px } .AC-SliderNav { MARGIN: 5px 8px 0px 0px; WIDTH: 39px; FLOAT: right } .AC-SliderNav .set { TEXT-INDENT: -9999px; WIDTH: 9px; BACKGROUND: = url(../images/admissions/icon_dot.gif) no-repeat; FLOAT: left; HEIGHT: = 9px; MARGIN-LEFT: 3px; OVERFLOW: hidden } .AC-SliderNav .active.set { BACKGROUND-POSITION: 0px -9px } .AC-SliderMain { PADDING-BOTTOM: 2px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; = PADDING-TOP: 2px } .AC-SlideCt { WIDTH: 522px; FLOAT: left; OVERFLOW: hidden } .AC-Slider { =09 } .AC-SliderPrev { BACKGROUND-IMAGE: url(../images/admissions/icon_prev.gif); TEXT-INDENT: = -9999px; MARGIN: 67px 4px 0px 0px; WIDTH: 24px; BACKGROUND-REPEAT: = no-repeat; FLOAT: left; HEIGHT: 25px; OVERFLOW: hidden; CURSOR: pointer } .AC-SliderNext { BACKGROUND-IMAGE: url(../images/admissions/icon_next.gif); TEXT-INDENT: = -9999px; MARGIN: 67px 0px 0px 4px; WIDTH: 24px; BACKGROUND-REPEAT: = no-repeat; FLOAT: left; HEIGHT: 25px; OVERFLOW: hidden; CURSOR: pointer } .AC-SliderPrev:hover { BACKGROUND-POSITION: 0px -25px } .AC-SliderNext:hover { BACKGROUND-POSITION: 0px -25px } .disabled.AC-SliderPrev { BACKGROUND-POSITION: 0px -50px; CURSOR: default } .disabled.AC-SliderNext { BACKGROUND-POSITION: 0px -50px; CURSOR: default } .AC-Slide { PADDING-BOTTOM: 0px; PADDING-LEFT: 14px; WIDTH: 160px; PADDING-RIGHT: = 0px; FLOAT: left; PADDING-TOP: 0px } #AC-CampusConnectionDetails .AC-CampusConnection { BORDER-BOTTOM: #f78e1e 18px solid; BACKGROUND-COLOR: #faa61a; = MARGIN-TOP: 2.5em; WIDTH: 596px } #AC-CampusConnectionDetails .AC-CampusConnection .AC-BlockHeader { POSITION: relative; WIDTH: 596px } #AC-CampusConnectionDetails .AC-SliderNav { WIDTH: 60px } .AC-Events { BACKGROUND-COLOR: #afcd5c } .AC-Events .AC-BlockHeader { BACKGROUND-COLOR: #85b446 } .AC-Events .AC-BlockHeader H4 { BACKGROUND-IMAGE: url(../images/sitewide/header_upcomingEvents.gif); = WIDTH: 140px } .AC-Events .AC-BlockCtrl { BACKGROUND-COLOR: #85b446 } .AC-Events .AC-BlockCtrl A { BACKGROUND-IMAGE: url(../images/sitewide/ctrl_moreEvents.gif); WIDTH: = 109px } #zoneBottom #AC-TabCt .AC-Events .AC-BlockCtrl { POSITION: absolute; WIDTH: 109px; BOTTOM: 0px; RIGHT: 0px } .AC-News { BACKGROUND-COLOR: #afcd5c } .AC-News .AC-BlockHeader { BACKGROUND-COLOR: #85b446 } .AC-News .AC-BlockHeader H4 { BACKGROUND-IMAGE: url(../images/sitewide/header_news.gif); WIDTH: 63px } .AC-News .AC-BlockCtrl { BACKGROUND-COLOR: #85b446 } .AC-News .AC-BlockCtrl A { BACKGROUND-IMAGE: url(../images/sitewide/ctrl_moreNews.gif); WIDTH: = 100px } #zoneBottom #AC-TabCt .AC-News .AC-BlockCtrl { POSITION: absolute; WIDTH: 100px; BOTTOM: 0px; RIGHT: 0px } S .AC-News .AC-RSS { BACKGROUND-COLOR: #85b446 } .active.AC-News .AC-RSS { BACKGROUND-COLOR: #fff } .AC-RSS { POSITION: absolute; BACKGROUND: url(../images/sitewide/rss_icon.gif) = no-repeat; TOP: 3px; LEFT: 51px } .AC-RSS A { TEXT-INDENT: -9999px; WIDTH: 12px; DISPLAY: block; HEIGHT: 12px; = OVERFLOW: hidden } .AC-NewsDetails { WIDTH: 750px } .AC-NewsDetails H3 { LINE-HEIGHT: 1.2em } .AC-NewsDetails #AC-NewsOverview { =09 } .AC-NewsDetails #AC-NewsBody { =09 } .AC-NewsDetails #AC-NewsBody .AC-NewsProperties { MARGIN-BOTTOM: 1.5em; PADDING-TOP: 0.5em } .AC-NewsDetails #AC-NewsBody .AC-NewsProperties .AC-NewsAuthor { FONT-WEIGHT: bold } .AC-NewsDetails #AC-NewsBody .AC-NewsProperties .AC-NewsDate { FONT-WEIGHT: bold } .AC-NewsDetails #AC-NewsBody .AC-NewsProperties .AC-NewsTeaser { FONT-STYLE: italic } .AC-NewsDetails #AC-NewsBody #AC-NewsStory { =09 } .AC-NewsDetails .AC-Media { PADDING-LEFT: 10px; WIDTH: 250px; FLOAT: right } .AC-NewsDetails .AC-Image { =09 } .AC-NewsDetails .AC-Audio { =09 } .AC-NewsDetails .AC-Video { PADDING-BOTTOM: 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 10px } .AC-NewsDetails #AC-imageCaption { PADDING-BOTTOM: 10px; FONT-STYLE: italic; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; PADDING-TOP: 10px } .AC-NewsDetails .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-GalleryImage .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-VideoDetails .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-NewsDetails .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-GalleryImage .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-VideoDetails .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-NewsDetails .MediaPlayer A { PADDING-LEFT: 25px } .AC-GalleryImage .MediaPlayer A { PADDING-LEFT: 25px } .AC-VideoDetails .MediaPlayer A { PADDING-LEFT: 25px } .AC-NewsDetails .iTunes A { PADDING-LEFT: 25px } .AC-GalleryImage .iTunes A { PADDING-LEFT: 25px } .AC-VideoDetails .iTunes A { PADDING-LEFT: 25px } .AC-Controls { PADDING-BOTTOM: 2em; PADDING-LEFT: 0em; PADDING-RIGHT: 0em; = PADDING-TOP: 3em } .AC-Archives { PADDING-RIGHT: 1.5em; FLOAT: left } .AC-Archives A { =09 } .AC-BackButton { FLOAT: left; PADDING-TOP: 0.2em } .AC-NewsArchive DL { =09 } .AC-NewsArchive DT { BORDER-BOTTOM: #d6cdd3 1px solid } .AC-NewsArchive DD { PADDING-LEFT: 15px; MARGIN-BOTTOM: 0.5em } #lbOverlay { Z-INDEX: 90; POSITION: absolute; BACKGROUND-COLOR: #000; WIDTH: 100%; = CURSOR: pointer; LEFT: 0px } #lbCenter { Z-INDEX: 100; POSITION: absolute; BACKGROUND-COLOR: #fff; OVERFLOW: = hidden; LEFT: 50% } #lbBottomContainer { Z-INDEX: 100; POSITION: absolute; BACKGROUND-COLOR: #fff; OVERFLOW: = hidden; LEFT: 50% } #lbImage { BORDER-BOTTOM: #fff 5px solid; POSITION: absolute; BORDER-LEFT: #fff = 5px solid; BACKGROUND-REPEAT: no-repeat; BORDER-TOP: #fff 5px solid; = TOP: 0px; BORDER-RIGHT: #fff 5px solid; LEFT: 0px } .lbLoading { BACKGROUND: url(../images/sitewide/loading.gif) #fff no-repeat center = 50% } #lbPrevLink { POSITION: absolute; OUTLINE-STYLE: none; OUTLINE-COLOR: invert; = OUTLINE-WIDTH: medium; WIDTH: 50%; DISPLAY: block; TOP: 0px; CURSOR: = pointer } #lbNextLink { POSITION: absolute; OUTLINE-STYLE: none; OUTLINE-COLOR: invert; = OUTLINE-WIDTH: medium; WIDTH: 50%; DISPLAY: block; TOP: 0px; CURSOR: = pointer } #lbPrevLink { LEFT: 0px } #lbPrevLink:hover { BACKGROUND: url(../images/sitewide/prevlabel.gif) no-repeat 0% 30% } #lbNextLink { RIGHT: 0px } #lbNextLink:hover { BACKGROUND: url(../images/sitewide/nextlabel.gif) no-repeat 100% 30% } #lbBottom { BORDER-BOTTOM: #fff 5px solid; BORDER-LEFT: #fff 5px solid; = LINE-HEIGHT: 1.4em; FONT-FAMILY: Verdana, Arial, Geneva, Helvetica, = sans-serif; COLOR: #666; FONT-SIZE: 10px; BORDER-TOP: 0px; BORDER-RIGHT: = #fff 5px solid } #lbCloseLink { MARGIN: 5px 0px; WIDTH: 65px; DISPLAY: block; BACKGROUND: = url(../images/sitewide/closelabel.gif) no-repeat; FLOAT: right; HEIGHT: = 22px } #lbCaption { MARGIN-RIGHT: 75px } #lbNumber { MARGIN-RIGHT: 75px } #lbCaption { FONT-WEIGHT: bold } .AC-GalleryImage { PADDING-BOTTOM: 25px; PADDING-LEFT: 0px; PADDING-RIGHT: 25px; FLOAT: = left; PADDING-TOP: 0px } .last.AC-GalleryImage { PADDING-BOTTOM: 25px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 0px } #AC-PhotoThumbs { BORDER-BOTTOM: #666 1px solid; POSITION: relative; TEXT-ALIGN: center; = BORDER-LEFT: #666 1px solid; PADDING-BOTTOM: 3px; PADDING-LEFT: 3px; = WIDTH: 292px; PADDING-RIGHT: 3px; FLOAT: right; BORDER-TOP: #666 1px = solid; MARGIN-RIGHT: 15px; BORDER-RIGHT: #666 1px solid; PADDING-TOP: = 3px } #AC-PhotoThumbs A { DISPLAY: block } #AC-PhotoThumbs IMG { DISPLAY: inline; VERTICAL-ALIGN: middle } #AC-PhotoThumbs .AC-PhotoImage { BACKGROUND-COLOR: #efefef } #AC-PhotoThumbs .AC-ThumbsPager { PADDING-BOTTOM: 3px; PADDING-LEFT: 0px; WIDTH: 90px; PADDING-RIGHT: = 0px; FLOAT: right; FONT-SIZE: 0.9em; PADDING-TOP: 8px } #AC-PhotoThumbs .AC-ThumbsPager .AC-PagingText { TEXT-ALIGN: center; PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; = PADDING-RIGHT: 5px; FLOAT: left; PADDING-TOP: 0px } #AC-PhotoThumbs .AC-ThumbsPager .AC-LeftArrow { TEXT-INDENT: -9999px; MARGIN: 0px; WIDTH: 22px; BACKGROUND: = url(../images/sitewide/tPrev.gif) no-repeat 0px 0px; FLOAT: left; = HEIGHT: 15px; OVERFLOW: hidden; CURSOR: pointer } #AC-PhotoThumbs .AC-ThumbsPager .AC-RightArrow { TEXT-INDENT: -9999px; MARGIN: 0px; WIDTH: 22px; BACKGROUND: = url(../images/sitewide/tNext.gif) no-repeat 0px 0px; FLOAT: left; = HEIGHT: 15px; OVERFLOW: hidden; CURSOR: pointer } #AC-PhotoThumbs .AC-ThumbsPager .AC-LeftArrow:hover { BACKGROUND-POSITION: 0px -15px } #AC-PhotoThumbs .AC-ThumbsPager .AC-RightArrow:hover { BACKGROUND-POSITION: 0px -15px } #AC-PhotoThumbs .AC-ThumbsPager .disabled { BACKGROUND-POSITION: 0px -30px; CURSOR: default } #AC-PhotoThumbs .AC-ThumbsPager .disabled:hover { BACKGROUND-POSITION: 0px -30px } #AC-Tabs { CLEAR: both } #AC-TabCt { =09 } .AC-Tab { DISPLAY: none } .AC-TabCtrl { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: = 0px; PADDING-RIGHT: 0px; BACKGROUND: #85b446; PADDING-TOP: 0px } .AC-TabCtrl LI { POSITION: relative; BACKGROUND-COLOR: #85b446; TEXT-INDENT: -9999px; = MARGIN: 0px; BACKGROUND-REPEAT: no-repeat; FLOAT: left; HEIGHT: 18px; = COLOR: #fff; OVERFLOW: hidden; CURSOR: pointer } .AC-TabCtrl LI.active { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; BACKGROUND-POSITION: 0px -18px; PADDING-TOP: 0px } #AC-Tabs .AC-BlockText { PADDING-BOTTOM: 0px } LI.AC-Events { BACKGROUND-IMAGE: url(../images/sitewide/header_upcomingEvents.gif); = WIDTH: 140px } LI.AC-News { BACKGROUND-IMAGE: url(../images/sitewide/header_news.gif); = BACKGROUND-COLOR: #85b446; WIDTH: 71px } LI.active.AC-News { BACKGROUND-COLOR: #fff } .AC-MoreVideos { PADDING-TOP: 5em } .AC-Video { WIDTH: 150px; PADDING-RIGHT: 1em; FLOAT: left } .AC-Video .AC-BlockText { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 0.5em } .AC-FaqResults { BACKGROUND-COLOR: #ffffff; MARGIN-TOP: 1.5em } .AC-Form .AC-FaqResults H5 { MARGIN: 1.5em 0px 0.5em } .AC-FaqResults .AC-SearchResult { BORDER-BOTTOM: #e3e3e3 1px solid; COLOR: #ffffff; CURSOR: pointer } .AC-FaqResults .AC-SearchResult H5 { MARGIN: 1.5em 0px 0px; COLOR: #648cb0; FONT-WEIGHT: bold } .AC-FaqResults #AC-SearchResultLast { MARGIN-BOTTOM: 1em } .AC-FaqResults .toggleHead { PADDING-BOTTOM: 0px; PADDING-LEFT: 25px; PADDING-RIGHT: 10px; = BACKGROUND: url(../images/sitewide/arrow_down.gif) #648cb0 no-repeat 8px = 4px; PADDING-TOP: 0px } .AC-FaqResults .toggleHeadActive { PADDING-BOTTOM: 0px; PADDING-LEFT: 25px; PADDING-RIGHT: 10px; = BACKGROUND: url(../images/sitewide/arrow_up.gif) #648cb0 no-repeat 8px = 4px; PADDING-TOP: 0px } .AC-FaqResults .selected { BACKGROUND-COLOR: #648cb0 } .AC-FaqResults .toggleBody { PADDING-BOTTOM: 5px; BACKGROUND-COLOR: #ffffff; PADDING-LEFT: 25px; = PADDING-RIGHT: 10px; COLOR: #000; PADDING-TOP: 0px } .AC-ResearchConnection { BORDER-BOTTOM: #a5a28f 7px solid; BORDER-LEFT: #a5a28f 7px solid; = BACKGROUND-COLOR: #ffffff; HEIGHT: 90px } .AC-ResearchConnection A { COLOR: #000000 } .AC-ResearchConnection A:hover { COLOR: #000000; TEXT-DECORATION: underline } .AC-ResearchConnection .AC-BlockHeader { POSITION: static; BACKGROUND-COLOR: #a5a28f; HEIGHT: 21px } .AC-ResearchConnection .AC-BlockHeader H4 { TEXT-TRANSFORM: uppercase; MARGIN-TOP: 0px; TEXT-INDENT: 0px; = FONT-FAMILY: Helvetica, Arial, sans-serif; MARGIN-BOTTOM: 0.5em; COLOR: = #ffffff; FONT-SIZE: 14px; FONT-WEIGHT: bold; PADDING-TOP: 3px } .AC-ResearchConnection .AC-BlockNav { TEXT-TRANSFORM: uppercase; PADDING-LEFT: 80px; FONT-FAMILY: Arial, = Helvetica, sans-serif; FLOAT: left; FONT-SIZE: 0.9em } .AC-ResearchConnection .AC-BlockImage { PADDING-LEFT: 7px } .AC-ResearchConnection .AC-BlockImage IMG { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN-TOP: 7px; DISPLAY: block; = BORDER-TOP: 0px; BORDER-RIGHT: 0px } .AC-ResearchConnection .AC-BlockText { PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.1em; MARGIN: -60px 0px 0px 70px; = PADDING-LEFT: 0px; WIDTH: 80px; PADDING-RIGHT: 0px; FONT-FAMILY: Arial, = Helvetica, sans-serif; FONT-SIZE: 11px; PADDING-TOP: 7px } .AC-ResearchConnection .AC-BlockText .type { TEXT-TRANSFORM: uppercase } .AC-ResearchConnection .AC-BlockMore { PADDING-TOP: 5px } .AC-ResearchConnection .AC-BlockMore P { VISIBILITY: hidden } .AC-ResearchConnection .AC-BlockMore A { WIDTH: 39px; BACKGROUND: url(../images/research/SmallMore.jpg) = no-repeat; FLOAT: right; HEIGHT: 11px } .AC-ResearchDetails { WIDTH: 818px } .AC-ResearchDetails #AC-ResearchTopImage { MARGIN-LEFT: 7px } .AC-ResearchDetails H3 { LINE-HEIGHT: 1.2em; TEXT-TRANSFORM: uppercase; MARGIN-TOP: 53px; = FONT-FAMILY: Arial, Helvetica, sans-serif; MARGIN-LEFT: 14px } .AC-ResearchDetails #AC-ResearchBody { PADDING-LEFT: 14px; WIDTH: 522px } .AC-ResearchDetails #AC-ResearchBody .AC-ResearchProperties { =09 } .AC-ResearchDetails #AC-ResearchBody .AC-ResearchProperties = .AC-ResearchAuthor { FONT-WEIGHT: bold } .AC-ResearchDetails #AC-ResearchBody .AC-ResearchProperties = .AC-ResearchDate { FONT-WEIGHT: bold } .AC-ResearchDetails #AC-ResearchBody .AC-ResearchProperties = .AC-ResearchTeaser { FONT-STYLE: italic } .AC-ResearchDetails #AC-ResearchBody #AC-ResearchStory { =09 } .AC-ResearchDetails #AC-ResearchBody #AC-ResearchStory IMG { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 2px; = PADDING-LEFT: 0px; PADDING-RIGHT: 8px; DISPLAY: block; BORDER-TOP: 0px; = BORDER-RIGHT: 0px; PADDING-TOP: 2px } .AC-ResearchDetails .AC-Media { PADDING-LEFT: 10px; WIDTH: 180px; FLOAT: right } .AC-ResearchDetails .AC-Image { =09 } .AC-ResearchDetails .AC-Audio { =09 } .AC-ResearchDetails .AC-Video { PADDING-BOTTOM: 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 10px } .AC-ResearchDetails #AC-imageCaption { PADDING-BOTTOM: 10px; FONT-STYLE: italic; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; PADDING-TOP: 10px } .AC-ResearchDetails .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-GalleryImage .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-VideoDetails .MediaPlayer { BACKGROUND: url(../images/sitewide/logo_windows.gif) no-repeat 2px = 11px; PADDING-TOP: 10px } .AC-ResearchDetails .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-GalleryImage .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-VideoDetails .iTunes { BACKGROUND: url(../images/sitewide/logo_iTunes.gif) no-repeat 2px 13px; = PADDING-TOP: 10px } .AC-ResearchDetails .MediaPlayer A { PADDING-LEFT: 25px } .AC-GalleryImage .MediaPlayer A { PADDING-LEFT: 25px } .AC-VideoDetails .MediaPlayer A { PADDING-LEFT: 25px } .AC-ResearchDetails .iTunes A { PADDING-LEFT: 25px } .AC-GalleryImage .iTunes A { PADDING-LEFT: 25px } .AC-VideoDetails .iTunes A { PADDING-LEFT: 25px } .AC-FacultyProfileConnection { BACKGROUND-COLOR: #ffffff } .AC-FacultyProfileConnection A { COLOR: #000000 } .AC-FacultyProfileConnection A:hover { COLOR: #000000; TEXT-DECORATION: underline } .AC-FacultyProfileConnection .AC-BlockHeader { POSITION: static; BACKGROUND-COLOR: #ffffff } .AC-FacultyProfileConnection .AC-BlockHeader H4 { TEXT-TRANSFORM: uppercase; MARGIN-TOP: 0px; TEXT-INDENT: 0px; = PADDING-LEFT: 15px; FONT-FAMILY: Helvetica, Arial, sans-serif; = MARGIN-BOTTOM: 0.3em; COLOR: #000000; FONT-SIZE: 14px; FONT-WEIGHT: bold } .AC-FacultyProfileConnection .AC-BlockNav { TEXT-TRANSFORM: uppercase; PADDING-LEFT: 80px; FONT-FAMILY: Helvetica, = Arial, sans-serif; FLOAT: left; FONT-SIZE: 0.9em } .AC-FacultyProfileConnection .AC-BlockImage { PADDING-LEFT: 14px } .AC-FacultyProfileConnection .AC-BlockImage IMG { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN-TOP: 7px; DISPLAY: block; = BORDER-TOP: 0px; BORDER-RIGHT: 0px } .AC-FacultyProfileConnection .AC-BlockText { LINE-HEIGHT: 1.2em; PADDING-LEFT: 15px; FONT-FAMILY: Helvetica, Arial, = sans-serif; COLOR: #b64916; FONT-SIZE: 11px } .AC-FacultyProfileConnection .AC-BlockText P { MARGIN: 0px 0px 1em } .AC-FacultyProfileConnection .AC-BlockText .type { TEXT-TRANSFORM: uppercase } .AC-FacultyProfileConnection .AC-BlockMore { TEXT-ALIGN: right; LINE-HEIGHT: 1.1em; FONT-FAMILY: Helvetica, Arial, = sans-serif; FONT-SIZE: 11px; PADDING-TOP: 8px } .AC-FacultyProfileConnection .AC-FacultyTitle { TEXT-TRANSFORM: uppercase; MARGIN-TOP: 0px; TEXT-INDENT: 0px; = FONT-FAMILY: Helvetica, Arial, sans-serif; MARGIN-BOTTOM: 0.5em; COLOR: = #b64916; FONT-SIZE: 14px; FONT-WEIGHT: bold } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/css; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/admissions/undergrad/apply/SiteStyleForms.css FORM#form1 { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; PADDING-TOP: 0px } #searchCt { Z-INDEX: 10; POSITION: absolute; WIDTH: 230px; BACKGROUND: #f78e1e; = HEIGHT: 22px; OVERFLOW: hidden; TOP: 84px; RIGHT: 0px } FORM#search { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-TOP: 0px } #searchCt INPUT { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px; VERTICAL-ALIGN: top; = BORDER-TOP: 0px; BORDER-RIGHT: 0px } #searchTerms { BORDER-BOTTOM: 0px; POSITION: absolute; BORDER-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 169px; = PADDING-RIGHT: 0px; FONT-FAMILY: Georgia, "Times New Roman", Times, = serif; BACKGROUND: #fff; FONT-SIZE: 13px; BORDER-TOP: 0px; TOP: 0px; = BORDER-RIGHT: 0px; PADDING-TOP: 0px; LEFT: 0px } #searchSubmit { POSITION: absolute; WIDTH: 55px; HEIGHT: 22px; TOP: 0px; RIGHT: 0px } .AC-Form { MARGIN: 0px; PADDING-TOP: 15px } .AC-Form TABLE { WIDTH: 95%; MARGIN-BOTTOM: 0em; FLOAT: left } .AC-Form FIELDSET { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = 0px 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: 0px; = BORDER-RIGHT: 0px; PADDING-TOP: 0px } .AC-Form FIELDSET FIELDSET { BACKGROUND-IMAGE: none } .AC-Form FIELDSET LEGEND { DISPLAY: none } .AC-Form FIELDSET H5 { BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; MARGIN: 0px; = BORDER-TOP: medium none; BORDER-RIGHT: medium none } .app .AC-Form .ac-header { BACKGROUND-COLOR: #b7c6dd; MARGIN: 0px -10px 10px } .app .AC-Form FIELDSET H5 { PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; = PADDING-TOP: 5px } .AC-Form TABLE { PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px 0px = 0em; PADDING-LEFT: 0px; WIDTH: auto; PADDING-RIGHT: 0px; PADDING-TOP: = 0px } .AC-Form TH { TEXT-ALIGN: left; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; = PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } .AC-Form TD { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 0px } .AC-Form .ac-setcol1 .ac-field { MARGIN: 0px 0px 0.5em; WIDTH: 100% } .AC-Form .ac-setcol1 .ac-field .ac-label { PADDING-LEFT: 15px; WIDTH: 195px; FLOAT: left } .AC-Form .ac-setcol2 .ac-field { MARGIN: 0px 0px 0.5em; WIDTH: 45%; FLOAT: left } .AC-Form .ac-setcol2 .ac-field .ac-label { PADDING-LEFT: 15px; WIDTH: auto; FLOAT: none } .AC-Form .ac-setcol3 .ac-field { MARGIN: 0px 0px 0.5em; WIDTH: 31%; FLOAT: left } .AC-Form .ac-setcol3 .ac-field .ac-label { PADDING-LEFT: 15px; WIDTH: auto; FLOAT: none } .AC-Form .ac-field .ac-required { FONT-WEIGHT: bold } .AC-Form .ac-spacer { LINE-HEIGHT: 1px; HEIGHT: 1px; CLEAR: both; FONT-SIZE: 1px } .AC-Form .AC-Spacer { LINE-HEIGHT: 1px; HEIGHT: 1px; CLEAR: both; FONT-SIZE: 1px } .AC-Form .controls { TEXT-ALIGN: right; PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; = PADDING-RIGHT: 0px; PADDING-TOP: 10px } .controls { TEXT-ALIGN: right; PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; = PADDING-RIGHT: 0px; PADDING-TOP: 10px } .controls IMG { DISPLAY: inline } .AC-Form .AC-Option3Col TD { WIDTH: 32% } .AC-Form .AC-Option2Col TD { WIDTH: 50% } .AC-Pager { BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 0px solid; = PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #f5f5f5; MARGIN: 0px 0px 10px; = PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: #000000 1px solid; = BORDER-RIGHT: #000000 0px solid; PADDING-TOP: 4px } .AC-Pager .pagebutton { BORDER-BOTTOM: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid; = PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #555555; MARGIN: 0px 3px; = PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: #ffffff; BORDER-TOP: = #ffffff 1px solid; BORDER-RIGHT: #ffffff 1px solid; PADDING-TOP: 2px } .AC-Pager INPUT.selected { BORDER-BOTTOM: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid; = PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #ffc425; MARGIN: 0px 3px; = PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: #000000; BORDER-TOP: = #ffffff 1px solid; BORDER-RIGHT: #ffffff 1px solid; PADDING-TOP: 2px } .AC-Form .field { MARGIN: 0em 0px 0.5em; WIDTH: 100% } .AC-Form .field .label { PADDING-LEFT: 15px; WIDTH: 195px; FLOAT: left } .AC-Form .field .required { FONT-WEIGHT: bold } .AC-Form .field .AC-Spacer { LINE-HEIGHT: 1px; HEIGHT: 1px; CLEAR: both; FONT-SIZE: 1px } .AC-Form .AC-Error .AC-Spacer { LINE-HEIGHT: 1px; HEIGHT: 1px; CLEAR: both; FONT-SIZE: 1px } .AC-Form H5 { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-LEFT: 10px; COLOR: = #000000; FONT-SIZE: 1.2em; BORDER-TOP: 0px; FONT-WEIGHT: bold; = BORDER-RIGHT: 0px } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/css; charset="gb2312" Content-Transfer-Encoding: 7bit Content-Location: http://www4.lehigh.edu/Media/Website Resources/css/SiteStyle.css @import url( SiteStyleLayout.css ); @import url( SiteStyleContentTypes.css ); @import url( SiteStyleForms.css ); .AC-Error { COLOR: #ff0000; FONT-WEIGHT: bold } .AC-Alert { COLOR: #0000ff; FONT-WEIGHT: bold } .required { FONT-WEIGHT: bold } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: text/css; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/Media/Website Resources/css/SiteStylePrint.css * { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #333 = !important } BODY { FONT-SIZE: 12pt } A { TEXT-DECORATION: underline } #pageCt { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px; WIDTH: 650px; = BORDER-TOP: 0px; BORDER-RIGHT: 0px } #gridCt { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: = 0px } #zoneCt { WIDTH: 650px; FLOAT: none } #zone1 { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: 650px; PADDING-RIGHT: = 0px; PADDING-TOP: 0px } #zone2 { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 0px } #zone3 { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; FLOAT: none; BORDER-TOP: 0px; = BORDER-RIGHT: 0px } #subGridCt #zoneCt { WIDTH: 650px; FLOAT: none } #subGridCt #zone1 { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: 650px; PADDING-RIGHT: = 0px; FLOAT: none; PADDING-TOP: 0px } #subGridCt #zone2 { FLOAT: none } #header { BORDER-BOTTOM: #000 1px solid; MARGIN-BOTTOM: 10px; HEIGHT: auto } #header H1 { DISPLAY: none } #header H2 { PADDING-BOTTOM: 10px; TEXT-INDENT: 0px; FONT-SIZE: 1.5em; OVERFLOW: = visible } #printLogo { PADDING-BOTTOM: 10px; DISPLAY: block } #printLogo IMG { WIDTH: 350px; HEIGHT: 25px } #homeLink { DISPLAY: none } #myEcc { DISPLAY: none } #breadCt { PADDING-BOTTOM: 10px; MARGIN-LEFT: 0px } #subGridCt #breadCt { MARGIN-LEFT: 0px } #pageNav { DISPLAY: none } #footer { TEXT-ALIGN: left; HEIGHT: auto; BORDER-TOP: #000 1px solid } #footer P { PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; FONT-SIZE: 9px; PADDING-TOP: 0.5em } #footerNav { DISPLAY: none } #searchCt { DISPLAY: none } #pathCt { BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: = 0px } #paths { PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; = PADDING-TOP: 0px } .path { PADDING-BOTTOM: 1em; WIDTH: 155px } #pathCt #pathHeader { MARGIN-BOTTOM: 1em } #pathCt #pathHeader H4 { TEXT-INDENT: 0px; HEIGHT: auto; OVERFLOW: visible } #zoneTop { WIDTH: 650px } #navCt { DISPLAY: none } #mainPhotos { FLOAT: none } #mainPhoto { FLOAT: none } #altPhotos { FLOAT: none } #zoneBottom { WIDTH: 650px } #bottomLeft { FLOAT: none } #bottomRight { FLOAT: none } #subGridCtResearch { WIDTH: 984px; BACKGROUND: url(../images/research/subGrid_bg.gif) = repeat-y } #subGridCtResearch #zoneCt { WIDTH: 810px; FLOAT: none } #subGridCtResearch #zone1 { PADDING-LEFT: 40px; WIDTH: 528px; FLOAT: left } #subGridCtResearch #zone2 { WIDTH: 242px; FLOAT: right } #subGridCtResearch #zone3 { DISPLAY: none } #subGridCtResearch #zone2a { WIDTH: 242px; FLOAT: right } #subGridCtResearch #breadCtfeature { DISPLAY: none } #subGridCtResearch #breadCt { DISPLAY: none } #researchtopimage { DISPLAY: none } #navCt { DISPLAY: none } .AC-BlockHeader H4 { TEXT-INDENT: 0px; HEIGHT: auto; OVERFLOW: visible } .AC-TabCtrl LI.active { TEXT-INDENT: 0px; WIDTH: auto; FLOAT: none; HEIGHT: auto; OVERFLOW: = visible } .AC-ResearchDetails #AC-ResearchTopImage { DISPLAY: none } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/Media/Website Resources/scripts/mootools.js //MooTools, , My Object Oriented (JavaScript) = Tools. Copyright (c) 2006-2008 Valerio Proietti, , = MIT Style License. var MooTools=3D{version:"1.2.0",build:""};var = Native=3Dfunction(J){J=3DJ||{};var = F=3DJ.afterImplement||function(){};var = G=3DJ.generics;G=3D(G!=3D=3Dfalse);var H=3DJ.legacy; var E=3DJ.initialize;var B=3DJ.protect;var A=3DJ.name;var = C=3DE||H;C.constructor=3DNative;C.$family=3D{name:"native"};if(H&&E){C.pr= ototype=3DH.prototype;}C.prototype.constructor=3DC; if(A){var = D=3DA.toLowerCase();C.prototype.$family=3D{name:D};Native.typize(C,D);}va= r = I=3Dfunction(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=3DN;}if(G= ){Native.genericize(M,K,B); }F.call(M,K,N);return M;};C.implement=3Dfunction(L,K,N){if(typeof = L=3D=3D"string"){return I(this,L,K,N);}for(var M in = L){I(this,M,L[M],K);}return this;};C.alias=3Dfunction(M,K,N){if(typeof = M=3D=3D"string"){M=3Dthis.prototype[M]; if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return = this;};return C;};Native.implement=3Dfunction(D,C){for(var = B=3D0,A=3DD.length;B-1:this.inde= xOf(A)>-1;},trim:function(){return = this.replace(/^\s+|\s+$/g,"");},clean:function(){return = this.replace(/\s+/g," ").trim(); },camelCase:function(){return this.replace(/-\D/g,function(A){return = A.charAt(1).toUpperCase();});},hyphenate:function(){return = this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase()); });},capitalize:function(){return = this.replace(/\b[a-z]/g,function(A){return = A.toUpperCase();});},escapeRegExp:function(){return = this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1"); },toInt:function(A){return = parseInt(this,A||10);},toFloat:function(){return = parseFloat(this);},hexToRgb:function(B){var = A=3Dthis.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var = A=3Dthis.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:fu= nction(B){var A=3D""; var = C=3Dthis.replace(/]*>([\s\S]*?)<\/script>/gi,function(){A+=3Dar= guments[1]+"\n";return"";});if(B=3D=3D=3Dtrue){$exec(A);}else{if($type(B)= =3D=3D"function"){B(A,C); }}return C;},substitute:function(A,B){return = this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=3D=3D"\\= "){return D.slice(1);}return(A[C]!=3Dundefined)?A[C]:""; });}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function= (B){for(var A in = this){if(this.hasOwnProperty(A)&&this[A]=3D=3D=3DB){return A;}}return = null; },hasValue:function(A){return(Hash.keyOf(this,A)!=3D=3Dnull);},extend:fun= ction(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return = this;},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,= C); },this);return = this;},erase:function(A){if(this.hasOwnProperty(A)){delete = this[A];}return = this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null; },set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=3DB;}ret= urn this;},empty:function(){Hash.each(this,function(B,A){delete = this[A];},this); return this;},include:function(B,C){var = A=3Dthis[B];if(A=3D=3Dundefined){this[B]=3DC;}return = this;},map:function(B,C){var A=3Dnew = Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this)); },this);return A;},filter:function(B,C){var A=3Dnew = Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},th= is);return A;},every:function(B,C){for(var A in = this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false; }}return true;},some:function(B,C){for(var A in = this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return = true;}}return false;},getKeys:function(){var A=3D[]; Hash.each(this,function(C,B){A.push(B);});return = A;},getValues:function(){var = A=3D[];Hash.each(this,function(B){A.push(B);});return = A;},toQueryString:function(A){var B=3D[]; Hash.each(this,function(F,E){if(A){E=3DA+"["+E+"]";}var = D;switch($type(F)){case"object":D=3DHash.toQueryString(F,E);break;case"ar= ray":var C=3D{};F.each(function(H,G){C[G]=3DH; });D=3DHash.toQueryString(C,E);break;default:D=3DE+"=3D"+encodeURICompone= nt(F);}if(F!=3Dundefined){B.push(D);}});return = B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"}); var Event=3Dnew = Native({name:"Event",initialize:function(A,F){F=3DF||window;var = K=3DF.document;A=3DA||F.event;if(A.$extended){return = A;}this.$extended=3Dtrue;var J=3DA.type; var = G=3DA.target||A.srcElement;while(G&&G.nodeType=3D=3D3){G=3DG.parentNode;}= if(J.test(/key/)){var B=3DA.which||A.keyCode;var = M=3DEvent.Keys.keyOf(B);if(J=3D=3D"keydown"){var D=3DB-111; if(D>0&&D<13){M=3D"f"+D;}}M=3DM||String.fromCharCode(B).toLowerCase();}el= se{if(J.match(/(click|mouse|menu)/i)){K=3D(!K.compatMode||K.compatMode=3D= =3D"CSS1Compat")?K.html:K.body; var = I=3D{x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};= var = C=3D{x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pa= geYOffset:A.clientY}; if(J.match(/DOMMouseScroll|mousewheel/)){var = H=3D(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;}var = E=3D(A.which=3D=3D3)||(A.button=3D=3D2);var = L=3Dnull;if(J.match(/over|out/)){switch(J){case"mouseover":L=3DA.relatedT= arget||A.fromElement; break;case"mouseout":L=3DA.relatedTarget||A.toElement;}if(!(function(){wh= ile(L&&L.nodeType=3D=3D3){L=3DL.parentNode;}return = true;}).create({attempt:Browser.Engine.gecko})()){L=3Dfalse; }}}}return = $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,related= Target:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.a= ltKey,meta:A.metaKey}); }});Event.Keys=3Dnew = Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8= ,tab:9,"delete":46});Event.implement({stop:function(){return = this.stopPropagation().preventDefault(); },stopPropagation:function(){if(this.event.stopPropagation){this.event.st= opPropagation();}else{this.event.cancelBubble=3Dtrue;}return = this;},preventDefault:function(){if(this.event.preventDefault){this.event= .preventDefault(); }else{this.event.returnValue=3Dfalse;}return this;}});var Class=3Dnew = Native({name:"Class",initialize:function(B){B=3DB||{};var = A=3Dfunction(E){for(var D in this){this[D]=3D$unlink(this[D]); }for(var F in = Class.Mutators){if(!this[F]){continue;}Class.Mutators[F](this,this[F]);de= lete this[F];}this.constructor=3DA;if(E=3D=3D=3D$empty){return this;}var = C=3D(this.initialize)?this.initialize.apply(this,arguments):this; if(this.options&&this.options.initialize){this.options.initialize.call(th= is);}return = C;};$extend(A,this);A.constructor=3DClass;A.prototype=3DB;return A;}}); Class.implement({implement:function(){Class.Mutators.Implements(this.prot= otype,Array.slice(arguments));return = this;}});Class.Mutators=3D{Implements:function(A,B){$splat(B).each(functi= on(C){$extend(A,($type(C)=3D=3D"class")?new C($empty):C); });},Extends:function(self,klass){var instance=3Dnew = klass($empty);delete instance.parent;delete instance.parentOf;for(var = key in instance){var current=3Dself[key],previous=3Dinstance[key]; if(current=3D=3Dundefined){self[key]=3Dprevious;continue;}var = ctype=3D$type(current),ptype=3D$type(previous);if(ctype!=3Dptype){continu= e;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=3D= eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(ful= l,close){return"arguments.callee._parent_.call(this"+(close||", "); })+")");}self[key]._parent_=3Dprevious;break;case"object":self[key]=3D$me= rge(previous,current);}}self.parent=3Dfunction(){return = arguments.callee.caller._parent_.apply(this,arguments); };self.parentOf=3Dfunction(descendant){return = descendant._parent_.apply(this,Array.slice(arguments,1));};}};var = Chain=3Dnew = Class({chain:function(){this.$chain=3D(this.$chain||[]).extend(arguments)= ; return = this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.= $chain.shift().apply(this,arguments):false;},clearChain:function(){if(thi= s.$chain){this.$chain.empty(); }return this;}});var Events=3Dnew = Class({addEvent:function(C,B,A){C=3DEvents.removeOn(C);if(B!=3D$empty){th= is.$events=3Dthis.$events||{};this.$events[C]=3Dthis.$events[C]||[]; this.$events[C].include(B);if(A){B.internal=3Dtrue;}}return = this;},addEvents:function(A){for(var B in = A){this.addEvent(B,A[B]);}return = this;},fireEvent:function(C,B,A){C=3DEvents.removeOn(C); if(!this.$events||!this.$events[C]){return = this;}this.$events[C].each(function(D){D.create({bind:this,delay:A,"argum= ents":B})();},this);return = this;},removeEvent:function(B,A){B=3DEvents.removeOn(B); if(!this.$events||!this.$events[B]){return = this;}if(!A.internal){this.$events[B].erase(A);}return = this;},removeEvents:function(C){for(var D in = this.$events){if(C&&C!=3DD){continue; }var B=3Dthis.$events[D];for(var = A=3DB.length;A--;A){this.removeEvent(D,B[A]);}}return = this;}});Events.removeOn=3Dfunction(A){return = A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase(); });};var Options=3Dnew = Class({setOptions:function(){this.options=3D$merge.run([this.options].ext= end(arguments));if(!this.addEvent){return this;}for(var A in = this.options){if($type(this.options[A])!=3D"function"||!(/^on[A-Z]/).test= (A)){continue; }this.addEvent(A,this.options[A]);delete this.options[A];}return = this;}});Document.implement({newElement:function(A,B){if(Browser.Engine.t= rident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ; }A+=3D" "+C+'=3D"'+B[C]+'"';if(C!=3D"checked"){delete = B[C];}});A=3D"<"+A+">";}return = $.element(this.createElement(A)).set(B);},newTextNode:function(A){return = this.createTextNode(A); },getDocument:function(){return this;},getWindow:function(){return = this.defaultView||this.parentWindow;},purge:function(){var = C=3Dthis.getElementsByTagName("*"); for(var B=3D0,A=3DC.length;B1);A.each(function(E){var = F=3Dthis.getElementsByTagName(E.trim());(B)?C.extend(F):C=3DF;},this);ret= urn new Elements(C,{ddup:B,cash:!D}); }});Element.Storage=3D{get:function(A){return(this[A]||(this[A]=3D{}));}}= ;Element.Inserters=3Dnew = Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A= ); }},after:function(B,A){if(!A.parentNode){return ;}var = C=3DA.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendC= hild(B);},bottom:function(B,A){A.appendChild(B); },top:function(B,A){var = C=3DA.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Ins= erters.inside=3DElement.Inserters.bottom;Element.Inserters.each(function(= C,B){var A=3DB.capitalize(); Element.implement("inject"+A,function(D){C(this,$(D,true));return = this;});Element.implement("grab"+A,function(D){C($(D,true),this);return = this;});});Element.implement({getDocument:function(){return = this.ownerDocument; },getWindow:function(){return = this.ownerDocument.getWindow();},getElementById:function(D,C){var = B=3Dthis.ownerDocument.getElementById(D);if(!B){return null; }for(var A=3DB.parentNode;A!=3Dthis;A=3DA.parentNode){if(!A){return = null;}}return = $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var = C in D){this.set(C,D[C]); }break;case"string":var = A=3DElement.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arg= uments,1)):this.setProperty(D,B);}return this;},get:function(B){var = A=3DElement.Properties.get(B); return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getPrope= rty(B);},erase:function(B){var = A=3DElement.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice= (arguments,1)):this.removeProperty(B); return = this;},match:function(A){return(!A||Element.get(this,"tag")=3D=3DA);},inj= ect:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));retu= rn this; },wraps:function(B,A){B=3D$(B,true);return = this.replaces(B).grab(B,A);},grab:function(B,A){Element.Inserters.get(A||= "bottom")($(B,true),this);return this; },appendText:function(B,A){return = this.grab(this.getDocument().newTextNode(B),A);},adopt:function(){Array.f= latten(arguments).each(function(A){A=3D$(A,true); if(A){this.appendChild(A);}},this);return = this;},dispose:function(){return(this.parentNode)?this.parentNode.removeC= hild(this):this;},clone:function(D,C){switch($type(this)){case"element":v= ar H=3D{}; for(var G=3D0,E=3Dthis.attributes.length;G1),cash:!G});}});Element.implement({match:func= tion(B){if(!B){return true;}var D=3DSelectors.Utils.parseTagAndID(B); var = A=3DD[0],E=3DD[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.= byTag(this,A)){return false;}var = C=3DSelectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(thi= s,C,{}):true; }});var = Selectors=3D{Cache:{nth:{},parsed:{}}};Selectors.RegExps=3D{id:(/#([\w-]+= )/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-= zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=3D)["']?(.*?)[= "']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)}; Selectors.Utils=3D{chk:function(B,C){if(!C){return true;}var = A=3D$uid(B);if(!C[A]){return C[A]=3Dtrue;}return = false;},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return = Selectors.Cache.nth[F]; }var C=3DF.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return = false;}var E=3DparseInt(C[1]);var B=3D(E||E=3D=3D=3D0)?E:1;var = D=3DC[2]||false;var A=3DparseInt(C[3])||0; if(B!=3D0){A--;while(A<1){A+=3DB;}while(A>=3DB){A-=3DB;}}else{B=3DA;D=3D"= index";}switch(D){case"n":C=3D{a:B,b:A,special:"n"};break;case"odd":C=3D{= a:2,b:0,special:"n"}; break;case"even":C=3D{a:2,b:1,special:"n"};break;case"first":C=3D{a:0,spe= cial:"index"};break;case"last":C=3D{special:"last-child"};break;case"only= ":C=3D{special:"only-child"}; break;default:C=3D{a:(B-1),special:"index"};}return = Selectors.Cache.nth[F]=3DC;},parseSelector:function(E){if(Selectors.Cache= .parsed[E]){return Selectors.Cache.parsed[E]; }var = D,H=3D{classes:[],pseudos:[],attributes:[]};while((D=3DSelectors.RegExps.= combined.exec(E))){var = I=3DD[1],G=3DD[2],F=3DD[3],B=3DD[4],C=3DD[5],J=3DD[6];if(I){H.classes.pus= h(I); }else{if(C){var = A=3DSelectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J});}= else{H.attributes.push({name:C,operator:"=3D",value:J});}}else{if(G){H.at= tributes.push({name:G,operator:F,value:B}); }}}}if(!H.classes.length){delete = H.classes;}if(!H.attributes.length){delete = H.attributes;}if(!H.pseudos.length){delete = H.pseudos;}if(!H.classes&&!H.attributes&&!H.pseudos){H=3Dnull; }return Selectors.Cache.parsed[E]=3DH;},parseTagAndID:function(B){var = A=3DB.match(Selectors.RegExps.tag);var = C=3DB.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false]; },filter:function(F,C,E){var = D;if(C.classes){for(D=3DC.classes.length;D--;D){var = G=3DC.classes[D];if(!Selectors.Filters.byClass(F,G)){return = false;}}}if(C.attributes){for(D=3DC.attributes.length; D--;D){var = B=3DC.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator= ,B.value)){return = false;}}}if(C.pseudos){for(D=3DC.pseudos.length;D--;D){var = A=3DC.pseudos[D]; if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return = false;}}}return true;},getByTagAndID:function(B,A,D){if(D){var = C=3D(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,= D,true); return(C&&Selectors.Filters.byTag(C,A))?[C]:[];}else{return = B.getElementsByTagName(A);}},search:function(J,I,O){var B=3D[];var = C=3DI.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y)= ; return":)"+X;}).split(":)");var K,F,E,V;for(var = U=3D0,Q=3DC.length;U":function(H,G,I,A,F){var = C=3DSelectors.Utils.getByTagAndID(G,I,A);for(var = E=3D0,D=3DC.length;EA= ){return false; }}return(C=3D=3DA);},even:function(B,A){return = Selectors.Pseudo["nth-child"].call(this,"2n+1",A);},odd:function(B,A){ret= urn Selectors.Pseudo["nth-child"].call(this,"2n",A); }});Element.Events.domready=3D{onAdd:function(A){if(Browser.loaded){A.cal= l(this);}}};(function(){var B=3Dfunction(){if(Browser.loaded){return = ;}Browser.loaded=3Dtrue; window.fireEvent("domready");document.fireEvent("domready");};switch(Brow= ser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains= (document.readyState))?B():arguments.callee.delay(50); })();break;case"trident":var = A=3Ddocument.createElement("div");(function(){($try(function(){A.doScroll= ("left");return $(A).inject(document.body).set("html","temp").dispose(); }))?B():arguments.callee.delay(50);})();break;default:window.addEvent("lo= ad",B);document.addEvent("DOMContentLoaded",B);}})();var JSON=3Dnew = Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replac= e(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"'; case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";cas= e"object":case"hash":var A=3D[];Hash.each(B,function(E,D){var = C=3DJSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C); }});return"{"+A+"}";case"number":case"boolean":return String(B);case = false:return"null";}return = null;},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\= \r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return = JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)= +(A.charCodeAt()%16).toString(16); },decode:function(string,secure){if($type(string)!=3D"string"||!string.le= ngth){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u = \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))= ){return null; }return = eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJ= SON:function(){return JSON.encode(this);}});var Cookie=3Dnew = Class({Implements:Options,options:{path:false,domain:false,duration:false= ,secure:false,document:document},initialize:function(B,A){this.key=3DB; this.setOptions(A);},write:function(B){B=3DencodeURIComponent(B);if(this.= options.domain){B+=3D"; = domain=3D"+this.options.domain;}if(this.options.path){B+=3D"; = path=3D"+this.options.path; }if(this.options.duration){var A=3Dnew = Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+=3D";= expires=3D"+A.toGMTString();}if(this.options.secure){B+=3D"; secure"; }this.options.document.cookie=3Dthis.key+"=3D"+B;return = this;},read:function(){var = A=3Dthis.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegEx= p()+"=3D([^;]*)"); return(A)?decodeURIComponent(A[1]):null;},dispose:function(){new = Cookie(this.key,$merge(this.options,{duration:-1})).write("");return = this;}});Cookie.write=3Dfunction(B,C,A){return new Cookie(B,A).write(C); };Cookie.read=3Dfunction(A){return new = Cookie(A).read();};Cookie.dispose=3Dfunction(B,A){return new = Cookie(B,A).dispose();};var Swiff=3Dnew = Class({Implements:[Options],options:{id:null,height:1,width:1,container:n= ull,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode= :"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:functi= on(){return this.object; },initialize:function(L,M){this.instance=3D"Swiff_"+$time();this.setOptio= ns(M);M=3Dthis.options;var B=3Dthis.id=3DM.id||this.instance;var = A=3D$(M.container);Swiff.CallBacks[this.instance]=3D{}; var E=3DM.params,G=3DM.vars,F=3DM.callBacks;var = H=3D$extend({height:M.height,width:M.width},M.properties);var = K=3Dthis;for(var D in = F){Swiff.CallBacks[this.instance][D]=3D(function(N){return = function(){return N.apply(K.object,arguments); };})(F[D]);G[D]=3D"Swiff.CallBacks."+this.instance+"."+D;}E.flashVars=3DH= ash.toQueryString(G);if(Browser.Engine.trident){H.classid=3D"clsid:D27CDB= 6E-AE6D-11cf-96B8-444553540000"; E.movie=3DL;}else{H.type=3D"application/x-shockwave-flash";H.data=3DL;}va= r J=3D'";for(var C in E){if(E[C]){J+=3D''; }}J+=3D"";this.object=3D((A)?A.empty():new = Element("div")).set("html",J).firstChild;},replaces:function(A){A=3D$(A,t= rue);A.parentNode.replaceChild(this.toElement(),A); return = this;},inject:function(A){$(A,true).appendChild(this.toElement());return = this;},remote:function(){return = Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments)); }});Swiff.CallBacks=3D{};Swiff.remote=3Dfunction(obj,fn){var = rs=3Dobj.CallFunction(''+__flash__argumentsToXML(arguments,2)+""); return eval(rs);};var Fx=3Dnew = Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,durat= ion:500,link:"ignore",transition:function(A){return = -(Math.cos(Math.PI*A)-1)/2; }},initialize:function(A){this.subject=3Dthis.subject||this;this.setOptio= ns(A);this.options.duration=3DFx.Durations[this.options.duration]||this.o= ptions.duration.toInt(); var = B=3Dthis.options.wait;if(B=3D=3D=3Dfalse){this.options.link=3D"cancel";}}= ,step:function(){var = A=3D$time();if(A=3D(7-4*B)/11){C=3D-Math.pow((11-6*B-11= *D)/4,2)+A*A; break;}}return C;},Elastic:function(B,A){return = Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic"= ,"Quart","Quint"].each(function(B,A){Fx.Transitions[B]=3Dnew = Fx.Transition(function(C){return Math.pow(C,[A+2]); });});var Request=3Dnew = Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:= {"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, = application/xml, text/xml, = */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,= emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalRes= ponse:false},initialize:function(A){this.xhr=3Dnew Browser.Request(); this.setOptions(A);this.options.isSuccess=3Dthis.options.isSuccess||this.= isSuccess;this.headers=3Dnew = Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readySt= ate!=3D4||!this.running){return ; }this.running=3Dfalse;this.status=3D0;$try(function(){this.status=3Dthis.= xhr.status;}.bind(this));if(this.options.isSuccess.call(this,this.status)= ){this.response=3D{text:this.xhr.responseText,xml:this.xhr.responseXML}; this.success(this.response.text,this.response.xml);}else{this.response=3D= {text:null,xml:null};this.failure();}this.xhr.onreadystatechange=3D$empty= ;},isSuccess:function(){return((this.status>=3D200)&&(this.status<300)); },processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)s= cript/).test(this.getHeader("Content-type"))){return $exec(A);}return = A.stripScripts(this.options.evalScripts); },success:function(B,A){this.onSuccess(this.processScripts(B),A);},onSucc= ess:function(){this.fireEvent("complete",arguments).fireEvent("success",a= rguments).callChain(); },failure:function(){this.onFailure();},onFailure:function(){this.fireEve= nt("complete").fireEvent("failure",this.xhr);},setHeader:function(A,B){th= is.headers.set(A,B); return this;},getHeader:function(A){return $try(function(){return = this.xhr.getResponseHeader(A);}.bind(this));},check:function(A){if(!this.= running){return true; }switch(this.options.link){case"cancel":this.cancel();return = true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return= false;}return false; },send:function(I){if(!this.check(arguments.callee,I)){return = this;}this.running=3Dtrue;var = G=3D$type(I);if(G=3D=3D"string"||G=3D=3D"element"){I=3D{data:I};}var = D=3Dthis.options; I=3D$extend({data:D.data,url:D.url,method:D.method},I);var = E=3DI.data,B=3DI.url,A=3DI.method;switch($type(E)){case"element":E=3D$(E)= .toQueryString();break;case"object":case"hash":E=3DHash.toQueryString(E);= }if(this.options.format){var = H=3D"format=3D"+this.options.format;E=3D(E)?H+"&"+E:H;}if(this.options.em= ulation&&["put","delete"].contains(A)){var F=3D"_method=3D"+A; E=3D(E)?F+"&"+E:F;A=3D"post";}if(this.options.urlEncoded&&A=3D=3D"post"){= var C=3D(this.options.encoding)?"; = charset=3D"+this.options.encoding:"";this.headers.set("Content-type","app= lication/x-www-form-urlencoded"+C); }if(E&&A=3D=3D"get"){B=3DB+(B.contains("?")?"&":"?")+E;E=3Dnull;}this.xhr= .open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=3D= this.onStateChange.bind(this); this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHe= ader(J,K);return = true;}.bind(this))){this.fireEvent("exception",[J,K]);}},this); this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.o= nStateChange();}return this;},cancel:function(){if(!this.running){return = this; }this.running=3Dfalse;this.xhr.abort();this.xhr.onreadystatechange=3D$emp= ty;this.xhr=3Dnew Browser.Request();this.fireEvent("cancel");return = this;}});(function(){var A=3D{}; ["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B= ){A[B]=3Dfunction(){var = C=3DArray.link(arguments,{url:String.type,data:$defined}); return = this.send($extend(C,{method:B.toLowerCase()}));};});Request.implement(A);= })();Element.Properties.send=3D{set:function(A){var = B=3Dthis.retrieve("send"); if(B){B.cancel();}return = this.eliminate("send").store("send:options",$extend({data:this,link:"canc= el",method:this.get("method")||"post",url:this.get("action")},A)); },get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("sen= d:options")){this.set("send",A);}this.store("send",new = Request(this.retrieve("send:options"))); }return this.retrieve("send");}};Element.implement({send:function(A){var = B=3Dthis.get("send");B.send({data:this,url:A||B.options.url});return = this;}});Request.HTML=3Dnew = Class({Extends:Request,options:{update:false,evalScripts:true,filter:fals= e},processHTML:function(C){var = B=3DC.match(/]*>([\s\S]*?)<\/body>/i); C=3D(B)?B[1]:C;var A=3Dnew Element("div");return $try(function(){var = D=3D""+C+"",G;if(Browser.Engine.trident){G=3Dnew = ActiveXObject("Microsoft.XMLDOM"); G.async=3Dfalse;G.loadXML(D);}else{G=3Dnew = DOMParser().parseFromString(D,"text/xml");}D=3DG.getElementsByTagName("ro= ot")[0];for(var F=3D0,E=3DD.childNodes.length; FThe URL you requested has been blocked. URL =3D = www4.lehigh.edu/Media/Website%20Resources/scripts/mootoolsExtras.js ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/Media/Website Resources/scripts/AC-Core.js // Utilizing MooTools Library http://www.mootools.net // Custom event handler to prevent conflict between libraries using = window.addEvent=20 var AC =3D { addEvent: function (el, type, fn) { if (el.attachEvent) { el['e'+type+fn] =3D fn; el[type+fn] =3D function(){el['e'+type+fn](window.event);} el.attachEvent('on'+type,el[type+fn]); } else { el.addEventListener(type,fn,false); } }, removeEvent: function (el, type, fn) { if (el.detachEvent) { el.detachEvent('on'+type,el[type+fn]); el[type+fn] =3D null; } else { el.removeEventListener(type,fn,false); } } }; // On page load setup function AC.addEvent(window, 'load', setup); function setup(){ new FlyoutMenu({ menuItems: $$('#navGlobal .toptier') }); /* Initialize = Flyout Menu */ if($$('#AC-TabCt').length > 0){ new Tabs({ tabs: $$('#AC-TabCt = .AC-Block')}); }; /* Call for Tabs */ if($$('.AC-SliderMain').length > 0){ new Slider(); }; if($chk($('AC-PhotoList'))){ var PhotoThumb =3D new = ACThumbnailer('AC-PhotoList','AC-PhotoThumbs','AC-PhotoImage','AC-NewsSto= ry'); } // active faq accordion var accordion =3D new Accordion('div.toggleHead', 'div.toggleBody', = {opacity: false,show: -1,alwaysHide: true, = onBackground:function(toggler,el){toggler.removeClass('toggleHeadActive')= ;},onActive:function(toggler,el){toggler.addClass('toggleHeadActive');}},= $('AC-Accordion')); //use if slider is NOT using the nav if($chk($('AC-SliderWithoutNav'))) {=20 //var random =3D Math.floor(Math.random()* $$('.slide').length); =20 =20 new SimpleSlideShowDemo({ startIndex: 0, slides: $$('.slide'), currentIndexContainer: 'slide', //an element or it's id maxContainer: 'slideMax', nextLink: 'AC-Next', prevLink: 'AC-Prev',=20 autoStart: true });=09 } =09 } // Flyout Menu Class var FlyoutMenu =3D new Class({ options: { menuItems: [], direction: 'vertical' },=20 initialize: function(options){ this.setOptions(options) this.menuItems =3D []; this.addMenuItems(this.options.menuItems); }, addMenuItems: function(menuItems) { $$(menuItems).each(function(menuItem){ this.menuItems.include($(menuItem)); if (this.options.direction =3D=3D 'horizontal') { var slideFx =3D new Fx.Tween(menuItem.getElement('div')); menuItem.addEvents({ 'mouseenter': function(){=20 slideFx.cancel(); menuItem.addClass('active'); (function() {slideFx.start('width', = menuItem.getElement('ul').getSize().x)}).delay(200); }, 'mouseleave': function(){=20 slideFx.cancel();=20 slideFx.start('width', '0').chain(function() {=20 //if(menuItem.getElement('ul').getStyle('width').toInt() =3D=3D = 0){=20 menuItem.removeClass('active'); //} }); } }); =09 } else {=20 var slideFx =3D new Fx.Tween(menuItem.getElement('div')); menuItem.addEvents({ 'mouseenter': function(){=20 slideFx.cancel(); menuItem.addClass('active'); (function() {slideFx.start('height', = menuItem.getElement('ul').getSize().y)}).delay(250); }, 'mouseleave': function(){=20 slideFx.cancel();=20 slideFx.start('height', '0').chain(function() {=20 //if(menuItem.getElement('ul').getStyle('height').toInt() =3D=3D = 0){=20 menuItem.removeClass('active'); //} }); } }); } =09 =09 =09 }, this); }=20 =09 }); FlyoutMenu.implement(new Options, new Events); ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/WebResource.axd?d=RweF2u-fvh56uFde77_SHw2&t=633422337500876550 function WebForm_PostBackOptions(eventTarget, eventArgument, validation, = validationGroup, actionUrl, trackFocus, clientSubmit) { this.eventTarget =3D eventTarget; this.eventArgument =3D eventArgument; this.validation =3D validation; this.validationGroup =3D validationGroup; this.actionUrl =3D actionUrl; this.trackFocus =3D trackFocus; this.clientSubmit =3D clientSubmit; } function WebForm_DoPostBackWithOptions(options) { var validationResult =3D true; if (options.validation) { if (typeof(Page_ClientValidate) =3D=3D 'function') { validationResult =3D = Page_ClientValidate(options.validationGroup); } } if (validationResult) { if ((typeof(options.actionUrl) !=3D "undefined") && = (options.actionUrl !=3D null) && (options.actionUrl.length > 0)) { theForm.action =3D options.actionUrl; } if (options.trackFocus) { var lastFocus =3D theForm.elements["__LASTFOCUS"]; if ((typeof(lastFocus) !=3D "undefined") && (lastFocus !=3D = null)) { if (typeof(document.activeElement) =3D=3D "undefined") { lastFocus.value =3D options.eventTarget; } else { var active =3D document.activeElement; if ((typeof(active) !=3D "undefined") && (active = !=3D null)) { if ((typeof(active.id) !=3D "undefined") && = (active.id !=3D null) && (active.id.length > 0)) { lastFocus.value =3D active.id; } else if (typeof(active.name) !=3D "undefined") { lastFocus.value =3D active.name; } } } } } } if (options.clientSubmit) { __doPostBack(options.eventTarget, options.eventArgument); } } var __pendingCallbacks =3D new Array(); var __synchronousCallBackIndex =3D -1; function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, = context, errorCallback, useAsync) { var postData =3D __theFormPostData + "__CALLBACKID=3D" + WebForm_EncodeCallback(eventTarget) = + "&__CALLBACKPARAM=3D" + = WebForm_EncodeCallback(eventArgument); if (theForm["__EVENTVALIDATION"]) { postData +=3D "&__EVENTVALIDATION=3D" + = WebForm_EncodeCallback(theForm["__EVENTVALIDATION"].value); } var xmlRequest,e; try { xmlRequest =3D new XMLHttpRequest(); } catch(e) { try { xmlRequest =3D new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { } } var setRequestHeaderMethodExists =3D true; try { setRequestHeaderMethodExists =3D (xmlRequest && = xmlRequest.setRequestHeader); } catch(e) {} var callback =3D new Object(); callback.eventCallback =3D eventCallback; callback.context =3D context; callback.errorCallback =3D errorCallback; callback.async =3D useAsync; var callbackIndex =3D = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback); if (!useAsync) { if (__synchronousCallBackIndex !=3D -1) { __pendingCallbacks[__synchronousCallBackIndex] =3D null; } __synchronousCallBackIndex =3D callbackIndex; } if (setRequestHeaderMethodExists) { xmlRequest.onreadystatechange =3D WebForm_CallbackComplete; callback.xmlRequest =3D xmlRequest; xmlRequest.open("POST", theForm.action, true); xmlRequest.setRequestHeader("Content-Type", = "application/x-www-form-urlencoded"); xmlRequest.send(postData); return; } callback.xmlRequest =3D new Object(); var callbackFrameID =3D "__CALLBACKFRAME" + callbackIndex; var xmlRequestFrame =3D document.frames[callbackFrameID]; if (!xmlRequestFrame) { xmlRequestFrame =3D document.createElement("IFRAME"); xmlRequestFrame.width =3D "1"; xmlRequestFrame.height =3D "1"; xmlRequestFrame.frameBorder =3D "0"; xmlRequestFrame.id =3D callbackFrameID; xmlRequestFrame.name =3D callbackFrameID; xmlRequestFrame.style.position =3D "absolute"; xmlRequestFrame.style.top =3D "-100px" xmlRequestFrame.style.left =3D "-100px"; try { if (callBackFrameUrl) { xmlRequestFrame.src =3D callBackFrameUrl; } } catch(e) {} document.body.appendChild(xmlRequestFrame); } var interval =3D window.setInterval(function() { xmlRequestFrame =3D document.frames[callbackFrameID]; if (xmlRequestFrame && xmlRequestFrame.document) { window.clearInterval(interval); xmlRequestFrame.document.write(""); xmlRequestFrame.document.close(); xmlRequestFrame.document.write('
'); xmlRequestFrame.document.close(); xmlRequestFrame.document.forms[0].action =3D theForm.action; var count =3D __theFormPostCollection.length; var element; for (var i =3D 0; i < count; i++) { element =3D __theFormPostCollection[i]; if (element) { var fieldElement =3D = xmlRequestFrame.document.createElement("INPUT"); fieldElement.type =3D "hidden"; fieldElement.name =3D element.name; fieldElement.value =3D element.value; = xmlRequestFrame.document.forms[0].appendChild(fieldElement); } } var callbackIdFieldElement =3D = xmlRequestFrame.document.createElement("INPUT"); callbackIdFieldElement.type =3D "hidden"; callbackIdFieldElement.name =3D "__CALLBACKID"; callbackIdFieldElement.value =3D eventTarget; = xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement); var callbackParamFieldElement =3D = xmlRequestFrame.document.createElement("INPUT"); callbackParamFieldElement.type =3D "hidden"; callbackParamFieldElement.name =3D "__CALLBACKPARAM"; callbackParamFieldElement.value =3D eventArgument; = xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);= if (theForm["__EVENTVALIDATION"]) { var callbackValidationFieldElement =3D = xmlRequestFrame.document.createElement("INPUT"); callbackValidationFieldElement.type =3D "hidden"; callbackValidationFieldElement.name =3D = "__EVENTVALIDATION"; callbackValidationFieldElement.value =3D = theForm["__EVENTVALIDATION"].value; = xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElem= ent); } var callbackIndexFieldElement =3D = xmlRequestFrame.document.createElement("INPUT"); callbackIndexFieldElement.type =3D "hidden"; callbackIndexFieldElement.name =3D "__CALLBACKINDEX"; callbackIndexFieldElement.value =3D callbackIndex; = xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);= xmlRequestFrame.document.forms[0].submit(); } }, 10); } function WebForm_CallbackComplete() { for (i =3D 0; i < __pendingCallbacks.length; i++) { callbackObject =3D __pendingCallbacks[i]; if (callbackObject && callbackObject.xmlRequest && = (callbackObject.xmlRequest.readyState =3D=3D 4)) { WebForm_ExecuteCallback(callbackObject); if (!__pendingCallbacks[i].async) { __synchronousCallBackIndex =3D -1; } __pendingCallbacks[i] =3D null; var callbackFrameID =3D "__CALLBACKFRAME" + i; var xmlRequestFrame =3D = document.getElementById(callbackFrameID); if (xmlRequestFrame) { xmlRequestFrame.parentNode.removeChild(xmlRequestFrame); } } } } function WebForm_ExecuteCallback(callbackObject) { var response =3D callbackObject.xmlRequest.responseText; if (response.charAt(0) =3D=3D "s") { if ((typeof(callbackObject.eventCallback) !=3D "undefined") && = (callbackObject.eventCallback !=3D null)) { callbackObject.eventCallback(response.substring(1), = callbackObject.context); } } else if (response.charAt(0) =3D=3D "e") { if ((typeof(callbackObject.errorCallback) !=3D "undefined") && = (callbackObject.errorCallback !=3D null)) { callbackObject.errorCallback(response.substring(1), = callbackObject.context); } } else { var separatorIndex =3D response.indexOf("|"); if (separatorIndex !=3D -1) { var validationFieldLength =3D parseInt(response.substring(0, = separatorIndex)); if (!isNaN(validationFieldLength)) { var validationField =3D = response.substring(separatorIndex + 1, separatorIndex + = validationFieldLength + 1); if (validationField !=3D "") { var validationFieldElement =3D = theForm["__EVENTVALIDATION"]; if (!validationFieldElement) { validationFieldElement =3D = document.createElement("INPUT"); validationFieldElement.type =3D "hidden"; validationFieldElement.name =3D = "__EVENTVALIDATION"; theForm.appendChild(validationFieldElement); } validationFieldElement.value =3D validationField; } if ((typeof(callbackObject.eventCallback) !=3D = "undefined") && (callbackObject.eventCallback !=3D null)) { = callbackObject.eventCallback(response.substring(separatorIndex + = validationFieldLength + 1), callbackObject.context); } } } } } function WebForm_FillFirstAvailableSlot(array, element) { var i; for (i =3D 0; i < array.length; i++) { if (!array[i]) break; } array[i] =3D element; return i; } var __nonMSDOMBrowser =3D = (window.navigator.appName.toLowerCase().indexOf('explorer') =3D=3D -1); var __theFormPostData =3D ""; var __theFormPostCollection =3D new Array(); function WebForm_InitCallback() { var count =3D theForm.elements.length; var element; for (var i =3D 0; i < count; i++) { element =3D theForm.elements[i]; var tagName =3D element.tagName.toLowerCase(); if (tagName =3D=3D "input") { var type =3D element.type; if ((type =3D=3D "text" || type =3D=3D "hidden" || type = =3D=3D "password" || ((type =3D=3D "checkbox" || type =3D=3D "radio") && = element.checked)) && (element.id !=3D "__EVENTVALIDATION")) { WebForm_InitCallbackAddField(element.name, = element.value); } } else if (tagName =3D=3D "select") { var selectCount =3D element.options.length; for (var j =3D 0; j < selectCount; j++) { var selectChild =3D element.options[j]; if (selectChild.selected =3D=3D true) { WebForm_InitCallbackAddField(element.name, = element.value); } } } else if (tagName =3D=3D "textarea") { WebForm_InitCallbackAddField(element.name, element.value); } } } function WebForm_InitCallbackAddField(name, value) { var nameValue =3D new Object(); nameValue.name =3D name; nameValue.value =3D value; __theFormPostCollection[__theFormPostCollection.length] =3D = nameValue; __theFormPostData +=3D name + "=3D" + WebForm_EncodeCallback(value) = + "&"; } function WebForm_EncodeCallback(parameter) { if (encodeURIComponent) { return encodeURIComponent(parameter); } else { return escape(parameter); } } var __disabledControlArray =3D new Array(); function WebForm_ReEnableControls() { if (typeof(__enabledControlArray) =3D=3D 'undefined') { return false; } var disabledIndex =3D 0; for (var i =3D 0; i < __enabledControlArray.length; i++) { var c; if (__nonMSDOMBrowser) { c =3D document.getElementById(__enabledControlArray[i]); } else { c =3D document.all[__enabledControlArray[i]]; } if ((typeof(c) !=3D "undefined") && (c !=3D null) && (c.disabled = =3D=3D true)) { c.disabled =3D false; __disabledControlArray[disabledIndex++] =3D c; } } setTimeout("WebForm_ReDisableControls()", 0); return true; } function WebForm_ReDisableControls() { for (var i =3D 0; i < __disabledControlArray.length; i++) { __disabledControlArray[i].disabled =3D true; } } function WebForm_FireDefaultButton(event, target) { if (event.keyCode =3D=3D 13 && !(event.srcElement && = (event.srcElement.tagName.toLowerCase() =3D=3D "textarea"))) { var defaultButton; if (__nonMSDOMBrowser) { defaultButton =3D document.getElementById(target); } else { defaultButton =3D document.all[target]; } if (defaultButton && typeof(defaultButton.click) !=3D = "undefined") { defaultButton.click(); event.cancelBubble =3D true; if (event.stopPropagation) event.stopPropagation(); return false; } } return true; } function WebForm_GetScrollX() { if (__nonMSDOMBrowser) { return window.pageXOffset; } else { if (document.documentElement && = document.documentElement.scrollLeft) { return document.documentElement.scrollLeft; } else if (document.body) { return document.body.scrollLeft; } } return 0; } function WebForm_GetScrollY() { if (__nonMSDOMBrowser) { return window.pageYOffset; } else { if (document.documentElement && = document.documentElement.scrollTop) { return document.documentElement.scrollTop; } else if (document.body) { return document.body.scrollTop; } } return 0; } function WebForm_SaveScrollPositionSubmit() { if (__nonMSDOMBrowser) { theForm.elements['__SCROLLPOSITIONY'].value =3D = window.pageYOffset; theForm.elements['__SCROLLPOSITIONX'].value =3D = window.pageXOffset; } else { theForm.__SCROLLPOSITIONX.value =3D WebForm_GetScrollX(); theForm.__SCROLLPOSITIONY.value =3D WebForm_GetScrollY(); } if ((typeof(this.oldSubmit) !=3D "undefined") && (this.oldSubmit = !=3D null)) { return this.oldSubmit(); } return true; } function WebForm_SaveScrollPositionOnSubmit() { theForm.__SCROLLPOSITIONX.value =3D WebForm_GetScrollX(); theForm.__SCROLLPOSITIONY.value =3D WebForm_GetScrollY(); if ((typeof(this.oldOnSubmit) !=3D "undefined") && (this.oldOnSubmit = !=3D null)) { return this.oldOnSubmit(); } return true; } function WebForm_RestoreScrollPosition() { if (__nonMSDOMBrowser) { window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, = theForm.elements['__SCROLLPOSITIONY'].value); } else { window.scrollTo(theForm.__SCROLLPOSITIONX.value, = theForm.__SCROLLPOSITIONY.value); } if ((typeof(theForm.oldOnLoad) !=3D "undefined") && = (theForm.oldOnLoad !=3D null)) { return theForm.oldOnLoad(); } return true; } function WebForm_TextBoxKeyHandler(event) { if (event.keyCode =3D=3D 13) { var target; if (__nonMSDOMBrowser) { target =3D event.target; } else { target =3D event.srcElement; } if ((typeof(target) !=3D "undefined") && (target !=3D null)) { if (typeof(target.onchange) !=3D "undefined") { target.onchange(); event.cancelBubble =3D true; if (event.stopPropagation) event.stopPropagation(); return false; } } } return true; } function WebForm_AppendToClassName(element, className) { var current =3D element.className; if (current) { if (current.charAt(current.length - 1) !=3D ' ') { current +=3D ' '; } current +=3D className; } else { current =3D className; } element.className =3D current; } function WebForm_RemoveClassName(element, className) { var current =3D element.className; if (current) { if (current.substring(current.length - className.length - 1, = current.length) =3D=3D ' ' + className) { element.className =3D current.substring(0, current.length - = className.length - 1); return; } if (current =3D=3D className) { element.className =3D ""; return; } var index =3D current.indexOf(' ' + className + ' '); if (index !=3D -1) { element.className =3D current.substring(0, index) + = current.substring(index + className.length + 2, current.length); return; } if (current.substring(0, className.length) =3D=3D className + ' = ') { element.className =3D current.substring(className.length + = 1, current.length); } } } function WebForm_GetElementById(elementId) { if (document.getElementById) { return document.getElementById(elementId); } else if (document.all) { return document.all[elementId]; } else return null; } function WebForm_GetElementByTagName(element, tagName) { var elements =3D WebForm_GetElementsByTagName(element, tagName); if (elements && elements.length > 0) { return elements[0]; } else return null; } function WebForm_GetElementsByTagName(element, tagName) { if (element && tagName) { if (element.getElementsByTagName) { return element.getElementsByTagName(tagName); } if (element.all && element.all.tags) { return element.all.tags(tagName); } } return null; } function WebForm_GetElementDir(element) { if (element) { if (element.dir) { return element.dir; } return WebForm_GetElementDir(element.parentNode); } return "ltr"; } function WebForm_GetElementPosition(element) { var result =3D new Object(); result.x =3D 0; result.y =3D 0; result.width =3D 0; result.height =3D 0; if (element.offsetParent) { result.x =3D element.offsetLeft; result.y =3D element.offsetTop; var parent =3D element.offsetParent; while (parent) { result.x +=3D parent.offsetLeft; result.y +=3D parent.offsetTop; var parentTagName =3D parent.tagName.toLowerCase(); if (parentTagName !=3D "table" && parentTagName !=3D "body" &&=20 parentTagName !=3D "html" &&=20 parentTagName !=3D "div" &&=20 parent.clientTop &&=20 parent.clientLeft) { result.x +=3D parent.clientLeft; result.y +=3D parent.clientTop; } parent =3D parent.offsetParent; } } else if (element.left && element.top) { result.x =3D element.left; result.y =3D element.top; } else { if (element.x) { result.x =3D element.x; } if (element.y) { result.y =3D element.y; } } if (element.offsetWidth && element.offsetHeight) { result.width =3D element.offsetWidth; result.height =3D element.offsetHeight; } else if (element.style && element.style.pixelWidth && = element.style.pixelHeight) { result.width =3D element.style.pixelWidth; result.height =3D element.style.pixelHeight; } return result; } function WebForm_GetParentByTagName(element, tagName) { var parent =3D element.parentNode; var upperTagName =3D tagName.toUpperCase(); while (parent && (parent.tagName.toUpperCase() !=3D upperTagName)) { parent =3D parent.parentNode ? parent.parentNode : = parent.parentElement; } return parent; } function WebForm_SetElementHeight(element, height) { if (element && element.style) { element.style.height =3D height + "px"; } } function WebForm_SetElementWidth(element, width) { if (element && element.style) { element.style.width =3D width + "px"; } } function WebForm_SetElementX(element, x) { if (element && element.style) { element.style.left =3D x + "px"; } } function WebForm_SetElementY(element, y) { if (element && element.style) { element.style.top =3D y + "px"; } } ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/ScriptResource.axd?d=loW88CNzdSgiGHZ5XzJKDrRVdb9WUrzSDKpOvFGYpTiISy-rwPMLjVlu7vNFYKSzhNAZDppVHfzdRjNCjU-vSsZhJSugP01CWNhLN-5hHKE1&t=633826662976786683 =EF=BB=BF// Name: MicrosoftAjax.debug.js // Assembly: System.Web.Extensions // Version: 3.5.0.0 // FileVersion: 3.5.21022.8 //!----------------------------------------------------------------------= - //! Copyright (C) Microsoft Corporation. All rights reserved. //!----------------------------------------------------------------------= - //! MicrosoftAjax.js //! Microsoft AJAX Framework. // JavaScript Extensions and Type System =20 Function.__typeName =3D 'Function'; Function.__class =3D true; Function.createCallback =3D function Function$createCallback(method, = context) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "method", type: Function}, {name: "context", mayBeNull: true} ]); if (e) throw e; // The method still makes sense for null context, but not if the = context is omitted altogether // (omitted context makes the callback equivalent to the method = itself, with one more level of indirection). return function() { var l =3D arguments.length; if (l > 0) { // arguments is not a real array, need to build a real one = from it so we can add var args =3D []; for (var i =3D 0; i < l; i++) { args[i] =3D arguments[i]; } args[l] =3D context; return method.apply(this, args); } return method.call(this, context); } } Function.createDelegate =3D function Function$createDelegate(instance, = method) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance", mayBeNull: true}, {name: "method", type: Function} ]); if (e) throw e; // The method still makes some sense with a null instance, in the = same way that createCallback still // makes sense with a null context. return function() { return method.apply(instance, arguments); } } Function.emptyFunction =3D Function.emptyMethod =3D function = Function$emptyMethod() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); } Function._validateParams =3D function Function$_validateParams(params, = expectedParams) { // *DO NOT* triple-slash comment those. The double-slashes here are = on purpose. // We don't need to document private functions and those will induce = infinite loops // if the preprocessor generates validation code for these. // // Validates the parameters to a method. // // // function foo(anyParam, stringParam, anyArrayParam, = stringArrayParam, // interfaceParam, optionalStringParam) { // #if DEBUG // var e =3D Function._validateParams(arguments, [ // { name: "anyParam" }, // { name: "mayBeNullParam", mayBeNull: true }, // { name: "stringParam", type: String }, // { name: "floatParam", type: Number }, // { name: "intParam", type: Number, integer: true }, // { name: "domParam", domElement: true }, // { name: "anyArrayParam", type: Array }, // { name: "mayBeNullArrayParam", type: Array, = elementMayBeNull: true }, // { name: "stringArrayParam", type: Array, elementType: = String }, // { name: "intArrayParam", type: Array, elementType: = Number, elementInteger: true }, // { name: "domElementArrayParam", type: Array, = elementDomElement: true }, // { name: "interfaceParam", type: Sys.IFoo } // { name: "optionalStringParam", type: String, = optional: true } // { name: "stringParamArray", type: String, = parameterArray: true } // { name: "mayBeNullParamArray", parameterArray: true, = mayBeNull: true } // ]); // if (e) throw e; // #endif // } // // Array of parameter values = passed to the method. // Array of JSON objects describing the expected = parameters. var e; e =3D Function._validateParameterCount(params, expectedParams); if (e) { e.popStackFrame(); return e; } for (var i=3D0; i < params.length; i++) { // If there are more params than expectedParams, then the last = expectedParam // must be a paramArray. Use the last expectedParam to validate = the remaining // params. var expectedParam =3D expectedParams[Math.min(i, = expectedParams.length - 1)]; var paramName =3D expectedParam.name; if (expectedParam.parameterArray) { // Append index of parameter in parameterArray paramName +=3D "[" + (i - expectedParams.length + 1) + "]"; } e =3D Function._validateParameter(params[i], expectedParam, = paramName); if (e) { e.popStackFrame(); return e; } } return null; } Function._validateParameterCount =3D function = Function$_validateParameterCount(params, expectedParams) { var maxParams =3D expectedParams.length; var minParams =3D 0; for (var i=3D0; i < expectedParams.length; i++) { if (expectedParams[i].parameterArray) { maxParams =3D Number.MAX_VALUE; } else if (!expectedParams[i].optional) { minParams++; } } if (params.length < minParams || params.length > maxParams) { var e =3D Error.parameterCount(); e.popStackFrame(); return e; } return null; } Function._validateParameter =3D function = Function$_validateParameter(param, expectedParam, paramName) { var e; var expectedType =3D expectedParam.type; var expectedInteger =3D !!expectedParam.integer; var expectedDomElement =3D !!expectedParam.domElement; var mayBeNull =3D !!expectedParam.mayBeNull; e =3D Function._validateParameterType(param, expectedType, = expectedInteger, expectedDomElement, mayBeNull, paramName); if (e) { e.popStackFrame(); return e; } // If parameter is an array, and not undefined or null, validate the = type of its elements var expectedElementType =3D expectedParam.elementType; var elementMayBeNull =3D !!expectedParam.elementMayBeNull; if (expectedType =3D=3D=3D Array && typeof(param) !=3D=3D = "undefined" && param !=3D=3D null && (expectedElementType || !elementMayBeNull)) { var expectedElementInteger =3D !!expectedParam.elementInteger; var expectedElementDomElement =3D = !!expectedParam.elementDomElement; for (var i=3D0; i < param.length; i++) { var elem =3D param[i]; e =3D Function._validateParameterType(elem, = expectedElementType, expectedElementInteger, expectedElementDomElement, = elementMayBeNull, paramName + "[" + i + "]"); if (e) { e.popStackFrame(); return e; } } } return null; } Function._validateParameterType =3D function = Function$_validateParameterType(param, expectedType, expectedInteger, = expectedDomElement, mayBeNull, paramName) { var e; if (typeof(param) =3D=3D=3D "undefined") { if (mayBeNull) { return null; } else { e =3D Error.argumentUndefined(paramName); e.popStackFrame(); return e; } } if (param =3D=3D=3D null) { if (mayBeNull) { return null; } else { e =3D Error.argumentNull(paramName); e.popStackFrame(); return e; } } if (expectedType && expectedType.__enum) { if (typeof(param) !=3D=3D 'number') { e =3D Error.argumentType(paramName, Object.getType(param), = expectedType); e.popStackFrame(); return e; } if ((param % 1) =3D=3D=3D 0) { var values =3D expectedType.prototype; if (!expectedType.__flags || (param =3D=3D=3D 0)) { for (var i in values) { if (values[i] =3D=3D=3D param) return null; } } else { var v =3D param; for (var i in values) { var vali =3D values[i]; if (vali =3D=3D=3D 0) continue; if ((vali & param) =3D=3D=3D vali) { v -=3D vali; } if (v =3D=3D=3D 0) return null; } } } e =3D Error.argumentOutOfRange(paramName, param, = String.format(Sys.Res.enumInvalidValue, param, expectedType.getName())); e.popStackFrame(); return e; } // Using nodeType to check this is a DOM element for lack of a = better test on IE and Safari. // This is not entirely foolproof ({nodeType: 1} would seem to be of = type Sys.UI.DomElement) // but we need something that works cross-browser. // Opera and Firefox both have an HTMLElement type of which DOM = elements are instances but // we're not using it here for consistency. // Text nodes are not considered elements. if (expectedDomElement) { var val; if (typeof(param.nodeType) !=3D=3D 'number') { // Windows and documents are considered elements even though = they are not strictly speaking. // No node type may still be window or document. // Try to get the document for the element, revert to param = if not found: var doc =3D param.ownerDocument || param.document || param; if (doc !=3D param) { // The parameter is not the document, but it may be = window. // Try to get the window for the document: var w =3D doc.defaultView || doc.parentWindow; // On Safari 2, defaultView is not the same object as = window but they have the same document. val =3D (w !=3D param) && !(w.document && param.document = && (w.document =3D=3D=3D param.document)); } else { // doc is equal to param, but we still need to check = that it's really a document. // Using the body property for lack of a better = cross-browser test. val =3D (typeof(doc.body) =3D=3D=3D 'undefined'); } } else { // Text nodes have a node type but are not considered DOM = elements here. val =3D (param.nodeType =3D=3D=3D 3); } if (val) { e =3D Error.argument(paramName, Sys.Res.argumentDomElement); e.popStackFrame(); return e; } } // If there is no expected type, any type is allowed. if (expectedType && !expectedType.isInstanceOfType(param)) { e =3D Error.argumentType(paramName, Object.getType(param), = expectedType); e.popStackFrame(); return e; } if (expectedType =3D=3D=3D Number && expectedInteger) { // Modulo operator is 5x faster than Math.round(). // Modulo returns Number.NaN for Number.NaN, = Number.POSITIVE_INFINITY, and Number.NEGATIVE_INFINITY. if ((param % 1) !=3D=3D 0) { e =3D Error.argumentOutOfRange(paramName, param, = Sys.Res.argumentInteger); e.popStackFrame(); return e; } } return null; } =20 Error.__typeName =3D 'Error'; Error.__class =3D true; Error.create =3D function Error$create(message, errorInfo) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: = true}, {name: "errorInfo", mayBeNull: true, optional: true} ]); if (e) throw e; // If message string can be converted to a number, IE sets e.message = to the number, not the string. // Workaround this issue by explicitly setting e.message to the = string. var e =3D new Error(message); e.message =3D message; if (errorInfo) { for (var v in errorInfo) { e[v] =3D errorInfo[v]; } } e.popStackFrame(); return e; } // The ArgumentException ctor in .NET has the message *before* = paramName. This // is inconsistent with all the other Argument*Exception ctors in .NET. // We feel the paramName is more important than the message, and we want = all our // argument errors to be consistent, so our Error.argument() takes the = paramName // before the message. This is inconsistent with .NET, but overall we = feel // it is the better design. Error.argument =3D function Error$argument(paramName, message) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: = true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ArgumentException: " + (message ? = message : Sys.Res.argument); if (paramName) { displayMessage +=3D "\n" + String.format(Sys.Res.paramName, = paramName); } var e =3D Error.create(displayMessage, { name: = "Sys.ArgumentException", paramName: paramName }); e.popStackFrame(); return e; } Error.argumentNull =3D function Error$argumentNull(paramName, message) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: = true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ArgumentNullException: " + (message ? = message : Sys.Res.argumentNull); if (paramName) { displayMessage +=3D "\n" + String.format(Sys.Res.paramName, = paramName); } var e =3D Error.create(displayMessage, { name: = "Sys.ArgumentNullException", paramName: paramName }); e.popStackFrame(); return e; } Error.argumentOutOfRange =3D function = Error$argumentOutOfRange(paramName, actualValue, message) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: = true}, {name: "actualValue", mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ArgumentOutOfRangeException: " + = (message ? message : Sys.Res.argumentOutOfRange); if (paramName) { displayMessage +=3D "\n" + String.format(Sys.Res.paramName, = paramName); } // .NET implementation of ArgumentOutOfRangeException does not = display actualValue if it is null. // For parity with .NET, we do not display if actualValue is null or = undefined. This is OK, // since more specific exceptions exist for null and undefined. if (typeof(actualValue) !=3D=3D "undefined" && actualValue !=3D=3D = null) { displayMessage +=3D "\n" + String.format(Sys.Res.actualValue, = actualValue); } var e =3D Error.create(displayMessage, { name: "Sys.ArgumentOutOfRangeException", paramName: paramName, actualValue: actualValue }); e.popStackFrame(); return e; } Error.argumentType =3D function Error$argumentType(paramName, = actualType, expectedType, message) { /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: = true}, {name: "actualType", type: Type, mayBeNull: true, optional: = true}, {name: "expectedType", type: Type, mayBeNull: true, optional: = true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ArgumentTypeException: "; if (message) { displayMessage +=3D message; } else if (actualType && expectedType) { displayMessage +=3D String.format(Sys.Res.argumentTypeWithTypes, = actualType.getName(), expectedType.getName()); } else { displayMessage +=3D Sys.Res.argumentType; } if (paramName) { displayMessage +=3D "\n" + String.format(Sys.Res.paramName, = paramName); } var e =3D Error.create(displayMessage, { name: "Sys.ArgumentTypeException", paramName: paramName, actualType: actualType, expectedType: expectedType }); e.popStackFrame(); return e; } Error.argumentUndefined =3D function Error$argumentUndefined(paramName, = message) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: = true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ArgumentUndefinedException: " + (message = ? message : Sys.Res.argumentUndefined); if (paramName) { displayMessage +=3D "\n" + String.format(Sys.Res.paramName, = paramName); } var e =3D Error.create(displayMessage, { name: = "Sys.ArgumentUndefinedException", paramName: paramName }); e.popStackFrame(); return e; } Error.format =3D function Error$format(message) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.FormatException: " + (message ? message = : Sys.Res.format); var e =3D Error.create(displayMessage, {name: = 'Sys.FormatException'}); e.popStackFrame(); return e; } Error.invalidOperation =3D function Error$invalidOperation(message) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.InvalidOperationException: " + (message = ? message : Sys.Res.invalidOperation); var e =3D Error.create(displayMessage, {name: = 'Sys.InvalidOperationException'}); e.popStackFrame(); return e; } Error.notImplemented =3D function Error$notImplemented(message) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.NotImplementedException: " + (message ? = message : Sys.Res.notImplemented); var e =3D Error.create(displayMessage, {name: = 'Sys.NotImplementedException'}); e.popStackFrame(); return e; } Error.parameterCount =3D function Error$parameterCount(message) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage =3D "Sys.ParameterCountException: " + (message ? = message : Sys.Res.parameterCount); var e =3D Error.create(displayMessage, {name: = 'Sys.ParameterCountException'}); e.popStackFrame(); return e; } Error.prototype.popStackFrame =3D function Error$popStackFrame() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // Example stack frame // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D // Error("test error")@:0 // createError()@http://localhost/app/Error.js:2 // throwError()@http://localhost/app/Error.js:6 // callThrowError()@http://localhost/app/Error.js:10 // @http://localhost/app/Error:js:14 if (typeof(this.stack) =3D=3D=3D "undefined" || this.stack =3D=3D=3D = null || typeof(this.fileName) =3D=3D=3D "undefined" || this.fileName = =3D=3D=3D null || typeof(this.lineNumber) =3D=3D=3D "undefined" || this.lineNumber = =3D=3D=3D null) { return; } var stackFrames =3D this.stack.split("\n"); // Find current stack frame. It may not be the first stack frame, = since the very // first frame when the Error is constructed does not correspond to = any actual file // or line number. See example stack frame above. var currentFrame =3D stackFrames[0]; var pattern =3D this.fileName + ":" + this.lineNumber; while(typeof(currentFrame) !=3D=3D "undefined" && currentFrame !=3D=3D null && currentFrame.indexOf(pattern) =3D=3D=3D -1) { stackFrames.shift(); currentFrame =3D stackFrames[0]; } var nextFrame =3D stackFrames[1]; // Special-case last stack frame, to stop shifting frames off the = stack. if (typeof(nextFrame) =3D=3D=3D "undefined" || nextFrame =3D=3D=3D = null) { return; } // Update fields to correspond with next stack frame var nextFrameParts =3D nextFrame.match(/@(.*):(\d+)$/); if (typeof(nextFrameParts) =3D=3D=3D "undefined" || nextFrameParts = =3D=3D=3D null) { return; } this.fileName =3D nextFrameParts[1]; // This should always succeed, since the regex matches "\d+" this.lineNumber =3D parseInt(nextFrameParts[2]); stackFrames.shift(); this.stack =3D stackFrames.join("\n"); } =20 Object.__typeName =3D 'Object'; Object.__class =3D true; Object.getType =3D function Object$getType(instance) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance"} ]); if (e) throw e; var ctor =3D instance.constructor; if (!ctor || (typeof(ctor) !=3D=3D "function") || !ctor.__typeName = || (ctor.__typeName =3D=3D=3D 'Object')) { return Object; } return ctor; } Object.getTypeName =3D function Object$getTypeName(instance) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance"} ]); if (e) throw e; return Object.getType(instance).getName(); } =20 String.__typeName =3D 'String'; String.__class =3D true; String.prototype.endsWith =3D function String$endsWith(suffix) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "suffix", type: String} ]); if (e) throw e; return (this.substr(this.length - suffix.length) =3D=3D=3D suffix); } String.prototype.startsWith =3D function String$startsWith(prefix) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "prefix", type: String} ]); if (e) throw e; return (this.substr(0, prefix.length) =3D=3D=3D prefix); } String.prototype.trim =3D function String$trim() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this.replace(/^\s+|\s+$/g, ''); } String.prototype.trimEnd =3D function String$trimEnd() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this.replace(/\s+$/, ''); } String.prototype.trimStart =3D function String$trimStart() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this.replace(/^\s+/, ''); } String.format =3D function String$format(format, args) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String}, {name: "args", mayBeNull: true, parameterArray: true} ]); if (e) throw e; return String._toFormattedString(false, arguments); } String.localeFormat =3D function String$localeFormat(format, args) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String}, {name: "args", mayBeNull: true, parameterArray: true} ]); if (e) throw e; return String._toFormattedString(true, arguments); } String._toFormattedString =3D function = String$_toFormattedString(useLocale, args) { var result =3D ''; var format =3D args[0]; for (var i=3D0;;) { // Find the next opening or closing brace var open =3D format.indexOf('{', i); var close =3D format.indexOf('}', i); if ((open < 0) && (close < 0)) { // Not found: copy the end of the string and break result +=3D format.slice(i); break; } if ((close > 0) && ((close < open) || (open < 0))) { // Closing brace before opening is an error if (format.charAt(close + 1) !=3D=3D '}') { throw Error.argument('format', = Sys.Res.stringFormatBraceMismatch); } result +=3D format.slice(i, close + 1); i =3D close + 2; continue; } // Copy the string before the brace result +=3D format.slice(i, open); i =3D open + 1; // Check for double braces (which display as one and are not = arguments) if (format.charAt(i) =3D=3D=3D '{') { result +=3D '{'; i++; continue; } // at this point we have a valid opening brace, which should be = matched by a closing brace. if (close < 0) throw Error.argument('format', = Sys.Res.stringFormatBraceMismatch); // Find the closing brace // Get the string between the braces, and split it around the = ':' (if any) var brace =3D format.substring(i, close); var colonIndex =3D brace.indexOf(':'); var argNumber =3D parseInt((colonIndex < 0)? brace : = brace.substring(0, colonIndex), 10) + 1; if (isNaN(argNumber)) throw Error.argument('format', = Sys.Res.stringFormatInvalid); var argFormat =3D (colonIndex < 0)? '' : = brace.substring(colonIndex + 1); var arg =3D args[argNumber]; if (typeof(arg) =3D=3D=3D "undefined" || arg =3D=3D=3D null) { arg =3D ''; } // If it has a toFormattedString method, call it. Otherwise, = call toString() if (arg.toFormattedString) { result +=3D arg.toFormattedString(argFormat); } else if (useLocale && arg.localeFormat) { result +=3D arg.localeFormat(argFormat); } else if (arg.format) { result +=3D arg.format(argFormat); } else result +=3D arg.toString(); i =3D close + 1; } return result; } =20 Boolean.__typeName =3D 'Boolean'; Boolean.__class =3D true; Boolean.parse =3D function Boolean$parse(value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String} ]); if (e) throw e; var v =3D value.trim().toLowerCase(); if (v =3D=3D=3D 'false') return false; if (v =3D=3D=3D 'true') return true; throw Error.argumentOutOfRange('value', value, = Sys.Res.boolTrueOrFalse); } =20 Date.__typeName =3D 'Date'; Date.__class =3D true; Date._appendPreOrPostMatch =3D function = Date$_appendPreOrPostMatch(preMatch, strBuilder) { // appends pre- and post- token match strings while removing escaped = characters. // Returns a single quote count which is used to determine if the = token occurs // in a string literal. var quoteCount =3D 0; var escaped =3D false; for (var i =3D 0, il =3D preMatch.length; i < il; i++) { var c =3D preMatch.charAt(i); switch (c) { case '\'': if (escaped) strBuilder.append("'"); else quoteCount++; escaped =3D false; break; case '\\': if (escaped) strBuilder.append("\\"); escaped =3D !escaped; break; default: strBuilder.append(c); escaped =3D false; break; } } return quoteCount; } Date._expandFormat =3D function Date$_expandFormat(dtf, format) { // expands unspecified or single character date formats into the = full pattern. if (!format) { format =3D "F"; } if (format.length =3D=3D=3D 1) { switch (format) { case "d": return dtf.ShortDatePattern; case "D": return dtf.LongDatePattern; case "t": return dtf.ShortTimePattern; case "T": return dtf.LongTimePattern; case "F": return dtf.FullDateTimePattern; case "M": case "m": return dtf.MonthDayPattern; case "s": return dtf.SortableDateTimePattern; case "Y": case "y": return dtf.YearMonthPattern; default: throw Error.format(Sys.Res.formatInvalidString); } } return format; } Date._expandYear =3D function Date$_expandYear(dtf, year) { // expands 2-digit year into 4 digits. if (year < 100) { var curr =3D new Date().getFullYear(); year +=3D curr - (curr % 100); if (year > dtf.Calendar.TwoDigitYearMax) { return year - 100; } } return year; } Date._getParseRegExp =3D function Date$_getParseRegExp(dtf, format) { // converts a format string into a regular expression with groups = that // can be used to extract date fields from a date string. // check for a cached parse regex. if (!dtf._parseRegExp) { dtf._parseRegExp =3D {}; } else if (dtf._parseRegExp[format]) { return dtf._parseRegExp[format]; } // expand single digit formats, then escape regular expression = characters. var expFormat =3D Date._expandFormat(dtf, format); expFormat =3D expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, = "\\\\$1"); var regexp =3D new Sys.StringBuilder("^"); var groups =3D []; var index =3D 0; var quoteCount =3D 0; var tokenRegExp =3D Date._getTokenRegExp(); var match; // iterate through each date token found. while ((match =3D tokenRegExp.exec(expFormat)) !=3D=3D null) { var preMatch =3D expFormat.slice(index, match.index); index =3D tokenRegExp.lastIndex; // don't replace any matches that occur inside a string literal. quoteCount +=3D Date._appendPreOrPostMatch(preMatch, regexp); if ((quoteCount%2) =3D=3D=3D 1) { regexp.append(match[0]); continue; } // add a regex group for the token. switch (match[0]) { case 'dddd': case 'ddd': case 'MMMM': case 'MMM': regexp.append("(\\D+)"); break; case 'tt': case 't': regexp.append("(\\D*)"); break; case 'yyyy': regexp.append("(\\d{4})"); break; case 'fff': regexp.append("(\\d{3})"); break; case 'ff': regexp.append("(\\d{2})"); break; case 'f': regexp.append("(\\d)"); break; case 'dd': case 'd': case 'MM': case 'M': case 'yy': case 'y': case 'HH': case 'H': case 'hh': case 'h': case 'mm': case 'm': case 'ss': case 's': regexp.append("(\\d\\d?)"); break; case 'zzz': regexp.append("([+-]?\\d\\d?:\\d{2})"); break; case 'zz': case 'z': regexp.append("([+-]?\\d\\d?)"); break; } Array.add(groups, match[0]); } Date._appendPreOrPostMatch(expFormat.slice(index), regexp); regexp.append("$"); // allow whitespace to differ when matching formats. var regexpStr =3D regexp.toString().replace(/\s+/g, "\\s+"); var parseRegExp =3D {'regExp': regexpStr, 'groups': groups}; // cache the regex for this format. dtf._parseRegExp[format] =3D parseRegExp; return parseRegExp; } Date._getTokenRegExp =3D function Date$_getTokenRegExp() { // regular expression for matching dateTime tokens in format = strings. return = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|= zzz|zz|z/g; } Date.parseLocale =3D function Date$parseLocale(value, formats) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String}, {name: "formats", mayBeNull: true, optional: true, = parameterArray: true} ]); if (e) throw e; return Date._parse(value, Sys.CultureInfo.CurrentCulture, = arguments); } Date.parseInvariant =3D function Date$parseInvariant(value, formats) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String}, {name: "formats", mayBeNull: true, optional: true, = parameterArray: true} ]); if (e) throw e; return Date._parse(value, Sys.CultureInfo.InvariantCulture, = arguments); } Date._parse =3D function Date$_parse(value, cultureInfo, args) { // args is a params array with value as the first item, followed by = custom formats. // try parse with custom formats. var custom =3D false; for (var i =3D 1, il =3D args.length; i < il; i++) { var format =3D args[i]; if (format) { custom =3D true; var date =3D Date._parseExact(value, format, cultureInfo); if (date) return date; } } // try parse with culture formats. if (! custom) { var formats =3D cultureInfo._getDateTimeFormats(); for (var i =3D 0, il =3D formats.length; i < il; i++) { var date =3D Date._parseExact(value, formats[i], = cultureInfo); if (date) return date; } } return null; } Date._parseExact =3D function Date$_parseExact(value, format, = cultureInfo) { // try to parse the date string value by matching against the format = string // while using the specified culture for date field names. value =3D value.trim(); var dtf =3D cultureInfo.dateTimeFormat; // convert date formats into regular expressions with groupings. // use the regexp to determine the input format and extract the date = fields. var parseInfo =3D Date._getParseRegExp(dtf, format); var match =3D new RegExp(parseInfo.regExp).exec(value); // DevDiv 124696: Return null to avoid Firefox warning "does not = always return a value" if (match =3D=3D=3D null) return null; =20 // found a date format that matches the input. var groups =3D parseInfo.groups; var year =3D null, month =3D null, date =3D null, weekDay =3D null; var hour =3D 0, min =3D 0, sec =3D 0, msec =3D 0, tzMinOffset =3D = null; var pmHour =3D false; // iterate the format groups to extract and set the date fields. for (var j =3D 0, jl =3D groups.length; j < jl; j++) { var matchGroup =3D match[j+1]; if (matchGroup) { switch (groups[j]) { case 'dd': case 'd': // Day of month. date =3D parseInt(matchGroup, 10); // check that date is generally in valid range, also = checking overflow below. if ((date < 1) || (date > 31)) return null; break; case 'MMMM': // Month, long name. month =3D cultureInfo._getMonthIndex(matchGroup); if ((month < 0) || (month > 11)) return null; break; case 'MMM': // Month, short name. month =3D = cultureInfo._getAbbrMonthIndex(matchGroup); if ((month < 0) || (month > 11)) return null; break; case 'M': case 'MM': // Month. var month =3D parseInt(matchGroup, 10) - 1; if ((month < 0) || (month > 11)) return null; break; case 'y': case 'yy': // 2-Digit Year. year =3D Date._expandYear(dtf,parseInt(matchGroup, = 10)); if ((year < 0) || (year > 9999)) return null; break; case 'yyyy': // 4-Digit Year. year =3D parseInt(matchGroup, 10); if ((year < 0) || (year > 9999)) return null; break; case 'h': case 'hh': // Hours (12-hour clock). hour =3D parseInt(matchGroup, 10); if (hour =3D=3D=3D 12) hour =3D 0; if ((hour < 0) || (hour > 11)) return null; break; case 'H': case 'HH': // Hours (24-hour clock). hour =3D parseInt(matchGroup, 10); if ((hour < 0) || (hour > 23)) return null; break; case 'm': case 'mm': // Minutes. min =3D parseInt(matchGroup, 10); if ((min < 0) || (min > 59)) return null; break; case 's': case 'ss': // Seconds. sec =3D parseInt(matchGroup, 10); if ((sec < 0) || (sec > 59)) return null; break; case 'tt': case 't': // AM/PM designator. var upperToken =3D matchGroup.toUpperCase(); pmHour =3D (upperToken =3D=3D=3D = dtf.PMDesignator.toUpperCase()); if (!pmHour && (upperToken !=3D=3D = dtf.AMDesignator.toUpperCase())) return null; break; case 'f': // Deciseconds. msec =3D parseInt(matchGroup, 10) * 100; if ((msec < 0) || (msec > 999)) return null; break; case 'ff': // Centiseconds. msec =3D parseInt(matchGroup, 10) * 10; if ((msec < 0) || (msec > 999)) return null; break; case 'fff': // Milliseconds. msec =3D parseInt(matchGroup, 10); if ((msec < 0) || (msec > 999)) return null; break; case 'dddd': // Day of week. weekDay =3D cultureInfo._getDayIndex(matchGroup); if ((weekDay < 0) || (weekDay > 6)) return null; break; case 'ddd': // Day of week. weekDay =3D = cultureInfo._getAbbrDayIndex(matchGroup); if ((weekDay < 0) || (weekDay > 6)) return null; break; case 'zzz': // Time zone offset in +/- hours:min. var offsets =3D matchGroup.split(/:/); if (offsets.length !=3D=3D 2) return null; var hourOffset =3D parseInt(offsets[0], 10); if ((hourOffset < -12) || (hourOffset > 13)) return = null; var minOffset =3D parseInt(offsets[1], 10); if ((minOffset < 0) || (minOffset > 59)) return = null; tzMinOffset =3D (hourOffset * 60) + = (matchGroup.startsWith('-')? -minOffset : minOffset); break; case 'z': case 'zz': // Time zone offset in +/- hours. var hourOffset =3D parseInt(matchGroup, 10); if ((hourOffset < -12) || (hourOffset > 13)) return = null; tzMinOffset =3D hourOffset * 60; break; } } } var result =3D new Date(); if (year =3D=3D=3D null) { year =3D result.getFullYear(); } if (month =3D=3D=3D null) { month =3D result.getMonth(); } if (date =3D=3D=3D null) { date =3D result.getDate(); } // have to set year, month and date together to avoid overflow based = on current date. result.setFullYear(year, month, date); // check to see if date overflowed for specified month (only checked = 1-31 above). if (result.getDate() !=3D=3D date) return null; // invalid day of week. if ((weekDay !=3D=3D null) && (result.getDay() !=3D=3D weekDay)) { return null; } // if pm designator token was found make sure the hours fit the = 24-hour clock. if (pmHour && (hour < 12)) { hour +=3D 12; } result.setHours(hour, min, sec, msec); if (tzMinOffset !=3D=3D null) { // adjust timezone to utc before applying local offset. var adjustedMin =3D result.getMinutes() - (tzMinOffset + = result.getTimezoneOffset()); // Safari limits hours and minutes to the range of -127 to 127. = We need to use setHours // to ensure both these fields will not exceed this range. = adjustedMin will range // somewhere between -1440 and 1500, so we only need to split = this into hours. result.setHours(result.getHours() + parseInt(adjustedMin/60, = 10), adjustedMin%60); } return result; } Date.prototype.format =3D function Date$format(format) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String} ]); if (e) throw e; return this._toFormattedString(format, = Sys.CultureInfo.InvariantCulture); } Date.prototype.localeFormat =3D function Date$localeFormat(format) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String} ]); if (e) throw e; return this._toFormattedString(format, = Sys.CultureInfo.CurrentCulture); } Date.prototype._toFormattedString =3D function = Date$_toFormattedString(format, cultureInfo) { if (!format || (format.length =3D=3D=3D 0) || (format =3D=3D=3D = 'i')) { if (cultureInfo && (cultureInfo.name.length > 0)) { return this.toLocaleString(); } else { return this.toString(); } } var dtf =3D cultureInfo.dateTimeFormat; format =3D Date._expandFormat(dtf, format); // Start with an empty string var ret =3D new Sys.StringBuilder(); var hour; function addLeadingZero(num) { if (num < 10) { return '0' + num; } return num.toString(); } function addLeadingZeros(num) { if (num < 10) { return '00' + num; } if (num < 100) { return '0' + num; } return num.toString(); } var quoteCount =3D 0; var tokenRegExp =3D Date._getTokenRegExp(); for (;;) { // Save the current index var index =3D tokenRegExp.lastIndex; // Look for the next pattern var ar =3D tokenRegExp.exec(format); // Append the text before the pattern (or the end of the string = if not found) var preMatch =3D format.slice(index, ar ? ar.index : = format.length); quoteCount +=3D Date._appendPreOrPostMatch(preMatch, ret); if (!ar) break; // do not replace any matches that occur inside a string = literal. if ((quoteCount%2) =3D=3D=3D 1) { ret.append(ar[0]); continue; } switch (ar[0]) { case "dddd": // Day of the week, using the full name ret.append(dtf.DayNames[this.getDay()]); break; case "ddd": //Day of the week, as a three-letter abbreviation ret.append(dtf.AbbreviatedDayNames[this.getDay()]); break; case "dd": // Day of month, with leading zero for single-digit days ret.append(addLeadingZero(this.getDate())); break; case "d": // Day of month, without leading zero for single-digit days ret.append(this.getDate()); break; case "MMMM": // Month, using the full name ret.append(dtf.MonthNames[this.getMonth()]); break; case "MMM": // Month, as a three-letter abbreviation ret.append(dtf.AbbreviatedMonthNames[this.getMonth()]); break; case "MM": // Month, as digits, with leading zero for single-digit = months ret.append(addLeadingZero(this.getMonth() + 1)); break; case "M": // Month, as digits, with no leading zero for single-digit = months ret.append(this.getMonth() + 1); break; case "yyyy": // Year represented by four full digits ret.append(this.getFullYear()); break; case "yy": // Year, as two digits, with leading zero for years less = than 10 ret.append(addLeadingZero(this.getFullYear() % 100)); break; case "y": // Year, as two digits, but with no leading zero for years = less than 10 ret.append(this.getFullYear() % 100); break; case "hh": // Hours with leading zero for single-digit hours, using = 12-hour clock hour =3D this.getHours() % 12; if (hour =3D=3D=3D 0) hour =3D 12; ret.append(addLeadingZero(hour)); break; case "h": // Hours with no leading zero for single-digit hours, using = 12-hour clock hour =3D this.getHours() % 12; if (hour =3D=3D=3D 0) hour =3D 12; ret.append(hour); break; case "HH": // Hours with leading zero for single-digit hours, using = 24-hour clock ret.append(addLeadingZero(this.getHours())); break; case "H": // Hours with no leading zero for single-digit hours, using = 24-hour clock ret.append(this.getHours()); break; case "mm": // Minutes with leading zero for single-digit minutes ret.append(addLeadingZero(this.getMinutes())); break; case "m": // Minutes with no leading zero for single-digit minutes ret.append(this.getMinutes()); break; case "ss": // Seconds with leading zero for single-digit seconds ret.append(addLeadingZero(this.getSeconds())); break; case "s": // Seconds with no leading zero for single-digit seconds ret.append(this.getSeconds()); break; case "tt": // Multicharacter am/pm indicator ret.append((this.getHours() < 12) ? dtf.AMDesignator : = dtf.PMDesignator); break; case "t": // One character am/pm indicator ("a" or "p") ret.append(((this.getHours() < 12) ? dtf.AMDesignator : = dtf.PMDesignator).charAt(0)); break; case "f": // Deciseconds = ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0)); break; case "ff": // Centiseconds ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, = 2)); break; case "fff": // Milliseconds ret.append(addLeadingZeros(this.getMilliseconds())); break; case "z": // Time zone offset, no leading zero hour =3D this.getTimezoneOffset() / 60; ret.append(((hour <=3D 0) ? '+' : '-') + = Math.floor(Math.abs(hour))); break; case "zz": // Time zone offset with leading zero hour =3D this.getTimezoneOffset() / 60; ret.append(((hour <=3D 0) ? '+' : '-') + = addLeadingZero(Math.floor(Math.abs(hour)))); break; case "zzz": // Time zone offset with leading zero hour =3D this.getTimezoneOffset() / 60; ret.append(((hour <=3D 0) ? '+' : '-') + = addLeadingZero(Math.floor(Math.abs(hour))) + dtf.TimeSeparator + = addLeadingZero(Math.abs(this.getTimezoneOffset() % 60))); break; } } return ret.toString(); } =20 Number.__typeName =3D 'Number'; Number.__class =3D true; Number.parseLocale =3D function Number$parseLocale(value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String} ]); if (e) throw e; return Number._parse(value, Sys.CultureInfo.CurrentCulture); } Number.parseInvariant =3D function Number$parseInvariant(value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String} ]); if (e) throw e; return Number._parse(value, Sys.CultureInfo.InvariantCulture); } Number._parse =3D function Number$_parse(value, cultureInfo) { // A string that can parse to = a number. // Culture = information. // Parsed number or Number.NaN if parsing = failed. value =3D value.trim(); =20 // allow infinity or hexidecimal for javascript compatability. if (value.match(/^[+-]?infinity$/i)) { return parseFloat(value); } if (value.match(/^0x[a-f0-9]+$/i)) { return parseInt(value); } var numFormat =3D cultureInfo.numberFormat; var signInfo =3D Number._parseNumberNegativePattern(value, = numFormat, numFormat.NumberNegativePattern); var sign =3D signInfo[0]; var num =3D signInfo[1]; =20 // support leading sign without space in addition to culture = negative format for .NET compatability if ((sign =3D=3D=3D '') && (numFormat.NumberNegativePattern !=3D=3D = 1)) { signInfo =3D Number._parseNumberNegativePattern(value, = numFormat, 1); sign =3D signInfo[0]; num =3D signInfo[1]; } if (sign =3D=3D=3D '') sign =3D '+'; =20 var exponent; var intAndFraction; var exponentPos =3D num.indexOf('e'); if (exponentPos < 0) exponentPos =3D num.indexOf('E'); if (exponentPos < 0) { intAndFraction =3D num; exponent =3D null; } else { intAndFraction =3D num.substr(0, exponentPos); exponent =3D num.substr(exponentPos + 1); } =20 var integer; var fraction; var decimalPos =3D = intAndFraction.indexOf(numFormat.NumberDecimalSeparator); if (decimalPos < 0) { integer =3D intAndFraction; fraction =3D null; } else { integer =3D intAndFraction.substr(0, decimalPos); fraction =3D intAndFraction.substr(decimalPos + = numFormat.NumberDecimalSeparator.length); } =20 // strip group separators from the integer portion integer =3D integer.split(numFormat.NumberGroupSeparator).join(''); =20 var p =3D sign + integer; if (fraction !=3D=3D null) { p +=3D '.' + fraction; } if (exponent !=3D=3D null) { var expSignInfo =3D Number._parseNumberNegativePattern(exponent, = numFormat, 1); if (expSignInfo[0] =3D=3D=3D '') { expSignInfo[0] =3D '+'; } p +=3D 'e' + expSignInfo[0] + expSignInfo[1]; } // don't allow multiple decimals separators, group separators after = decimal or trailing strings. if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) { return parseFloat(p); } return Number.NaN; } Number._parseNumberNegativePattern =3D function = Number$_parseNumberNegativePattern(value, numFormat, = numberNegativePattern) { // // Extracts the sign and number from a numeric input string = using the culture-specific number format // information and number negative pattern. // // Numerical string = value. // Culture-specific number = formatting information. // Culture-specific specifier for the negative number = format. // // Sign and number for the input value. The = sign is the invariant symbol or an empty // string if the number was unsigned. // var neg =3D numFormat.NegativeSign; var pos =3D numFormat.PositiveSign; =20 switch (numberNegativePattern) { case 4: // trailing sign with space neg =3D ' ' + neg; pos =3D ' ' + pos; case 3: // trailing sign no space if (value.endsWith(neg)) { return ['-', value.substr(0, value.length - = neg.length)]; } else if (value.endsWith(pos)) { return ['+', value.substr(0, value.length - = pos.length)]; } break; case 2: // leading sign with space neg +=3D ' '; pos +=3D ' '; case 1: // leading sign no space if (value.startsWith(neg)) { return ['-', value.substr(neg.length)]; } else if (value.startsWith(pos)) { return ['+', value.substr(pos.length)]; } break; case 0: // parenthesis if (value.startsWith('(') && value.endsWith(')')) { return ['-', value.substr(1, value.length - 2)]; } break; } return ['', value]; } Number.prototype.format =3D function Number$format(format) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String} ]); if (e) throw e; return this._toFormattedString(format, = Sys.CultureInfo.InvariantCulture); } Number.prototype.localeFormat =3D function Number$localeFormat(format) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "format", type: String} ]); if (e) throw e; return this._toFormattedString(format, = Sys.CultureInfo.CurrentCulture); } Number.prototype._toFormattedString =3D function = Number$_toFormattedString(format, cultureInfo) { if (!format || (format.length =3D=3D=3D 0) || (format =3D=3D=3D = 'i')) { if (cultureInfo && (cultureInfo.name.length > 0)) { return this.toLocaleString(); } else { return this.toString(); } } // All the enum patterns for the various NumberFormats var _percentPositivePattern =3D ["n %", "n%", "%n" ]; var _percentNegativePattern =3D ["-n %", "-n%", "-%n"]; var _numberNegativePattern =3D ["(n)","-n","- n","n-","n -"]; var _currencyPositivePattern =3D ["$n","n$","$ n","n $"]; var _currencyNegativePattern =3D = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n = $-","$ n-","$ -n","n- $","($ n)","(n $)"]; // Handles expanding numbers into some specified grouping i.e. [2, = 3, 5] would be ...,XXXXX,XXXXX,XXX,XX, function expandNumber(number, precision, groupSizes, sep, = decimalChar) { =20 var curSize =3D groupSizes[0]; var curGroupIndex =3D 1; // Make the number a string var numberString =3D number.toString(); var right =3D ""; var exponent =3D ""; // Split: left is integer, right is decimal and exponent. var decimalSplit =3D numberString.split('.'); if (decimalSplit.length > 1) { numberString =3D decimalSplit[0]; right =3D decimalSplit[1]; // Split: left is decimal, right is exponent. var exponentSplit =3D right.split(/e/i); if (exponentSplit.length > 1) { right =3D exponentSplit[0]; exponent =3D "e" + exponentSplit[1]; } } // now check precision, if its 0, drop right, otherwise = reassemble it if (precision > 0) { // trim right down to precision size var rightDifference =3D right.length - precision; if (rightDifference > 0) { right =3D right.slice(0, precision); } else if (rightDifference < 0) { for (var i=3D0; i=3D 0) { // group size of 0 or larger than the rest of the string = means take the rest of the string if (curSize =3D=3D=3D 0 || curSize > stringIndex) { if (ret.length > 0) return numberString.slice(0, stringIndex + 1) + sep = + ret + right; else return numberString.slice(0, stringIndex + 1) + = right; } if (ret.length > 0) ret =3D numberString.slice(stringIndex - curSize + 1, = stringIndex+1) + sep + ret; else ret =3D numberString.slice(stringIndex - curSize + 1, = stringIndex+1); stringIndex -=3D curSize; if (curGroupIndex < groupSizes.length) { curSize =3D groupSizes[curGroupIndex]; curGroupIndex++; } } return numberString.slice(0, stringIndex + 1) + sep + ret + = right; } var nf =3D cultureInfo.numberFormat; // Number is always positive for printing purposes (negative treated = separately) var number =3D Math.abs(this); // Default to number format if (!format) format =3D "D"; var precision =3D -1; if (format.length > 1) precision =3D parseInt(format.slice(1), 10); var pattern; switch (format.charAt(0)) { case "d": case "D": pattern =3D 'n'; // precision for decimal is padding if (precision !=3D=3D -1) { var numberStr =3D ""+number; var zerosToAdd =3D precision - numberStr.length; if (zerosToAdd > 0) { for (var i=3D0; i /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; // Setting Array[Array.length] is faster than Array.push() for a = single element. array[array.length] =3D item; } Array.addRange =3D function Array$addRange(array, items) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "items", type: Array, elementMayBeNull: true} ]); if (e) throw e; // Array.push() for multiple elements is faster than setting = Array[Array.length] in a loop. array.push.apply(array, items); } Array.clear =3D function Array$clear(array) { /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; array.length =3D 0; } Array.clone =3D function Array$clone(array) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; if (array.length =3D=3D=3D 1) { return [array[0]]; } else { // When the Array ctor is called with 0 or 2 or more arguments, = it creates a new // Array with the elements from the argument list. return Array.apply(null, array); } } Array.contains =3D function Array$contains(array, item) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; return (Array.indexOf(array, item) >=3D 0); } Array.dequeue =3D function Array$dequeue(array) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; return array.shift(); } Array.forEach =3D function Array$forEach(array, method, instance) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "method", type: Function}, {name: "instance", mayBeNull: true, optional: true} ]); if (e) throw e; for (var i =3D 0, l =3D array.length; i < l; i++) { var elt =3D array[i]; if (typeof(elt) !=3D=3D 'undefined') method.call(instance, elt, = i, array); } } Array.indexOf =3D function Array$indexOf(array, item, start) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true, optional: true}, {name: "start", mayBeNull: true, optional: true} ]); if (e) throw e; if (typeof(item) =3D=3D=3D "undefined") return -1; var length =3D array.length; if (length !=3D=3D 0) { // Coerce into number ("1a" will become NaN, which is consistent = with the built-in behavior of similar Array methods) start =3D start - 0; // NaN becomes zero if (isNaN(start)) { start =3D 0; } else { // If start is positive or negative infinity, don't try to = truncate it. // The infinite values will be handled correctly by the = subsequent code. if (isFinite(start)) { // This is faster than doing Math.floor or Math.ceil start =3D start - (start % 1); } // Negative start indices start from the end if (start < 0) { start =3D Math.max(0, length + start); } } // A do/while loop seems to have equal performance to a for loop = in this scenario for (var i =3D start; i < length; i++) { if ((typeof(array[i]) !=3D=3D "undefined") && (array[i] = =3D=3D=3D item)) { return i; } } } return -1; } Array.insert =3D function Array$insert(array, index, item) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "index", mayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; array.splice(index, 0, item); } Array.parse =3D function Array$parse(value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String, mayBeNull: true} ]); if (e) throw e; if (!value) return []; var v =3D eval(value); if (!Array.isInstanceOfType(v)) throw Error.argument('value', = Sys.Res.arrayParseBadFormat); return v; } Array.remove =3D function Array$remove(array, item) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; var index =3D Array.indexOf(array, item); if (index >=3D 0) { array.splice(index, 1); } return (index >=3D 0); } Array.removeAt =3D function Array$removeAt(array, index) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "index", mayBeNull: true} ]); if (e) throw e; array.splice(index, 1); } =20 // Define the root object (for non-browser hosts) if (!window) this.window =3D this; // Alias Function as Type window.Type =3D Function; // This has undistinguishable perf from compiled a RegExp. // The regexps here are kept a little too wide to allow for Unicode = characters but still // capture the most obvious developer errors. The JavaScript parser, as = well as the checks for // eval('name') =3D=3D=3D name will take care of the other errors. // = *************************************************************************= ******************* // NOTE: update ScriptComponentDescriptor.cs with any change to this = expression // so server and client-side are in sync. Type.__fullyQualifiedIdentifierRegExp =3D new RegExp("^[^.0-9 = \\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ = \\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. = \\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i"); Type.__identifierRegExp =3D new RegExp("^[^.0-9 = \\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. = \\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i"); Type.prototype.callBaseMethod =3D function Type$callBaseMethod(instance, = name, baseArguments) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance"}, {name: "name", type: String}, {name: "baseArguments", type: Array, mayBeNull: true, optional: = true, elementMayBeNull: true} ]); if (e) throw e; var baseMethod =3D this.getBaseMethod(instance, name); if (!baseMethod) throw = Error.invalidOperation(String.format(Sys.Res.methodNotFound, name)); if (!baseArguments) { return baseMethod.apply(instance); } else { return baseMethod.apply(instance, baseArguments); } } Type.prototype.getBaseMethod =3D function Type$getBaseMethod(instance, = name) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance"}, {name: "name", type: String} ]); if (e) throw e; if (!this.isInstanceOfType(instance)) throw = Error.argumentType('instance', Object.getType(instance), this); var baseType =3D this.getBaseType(); if (baseType) { var baseMethod =3D baseType.prototype[name]; return (baseMethod instanceof Function) ? baseMethod : null; } return null; } Type.prototype.getBaseType =3D function Type$getBaseType() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return (typeof(this.__baseType) =3D=3D=3D "undefined") ? null : = this.__baseType; } Type.prototype.getInterfaces =3D function Type$getInterfaces() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); var result =3D []; var type =3D this; while(type) { var interfaces =3D type.__interfaces; if (interfaces) { for (var i =3D 0, l =3D interfaces.length; i < l; i++) { var interfaceType =3D interfaces[i]; if (!Array.contains(result, interfaceType)) { result[result.length] =3D interfaceType; } } } type =3D type.__baseType; } return result; } Type.prototype.getName =3D function Type$getName() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return (typeof(this.__typeName) =3D=3D=3D "undefined") ? "" : = this.__typeName; } Type.prototype.implementsInterface =3D function = Type$implementsInterface(interfaceType) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "interfaceType", type: Type} ]); if (e) throw e; this.resolveInheritance(); var interfaceName =3D interfaceType.getName(); var cache =3D this.__interfaceCache; if (cache) { var cacheEntry =3D cache[interfaceName]; if (typeof(cacheEntry) !=3D=3D 'undefined') return cacheEntry; } else { cache =3D this.__interfaceCache =3D {}; } var baseType =3D this; while (baseType) { var interfaces =3D baseType.__interfaces; if (interfaces) { if (Array.indexOf(interfaces, interfaceType) !=3D=3D -1) { return cache[interfaceName] =3D true; } } baseType =3D baseType.__baseType; } return cache[interfaceName] =3D false; } Type.prototype.inheritsFrom =3D function Type$inheritsFrom(parentType) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "parentType", type: Type} ]); if (e) throw e; this.resolveInheritance(); var baseType =3D this.__baseType; while (baseType) { if (baseType =3D=3D=3D parentType) { return true; } baseType =3D baseType.__baseType; } return false; } Type.prototype.initializeBase =3D function Type$initializeBase(instance, = baseArguments) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance"}, {name: "baseArguments", type: Array, mayBeNull: true, optional: = true, elementMayBeNull: true} ]); if (e) throw e; if (!this.isInstanceOfType(instance)) throw = Error.argumentType('instance', Object.getType(instance), this); this.resolveInheritance(); if (this.__baseType) { if (!baseArguments) { this.__baseType.apply(instance); } else { this.__baseType.apply(instance, baseArguments); } } return instance; } Type.prototype.isImplementedBy =3D function = Type$isImplementedBy(instance) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance", mayBeNull: true} ]); if (e) throw e; if (typeof(instance) =3D=3D=3D "undefined" || instance =3D=3D=3D = null) return false; var instanceType =3D Object.getType(instance); return !!(instanceType.implementsInterface && = instanceType.implementsInterface(this)); } Type.prototype.isInstanceOfType =3D function = Type$isInstanceOfType(instance) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "instance", mayBeNull: true} ]); if (e) throw e; if (typeof(instance) =3D=3D=3D "undefined" || instance =3D=3D=3D = null) return false; if (instance instanceof this) return true; var instanceType =3D Object.getType(instance); return !!(instanceType =3D=3D=3D this) || (instanceType.inheritsFrom && = instanceType.inheritsFrom(this)) || (instanceType.implementsInterface && = instanceType.implementsInterface(this)); } Type.prototype.registerClass =3D function Type$registerClass(typeName, = baseType, interfaceTypes) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "typeName", type: String}, {name: "baseType", type: Type, mayBeNull: true, optional: true}, {name: "interfaceTypes", type: Type, parameterArray: true} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw = Error.argument('typeName', Sys.Res.notATypeName); // Check if the type name parses to an existing object that matches = this. var parsedName; try { parsedName =3D eval(typeName); } catch(e) { throw Error.argument('typeName', Sys.Res.argumentTypeName); } if (parsedName !=3D=3D this) throw Error.argument('typeName', = Sys.Res.badTypeName); // Check for double registrations if (Sys.__registeredTypes[typeName]) throw = Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, = typeName)); // We never accept undefined for this parameter because this is the = only way we can catch // registerClass("Sys.Foo", Sys.BArWithATypo, Sys.ISomeInterface). if ((arguments.length > 1) && (typeof(baseType) =3D=3D=3D = 'undefined')) throw Error.argumentUndefined('baseType'); if (baseType && !baseType.__class) throw Error.argument('baseType', = Sys.Res.baseNotAClass); this.prototype.constructor =3D this; this.__typeName =3D typeName; this.__class =3D true; if (baseType) { this.__baseType =3D baseType; this.__basePrototypePending =3D true; } // Saving a case-insensitive index of the registered types on each = namespace Sys.__upperCaseTypes[typeName.toUpperCase()] =3D this; // It is more performant to check "if (interfaceTypes)" than "if = (arguments.length > 2)". // Accessing the arguments array is relatively expensive, so we only = want to do so if there // are actually interface parameters. if (interfaceTypes) { this.__interfaces =3D []; this.resolveInheritance(); for (var i =3D 2, l =3D arguments.length; i < l; i++) { var interfaceType =3D arguments[i]; if (!interfaceType.__interface) throw = Error.argument('interfaceTypes[' + (i - 2) + ']', = Sys.Res.notAnInterface); for (var methodName in interfaceType.prototype) { var method =3D interfaceType.prototype[methodName]; if (!this.prototype[methodName]) { this.prototype[methodName] =3D method; } } this.__interfaces.push(interfaceType); } } Sys.__registeredTypes[typeName] =3D true; return this; } Type.prototype.registerInterface =3D function = Type$registerInterface(typeName) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "typeName", type: String} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw = Error.argument('typeName', Sys.Res.notATypeName); // Check if the type name parses to an existing object that matches = this. var parsedName; try { parsedName =3D eval(typeName); } catch(e) { throw Error.argument('typeName', Sys.Res.argumentTypeName); } if (parsedName !=3D=3D this) throw Error.argument('typeName', = Sys.Res.badTypeName); // Check for double registrations if (Sys.__registeredTypes[typeName]) throw = Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, = typeName)); // Saving a case-insensitive index of the registered types on each = namespace Sys.__upperCaseTypes[typeName.toUpperCase()] =3D this; this.prototype.constructor =3D this; this.__typeName =3D typeName; this.__interface =3D true; Sys.__registeredTypes[typeName] =3D true; return this; } Type.prototype.resolveInheritance =3D function Type$resolveInheritance() = { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this.__basePrototypePending) { var baseType =3D this.__baseType; baseType.resolveInheritance(); for (var memberName in baseType.prototype) { var memberValue =3D baseType.prototype[memberName]; if (!this.prototype[memberName]) { this.prototype[memberName] =3D memberValue; } } delete this.__basePrototypePending; } } Type.getRootNamespaces =3D function Type$getRootNamespaces() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return Array.clone(Sys.__rootNamespaces); } Type.isClass =3D function Type$isClass(type) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) = return false; return !!type.__class; } Type.isInterface =3D function Type$isInterface(type) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) = return false; return !!type.__interface; } Type.isNamespace =3D function Type$isNamespace(object) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "object", mayBeNull: true} ]); if (e) throw e; if ((typeof(object) =3D=3D=3D 'undefined') || (object =3D=3D=3D = null)) return false; return !!object.__namespace; } Type.parse =3D function Type$parse(typeName, ns) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "typeName", type: String, mayBeNull: true}, {name: "ns", mayBeNull: true, optional: true} ]); if (e) throw e; var fn; if (ns) { fn =3D Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + = typeName.toUpperCase()]; return fn || null; } if (!typeName) return null; if (!Type.__htClasses) { Type.__htClasses =3D {}; } fn =3D Type.__htClasses[typeName]; if (!fn) { fn =3D eval(typeName); if (typeof(fn) !=3D=3D 'function') throw = Error.argument('typeName', Sys.Res.notATypeName); Type.__htClasses[typeName] =3D fn; } return fn; } Type.registerNamespace =3D function = Type$registerNamespace(namespacePath) { /// /// var e =3D Function._validateParams(arguments, [ {name: "namespacePath", type: String} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) = throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); var rootObject =3D window; var namespaceParts =3D namespacePath.split('.'); for (var i =3D 0; i < namespaceParts.length; i++) { var currentPart =3D namespaceParts[i]; var ns =3D rootObject[currentPart]; if (ns && !ns.__namespace) { throw = Error.invalidOperation(String.format(Sys.Res.namespaceContainsObject, = namespaceParts.splice(0, i + 1).join('.'))); } if (!ns) { ns =3D rootObject[currentPart] =3D { __namespace: true, __typeName: namespaceParts.slice(0, i + 1).join('.') }; if (i =3D=3D=3D 0) { Sys.__rootNamespaces[Sys.__rootNamespaces.length] =3D = ns; } var parsedName; try { parsedName =3D eval(ns.__typeName); } catch(e) { parsedName =3D null; } if (parsedName !=3D=3D ns) { delete rootObject[currentPart]; throw Error.argument('namespacePath', = Sys.Res.invalidNameSpace); } ns.getName =3D function ns$getName() {return = this.__typeName;} } rootObject =3D ns; } } // Bootstrapping the Sys namespace. Can't use registerNamespace here as = its code uses some of the private // variables that moved from the global namespace onto Sys. // Changes to registerNamespace should be checked against this = bootstrapping code to keep them in sync. window.Sys =3D { __namespace: true, __typeName: "Sys", getName: function() {return "Sys";}, __upperCaseTypes: {} }; Sys.__rootNamespaces =3D [Sys]; Sys.__registeredTypes =3D {}; =20 Sys.IDisposable =3D function Sys$IDisposable() { throw Error.notImplemented(); } function Sys$IDisposable$dispose() { throw Error.notImplemented(); } Sys.IDisposable.prototype =3D { dispose: Sys$IDisposable$dispose } Sys.IDisposable.registerInterface('Sys.IDisposable'); =20 Sys.StringBuilder =3D function Sys$StringBuilder(initialText) { /// /// var e =3D Function._validateParams(arguments, [ {name: "initialText", mayBeNull: true, optional: true} ]); if (e) throw e; this._parts =3D (typeof(initialText) !=3D=3D 'undefined' && = initialText !=3D=3D null && initialText !=3D=3D '') ? [initialText.toString()] : []; this._value =3D {}; this._len =3D 0; } function Sys$StringBuilder$append(text) { /// /// var e =3D Function._validateParams(arguments, [ {name: "text", mayBeNull: true} ]); if (e) throw e; this._parts[this._parts.length] =3D text; } function Sys$StringBuilder$appendLine(text) { /// /// var e =3D Function._validateParams(arguments, [ {name: "text", mayBeNull: true, optional: true} ]); if (e) throw e; this._parts[this._parts.length] =3D ((typeof(text) =3D=3D=3D 'undefined') || (text =3D=3D=3D = null) || (text =3D=3D=3D '')) ? '\r\n' : text + '\r\n'; } function Sys$StringBuilder$clear() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._parts =3D []; this._value =3D {}; this._len =3D 0; } function Sys$StringBuilder$isEmpty() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this._parts.length =3D=3D=3D 0) return true; return this.toString() =3D=3D=3D ''; } function Sys$StringBuilder$toString(separator) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "separator", type: String, mayBeNull: true, optional: = true} ]); if (e) throw e; separator =3D separator || ''; var parts =3D this._parts; if (this._len !=3D=3D parts.length) { this._value =3D {}; this._len =3D parts.length; } var val =3D this._value; if (typeof(val[separator]) =3D=3D=3D 'undefined') { // Need to remove empty elements before joining in the = separator case if (separator !=3D=3D '') { for (var i =3D 0; i < parts.length;) { if ((typeof(parts[i]) =3D=3D=3D 'undefined') || = (parts[i] =3D=3D=3D '') || (parts[i] =3D=3D=3D null)) { parts.splice(i, 1); } else { i++; } } } val[separator] =3D this._parts.join(separator); } return val[separator]; } Sys.StringBuilder.prototype =3D { append: Sys$StringBuilder$append, appendLine: Sys$StringBuilder$appendLine, clear: Sys$StringBuilder$clear, isEmpty: Sys$StringBuilder$isEmpty, // separator may be null, to match behavior of ECMA = Array.join(separator) and // .NET String.Join(separator, value) toString: Sys$StringBuilder$toString } Sys.StringBuilder.registerClass('Sys.StringBuilder'); =20 if (!window.XMLHttpRequest) { window.XMLHttpRequest =3D function window$XMLHttpRequest() { // DevDiv Bugs 150054: Msxml2.XMLHTTP (version independent = ProgID) required for mobile IE var progIDs =3D [ 'Mxsml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ]; for (var i =3D 0, l =3D progIDs.length; i < l; i++) { try { return new ActiveXObject(progIDs[i]); } catch (ex) { } } return null; } } // Compat =20 Sys.Browser =3D {}; Sys.Browser.InternetExplorer =3D {}; Sys.Browser.Firefox =3D {}; Sys.Browser.Safari =3D {}; Sys.Browser.Opera =3D {}; Sys.Browser.agent =3D null; Sys.Browser.hasDebuggerStatement =3D false; Sys.Browser.name =3D navigator.appName; Sys.Browser.version =3D parseFloat(navigator.appVersion); if (navigator.userAgent.indexOf(' MSIE ') > -1) { Sys.Browser.agent =3D Sys.Browser.InternetExplorer; Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/MSIE = (\d+\.\d+)/)[1]); Sys.Browser.hasDebuggerStatement =3D true; } else if (navigator.userAgent.indexOf(' Firefox/') > -1) { Sys.Browser.agent =3D Sys.Browser.Firefox; Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/ = Firefox\/(\d+\.\d+)/)[1]); Sys.Browser.name =3D 'Firefox'; Sys.Browser.hasDebuggerStatement =3D true; } else if (navigator.userAgent.indexOf(' Safari/') > -1) { Sys.Browser.agent =3D Sys.Browser.Safari; Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/ = Safari\/(\d+(\.\d+)?)/)[1]); Sys.Browser.name =3D 'Safari'; } else if (navigator.userAgent.indexOf('Opera/') > -1) { Sys.Browser.agent =3D Sys.Browser.Opera; } // Base Class Library Type.registerNamespace('Sys.UI'); =20 Sys._Debug =3D function Sys$_Debug() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); } function Sys$_Debug$_appendConsole(text) { // VS script debugger output window. if ((typeof(Debug) !=3D=3D 'undefined') && Debug.writeln) { Debug.writeln(text); } // FF firebug and Safari console. if (window.console && window.console.log) { window.console.log(text); } // Opera console. if (window.opera) { window.opera.postError(text); } // WebDevHelper console. if (window.debugService) { window.debugService.trace(text); } } function Sys$_Debug$_appendTrace(text) { var traceElement =3D document.getElementById('TraceConsole'); if (traceElement && (traceElement.tagName.toUpperCase() = =3D=3D=3D 'TEXTAREA')) { traceElement.value +=3D text + '\n'; } } function Sys$_Debug$assert(condition, message, displayCaller) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "condition", type: Boolean}, {name: "message", type: String, mayBeNull: true, optional: = true}, {name: "displayCaller", type: Boolean, optional: true} ]); if (e) throw e; if (!condition) { message =3D (displayCaller && this.assert.caller) ? String.format(Sys.Res.assertFailedCaller, message, = this.assert.caller) : String.format(Sys.Res.assertFailed, message); if (confirm(String.format(Sys.Res.breakIntoDebugger, = message))) { this.fail(message); } } } function Sys$_Debug$clearTrace() { var traceElement =3D document.getElementById('TraceConsole'); if (traceElement && (traceElement.tagName.toUpperCase() = =3D=3D=3D 'TEXTAREA')) { traceElement.value =3D ''; } } function Sys$_Debug$fail(message) { /// /// var e =3D Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true} ]); if (e) throw e; this._appendConsole(message); // Cannot execute eval('debugger') in browsers that don't have a = debugger statement, since it causes a parse error. if (Sys.Browser.hasDebuggerStatement) { eval('debugger'); } } function Sys$_Debug$trace(text) { /// /// var e =3D Function._validateParams(arguments, [ {name: "text"} ]); if (e) throw e; this._appendConsole(text); this._appendTrace(text); } function Sys$_Debug$traceDump(object, name) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "object", mayBeNull: true}, {name: "name", type: String, mayBeNull: true, optional: = true} ]); if (e) throw e; var text =3D this._traceDump(object, name, true); } function Sys$_Debug$_traceDump(object, name, recursive, = indentationPadding, loopArray) { name =3D name? name : 'traceDump'; indentationPadding =3D indentationPadding? indentationPadding : = ''; if (object =3D=3D=3D null) { this.trace(indentationPadding + name + ': null'); return; } switch(typeof(object)) { case 'undefined': this.trace(indentationPadding + name + ': Undefined'); break; case 'number': case 'string': case 'boolean': this.trace(indentationPadding + name + ': ' + object); break; default: if (Date.isInstanceOfType(object) || = RegExp.isInstanceOfType(object)) { this.trace(indentationPadding + name + ': ' + = object.toString()); break; } if (!loopArray) { loopArray =3D []; } else if (Array.contains(loopArray, object)) { this.trace(indentationPadding + name + ': ...'); return; } Array.add(loopArray, object); // don't recurse into dom elements. // trace dump has to use '=3D=3D' for window when it's = passed as event arg in IE. // i.e., body onLoad=3D"Sys.Debug.traceDump(window)" if ((object =3D=3D window) || (object =3D=3D=3D = document) || (window.HTMLElement && (object instanceof = HTMLElement)) || (typeof(object.nodeName) =3D=3D=3D 'string')) { var tag =3D object.tagName? object.tagName : = 'DomElement'; if (object.id) { tag +=3D ' - ' + object.id; } this.trace(indentationPadding + name + ' {' + tag + = '}'); } // objects and arrays else { var typeName =3D Object.getTypeName(object); this.trace(indentationPadding + name + = (typeof(typeName) =3D=3D=3D 'string' ? ' {' + typeName + '}' : '')); if ((indentationPadding =3D=3D=3D '') || recursive) = { indentationPadding +=3D " "; var i, length, properties, p, v; if (Array.isInstanceOfType(object)) { length =3D object.length; for (i =3D 0; i < length; i++) { this._traceDump(object[i], '[' + i + = ']', recursive, indentationPadding, loopArray); } } else { for (p in object) { v =3D object[p]; if (!Function.isInstanceOfType(v)) { this._traceDump(v, p, recursive, = indentationPadding, loopArray); } } } } } Array.remove(loopArray, object); } } Sys._Debug.prototype =3D { _appendConsole: Sys$_Debug$_appendConsole, _appendTrace: Sys$_Debug$_appendTrace, assert: Sys$_Debug$assert, clearTrace: Sys$_Debug$clearTrace, fail: Sys$_Debug$fail, trace: Sys$_Debug$trace, traceDump: Sys$_Debug$traceDump, _traceDump: Sys$_Debug$_traceDump } Sys._Debug.registerClass('Sys._Debug'); Sys.Debug =3D new Sys._Debug(); Sys.Debug.isDebug =3D true; =20 function Sys$Enum$parse(value, ignoreCase) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", type: String}, {name: "ignoreCase", type: Boolean, optional: true} ]); if (e) throw e; var values, parsed, val; if (ignoreCase) { values =3D this.__lowerCaseValues; if (!values) { this.__lowerCaseValues =3D values =3D {}; var prototype =3D this.prototype; for (var name in prototype) { values[name.toLowerCase()] =3D prototype[name]; } } } else { values =3D this.prototype; } if (!this.__flags) { val =3D (ignoreCase ? value.toLowerCase() : value); parsed =3D values[val.trim()]; if (typeof(parsed) !=3D=3D 'number') throw = Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, = this.__typeName)); return parsed; } else { var parts =3D (ignoreCase ? value.toLowerCase() : = value).split(','); var v =3D 0; for (var i =3D parts.length - 1; i >=3D 0; i--) { var part =3D parts[i].trim(); parsed =3D values[part]; if (typeof(parsed) !=3D=3D 'number') throw = Error.argument('value', String.format(Sys.Res.enumInvalidValue, = value.split(',')[i].trim(), this.__typeName)); v |=3D parsed; } return v; } } function Sys$Enum$toString(value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "value", mayBeNull: true, optional: true} ]); if (e) throw e; // Need to do the type check manually instead of using parameter = validation to be able to return // an error message that mentions the actual enum type that's = expected instead of Number. if ((typeof(value) =3D=3D=3D 'undefined') || (value =3D=3D=3D null)) = return this.__string; if ((typeof(value) !=3D 'number') || ((value % 1) !=3D=3D 0)) throw = Error.argumentType('value', Object.getType(value), this); var values =3D this.prototype; var i; if (!this.__flags || (value =3D=3D=3D 0)) { for (i in values) { if (values[i] =3D=3D=3D value) { return i; } } } else { var sorted =3D this.__sortedValues; if (!sorted) { sorted =3D []; for (i in values) { sorted[sorted.length] =3D {key: i, value: values[i]}; } sorted.sort(function(a, b) { return a.value - b.value; }); this.__sortedValues =3D sorted; } var parts =3D []; var v =3D value; for (i =3D sorted.length - 1; i >=3D 0; i--) { var kvp =3D sorted[i]; var vali =3D kvp.value; if (vali =3D=3D=3D 0) continue; if ((vali & value) =3D=3D=3D vali) { parts[parts.length] =3D kvp.key; v -=3D vali; if (v =3D=3D=3D 0) break; } } if (parts.length && v =3D=3D=3D 0) return = parts.reverse().join(', '); } throw Error.argumentOutOfRange('value', value, = String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); } Type.prototype.registerEnum =3D function Type$registerEnum(name, flags) = { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "name", type: String}, {name: "flags", type: Boolean, optional: true} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw = Error.argument('name', Sys.Res.notATypeName); // Check if the type name parses to an existing object that matches = this. var parsedName; try { parsedName =3D eval(name); } catch(e) { throw Error.argument('name', Sys.Res.argumentTypeName); } if (parsedName !=3D=3D this) throw Error.argument('name', = Sys.Res.badTypeName); if (Sys.__registeredTypes[name]) throw = Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, = name)); for (var i in this.prototype) { var val =3D this.prototype[i]; if (!Type.__identifierRegExp.test(i)) throw = Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, i)); if (typeof(val) !=3D=3D 'number' || (val % 1) !=3D=3D 0) throw = Error.invalidOperation(Sys.Res.enumValueNotInteger); if (typeof(this[i]) !=3D=3D 'undefined') throw = Error.invalidOperation(String.format(Sys.Res.enumReservedName, i)); } Sys.__upperCaseTypes[name.toUpperCase()] =3D this; for (var i in this.prototype) { this[i] =3D this.prototype[i]; } this.__typeName =3D name; this.parse =3D Sys$Enum$parse; this.__string =3D this.toString(); this.toString =3D Sys$Enum$toString; this.__flags =3D flags; this.__enum =3D true; Sys.__registeredTypes[name] =3D true; } Type.isEnum =3D function Type$isEnum(type) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) = return false; return !!type.__enum; } Type.isFlags =3D function Type$isFlags(type) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) = return false; return !!type.__flags; } =20 Sys.EventHandlerList =3D function Sys$EventHandlerList() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._list =3D {}; } function Sys$EventHandlerList$addHandler(id, handler) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Array.add(this._getEvent(id, true), handler); } function Sys$EventHandlerList$removeHandler(id, handler) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String}, {name: "handler", type: Function} ]); if (e) throw e; var evt =3D this._getEvent(id); if (!evt) return; Array.remove(evt, handler); } function Sys$EventHandlerList$getHandler(id) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String} ]); if (e) throw e; var evt =3D this._getEvent(id); if (!evt || (evt.length =3D=3D=3D 0)) return null; evt =3D Array.clone(evt); return function(source, args) { for (var i =3D 0, l =3D evt.length; i < l; i++) { evt[i](source, args); } }; } function Sys$EventHandlerList$_getEvent(id, create) { if (!this._list[id]) { if (!create) return null; this._list[id] =3D []; } return this._list[id]; } Sys.EventHandlerList.prototype =3D { addHandler: Sys$EventHandlerList$addHandler, removeHandler: Sys$EventHandlerList$removeHandler, getHandler: Sys$EventHandlerList$getHandler, _getEvent: Sys$EventHandlerList$_getEvent } Sys.EventHandlerList.registerClass('Sys.EventHandlerList'); =20 Sys.EventArgs =3D function Sys$EventArgs() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); } Sys.EventArgs.registerClass('Sys.EventArgs'); Sys.EventArgs.Empty =3D new Sys.EventArgs(); =20 Sys.CancelEventArgs =3D function Sys$CancelEventArgs() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); Sys.CancelEventArgs.initializeBase(this); this._cancel =3D false; } function Sys$CancelEventArgs$get_cancel() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._cancel; } function Sys$CancelEventArgs$set_cancel(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Boolean}]); if (e) throw e; this._cancel =3D value; } Sys.CancelEventArgs.prototype =3D { get_cancel: Sys$CancelEventArgs$get_cancel, set_cancel: Sys$CancelEventArgs$set_cancel } Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs); =20 Sys.INotifyPropertyChange =3D function Sys$INotifyPropertyChange() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$INotifyPropertyChange$add_propertyChanged(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; throw Error.notImplemented(); } function Sys$INotifyPropertyChange$remove_propertyChanged(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; throw Error.notImplemented(); } Sys.INotifyPropertyChange.prototype =3D { add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged, remove_propertyChanged: = Sys$INotifyPropertyChange$remove_propertyChanged } Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange');= =20 Sys.PropertyChangedEventArgs =3D function = Sys$PropertyChangedEventArgs(propertyName) { /// /// var e =3D Function._validateParams(arguments, [ {name: "propertyName", type: String} ]); if (e) throw e; Sys.PropertyChangedEventArgs.initializeBase(this); this._propertyName =3D propertyName; } =20 function Sys$PropertyChangedEventArgs$get_propertyName() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._propertyName; } Sys.PropertyChangedEventArgs.prototype =3D { get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName } Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs'= , Sys.EventArgs); =20 Sys.INotifyDisposing =3D function Sys$INotifyDisposing() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$INotifyDisposing$add_disposing(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; throw Error.notImplemented(); } function Sys$INotifyDisposing$remove_disposing(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; throw Error.notImplemented(); } Sys.INotifyDisposing.prototype =3D { add_disposing: Sys$INotifyDisposing$add_disposing, remove_disposing: Sys$INotifyDisposing$remove_disposing } Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing"); =20 Sys.Component =3D function Sys$Component() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (Sys.Application) Sys.Application.registerDisposableObject(this); } function Sys$Component$get_events() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._events) { this._events =3D new Sys.EventHandlerList(); } return this._events; } function Sys$Component$get_id() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._id; } function Sys$Component$set_id(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; if (this._idSet) throw = Error.invalidOperation(Sys.Res.componentCantSetIdTwice); this._idSet =3D true; var oldId =3D this.get_id(); if (oldId && Sys.Application.findComponent(oldId)) throw = Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp); this._id =3D value; } function Sys$Component$get_isInitialized() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._initialized; } function Sys$Component$get_isUpdating() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._updating; } function Sys$Component$add_disposing(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().addHandler("disposing", handler); } function Sys$Component$remove_disposing(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().removeHandler("disposing", handler); } function Sys$Component$add_propertyChanged(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().addHandler("propertyChanged", handler); } function Sys$Component$remove_propertyChanged(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().removeHandler("propertyChanged", handler); } function Sys$Component$beginUpdate() { this._updating =3D true; } function Sys$Component$dispose() { if (this._events) { var handler =3D this._events.getHandler("disposing"); if (handler) { handler(this, Sys.EventArgs.Empty); } } delete this._events; Sys.Application.unregisterDisposableObject(this); Sys.Application.removeComponent(this); } function Sys$Component$endUpdate() { this._updating =3D false; if (!this._initialized) this.initialize(); this.updated(); } function Sys$Component$initialize() { this._initialized =3D true; } function Sys$Component$raisePropertyChanged(propertyName) { /// /// var e =3D Function._validateParams(arguments, [ {name: "propertyName", type: String} ]); if (e) throw e; if (!this._events) return; var handler =3D this._events.getHandler("propertyChanged"); if (handler) { handler(this, new = Sys.PropertyChangedEventArgs(propertyName)); } } function Sys$Component$updated() { } Sys.Component.prototype =3D { _id: null, _idSet: false, _initialized: false, _updating: false, get_events: Sys$Component$get_events, get_id: Sys$Component$get_id, set_id: Sys$Component$set_id, get_isInitialized: Sys$Component$get_isInitialized, get_isUpdating: Sys$Component$get_isUpdating, add_disposing: Sys$Component$add_disposing, remove_disposing: Sys$Component$remove_disposing, add_propertyChanged: Sys$Component$add_propertyChanged, remove_propertyChanged: Sys$Component$remove_propertyChanged, beginUpdate: Sys$Component$beginUpdate, dispose: Sys$Component$dispose, endUpdate: Sys$Component$endUpdate, initialize: Sys$Component$initialize, raisePropertyChanged: Sys$Component$raisePropertyChanged, updated: Sys$Component$updated } Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, = Sys.INotifyPropertyChange, Sys.INotifyDisposing); function Sys$Component$_setProperties(target, properties) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "target"}, {name: "properties"} ]); if (e) throw e; var current; var targetType =3D Object.getType(target); var isObject =3D (targetType =3D=3D=3D Object) || (targetType = =3D=3D=3D Sys.UI.DomElement); var isComponent =3D Sys.Component.isInstanceOfType(target) && = !target.get_isUpdating(); if (isComponent) target.beginUpdate(); for (var name in properties) { var val =3D properties[name]; var getter =3D isObject ? null : target["get_" + name]; if (isObject || typeof(getter) !=3D=3D 'function') { // No getter, looking for an existing field. var targetVal =3D target[name]; if (!isObject && typeof(targetVal) =3D=3D=3D 'undefined') = throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, = name)); if (!val || (typeof(val) !=3D=3D 'object') || (isObject && = !targetVal)) { target[name] =3D val; } else { Sys$Component$_setProperties(targetVal, val); } } else { var setter =3D target["set_" + name]; if (typeof(setter) =3D=3D=3D 'function') { // The setter exists, using it in all cases. setter.apply(target, [val]); } else if (val instanceof Array) { // There is a getter but no setter and the value to set = is an array. Adding to the existing array. current =3D getter.apply(target); if (!(current instanceof Array)) throw new = Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name)); for (var i =3D 0, j =3D current.length, l=3D val.length; = i < l; i++, j++) { current[j] =3D val[i]; } } else if ((typeof(val) =3D=3D=3D 'object') && = (Object.getType(val) =3D=3D=3D Object)) { // There is a getter but no setter and the value to set = is a plain object. Adding to the existing object. current =3D getter.apply(target); if ((typeof(current) =3D=3D=3D 'undefined') || (current = =3D=3D=3D null)) throw new = Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, = name)); Sys$Component$_setProperties(current, val); } else { // No setter, and the value is not an array or object, = throwing. throw new = Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, = name)); } } } if (isComponent) target.endUpdate(); } function Sys$Component$_setReferences(component, references) { for (var name in references) { var setter =3D component["set_" + name]; var reference =3D $find(references[name]); if (typeof(setter) !=3D=3D 'function') throw new = Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, = name)); if (!reference) throw = Error.invalidOperation(String.format(Sys.Res.referenceNotFound, = references[name])); setter.apply(component, [reference]); } } var $create =3D Sys.Component.create =3D function = Sys$Component$create(type, properties, events, references, element) { /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "type", type: Type}, {name: "properties", mayBeNull: true, optional: true}, {name: "events", mayBeNull: true, optional: true}, {name: "references", mayBeNull: true, optional: true}, {name: "element", mayBeNull: true, domElement: true, optional: = true} ]); if (e) throw e; if (!type.inheritsFrom(Sys.Component)) { throw Error.argument('type', = String.format(Sys.Res.createNotComponent, type.getName())); } if (type.inheritsFrom(Sys.UI.Behavior) || = type.inheritsFrom(Sys.UI.Control)) { if (!element) throw Error.argument('element', = Sys.Res.createNoDom); } else if (element) throw Error.argument('element', = Sys.Res.createComponentOnDom); var component =3D (element ? new type(element): new type()); var app =3D Sys.Application; var creatingComponents =3D app.get_isCreatingComponents(); component.beginUpdate(); if (properties) { Sys$Component$_setProperties(component, properties); } if (events) { for (var name in events) { if (!(component["add_" + name] instanceof Function)) throw = new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name)); if (!(events[name] instanceof Function)) throw new = Error.invalidOperation(Sys.Res.eventHandlerNotFunction); component["add_" + name](events[name]); } } if (component.get_id()) { app.addComponent(component); } if (creatingComponents) { // DevDiv 81690: Do not add to createdComponent list unless we = are in 2 pass mode, // which is during the first GET and on partial updates.=20 app._createdComponents[app._createdComponents.length] =3D = component; if (references) { app._addComponentToSecondPass(component, references); } else { component.endUpdate(); } } else { if (references) { Sys$Component$_setReferences(component, references); } component.endUpdate(); } return component; } =20 Sys.UI.MouseButton =3D function Sys$UI$MouseButton() { /// /// /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.UI.MouseButton.prototype =3D { leftButton: 0, middleButton: 1, rightButton: 2 } Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton"); =20 Sys.UI.Key =3D function Sys$UI$Key() { /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.UI.Key.prototype =3D { 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 } Sys.UI.Key.registerEnum("Sys.UI.Key"); =20 Sys.UI.Point =3D function Sys$UI$Point(x, y) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "x", type: Number, integer: true}, {name: "y", type: Number, integer: true} ]); if (e) throw e; this.x =3D x; this.y =3D y; } Sys.UI.Point.registerClass('Sys.UI.Point'); =20 Sys.UI.Bounds =3D function Sys$UI$Bounds(x, y, width, height) { /// /// /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "x", type: Number, integer: true}, {name: "y", type: Number, integer: true}, {name: "height", type: Number, integer: true}, {name: "width", type: Number, integer: true} ]); if (e) throw e; this.x =3D x; this.y =3D y; this.height =3D height; this.width =3D width; } Sys.UI.Bounds.registerClass('Sys.UI.Bounds'); =20 Sys.UI.DomEvent =3D function Sys$UI$DomEvent(eventObject) { /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "eventObject"} ]); if (e) throw e; var e =3D eventObject; this.rawEvent =3D e; this.altKey =3D e.altKey; if (typeof(e.button) !=3D=3D 'undefined') { this.button =3D (typeof(e.which) !=3D=3D 'undefined') ? e.button = : (e.button =3D=3D=3D 4) ? Sys.UI.MouseButton.middleButton : (e.button =3D=3D=3D 2) ? Sys.UI.MouseButton.rightButton : Sys.UI.MouseButton.leftButton; } if (e.type =3D=3D=3D 'keypress') { this.charCode =3D e.charCode || e.keyCode; } else if (e.keyCode && (e.keyCode =3D=3D=3D 46)) { this.keyCode =3D 127; } else { this.keyCode =3D e.keyCode; } this.clientX =3D e.clientX; this.clientY =3D e.clientY; this.ctrlKey =3D e.ctrlKey; this.target =3D e.target ? e.target : e.srcElement; if ((typeof(e.offsetX) !=3D=3D 'undefined') && (typeof(e.offsetY) = !=3D=3D 'undefined')) { this.offsetX =3D e.offsetX; this.offsetY =3D e.offsetY; } else if (this.target && (this.target.nodeType !=3D=3D 3) && = (typeof(e.clientX) =3D=3D=3D 'number')) { var loc =3D Sys.UI.DomElement.getLocation(this.target); var w =3D Sys.UI.DomElement._getWindow(this.target); this.offsetX =3D (w.pageXOffset || 0) + e.clientX - loc.x; this.offsetY =3D (w.pageYOffset || 0) + e.clientY - loc.y; } this.screenX =3D e.screenX; this.screenY =3D e.screenY; this.shiftKey =3D e.shiftKey; this.type =3D e.type; } function Sys$UI$DomEvent$preventDefault() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this.rawEvent.preventDefault) { this.rawEvent.preventDefault(); } else if (window.event) { this.rawEvent.returnValue =3D false; } } function Sys$UI$DomEvent$stopPropagation() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this.rawEvent.stopPropagation) { this.rawEvent.stopPropagation(); } else if (window.event) { this.rawEvent.cancelBubble =3D true; } } Sys.UI.DomEvent.prototype =3D { preventDefault: Sys$UI$DomEvent$preventDefault, stopPropagation: Sys$UI$DomEvent$stopPropagation } Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent'); var $addHandler =3D Sys.UI.DomEvent.addHandler =3D function = Sys$UI$DomEvent$addHandler(element, eventName, handler) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element"}, {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.UI.DomEvent._ensureDomNode(element); if (eventName =3D=3D=3D "error") throw = Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError); if (!element._events) { element._events =3D {}; } var eventCache =3D element._events[eventName]; if (!eventCache) { element._events[eventName] =3D eventCache =3D []; } var browserHandler; if (element.addEventListener) { browserHandler =3D function(e) { return handler.call(element, new Sys.UI.DomEvent(e)); } element.addEventListener(eventName, browserHandler, false); } else if (element.attachEvent) { browserHandler =3D function() { // window.event can be denied access in some rare = circumstances (DevDiv 68929) var e =3D {}; // We want to use the window for the event element, not the = window for this script (DevDiv 63167) try {e =3D Sys.UI.DomElement._getWindow(element).event} = catch(ex) {} return handler.call(element, new Sys.UI.DomEvent(e)); } element.attachEvent('on' + eventName, browserHandler); } eventCache[eventCache.length] =3D {handler: handler, browserHandler: = browserHandler}; } var $addHandlers =3D Sys.UI.DomEvent.addHandlers =3D function = Sys$UI$DomEvent$addHandlers(element, events, handlerOwner) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element"}, {name: "events", type: Object}, {name: "handlerOwner", optional: true} ]); if (e) throw e; Sys.UI.DomEvent._ensureDomNode(element); for (var name in events) { var handler =3D events[name]; if (typeof(handler) !=3D=3D 'function') throw = Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler); if (handlerOwner) { handler =3D Function.createDelegate(handlerOwner, handler); } $addHandler(element, name, handler); } } var $clearHandlers =3D Sys.UI.DomEvent.clearHandlers =3D function = Sys$UI$DomEvent$clearHandlers(element) { /// /// var e =3D Function._validateParams(arguments, [ {name: "element"} ]); if (e) throw e; Sys.UI.DomEvent._ensureDomNode(element); if (element._events) { var cache =3D element._events; for (var name in cache) { var handlers =3D cache[name]; for (var i =3D handlers.length - 1; i >=3D 0; i--) { $removeHandler(element, name, handlers[i].handler); } } element._events =3D null; } } var $removeHandler =3D Sys.UI.DomEvent.removeHandler =3D function = Sys$UI$DomEvent$removeHandler(element, eventName, handler) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element"}, {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.UI.DomEvent._ensureDomNode(element); var browserHandler =3D null; if ((typeof(element._events) !=3D=3D 'object') || (element._events = =3D=3D null)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); var cache =3D element._events[eventName]; if (!(cache instanceof Array)) throw = Error.invalidOperation(Sys.Res.eventHandlerInvalid); for (var i =3D 0, l =3D cache.length; i < l; i++) { if (cache[i].handler =3D=3D=3D handler) { browserHandler =3D cache[i].browserHandler; break; } } if (typeof(browserHandler) !=3D=3D 'function') throw = Error.invalidOperation(Sys.Res.eventHandlerInvalid); if (element.removeEventListener) { element.removeEventListener(eventName, browserHandler, false); } else if (element.detachEvent) { element.detachEvent('on' + eventName, browserHandler); } cache.splice(i, 1); } Sys.UI.DomEvent._ensureDomNode =3D function = Sys$UI$DomEvent$_ensureDomNode(element) { // DevDiv Bugs 100697: Accessing element.document causes dynamic = script nodes to load prematurely. // DevDiv Bugs 124696: Firefox warns on undefined property = element.tagName, added first part of IF if (element.tagName && (element.tagName =3D=3D=3D "SCRIPT")) return; =20 var doc =3D element.ownerDocument || element.document || element; // Can't use _getWindow here and compare to the element to check if = it's a window // because the object Safari exposes as document.defaultView is not = the window (DevDiv 100229) // Looking at the document property instead to include window in DOM = nodes, then comparing to the // document for this element and finally look for the nodeType = property. if ((typeof(element.document) !=3D=3D 'object') && (element !=3D = doc) && (typeof(element.nodeType) !=3D=3D 'number')) { throw Error.argument("element", Sys.Res.argumentDomNode); } } =20 Sys.UI.DomElement =3D function Sys$UI$DomElement() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.UI.DomElement.registerClass('Sys.UI.DomElement'); Sys.UI.DomElement.addCssClass =3D function = Sys$UI$DomElement$addCssClass(element, className) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "className", type: String} ]); if (e) throw e; if (!Sys.UI.DomElement.containsCssClass(element, className)) { if (element.className =3D=3D=3D '') { element.className =3D className; } else { element.className +=3D ' ' + className; } } } Sys.UI.DomElement.containsCssClass =3D function = Sys$UI$DomElement$containsCssClass(element, className) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "className", type: String} ]); if (e) throw e; return Array.contains(element.className.split(' '), className); } Sys.UI.DomElement.getBounds =3D function = Sys$UI$DomElement$getBounds(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; var offset =3D Sys.UI.DomElement.getLocation(element); return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || = 0, element.offsetHeight || 0); } var $get =3D Sys.UI.DomElement.getElementById =3D function = Sys$UI$DomElement$getElementById(id, element) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String}, {name: "element", mayBeNull: true, domElement: true, optional: = true} ]); if (e) throw e; if (!element) return document.getElementById(id); if (element.getElementById) return element.getElementById(id); // Implementation for browsers that don't have getElementById on = elements: var nodeQueue =3D []; var childNodes =3D element.childNodes; for (var i =3D 0; i < childNodes.length; i++) { var node =3D childNodes[i]; if (node.nodeType =3D=3D 1) { nodeQueue[nodeQueue.length] =3D node; } } while (nodeQueue.length) { node =3D nodeQueue.shift(); if (node.id =3D=3D id) { return node; } childNodes =3D node.childNodes; for (i =3D 0; i < childNodes.length; i++) { node =3D childNodes[i]; if (node.nodeType =3D=3D 1) { nodeQueue[nodeQueue.length] =3D node; } } } return null; } switch(Sys.Browser.agent) { case Sys.Browser.InternetExplorer: Sys.UI.DomElement.getLocation =3D function = Sys$UI$DomElement$getLocation(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; // For a document element, return zero. if (element.self || element.nodeType =3D=3D=3D 9) 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 =3D element.getBoundingClientRect(); if (!clientRect) { return new Sys.UI.Point(0,0); } var documentElement =3D = element.ownerDocument.documentElement; // Substracting 2px for the border of the viewport. This can = be changed in IE6 by applyting a border // to the HTML element but this is not supported by Atlas. = It cannot be changed in IE7. var offsetX =3D clientRect.left - 2 + = documentElement.scrollLeft, offsetY =3D clientRect.top - 2 + = documentElement.scrollTop; =20 // 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 =3D = 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 =3D (f.frameBorder =3D=3D=3D "0" || = f.frameBorder =3D=3D=3D "no") ? 2 : 0; offsetX +=3D offset; offsetY +=3D offset; } } catch(ex) { } =20 =20 return new Sys.UI.Point(offsetX, offsetY); } break; case Sys.Browser.Safari: Sys.UI.DomElement.getLocation =3D function = Sys$UI$DomElement$getLocation(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; // For a document element, return zero. if ((element.window && (element.window =3D=3D=3D element)) = || element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0); // Note (to document): in IE, if the elements are not = explicitly dimensioned to contain // relatively positioned elements they contain, there are = bugs in the measured dimensions of elements // that can't be worked around and which break this = function. var offsetX =3D 0; var offsetY =3D 0; var previous =3D null; var previousStyle =3D null; var currentStyle; for (var parent =3D element; parent; previous =3D parent, = previousStyle =3D currentStyle, parent =3D parent.offsetParent) { currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(parent); var tagName =3D parent.tagName; // Safari has a bug that double-counts the body offset = for absolutely positioned elements // that are direct children of body. // Firefox has its own quirk, which is that = non-absolutely positioned elements that are // direct children of body get the body offset counted = twice. if ((parent.offsetLeft || parent.offsetTop) && ((tagName !=3D=3D "BODY") || (!previousStyle || = previousStyle.position !=3D=3D "absolute"))) { offsetX +=3D parent.offsetLeft; offsetY +=3D parent.offsetTop; } } currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(element); var elementPosition =3D currentStyle ? currentStyle.position = : null; // If an element is absolutely positioned, its parent's = scroll should not be subtracted if (!elementPosition || (elementPosition !=3D=3D = "absolute")) { // In Firefox and Safari, all parent's scroll values = must be taken into account. for (var parent =3D element.parentNode; parent; parent = =3D parent.parentNode) { tagName =3D parent.tagName; if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D = "HTML") && (parent.scrollLeft || parent.scrollTop)) { offsetX -=3D (parent.scrollLeft || 0); offsetY -=3D (parent.scrollTop || 0); } currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(parent); var parentPosition =3D currentStyle ? = currentStyle.position : null; // If an element is absolutely positioned, its = parent's scroll should not be subtracted if (parentPosition && (parentPosition =3D=3D=3D = "absolute")) break; } } return new Sys.UI.Point(offsetX, offsetY); } break; case Sys.Browser.Opera: Sys.UI.DomElement.getLocation =3D function = Sys$UI$DomElement$getLocation(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; // For a document element, return zero. if ((element.window && (element.window =3D=3D=3D element)) = || element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0); // Note (to document): in IE, if the elements are not = explicitly dimensioned to contain // relatively positioned elements they contain, there are = bugs in the measured dimensions of elements // that can't be worked around and which break this = function. var offsetX =3D 0; var offsetY =3D 0; var previous =3D null; for (var parent =3D element; parent; previous =3D parent, = parent =3D parent.offsetParent) { var tagName =3D parent.tagName; offsetX +=3D parent.offsetLeft || 0; offsetY +=3D parent.offsetTop || 0; } // Opera already includes the scrolling into the offsets = except for positioned contents. var elementPosition =3D element.style.position; var elementPositioned =3D elementPosition && = (elementPosition !=3D=3D "static"); // If an element is absolutely positioned, its parent's = scroll should not be subtracted, except on Opera. for (var parent =3D element.parentNode; parent; parent =3D = parent.parentNode) { tagName =3D parent.tagName; if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D "HTML") = && (parent.scrollLeft || parent.scrollTop) && ((elementPositioned && ((parent.style.overflow =3D=3D=3D "scroll") || = (parent.style.overflow =3D=3D=3D "auto"))))) { // Opera has scroll values on elements that are not = scrolled, like table rows so we // need to explicitly check for overflow mode. offsetX -=3D (parent.scrollLeft || 0); offsetY -=3D (parent.scrollTop || 0); } var parentPosition =3D (parent && parent.style) ? = parent.style.position : null; // Opera already includes the scrolling into the offsets = except for positioned contents. elementPositioned =3D elementPositioned || = (parentPosition && (parentPosition !=3D=3D "static")); } return new Sys.UI.Point(offsetX, offsetY); } break; default: Sys.UI.DomElement.getLocation =3D function = Sys$UI$DomElement$getLocation(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; // For a document element, return zero. if ((element.window && (element.window =3D=3D=3D element)) = || element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0); var offsetX =3D 0; var offsetY =3D 0; var previous =3D null; var previousStyle =3D null; var currentStyle =3D null; for (var parent =3D element; parent; previous =3D parent, = previousStyle =3D currentStyle, parent =3D parent.offsetParent) { var tagName =3D parent.tagName; currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(parent); // Firefox has its own quirk, which is that = non-absolutely positioned elements that are // direct children of body get the body offset counted = twice. if ((parent.offsetLeft || parent.offsetTop) && !((tagName =3D=3D=3D "BODY") && (!previousStyle || previousStyle.position !=3D=3D = "absolute"))) { offsetX +=3D parent.offsetLeft; offsetY +=3D parent.offsetTop; } // This code works around a difference in behavior in = Opera and Safari which includes // clientLeft and clientTop in the computedstyle offset. if (previous !=3D=3D null && currentStyle) { // This is to workaround a known bug in IE and = Firefox: // and
have strange behavior with = offsetLeft/offsetTop and clientLeft/clientTop. // Say you have the following html:
// The offsetLeft and offsetTop for the
will be = 25, but the client/borderLeft and // client/borderTop for the will also be 25. = So if you count the client/borderLeft and // client/borderTop for the
, you will be = double-counting the table border. if ((tagName !=3D=3D "TABLE") && (tagName !=3D=3D = "TD") && (tagName !=3D=3D "HTML")) { offsetX +=3D = parseInt(currentStyle.borderLeftWidth) || 0; offsetY +=3D = parseInt(currentStyle.borderTopWidth) || 0; } if (tagName =3D=3D=3D "TABLE" && (currentStyle.position =3D=3D=3D "relative" || = currentStyle.position =3D=3D=3D "absolute")) { offsetX +=3D parseInt(currentStyle.marginLeft) = || 0; offsetY +=3D parseInt(currentStyle.marginTop) || = 0; } } } currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(element); var elementPosition =3D currentStyle ? currentStyle.position = : null; // If an element is absolutely positioned, its parent's = scroll should not be subtracted, except on Opera. if (!elementPosition || (elementPosition !=3D=3D = "absolute")) { // In Firefox and Safari, all parent's scroll values = must be taken into account. // In IE, only the offset parent's because positioned = elements are offset-parented to BODY and // don't need scroll substraction. Non-positioned = elements are offset-parented to their parent, // which may be scrolled. for (var parent =3D element.parentNode; parent; parent = =3D parent.parentNode) { // In IE quirks mode, the element has bogus = values for scrollLeft and scrollTop. // So we do not use the scrollLeft and scrollTop for = the element. This does not // break the standards mode behavior. (VSWhidbey = 426176) tagName =3D parent.tagName; if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D = "HTML") && (parent.scrollLeft || parent.scrollTop)) { offsetX -=3D (parent.scrollLeft || 0); offsetY -=3D (parent.scrollTop || 0); currentStyle =3D = Sys.UI.DomElement._getCurrentStyle(parent); if (currentStyle) { offsetX +=3D = parseInt(currentStyle.borderLeftWidth) || 0; offsetY +=3D = parseInt(currentStyle.borderTopWidth) || 0; } } } } return new Sys.UI.Point(offsetX, offsetY); } break; } Sys.UI.DomElement.removeCssClass =3D function = Sys$UI$DomElement$removeCssClass(element, className) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "className", type: String} ]); if (e) throw e; var currentClassName =3D ' ' + element.className + ' '; var index =3D currentClassName.indexOf(' ' + className + ' '); if (index >=3D 0) { element.className =3D (currentClassName.substr(0, index) + ' ' + currentClassName.substring(index + className.length + 1, = currentClassName.length)).trim(); } } Sys.UI.DomElement.setLocation =3D function = Sys$UI$DomElement$setLocation(element, x, y) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "x", type: Number, integer: true}, {name: "y", type: Number, integer: true} ]); if (e) throw e; var style =3D element.style; style.position =3D 'absolute'; style.left =3D x + "px"; style.top =3D y + "px"; } Sys.UI.DomElement.toggleCssClass =3D function = Sys$UI$DomElement$toggleCssClass(element, className) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "className", type: String} ]); if (e) throw e; if (Sys.UI.DomElement.containsCssClass(element, className)) { Sys.UI.DomElement.removeCssClass(element, className); } else { Sys.UI.DomElement.addCssClass(element, className); } } Sys.UI.DomElement.getVisibilityMode =3D function = Sys$UI$DomElement$getVisibilityMode(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; return (element._visibilityMode =3D=3D=3D = Sys.UI.VisibilityMode.hide) ? Sys.UI.VisibilityMode.hide : Sys.UI.VisibilityMode.collapse; } Sys.UI.DomElement.setVisibilityMode =3D function = Sys$UI$DomElement$setVisibilityMode(element, value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "value", type: Sys.UI.VisibilityMode} ]); if (e) throw e; Sys.UI.DomElement._ensureOldDisplayMode(element); if (element._visibilityMode !=3D=3D value) { element._visibilityMode =3D value; if (Sys.UI.DomElement.getVisible(element) =3D=3D=3D false) { if (element._visibilityMode =3D=3D=3D = Sys.UI.VisibilityMode.hide) { element.style.display =3D element._oldDisplayMode; } else { element.style.display =3D 'none'; } } element._visibilityMode =3D value; } } Sys.UI.DomElement.getVisible =3D function = Sys$UI$DomElement$getVisible(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; var style =3D element.currentStyle || = Sys.UI.DomElement._getCurrentStyle(element); if (!style) return true; return (style.visibility !=3D=3D 'hidden') && (style.display !=3D=3D = 'none'); } Sys.UI.DomElement.setVisible =3D function = Sys$UI$DomElement$setVisible(element, value) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "value", type: Boolean} ]); if (e) throw e; if (value !=3D=3D Sys.UI.DomElement.getVisible(element)) { Sys.UI.DomElement._ensureOldDisplayMode(element); element.style.visibility =3D value ? 'visible' : 'hidden'; if (value || (element._visibilityMode =3D=3D=3D = Sys.UI.VisibilityMode.hide)) { element.style.display =3D element._oldDisplayMode; } else { element.style.display =3D 'none'; } } } Sys.UI.DomElement._ensureOldDisplayMode =3D function = Sys$UI$DomElement$_ensureOldDisplayMode(element) { if (!element._oldDisplayMode) { var style =3D element.currentStyle || = Sys.UI.DomElement._getCurrentStyle(element); element._oldDisplayMode =3D style ? style.display : null; if (!element._oldDisplayMode || element._oldDisplayMode = =3D=3D=3D 'none') { // Default is different depending on the tag name (omitting = deprecated and non-standard tags) switch(element.tagName.toUpperCase()) { case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': = case 'BODY': case 'COL': case 'COLGROUP': case 'DD': case 'DL': case 'DT': case = 'FIELDSET': case 'FORM': case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': = case 'H6': case 'HR': case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': = case 'TABLE': case 'TD': case 'TH': case 'TR': case 'UL': element._oldDisplayMode =3D 'block'; break; case 'LI': element._oldDisplayMode =3D 'list-item'; break; default: element._oldDisplayMode =3D 'inline'; } } } } Sys.UI.DomElement._getWindow =3D function = Sys$UI$DomElement$_getWindow(element) { var doc =3D element.ownerDocument || element.document || element; return doc.defaultView || doc.parentWindow; } Sys.UI.DomElement._getCurrentStyle =3D function = Sys$UI$DomElement$_getCurrentStyle(element) { if (element.nodeType =3D=3D=3D 3) return null; var w =3D Sys.UI.DomElement._getWindow(element); if (element.documentElement) element =3D element.documentElement; var computedStyle =3D (w && (element !=3D=3D w) && = w.getComputedStyle) ? w.getComputedStyle(element, null) : element.currentStyle || element.style; if (!computedStyle && (Sys.Browser.agent =3D=3D=3D = Sys.Browser.Safari) && element.style) { // Safari has an interesting bug (fixed in WebKit) where an = element with display:none will have a null computed style. var oldDisplay =3D element.style.display; var oldPosition =3D element.style.position; element.style.position =3D 'absolute'; element.style.display =3D 'block'; var style =3D w.getComputedStyle(element, null); element.style.display =3D oldDisplay; element.style.position =3D oldPosition; // Need a clone as the display property may be wrong and can't = be fixed on the original object. computedStyle =3D {}; for (var n in style) { computedStyle[n] =3D style[n]; } computedStyle.display =3D 'none'; } return computedStyle; } =20 Sys.IContainer =3D function Sys$IContainer() { throw Error.notImplemented(); } function Sys$IContainer$addComponent(component) { /// /// var e =3D Function._validateParams(arguments, [ {name: "component", type: Sys.Component} ]); if (e) throw e; throw Error.notImplemented(); } function Sys$IContainer$removeComponent(component) { /// /// var e =3D Function._validateParams(arguments, [ {name: "component", type: Sys.Component} ]); if (e) throw e; throw Error.notImplemented(); } function Sys$IContainer$findComponent(id) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String} ]); if (e) throw e; throw Error.notImplemented(); } function Sys$IContainer$getComponents() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.IContainer.prototype =3D { addComponent: Sys$IContainer$addComponent, removeComponent: Sys$IContainer$removeComponent, findComponent: Sys$IContainer$findComponent, getComponents: Sys$IContainer$getComponents } Sys.IContainer.registerInterface("Sys.IContainer"); =20 // This ScriptLoader works by injecting script tags into the DOM = sequentially, waiting for each script // to finish loading before proceeding to the next one. // It supports a timeout which applies to ALL scripts. // A call to Sys.Application.notifyScriptLoaded() must be at the bottom = of each script, as that is=20 // the only reliable way to know when the script has finished loading in = all browsers. // It does however attach to the loaded, readystatechange, and error = events on the script element, and it uses // these event handlers to know when the script has loaded but the call = to notifyScriptLoaded may not have been // executed, which is treated as an error. Sys._ScriptLoader =3D function Sys$_ScriptLoader() { this._scriptsToLoad =3D null; this._scriptLoadedDelegate =3D Function.createDelegate(this, = this._scriptLoadedHandler); } function Sys$_ScriptLoader$dispose() { this._stopLoading(); if(this._events) { delete this._events; } this._scriptLoadedDelegate =3D null; =20 } function Sys$_ScriptLoader$loadScripts(scriptTimeout, = allScriptsLoadedCallback, scriptLoadFailedCallback, = scriptLoadTimeoutCallback) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "scriptTimeout", type: Number, integer: true}, {name: "allScriptsLoadedCallback", type: Function, = mayBeNull: true}, {name: "scriptLoadFailedCallback", type: Function, = mayBeNull: true}, {name: "scriptLoadTimeoutCallback", type: Function, = mayBeNull: true} ]); if (e) throw e; if(this._loading) { throw = Error.invalidOperation(Sys.Res.scriptLoaderAlreadyLoading); } this._loading =3D true; this._allScriptsLoadedCallback =3D allScriptsLoadedCallback; this._scriptLoadFailedCallback =3D scriptLoadFailedCallback; this._scriptLoadTimeoutCallback =3D scriptLoadTimeoutCallback; =20 this._loadScriptsInternal(); } function Sys$_ScriptLoader$notifyScriptLoaded() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); =20 // called at the bottom of scripts that have been loaded. This = is how we know the script is finished // mainly for Safari which doesn't support the load event. if(!this._loading) { // this can happen if someone disposes() the Script Loader = while it is loading scripts // OR if someone includes a reference inline -- which should = be a no-op return; } this._currentTask._notified++; =20 if(Sys.Browser.agent =3D=3D=3D Sys.Browser.Safari) { =20 if(this._currentTask._notified =3D=3D=3D 1) { // the loaded event is never going to happen in Safari. = But once we know that script within the loaded script // is executing, we can know when it is finished by = setting a 0 timeout, it will run after the loaded script // is finished. // On the first (and only the first) notification for = this script, set a timeout that processes the script // as if its loaded event fired. Only the first = notification because if we did it for all we'd get one loaded event // for each call. window.setTimeout(Function.createDelegate(this, = function() { = this._scriptLoadedHandler(this._currentTask.get_scriptElement(), true); }), 0); } } // in other browsers, the loaded handler will be called natively = by the loaded/readystatechange event. // Waiting rather than processing the next script immediately = means we can detect scripts that incorrectly contain // multiple notifyScriptLoaded() callbacks. } function Sys$_ScriptLoader$queueCustomScriptTag(scriptAttributes) { /// /// var e =3D Function._validateParams(arguments, [ {name: "scriptAttributes"} ]); if (e) throw e; if(!this._scriptsToLoad) { this._scriptsToLoad =3D []; } Array.add(this._scriptsToLoad, scriptAttributes); } function Sys$_ScriptLoader$queueScriptBlock(scriptContent) { /// /// var e =3D Function._validateParams(arguments, [ {name: "scriptContent", type: String} ]); if (e) throw e; if(!this._scriptsToLoad) { this._scriptsToLoad =3D []; } Array.add(this._scriptsToLoad, {text: scriptContent}); } function Sys$_ScriptLoader$queueScriptReference(scriptUrl) { /// /// var e =3D Function._validateParams(arguments, [ {name: "scriptUrl", type: String} ]); if (e) throw e; if(!this._scriptsToLoad) { this._scriptsToLoad =3D []; } Array.add(this._scriptsToLoad, {src: scriptUrl}); } function Sys$_ScriptLoader$_createScriptElement(queuedScript) { var scriptElement =3D document.createElement('SCRIPT'); // Initialize default script type to JavaScript - but it might = get overwritten // if a custom script tag has a different type attribute. scriptElement.type =3D 'text/javascript'; // Apply script element attributes for (var attr in queuedScript) { scriptElement[attr] =3D queuedScript[attr]; } =20 return scriptElement; } function Sys$_ScriptLoader$_loadScriptsInternal() { // Load up the next script in the list if (this._scriptsToLoad && this._scriptsToLoad.length > 0) { var nextScript =3D Array.dequeue(this._scriptsToLoad); // Inject a script element into the DOM var scriptElement =3D this._createScriptElement(nextScript); =20 if (scriptElement.text && Sys.Browser.agent =3D=3D=3D = Sys.Browser.Safari) { // Safari requires the inline script to be in the = innerHTML attribute scriptElement.innerHTML =3D scriptElement.text; delete scriptElement.text; } =20 // AtlasWhidbey 36149: If they queue an empty script block = "", we can't tell the difference between // a script block queue entry and a src = entry with just if(!element.text). // dont use scriptElement.src --> FF resolves that to the = current directory, IE leaves it blank. // nextScript.src is always a string if it's a non block = script. if (typeof(nextScript.src) =3D=3D=3D "string") { // We only need to worry about timing out and loading if = the script tag has a 'src'. this._currentTask =3D new = Sys._ScriptLoaderTask(scriptElement, this._scriptLoadedDelegate); // note: task is responsible for disposing of _itself_. = This is necessary so that the ScriptLoader can continue // with script loading after a script notifies it = has loaded. The task sticks around until the dom element finishes // completely, and disposes itself automatically. // note: its possible for notify to occur before this = method even returns in IE! So it should remain the last possible = statement. this._currentTask.execute(); } else { // script is literal script, so just load the script by = adding the new element to the DOM = document.getElementsByTagName('HEAD')[0].appendChild(scriptElement); =20 // DevDiv 74151: Do not assume the script executes = synchronously. Use a setTimeout to delay // proceeding, which ensures the script executes before = we continue. This was first introduced // as a workaround for a Firefox bug, but we do it for = all browsers in order to avoid making // an assumption that may be wrong in the future. = Executing the script synchronously is not // in any spec or recommendation. var scriptLoader =3D this; // used in the setTimeout = closure window.setTimeout(function() { // cleanup (removes the script element in release = mode). Sys._ScriptLoader._clearScript(scriptElement); // Resume script loading progress. scriptLoader._loadScriptsInternal(); }, 0); } } else { // When there are no more scripts to load, call the final = event var callback =3D this._allScriptsLoadedCallback; this._stopLoading(); if(callback) { callback(this); } } } function Sys$_ScriptLoader$_raiseError(multipleCallbacks) { // Abort script loading and raise an error. var callback =3D this._scriptLoadFailedCallback; var scriptElement =3D this._currentTask.get_scriptElement(); this._stopLoading(); =20 if(callback) { callback(this, scriptElement, multipleCallbacks); } else { throw = Sys._ScriptLoader._errorScriptLoadFailed(scriptElement.src, = multipleCallbacks); } } function Sys$_ScriptLoader$_scriptLoadedHandler(scriptElement, = loaded) { // called by the ScriptLoaderTask when the script element has = finished loading, which could be because it loaded or // errored out (for browsers that support the error event). // In Safari this is called indirectly via a setTimeout in the = notifyScriptLoaded method. if(loaded && this._currentTask._notified) { if(this._currentTask._notified > 1) { // the script contained more than one notify callback this._raiseError(true); } else { // script loaded and contained a single notify callback, = move on to next script // DevDiv Bugs 123213: Note that scriptElement.src is = read as un-htmlencoded, even if it was html encoded originally Array.add(Sys._ScriptLoader._getLoadedScripts(), = scriptElement.src); this._currentTask.dispose(); this._currentTask =3D null; this._loadScriptsInternal(); } } else { // script loaded with an error or it did not contain a = notify callback. this._raiseError(false); } } function Sys$_ScriptLoader$_scriptLoadTimeoutHandler() { var callback =3D this._scriptLoadTimeoutCallback; this._stopLoading(); if(callback) { callback(this); } } function Sys$_ScriptLoader$_stopLoading() { if(this._timeoutCookie) { window.clearTimeout(this._timeoutCookie); this._timeoutCookie =3D null; } if(this._currentTask) { this._currentTask.dispose(); this._currentTask =3D null; } this._scriptsToLoad =3D null; this._loading =3D null; =20 this._allScriptsLoadedCallback =3D null; this._scriptLoadFailedCallback =3D null; this._scriptLoadTimeoutCallback =3D null; } Sys._ScriptLoader.prototype =3D { dispose: Sys$_ScriptLoader$dispose, loadScripts: Sys$_ScriptLoader$loadScripts, notifyScriptLoaded: Sys$_ScriptLoader$notifyScriptLoaded, queueCustomScriptTag: Sys$_ScriptLoader$queueCustomScriptTag, queueScriptBlock: Sys$_ScriptLoader$queueScriptBlock, queueScriptReference: Sys$_ScriptLoader$queueScriptReference, _createScriptElement: Sys$_ScriptLoader$_createScriptElement, =20 _loadScriptsInternal: Sys$_ScriptLoader$_loadScriptsInternal, _raiseError: Sys$_ScriptLoader$_raiseError, _scriptLoadedHandler: Sys$_ScriptLoader$_scriptLoadedHandler, _scriptLoadTimeoutHandler: = Sys$_ScriptLoader$_scriptLoadTimeoutHandler, _stopLoading: Sys$_ScriptLoader$_stopLoading =20 } Sys._ScriptLoader.registerClass('Sys._ScriptLoader', null, = Sys.IDisposable); Sys._ScriptLoader.getInstance =3D function = Sys$_ScriptLoader$getInstance() { var sl =3D Sys._ScriptLoader._activeInstance; if(!sl) { sl =3D Sys._ScriptLoader._activeInstance =3D new = Sys._ScriptLoader(); } return sl; } Sys._ScriptLoader.isScriptLoaded =3D function = Sys$_ScriptLoader$isScriptLoaded(scriptSrc) { // For Firefox we need to resolve the script src attribute // since the script elements already in the DOM are always // resolved. To do this we create a dummy element to see // what it would resolve to. var dummyScript =3D document.createElement('script'); dummyScript.src =3D scriptSrc; return Array.contains(Sys._ScriptLoader._getLoadedScripts(), = dummyScript.src); } Sys._ScriptLoader.readLoadedScripts =3D function = Sys$_ScriptLoader$readLoadedScripts() { // enumerates the SCRIPT elements in the DOM and ensures we have = their SRC's in the referencedScripts array. if(!Sys._ScriptLoader._referencedScripts) { var referencedScripts =3D Sys._ScriptLoader._referencedScripts = =3D []; var existingScripts =3D document.getElementsByTagName('SCRIPT'); for (i =3D existingScripts.length - 1; i >=3D 0; i--) { var scriptNode =3D existingScripts[i]; var scriptSrc =3D scriptNode.src; if (scriptSrc.length) { if (!Array.contains(referencedScripts, scriptSrc)) { Array.add(referencedScripts, scriptSrc); } } } } } Sys._ScriptLoader._clearScript =3D function = Sys$_ScriptLoader$_clearScript(scriptElement) { if (!Sys.Debug.isDebug) { // In release mode we clear out the script elements that we add // so that they don't clutter up the DOM. scriptElement.parentNode.removeChild(scriptElement); } } Sys._ScriptLoader._errorScriptLoadFailed =3D function = Sys$_ScriptLoader$_errorScriptLoadFailed(scriptUrl, multipleCallbacks) { var errorMessage; if(multipleCallbacks) { errorMessage =3D Sys.Res.scriptLoadMultipleCallbacks; } else { // a much more detailed message is displayed in debug mode errorMessage =3D Sys.Res.scriptLoadFailedDebug; } var displayMessage =3D "Sys.ScriptLoadFailedException: " + = String.format(errorMessage, scriptUrl); var e =3D Error.create(displayMessage, {name: = 'Sys.ScriptLoadFailedException', 'scriptUrl': scriptUrl }); e.popStackFrame(); return e; } Sys._ScriptLoader._getLoadedScripts =3D function = Sys$_ScriptLoader$_getLoadedScripts() { if(!Sys._ScriptLoader._referencedScripts) { Sys._ScriptLoader._referencedScripts =3D []; Sys._ScriptLoader.readLoadedScripts(); } return Sys._ScriptLoader._referencedScripts; } =20 // ScriptLoaderTask loads a single script by injecting a dynamic script = tag into the DOM. // It calls the completed callback when the script element's = load/readystatechange or error event occus. // The ScriptLoader itself increments the _notified field each time = notifyScriptLoaded is called from // within the script (it should only be once). When the completed = callback is called, ScriptLoader ensures // the script was successfully loaded and contained exactly 1 = notifyScriptLoaded callback. // The task should be disposed of after use, as it contains references = to the script element. Sys._ScriptLoaderTask =3D function Sys$_ScriptLoaderTask(scriptElement, = completedCallback) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "scriptElement", domElement: true}, {name: "completedCallback", type: Function} ]); if (e) throw e; this._scriptElement =3D scriptElement; this._completedCallback =3D completedCallback; this._notified =3D 0; } function Sys$_ScriptLoaderTask$get_scriptElement() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._scriptElement; } function Sys$_ScriptLoaderTask$dispose() { // disposes of the task by removing the load handlers, aborting = the window timeout, and releasing the ref to the dom element if(this._disposed) { // already disposed return; } this._disposed =3D true; this._removeScriptElementHandlers(); // remove script element from DOM Sys._ScriptLoader._clearScript(this._scriptElement); this._scriptElement =3D null; } function Sys$_ScriptLoaderTask$execute() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._addScriptElementHandlers(); = document.getElementsByTagName('HEAD')[0].appendChild(this._scriptElement)= ; } function Sys$_ScriptLoaderTask$_addScriptElementHandlers() { // adds the necessary event handlers to the script node to know = when it is finished loading this._scriptLoadDelegate =3D Function.createDelegate(this, = this._scriptLoadHandler); =20 if (Sys.Browser.agent !=3D=3D Sys.Browser.InternetExplorer) { this._scriptElement.readyState =3D 'loaded'; $addHandler(this._scriptElement, 'load', = this._scriptLoadDelegate); } else { $addHandler(this._scriptElement, 'readystatechange', = this._scriptLoadDelegate); } =20 // FF throws onerror if the script doesn't exist, not loaded. // DevDev Bugs 86101 -- cant use DomElement.addHandler because = it throws for 'error' events. if (this._scriptElement.addEventListener) { this._scriptErrorDelegate =3D Function.createDelegate(this, = this._scriptErrorHandler); this._scriptElement.addEventListener('error', = this._scriptErrorDelegate, false); } } function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() { // removes the load and error handlers from the script element if(this._scriptLoadDelegate) { var scriptElement =3D this.get_scriptElement(); if (Sys.Browser.agent !=3D=3D Sys.Browser.InternetExplorer) = { $removeHandler(scriptElement, 'load', = this._scriptLoadDelegate); } else { $removeHandler(scriptElement, 'readystatechange', = this._scriptLoadDelegate); } if (this._scriptErrorDelegate) { // DevDev Bugs 86101 -- cant use = DomElement.removeHandler because addHandler throws for 'error' events. this._scriptElement.removeEventListener('error', = this._scriptErrorDelegate, false); this._scriptErrorDelegate =3D null; } this._scriptLoadDelegate =3D null; } } function Sys$_ScriptLoaderTask$_scriptErrorHandler() { // handler for when the script element's error event occurs if(this._disposed) { return; } =20 // false =3D=3D did not load successfully (404, etc) this._completedCallback(this.get_scriptElement(), false); } function Sys$_ScriptLoaderTask$_scriptLoadHandler() { // handler for when the script element's load/readystatechange = event occurs if(this._disposed) { return; } var scriptElement =3D this.get_scriptElement(); if ((scriptElement.readyState !=3D=3D 'loaded') && (scriptElement.readyState !=3D=3D 'complete')) { return; } =20 // process the loaded event on a timeout so it is queued behind = the task that executes the referenced script. // Without this, if there is an alert open, the loaded event can = occur BEFORE the script itself executes, leading // us to believe the script did not contain the notify callback = when really it just hasn't executed yet. // The timeout ensures we don't run that logic until after the = script has a chance to execute. var _this =3D this; window.setTimeout(function() { _this._completedCallback(scriptElement, true); }, 0); } Sys._ScriptLoaderTask.prototype =3D { get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement, dispose: Sys$_ScriptLoaderTask$dispose, execute: Sys$_ScriptLoaderTask$execute, _addScriptElementHandlers: = Sys$_ScriptLoaderTask$_addScriptElementHandlers, =20 _removeScriptElementHandlers: = Sys$_ScriptLoaderTask$_removeScriptElementHandlers, =20 _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler, _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler =20 } Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, = Sys.IDisposable); =20 Sys.ApplicationLoadEventArgs =3D function = Sys$ApplicationLoadEventArgs(components, isPartialLoad) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "components", type: Array, elementType: Sys.Component}, {name: "isPartialLoad", type: Boolean} ]); if (e) throw e; Sys.ApplicationLoadEventArgs.initializeBase(this); this._components =3D components; this._isPartialLoad =3D isPartialLoad; } =20 function Sys$ApplicationLoadEventArgs$get_components() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._components; } function Sys$ApplicationLoadEventArgs$get_isPartialLoad() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._isPartialLoad; } Sys.ApplicationLoadEventArgs.prototype =3D { get_components: Sys$ApplicationLoadEventArgs$get_components, get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad } Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs'= , Sys.EventArgs); =20 Sys._Application =3D function Sys$_Application() { Sys._Application.initializeBase(this); this._disposableObjects =3D []; this._components =3D {}; this._createdComponents =3D []; this._secondPassComponents =3D []; this._unloadHandlerDelegate =3D Function.createDelegate(this, = this._unloadHandler); this._loadHandlerDelegate =3D Function.createDelegate(this, = this._loadHandler); Sys.UI.DomEvent.addHandler(window, "unload", = this._unloadHandlerDelegate); Sys.UI.DomEvent.addHandler(window, "load", = this._loadHandlerDelegate); } function Sys$_Application$get_isCreatingComponents() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._creatingComponents; } function Sys$_Application$add_load(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().addHandler("load", handler); } function Sys$_Application$remove_load(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().removeHandler("load", handler); } function Sys$_Application$add_init(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; if (this._initialized) { handler(this, Sys.EventArgs.Empty); } else { this.get_events().addHandler("init", handler); } } function Sys$_Application$remove_init(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().removeHandler("init", handler); } function Sys$_Application$add_unload(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().addHandler("unload", handler); } function Sys$_Application$remove_unload(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this.get_events().removeHandler("unload", handler); } function Sys$_Application$addComponent(component) { /// /// var e =3D Function._validateParams(arguments, [ {name: "component", type: Sys.Component} ]); if (e) throw e; var id =3D component.get_id(); if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId); if (typeof(this._components[id]) !=3D=3D 'undefined') throw = Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, = id)); this._components[id] =3D component; } function Sys$_Application$beginCreateComponents() { this._creatingComponents =3D true; } function Sys$_Application$dispose() { if (!this._disposing) { this._disposing =3D true; if (window.pageUnload) { window.pageUnload(this, Sys.EventArgs.Empty); } var unloadHandler =3D = this.get_events().getHandler("unload"); if (unloadHandler) { unloadHandler(this, Sys.EventArgs.Empty); } var disposableObjects =3D = Array.clone(this._disposableObjects); for (var i =3D 0, l =3D disposableObjects.length; i < l; = i++) { disposableObjects[i].dispose(); } Array.clear(this._disposableObjects); Sys.UI.DomEvent.removeHandler(window, "unload", = this._unloadHandlerDelegate); if(this._loadHandlerDelegate) { Sys.UI.DomEvent.removeHandler(window, "load", = this._loadHandlerDelegate); this._loadHandlerDelegate =3D null; } var sl =3D Sys._ScriptLoader.getInstance(); if(sl) { sl.dispose(); } Sys._Application.callBaseMethod(this, 'dispose'); } } function Sys$_Application$endCreateComponents() { var components =3D this._secondPassComponents; for (var i =3D 0, l =3D components.length; i < l; i++) { var component =3D components[i].component; Sys$Component$_setReferences(component, = components[i].references); component.endUpdate(); } this._secondPassComponents =3D []; this._creatingComponents =3D false; } function Sys$_Application$findComponent(id, parent) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "id", type: String}, {name: "parent", mayBeNull: true, optional: true} ]); if (e) throw e; // Need to reference the application singleton directly beause = the $find alias // points to the instance function without context. The 'this' = pointer won't work here. return (parent ? ((Sys.IContainer.isInstanceOfType(parent)) ? parent.findComponent(id) : parent[id] || null) : Sys.Application._components[id] || null); } function Sys$_Application$getComponents() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); var res =3D []; var components =3D this._components; for (var name in components) { res[res.length] =3D components[name]; } return res; } function Sys$_Application$initialize() { if(!this._initialized && !this._initializing) { this._initializing =3D true; // Raise the init events on a timeout so it is queued. This = delays the component creation until after the body is // is ready for use. Without this, if a component adds a dom = element to body it will be modifying the body before // window.onload, which causes an "operation aborted" error = in IE. We use this trick for all browsers for consistency. window.setTimeout(Function.createDelegate(this, = this._doInitialize), 0); } } function Sys$_Application$notifyScriptLoaded() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); var sl =3D Sys._ScriptLoader.getInstance(); if(sl) { sl.notifyScriptLoaded(); } } function Sys$_Application$registerDisposableObject(object) { /// /// var e =3D Function._validateParams(arguments, [ {name: "object", type: Sys.IDisposable} ]); if (e) throw e; if (!this._disposing) { this._disposableObjects[this._disposableObjects.length] =3D = object; } } function Sys$_Application$raiseLoad() { var h =3D this.get_events().getHandler("load"); var args =3D new = Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), = !this._initializing); if (h) { h(this, args); } if (window.pageLoad) { window.pageLoad(this, args); } this._createdComponents =3D []; } function Sys$_Application$removeComponent(component) { /// /// var e =3D Function._validateParams(arguments, [ {name: "component", type: Sys.Component} ]); if (e) throw e; var id =3D component.get_id(); if (id) delete this._components[id]; } function Sys$_Application$unregisterDisposableObject(object) { /// /// var e =3D Function._validateParams(arguments, [ {name: "object", type: Sys.IDisposable} ]); if (e) throw e; if (!this._disposing) { Array.remove(this._disposableObjects, object); } } function Sys$_Application$_addComponentToSecondPass(component, = references) { this._secondPassComponents[this._secondPassComponents.length] = =3D {component: component, references: references}; } function Sys$_Application$_doInitialize() { Sys._Application.callBaseMethod(this, 'initialize'); var handler =3D this.get_events().getHandler("init"); if (handler) { this.beginCreateComponents(); handler(this, Sys.EventArgs.Empty); this.endCreateComponents(); } this.raiseLoad(); this._initializing =3D false; } function Sys$_Application$_loadHandler() { // Called from window.onload. Note that the app may already be = initialized because SM inlines a call to app.initialize. // Who ever calls it first, wins. if(this._loadHandlerDelegate) { Sys.UI.DomEvent.removeHandler(window, "load", = this._loadHandlerDelegate); this._loadHandlerDelegate =3D null; } this.initialize(); } function Sys$_Application$_unloadHandler(event) { this.dispose(); } Sys._Application.prototype =3D { _creatingComponents: false, _disposing: false, get_isCreatingComponents: Sys$_Application$get_isCreatingComponents, add_load: Sys$_Application$add_load, remove_load: Sys$_Application$remove_load, add_init: Sys$_Application$add_init, remove_init: Sys$_Application$remove_init, add_unload: Sys$_Application$add_unload, remove_unload: Sys$_Application$remove_unload, addComponent: Sys$_Application$addComponent, beginCreateComponents: Sys$_Application$beginCreateComponents, dispose: Sys$_Application$dispose, endCreateComponents: Sys$_Application$endCreateComponents, findComponent: Sys$_Application$findComponent, getComponents: Sys$_Application$getComponents, initialize: Sys$_Application$initialize, notifyScriptLoaded: Sys$_Application$notifyScriptLoaded, registerDisposableObject: Sys$_Application$registerDisposableObject, raiseLoad: Sys$_Application$raiseLoad, removeComponent: Sys$_Application$removeComponent, unregisterDisposableObject: = Sys$_Application$unregisterDisposableObject, _addComponentToSecondPass: = Sys$_Application$_addComponentToSecondPass, _doInitialize: Sys$_Application$_doInitialize, =20 _loadHandler: Sys$_Application$_loadHandler, _unloadHandler: Sys$_Application$_unloadHandler } Sys._Application.registerClass('Sys._Application', Sys.Component, = Sys.IContainer); Sys.Application =3D new Sys._Application(); var $find =3D Sys.Application.findComponent; Type.registerNamespace('Sys.Net'); =20 Sys.Net.WebRequestExecutor =3D function Sys$Net$WebRequestExecutor() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._webRequest =3D null; this._resultObject =3D null; } function Sys$Net$WebRequestExecutor$get_webRequest() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._webRequest; } function Sys$Net$WebRequestExecutor$_set_webRequest(value) { if (this.get_started()) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, = 'set_webRequest')); } this._webRequest =3D value; } function Sys$Net$WebRequestExecutor$get_started() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_responseAvailable() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_timedOut() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_aborted() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_responseData() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_statusCode() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_statusText() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_xml() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$get_object() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._resultObject) { this._resultObject =3D = Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData(= )); } return this._resultObject; } function Sys$Net$WebRequestExecutor$executeRequest() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$abort() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$getResponseHeader(header) { /// /// var e =3D Function._validateParams(arguments, [ {name: "header", type: String} ]); if (e) throw e; throw Error.notImplemented(); } function Sys$Net$WebRequestExecutor$getAllResponseHeaders() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.Net.WebRequestExecutor.prototype =3D { get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest, _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest, // properties get_started: Sys$Net$WebRequestExecutor$get_started, get_responseAvailable: = Sys$Net$WebRequestExecutor$get_responseAvailable, get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut, get_aborted: Sys$Net$WebRequestExecutor$get_aborted, get_responseData: Sys$Net$WebRequestExecutor$get_responseData, get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode, get_statusText: Sys$Net$WebRequestExecutor$get_statusText, get_xml: Sys$Net$WebRequestExecutor$get_xml, get_object: Sys$Net$WebRequestExecutor$get_object, // methods executeRequest: Sys$Net$WebRequestExecutor$executeRequest, abort: Sys$Net$WebRequestExecutor$abort, getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader, getAllResponseHeaders: = Sys$Net$WebRequestExecutor$getAllResponseHeaders } Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor'); =20 Sys.Net.XMLDOM =3D function Sys$Net$XMLDOM(markup) { if (!window.DOMParser) { // DevDiv Bugs 150054: Msxml2.DOMDocument (version independent = ProgID) required for mobile IE var progIDs =3D [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' = ]; for (var i =3D 0, l =3D progIDs.length; i < l; i++) { try { var xmlDOM =3D new ActiveXObject(progIDs[i]); xmlDOM.async =3D false; xmlDOM.loadXML(markup); xmlDOM.setProperty('SelectionLanguage', 'XPath'); return xmlDOM; } catch (ex) { } } } else { // Mozilla browsers have a DOMParser try { var domParser =3D new window.DOMParser(); return domParser.parseFromString(markup, 'text/xml'); } catch (ex) { } } return null; } Sys.Net.XMLHttpExecutor =3D function Sys$Net$XMLHttpExecutor() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); Sys.Net.XMLHttpExecutor.initializeBase(this); var _this =3D this; this._xmlHttpRequest =3D null; this._webRequest =3D null; this._responseAvailable =3D false; this._timedOut =3D false; this._timer =3D null; this._aborted =3D false; this._started =3D false; this._onReadyStateChange =3D function this$_onReadyStateChange() { /* readyState values: 0 =3D uninitialized 1 =3D loading 2 =3D loaded 3 =3D interactive 4 =3D complete */ if (_this._xmlHttpRequest.readyState =3D=3D=3D 4 /*complete*/) { // DevDiv 58581: // When a request is pending when the page is closed = (navigated away, postback, etc) // in FF and Safari, the request is aborted just as if = abort() was called on the=20 // xmlhttprequest object. // However, even aborted requests have a readyState of 4, = which we treat as successful. // This happened for example if a regular postback occurred = during a partial update request. // In FF if you access the 'status' field on an aborted = request, an error is thrown, // so the error console displayed an error when this = happened. // On Safari it isn't an error, but status is undefined. = That caused PRM to get the completed // event, and since the status is not 200, it raises an = error. // IE and Opera ignore pending requests, or their readyState = isn't 4. try { if (typeof(_this._xmlHttpRequest.status) =3D=3D=3D = "undefined") { // its an aborted request in Safari, ignore it return; } } catch(ex) { // its an aborted request in Firefox, ignore it return; } =20 _this._clearTimer(); _this._responseAvailable =3D true; _this._webRequest.completed(Sys.EventArgs.Empty); if (_this._xmlHttpRequest !=3D null) { _this._xmlHttpRequest.onreadystatechange =3D = Function.emptyMethod; _this._xmlHttpRequest =3D null; } } } this._clearTimer =3D function this$_clearTimer() { if (_this._timer !=3D null) { window.clearTimeout(_this._timer); _this._timer =3D null; } } this._onTimeout =3D function this$_onTimeout() { if (!_this._responseAvailable) { _this._clearTimer(); _this._timedOut =3D true; _this._xmlHttpRequest.onreadystatechange =3D = Function.emptyMethod; _this._xmlHttpRequest.abort(); _this._webRequest.completed(Sys.EventArgs.Empty); _this._xmlHttpRequest =3D null; } } } function Sys$Net$XMLHttpExecutor$get_timedOut() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._timedOut; } function Sys$Net$XMLHttpExecutor$get_started() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._started; } function Sys$Net$XMLHttpExecutor$get_responseAvailable() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._responseAvailable; } function Sys$Net$XMLHttpExecutor$get_aborted() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._aborted; } function Sys$Net$XMLHttpExecutor$executeRequest() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._webRequest =3D this.get_webRequest(); if (this._started) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, = 'executeRequest')); } if (this._webRequest =3D=3D=3D null) { throw Error.invalidOperation(Sys.Res.nullWebRequest); } var body =3D this._webRequest.get_body(); var headers =3D this._webRequest.get_headers(); this._xmlHttpRequest =3D new XMLHttpRequest(); this._xmlHttpRequest.onreadystatechange =3D = this._onReadyStateChange; var verb =3D this._webRequest.get_httpVerb(); this._xmlHttpRequest.open(verb, = this._webRequest.getResolvedUrl(), true /*async*/); if (headers) { for (var header in headers) { var val =3D headers[header]; if (typeof(val) !=3D=3D "function") this._xmlHttpRequest.setRequestHeader(header, val); } } if (verb.toLowerCase() =3D=3D=3D "post") { // If it's a POST but no Content-Type was specified, default = to application/x-www-form-urlencoded; charset=3Dutf-8 if ((headers =3D=3D=3D null) || !headers['Content-Type']) { // DevDiv 109456: Include charset=3Dutf-8. Javascript = encoding methods always use utf-8, server may be set to assume other = encoding. this._xmlHttpRequest.setRequestHeader('Content-Type', = 'application/x-www-form-urlencoded; charset=3Dutf-8'); } // DevDiv 15893: If POST with no body, default to ""(FireFox = needs this) if (!body) { body =3D ""; } } var timeout =3D this._webRequest.get_timeout(); if (timeout > 0) { this._timer =3D = window.setTimeout(Function.createDelegate(this, this._onTimeout), = timeout); } this._xmlHttpRequest.send(body); this._started =3D true; } function Sys$Net$XMLHttpExecutor$getResponseHeader(header) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "header", type: String} ]); if (e) throw e; if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'getResponseHeader')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'getResponseHeader')); } var result; try { result =3D this._xmlHttpRequest.getResponseHeader(header); } catch (e) { } if (!result) result =3D ""; return result; } function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'getAllResponseHeaders')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'getAllResponseHeaders')); } return this._xmlHttpRequest.getAllResponseHeaders(); } function Sys$Net$XMLHttpExecutor$get_responseData() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'get_responseData')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'get_responseData')); } return this._xmlHttpRequest.responseText; } function Sys$Net$XMLHttpExecutor$get_statusCode() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'get_statusCode')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'get_statusCode')); } var result =3D 0; try { result =3D this._xmlHttpRequest.status; } catch(ex) { } return result; } function Sys$Net$XMLHttpExecutor$get_statusText() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'get_statusText')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'get_statusText')); } return this._xmlHttpRequest.statusText; } function Sys$Net$XMLHttpExecutor$get_xml() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._responseAvailable) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, = 'get_xml')); } if (!this._xmlHttpRequest) { throw = Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, = 'get_xml')); } var xml =3D this._xmlHttpRequest.responseXML; if (!xml || !xml.documentElement) { // This happens if the server doesn't set the content type = to text/xml. xml =3D Sys.Net.XMLDOM(this._xmlHttpRequest.responseText); // If we still couldn't get an XML DOM, the data is probably = not XML if (!xml || !xml.documentElement) return null; } // REVIEW: todo this used to use Sys.Runtime get_hostType else if (navigator.userAgent.indexOf('MSIE') !=3D=3D -1) { xml.setProperty('SelectionLanguage', 'XPath'); } // For Firefox parser errors have document elements of parser = error if (xml.documentElement.namespaceURI =3D=3D=3D = "http://www.mozilla.org/newlayout/xml/parsererror.xml" && xml.documentElement.tagName =3D=3D=3D "parsererror") { return null; } =20 // For Safari, parser errors are always the first child of the = root if (xml.documentElement.firstChild && = xml.documentElement.firstChild.tagName =3D=3D=3D "parsererror") { return null; } =20 return xml; } function Sys$Net$XMLHttpExecutor$abort() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._started) { throw = Error.invalidOperation(Sys.Res.cannotAbortBeforeStart); } // aborts are no ops if we are done, timedout, or aborted = already if (this._aborted || this._responseAvailable || this._timedOut) return; this._aborted =3D true; this._clearTimer(); if (this._xmlHttpRequest && !this._responseAvailable) { // Remove the onreadystatechange first otherwise abort would = trigger readyState to become 4 this._xmlHttpRequest.onreadystatechange =3D = Function.emptyMethod; this._xmlHttpRequest.abort(); =20 this._xmlHttpRequest =3D null; =20 // DevDiv 59229: Call completed on the request instead of = raising the event directly this._webRequest.completed(Sys.EventArgs.Empty); } } Sys.Net.XMLHttpExecutor.prototype =3D { get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut, get_started: Sys$Net$XMLHttpExecutor$get_started, get_responseAvailable: = Sys$Net$XMLHttpExecutor$get_responseAvailable, get_aborted: Sys$Net$XMLHttpExecutor$get_aborted, executeRequest: Sys$Net$XMLHttpExecutor$executeRequest, getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader, getAllResponseHeaders: = Sys$Net$XMLHttpExecutor$getAllResponseHeaders, get_responseData: Sys$Net$XMLHttpExecutor$get_responseData, get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode, get_statusText: Sys$Net$XMLHttpExecutor$get_statusText, get_xml: Sys$Net$XMLHttpExecutor$get_xml, abort: Sys$Net$XMLHttpExecutor$abort } Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', = Sys.Net.WebRequestExecutor); =20 Sys.Net._WebRequestManager =3D function Sys$Net$_WebRequestManager() { this._this =3D this; this._defaultTimeout =3D 0; this._defaultExecutorType =3D "Sys.Net.XMLHttpExecutor"; } function Sys$Net$_WebRequestManager$add_invokingRequest(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("invokingRequest", = handler); } function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) = { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("invokingRequest", = handler); } function Sys$Net$_WebRequestManager$add_completedRequest(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("completedRequest", = handler); } function Sys$Net$_WebRequestManager$remove_completedRequest(handler) = { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("completedRequest", = handler); } function Sys$Net$_WebRequestManager$_get_eventHandlerList() { if (!this._events) { this._events =3D new Sys.EventHandlerList(); } return this._events; } function Sys$Net$_WebRequestManager$get_defaultTimeout() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultTimeout; } function Sys$Net$_WebRequestManager$set_defaultTimeout(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Number}]); if (e) throw e; if (value < 0) { throw Error.argumentOutOfRange("value", value, = Sys.Res.invalidTimeout); } this._defaultTimeout =3D value; } function Sys$Net$_WebRequestManager$get_defaultExecutorType() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultExecutorType; } function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; this._defaultExecutorType =3D value; } function Sys$Net$_WebRequestManager$executeRequest(webRequest) { /// /// var e =3D Function._validateParams(arguments, [ {name: "webRequest", type: Sys.Net.WebRequest} ]); if (e) throw e; var executor =3D webRequest.get_executor(); // if the request didn't set an executor, use the request = manager default executor if (!executor) { // TODO: Optimize this by caching the type var failed =3D false; try { var executorType =3D eval(this._defaultExecutorType); executor =3D new executorType(); } catch (e) { failed =3D true; } if (failed || = !Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) { throw Error.argument("defaultExecutorType", = String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType)); } webRequest.set_executor(executor); } // skip the request if it has been aborted; if (executor.get_aborted()) { return; } var evArgs =3D new Sys.Net.NetworkRequestEventArgs(webRequest); var handler =3D = this._get_eventHandlerList().getHandler("invokingRequest"); if (handler) { handler(this, evArgs); } if (!evArgs.get_cancel()) { executor.executeRequest(); } } Sys.Net._WebRequestManager.prototype =3D { add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest, remove_invokingRequest: = Sys$Net$_WebRequestManager$remove_invokingRequest, add_completedRequest: = Sys$Net$_WebRequestManager$add_completedRequest, remove_completedRequest: = Sys$Net$_WebRequestManager$remove_completedRequest, _get_eventHandlerList: = Sys$Net$_WebRequestManager$_get_eventHandlerList, get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout, set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout, get_defaultExecutorType: = Sys$Net$_WebRequestManager$get_defaultExecutorType, set_defaultExecutorType: = Sys$Net$_WebRequestManager$set_defaultExecutorType, executeRequest: Sys$Net$_WebRequestManager$executeRequest } Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager'); // Create a single instance of the class Sys.Net.WebRequestManager =3D new Sys.Net._WebRequestManager(); =20 Sys.Net.NetworkRequestEventArgs =3D function = Sys$Net$NetworkRequestEventArgs(webRequest) { /// /// var e =3D Function._validateParams(arguments, [ {name: "webRequest", type: Sys.Net.WebRequest} ]); if (e) throw e; Sys.Net.NetworkRequestEventArgs.initializeBase(this); this._webRequest =3D webRequest; } function Sys$Net$NetworkRequestEventArgs$get_webRequest() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._webRequest; } Sys.Net.NetworkRequestEventArgs.prototype =3D { get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest } Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEven= tArgs', Sys.CancelEventArgs); =20 Sys.Net.WebRequest =3D function Sys$Net$WebRequest() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); this._url =3D ""; this._headers =3D { }; this._body =3D null; this._userContext =3D null; this._httpVerb =3D null; this._executor =3D null; this._invokeCalled =3D false; this._timeout =3D 0; } // Properties about the request data function Sys$Net$WebRequest$add_completed(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("completed", handler); } function Sys$Net$WebRequest$remove_completed(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("completed", = handler); } function Sys$Net$WebRequest$completed(eventArgs) { /// /// var e =3D Function._validateParams(arguments, [ {name: "eventArgs", type: Sys.EventArgs} ]); if (e) throw e; var handler =3D = Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRe= quest"); if (handler) { handler(this._executor, eventArgs); } handler =3D = this._get_eventHandlerList().getHandler("completed"); if (handler) { handler(this._executor, eventArgs); } } function Sys$Net$WebRequest$_get_eventHandlerList() { if (!this._events) { this._events =3D new Sys.EventHandlerList(); } return this._events; } function Sys$Net$WebRequest$get_url() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._url; } function Sys$Net$WebRequest$set_url(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; this._url =3D value; } function Sys$Net$WebRequest$get_headers() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._headers; } function Sys$Net$WebRequest$get_httpVerb() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // Default is GET if no body, and POST otherwise if (this._httpVerb =3D=3D=3D null) { if (this._body =3D=3D=3D null) { return "GET"; } return "POST"; } return this._httpVerb; } function Sys$Net$WebRequest$set_httpVerb(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; if (value.length =3D=3D=3D 0) { throw Error.argument('value', Sys.Res.invalidHttpVerb); } this._httpVerb =3D value; } function Sys$Net$WebRequest$get_body() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._body; } function Sys$Net$WebRequest$set_body(value) { var e =3D Function._validateParams(arguments, [{name: "value", = mayBeNull: true}]); if (e) throw e; this._body =3D value; } function Sys$Net$WebRequest$get_userContext() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._userContext; } function Sys$Net$WebRequest$set_userContext(value) { var e =3D Function._validateParams(arguments, [{name: "value", = mayBeNull: true}]); if (e) throw e; this._userContext =3D value; } function Sys$Net$WebRequest$get_executor() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._executor; } function Sys$Net$WebRequest$set_executor(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Sys.Net.WebRequestExecutor}]); if (e) throw e; if (this._executor !=3D=3D null && this._executor.get_started()) = { throw = Error.invalidOperation(Sys.Res.setExecutorAfterActive); } this._executor =3D value; this._executor._set_webRequest(this); } function Sys$Net$WebRequest$get_timeout() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this._timeout =3D=3D=3D 0) { return Sys.Net.WebRequestManager.get_defaultTimeout(); } return this._timeout; } function Sys$Net$WebRequest$set_timeout(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Number}]); if (e) throw e; if (value < 0) { throw Error.argumentOutOfRange("value", value, = Sys.Res.invalidTimeout); } this._timeout =3D value; } function Sys$Net$WebRequest$getResolvedUrl() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return Sys.Net.WebRequest._resolveUrl(this._url); } function Sys$Net$WebRequest$invoke() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this._invokeCalled) { throw Error.invalidOperation(Sys.Res.invokeCalledTwice); } Sys.Net.WebRequestManager.executeRequest(this); this._invokeCalled =3D true; } Sys.Net.WebRequest.prototype =3D { add_completed: Sys$Net$WebRequest$add_completed, remove_completed: Sys$Net$WebRequest$remove_completed, completed: Sys$Net$WebRequest$completed, _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList, get_url: Sys$Net$WebRequest$get_url, set_url: Sys$Net$WebRequest$set_url, get_headers: Sys$Net$WebRequest$get_headers, get_httpVerb: Sys$Net$WebRequest$get_httpVerb, set_httpVerb: Sys$Net$WebRequest$set_httpVerb, get_body: Sys$Net$WebRequest$get_body, set_body: Sys$Net$WebRequest$set_body, get_userContext: Sys$Net$WebRequest$get_userContext, set_userContext: Sys$Net$WebRequest$set_userContext, get_executor: Sys$Net$WebRequest$get_executor, set_executor: Sys$Net$WebRequest$set_executor, get_timeout: Sys$Net$WebRequest$get_timeout, set_timeout: Sys$Net$WebRequest$set_timeout, getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl, invoke: Sys$Net$WebRequest$invoke } // Given a url and an optional base url, return an absolute url = combining the url and base url Sys.Net.WebRequest._resolveUrl =3D function = Sys$Net$WebRequest$_resolveUrl(url, baseUrl) { // If the url contains a host, we are done if (url && url.indexOf('://') !=3D=3D -1) { return url; } // If a base url isn't passed in, we use either the base element if = specified or the URL from the browser if (!baseUrl || baseUrl.length =3D=3D=3D 0) { var baseElement =3D document.getElementsByTagName('base')[0]; if (baseElement && baseElement.href && baseElement.href.length > = 0) { baseUrl =3D baseElement.href; } else { baseUrl =3D document.URL; } } // strip off any querystrings var qsStart =3D baseUrl.indexOf('?'); if (qsStart !=3D=3D -1) { baseUrl =3D baseUrl.substr(0, qsStart); } baseUrl =3D baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1); // If a url wasn't specified, we just use the base if (!url || url.length =3D=3D=3D 0) { return baseUrl; } // For absolute path url, we need to rebase it against the base url, = stripping off everything after the http://host if (url.charAt(0) =3D=3D=3D '/') { var slashslash =3D baseUrl.indexOf('://'); if (slashslash =3D=3D=3D -1) { throw Error.argument("baseUrl", Sys.Res.badBaseUrl1); } var nextSlash =3D baseUrl.indexOf('/', slashslash + 3); if (nextSlash =3D=3D=3D -1) { throw Error.argument("baseUrl", Sys.Res.badBaseUrl2); } return baseUrl.substr(0, nextSlash) + url; } // Otherwise for relative urls we just combine with the base url = stripping off the last path component (filename typically) // Note the app path always contains a trailing slash so when = resolving app paths, we never strip off anything important else { var lastSlash =3D baseUrl.lastIndexOf('/'); if (lastSlash =3D=3D=3D -1) { throw Error.argument("baseUrl", Sys.Res.badBaseUrl3); } return baseUrl.substr(0, lastSlash+1) + url; } } Sys.Net.WebRequest._createQueryString =3D function = Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod) { // By default, use URI encoding if (!encodeMethod) encodeMethod =3D encodeURIComponent; var sb =3D new Sys.StringBuilder(); var i =3D 0; for (var arg in queryString) { var obj =3D queryString[arg]; if (typeof(obj) =3D=3D=3D "function") continue; var val =3D = Sys.Serialization.JavaScriptSerializer.serialize(obj); if (i !=3D=3D 0) { sb.append('&'); } sb.append(arg); sb.append('=3D'); sb.append(encodeMethod(val)); i++; } return sb.toString(); } Sys.Net.WebRequest._createUrl =3D function = Sys$Net$WebRequest$_createUrl(url, queryString) { if (!queryString) { return url; } var qs =3D Sys.Net.WebRequest._createQueryString(queryString); if (qs.length > 0) { var sep =3D '?'; if (url && url.indexOf('?') !=3D=3D -1) sep =3D '&'; return url + sep + qs; } else { return url; } } Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest'); =20 Sys.Net.WebServiceProxy =3D function Sys$Net$WebServiceProxy() { } function Sys$Net$WebServiceProxy$get_timeout() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._timeout; } function Sys$Net$WebServiceProxy$set_timeout(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Number}]); if (e) throw e; if (value < 0) { throw Error.argumentOutOfRange('value', value, = Sys.Res.invalidTimeout); } this._timeout =3D value; } function Sys$Net$WebServiceProxy$get_defaultUserContext() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._userContext; } function Sys$Net$WebServiceProxy$set_defaultUserContext(value) { var e =3D Function._validateParams(arguments, [{name: "value", = mayBeNull: true}]); if (e) throw e; this._userContext =3D value; } function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._succeeded; } function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) = { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._succeeded =3D value; } function Sys$Net$WebServiceProxy$get_defaultFailedCallback() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._failed; } function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._failed =3D value; } function Sys$Net$WebServiceProxy$get_path() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._path; } function Sys$Net$WebServiceProxy$set_path(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; this._path =3D value; } function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, = useGet, params, onSuccess, onFailure, userContext) { /// /// /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "servicePath", type: String}, {name: "methodName", type: String}, {name: "useGet", type: Boolean}, {name: "params"}, {name: "onSuccess", type: Function, mayBeNull: true, = optional: true}, {name: "onFailure", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; // Resolve against the defaults callbacks/context if (onSuccess =3D=3D=3D null || typeof onSuccess =3D=3D=3D = 'undefined') onSuccess =3D this.get_defaultSucceededCallback(); if (onFailure =3D=3D=3D null || typeof onFailure =3D=3D=3D = 'undefined') onFailure =3D this.get_defaultFailedCallback(); if (userContext =3D=3D=3D null || typeof userContext =3D=3D=3D = 'undefined') userContext =3D this.get_defaultUserContext(); =20 return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, = useGet, params, onSuccess, onFailure, userContext, this.get_timeout()); } Sys.Net.WebServiceProxy.prototype =3D { get_timeout: Sys$Net$WebServiceProxy$get_timeout, set_timeout: Sys$Net$WebServiceProxy$set_timeout, get_defaultUserContext: = Sys$Net$WebServiceProxy$get_defaultUserContext, set_defaultUserContext: = Sys$Net$WebServiceProxy$set_defaultUserContext, get_defaultSucceededCallback: = Sys$Net$WebServiceProxy$get_defaultSucceededCallback, set_defaultSucceededCallback: = Sys$Net$WebServiceProxy$set_defaultSucceededCallback, get_defaultFailedCallback: = Sys$Net$WebServiceProxy$get_defaultFailedCallback, set_defaultFailedCallback: = Sys$Net$WebServiceProxy$set_defaultFailedCallback, get_path: Sys$Net$WebServiceProxy$get_path, set_path: Sys$Net$WebServiceProxy$set_path, _invoke: Sys$Net$WebServiceProxy$_invoke } Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy'); Sys.Net.WebServiceProxy.invoke =3D function = Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, = onSuccess, onFailure, userContext, timeout) { /// /// /// /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "servicePath", type: String}, {name: "methodName", type: String}, {name: "useGet", type: Boolean, optional: true}, {name: "params", mayBeNull: true, optional: true}, {name: "onSuccess", type: Function, mayBeNull: true, optional: = true}, {name: "onFailure", type: Function, mayBeNull: true, optional: = true}, {name: "userContext", mayBeNull: true, optional: true}, {name: "timeout", type: Number, optional: true} ]); if (e) throw e; // Create a web request to make the method call var request =3D new Sys.Net.WebRequest(); request.get_headers()['Content-Type'] =3D 'application/json; = charset=3Dutf-8'; if (!params) params =3D {}; var urlParams =3D params; // If using POST, or we don't have any paramaters, start with a = blank dictionary if (!useGet || !urlParams) urlParams =3D {}; = request.set_url(Sys.Net.WebRequest._createUrl(servicePath+"/"+encodeURICo= mponent(methodName), urlParams)); var body =3D null; // No body when using GET if (!useGet) { body =3D = Sys.Serialization.JavaScriptSerializer.serialize(params); // If there are no parameters, send an empty body (though it = will still be a POST) if (body =3D=3D=3D "{}") body =3D ""; } // Put together the body as a JSON string request.set_body(body); request.add_completed(onComplete); if (timeout && timeout > 0) request.set_timeout(timeout); request.invoke(); function onComplete(response, eventArgs) { if (response.get_responseAvailable()) { var statusCode =3D response.get_statusCode(); var result =3D null; =20 try { var contentType =3D = response.getResponseHeader("Content-Type"); if (contentType.startsWith("application/json")) { result =3D response.get_object(); } else if (contentType.startsWith("text/xml")) { result =3D response.get_xml(); } // Default to the response text else { result =3D response.get_responseData(); } } catch (ex) { } var error =3D response.getResponseHeader("jsonerror"); var errorObj =3D (error =3D=3D=3D "true"); if (errorObj) { if (result) { result =3D new Sys.Net.WebServiceError(false, = result.Message, result.StackTrace, result.ExceptionType); } } else if (contentType.startsWith("application/json")) { //DevDiv 88409: Change JSON wire format to prevent CSRF = attack //The return value is wrapped inside an object with , = 'd' field set to return value=20 if (!result || typeof(result.d) =3D=3D=3D "undefined") { throw = Sys.Net.WebServiceProxy._createFailedError(methodName, = String.format(Sys.Res.webServiceInvalidJsonWrapper, methodName)); } result =3D result.d; } if (((statusCode < 200) || (statusCode >=3D 300)) || = errorObj) { if (onFailure) { if (!result || !errorObj) { result =3D new Sys.Net.WebServiceError(false = /*timedout*/, String.format(Sys.Res.webServiceFailedNoMsg, methodName), = "", ""); } result._statusCode =3D statusCode; onFailure(result, userContext, methodName); } else { // In debug mode, if no error was registered, = display some trace information var error; if (result && errorObj) { // If we got a result, we're likely dealing with = an error in the method itself error =3D result.get_exceptionType() + "-- " + = result.get_message(); } else { // Otherwise, it's probably a 'top-level' error, = in which case we dump the // whole response in the trace error =3D response.get_responseData(); } // DevDiv 89485: throw, not alert() throw = Sys.Net.WebServiceProxy._createFailedError(methodName, = String.format(Sys.Res.webServiceFailed, methodName, error)); } } else if (onSuccess) { onSuccess(result, userContext, methodName); } } else { var msg; if (response.get_timedOut()) { msg =3D String.format(Sys.Res.webServiceTimedOut, = methodName); } else { msg =3D String.format(Sys.Res.webServiceFailedNoMsg, = methodName) } if (onFailure) { onFailure(new = Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), = userContext, methodName); } else { // In debug mode, if no error was registered, display = some trace information // DevDiv 89485: throw, don't alert() throw = Sys.Net.WebServiceProxy._createFailedError(methodName, msg); } } } return request; } Sys.Net.WebServiceProxy._createFailedError =3D function = Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) { var displayMessage =3D "Sys.Net.WebServiceFailedException: " + = errorMessage; var e =3D Error.create(displayMessage, { 'name': = 'Sys.Net.WebServiceFailedException', 'methodName': methodName }); e.popStackFrame(); return e; } Sys.Net.WebServiceProxy._defaultFailedCallback =3D function = Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) { var error =3D err.get_exceptionType() + "-- " + err.get_message(); throw Sys.Net.WebServiceProxy._createFailedError(methodName, = String.format(Sys.Res.webServiceFailed, methodName, error)); } // Generate a constructor that knows how to build objects of a = particular server type, // and then initialize it from the fields of an arbitrary object. Sys.Net.WebServiceProxy._generateTypedConstructor =3D function = Sys$Net$WebServiceProxy$_generateTypedConstructor(type) { return function(properties) { // If an object was passed in, copy all its fields if (properties) { for (var name in properties) { this[name] =3D properties[name]; } } this.__type =3D type; } } =20 // Class returned to client if server throws an exception during = ProcessRequest Sys.Net.WebServiceError =3D function Sys$Net$WebServiceError(timedOut, = message, stackTrace, exceptionType) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "timedOut", type: Boolean}, {name: "message", type: String, mayBeNull: true}, {name: "stackTrace", type: String, mayBeNull: true}, {name: "exceptionType", type: String, mayBeNull: true} ]); if (e) throw e; this._timedOut =3D timedOut; this._message =3D message; this._stackTrace =3D stackTrace; this._exceptionType =3D exceptionType; this._statusCode =3D -1; } function Sys$Net$WebServiceError$get_timedOut() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._timedOut; } function Sys$Net$WebServiceError$get_statusCode() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._statusCode; } function Sys$Net$WebServiceError$get_message() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._message; } function Sys$Net$WebServiceError$get_stackTrace() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._stackTrace; } function Sys$Net$WebServiceError$get_exceptionType() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._exceptionType; } Sys.Net.WebServiceError.prototype =3D { get_timedOut: Sys$Net$WebServiceError$get_timedOut, get_statusCode: Sys$Net$WebServiceError$get_statusCode, get_message: Sys$Net$WebServiceError$get_message, get_stackTrace: Sys$Net$WebServiceError$get_stackTrace, get_exceptionType: Sys$Net$WebServiceError$get_exceptionType } Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError'); Type.registerNamespace('Sys.Services'); Sys.Services._ProfileService =3D function Sys$Services$_ProfileService() = { Sys.Services._ProfileService.initializeBase(this); this.properties =3D {}; } Sys.Services._ProfileService.DefaultWebServicePath =3D ''; function = Sys$Services$_ProfileService$get_defaultLoadCompletedCallback() { /// <= /value> if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultLoadCompletedCallback; } function = Sys$Services$_ProfileService$set_defaultLoadCompletedCallback(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._defaultLoadCompletedCallback =3D value; } function = Sys$Services$_ProfileService$get_defaultSaveCompletedCallback() { /// <= /value> if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultSaveCompletedCallback; } function = Sys$Services$_ProfileService$set_defaultSaveCompletedCallback(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._defaultSaveCompletedCallback =3D value; } function Sys$Services$_ProfileService$get_path() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // override from base to ensure returned value is '' even if = usercode sets to null. // also refactored from v1 to ensure empty string on getter = instead of setter. return this._path || ''; } function Sys$Services$_ProfileService$load(propertyNames, = loadCompletedCallback, failedCallback, userContext) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "propertyNames", type: Array, mayBeNull: true, = optional: true, elementType: String}, {name: "loadCompletedCallback", type: Function, mayBeNull: = true, optional: true}, {name: "failedCallback", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; var parameters; var methodName; if (!propertyNames) { methodName =3D "GetAllPropertiesForCurrentUser"; parameters =3D { authenticatedUserOnly: false }; } else { methodName =3D "GetPropertiesForCurrentUser"; parameters =3D { properties: = this._clonePropertyNames(propertyNames), authenticatedUserOnly: false }; } this._invoke(this._get_path(), methodName, false, parameters, Function.createDelegate(this, = this._onLoadComplete), Function.createDelegate(this, = this._onLoadFailed), [loadCompletedCallback, = failedCallback, userContext]); } function Sys$Services$_ProfileService$save(propertyNames, = saveCompletedCallback, failedCallback, userContext) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "propertyNames", type: Array, mayBeNull: true, = optional: true, elementType: String}, {name: "saveCompletedCallback", type: Function, mayBeNull: = true, optional: true}, {name: "failedCallback", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; var flattenedProperties =3D = this._flattenProperties(propertyNames, this.properties); this._invoke(this._get_path(), "SetPropertiesForCurrentUser", false, { values: = flattenedProperties.value, authenticatedUserOnly: false }, Function.createDelegate(this, = this._onSaveComplete), Function.createDelegate(this, = this._onSaveFailed), [saveCompletedCallback, = failedCallback, userContext, flattenedProperties.count]); } function Sys$Services$_ProfileService$_clonePropertyNames(arr) { var nodups =3D []; var seen =3D {}; for (var i=3D0; i < arr.length; i++) { var prop =3D arr[i]; if(!seen[prop]) { Array.add(nodups, prop); = seen[prop]=3Dtrue; }; } return nodups; } function = Sys$Services$_ProfileService$_flattenProperties(/*string[]*/propertyNames= , properties, groupName) { var flattenedProperties =3D {}; var val; var key; var count =3D 0; if (propertyNames && propertyNames.length =3D=3D=3D 0) { return { value: flattenedProperties, count: 0 }; } for (var property in properties) { val =3D properties[property]; key =3D groupName ? groupName + "." + property : property; // is it a property group? if(Sys.Services.ProfileGroup.isInstanceOfType(val)) { var obj =3D this._flattenProperties(propertyNames, val, = key); var groupProperties =3D obj.value; count +=3D obj.count; // count all the group's = properties we're about to merge in // merge in group's properties // NOTE: We don't use Array.addRange because = flattenedProperties is not an Array. // It can't be an array because it polutes the = associative array and we need it to be purely properties. // Array.prototype.addRange.apply() doesn't work = either. // NOTE: In the case where a group exists but has no = inner properties of its own, the for loop will short out // and there will be no keys added to the = collection, as expected. for(var subKey in groupProperties) { var subVal =3D groupProperties[subKey]; flattenedProperties[subKey] =3D subVal; } } else { // is this a specified property (or use all properties)? if(!propertyNames || Array.indexOf(propertyNames, key) = !=3D=3D -1) { flattenedProperties[key] =3D val; count++; // keep track of how many properties are in = the flattened dictionary } } } return { value: flattenedProperties, count: count }; } function Sys$Services$_ProfileService$_get_path() { var path =3D this.get_path(); if (!path.length) { path =3D Sys.Services._ProfileService.DefaultWebServicePath; } if (!path || !path.length) { throw Error.invalidOperation(Sys.Res.servicePathNotSet); } return path; } function Sys$Services$_ProfileService$_onLoadComplete(result, = context, methodName) { if (typeof(result) !=3D=3D "object") { throw = Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,= methodName, "Object")); } var unflattened =3D this._unflattenProperties(result); for (var name in unflattened) { this.properties[name] =3D unflattened[name]; } =20 var callback =3D context[0] || = this.get_defaultLoadCompletedCallback() || = this.get_defaultSucceededCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); =20 callback(result.length, userContext, = "Sys.Services.ProfileService.load"); } } function Sys$Services$_ProfileService$_onLoadFailed(err, context, = methodName) { var callback =3D context[1] || this.get_defaultFailedCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); =20 callback(err, userContext, = "Sys.Services.ProfileService.load"); } else { Sys.Net.WebServiceProxy._defaultFailedCallback(err, = methodName); } } function Sys$Services$_ProfileService$_onSaveComplete(result, = context, methodName) { // context[3] is the number of properties we sent to the server. var count =3D context[3]; if (result !=3D=3D null) { // dont use if(result), might be = number 0 if (result instanceof Array) { // result is a list of properties that failed. Subtract = the count to get the # succeeded count -=3D result.length; } else if (typeof(result) =3D=3D=3D 'number') { // legacy server API -- the number of successful = properties is returned directly count =3D result; } else { // no other types allowed throw = Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,= methodName, "Array")); } } // else: if result is null, treat as an empty array (no = failures) =20 var callback =3D context[0] || = this.get_defaultSaveCompletedCallback() || = this.get_defaultSucceededCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); callback(count, userContext, = "Sys.Services.ProfileService.save"); } } function Sys$Services$_ProfileService$_onSaveFailed(err, context, = methodName) { var callback =3D context[1] || this.get_defaultFailedCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); callback(err, userContext, = "Sys.Services.ProfileService.save"); } else { Sys.Net.WebServiceProxy._defaultFailedCallback(err, = methodName); } } function = Sys$Services$_ProfileService$_unflattenProperties(properties) { var unflattenedProperties =3D {}; var dotIndex; var val; var count =3D 0; for (var key in properties) { count++; val =3D properties[key]; dotIndex =3D key.indexOf('.'); if (dotIndex !=3D=3D -1) { var groupName =3D key.substr(0, dotIndex); key =3D key.substr(dotIndex+1); var group =3D unflattenedProperties[groupName]; if (!group || = !Sys.Services.ProfileGroup.isInstanceOfType(group)) { group =3D new Sys.Services.ProfileGroup(); unflattenedProperties[groupName] =3D group; } group[key] =3D val; } else { unflattenedProperties[key] =3D val; } } properties.length =3D count; return unflattenedProperties; } Sys.Services._ProfileService.prototype =3D { _defaultLoadCompletedCallback: null, _defaultSaveCompletedCallback: null, _path: '', _timeout: 0, get_defaultLoadCompletedCallback: = Sys$Services$_ProfileService$get_defaultLoadCompletedCallback, set_defaultLoadCompletedCallback: = Sys$Services$_ProfileService$set_defaultLoadCompletedCallback, get_defaultSaveCompletedCallback: = Sys$Services$_ProfileService$get_defaultSaveCompletedCallback, set_defaultSaveCompletedCallback: = Sys$Services$_ProfileService$set_defaultSaveCompletedCallback, get_path: Sys$Services$_ProfileService$get_path, load: Sys$Services$_ProfileService$load, save: Sys$Services$_ProfileService$save, // DevDiv 31283: calling load with two of the same property names = throws an error, so we strip dups _clonePropertyNames: = Sys$Services$_ProfileService$_clonePropertyNames, =20 // convert properties like properties.ProfileGroup.ProfileSetting to = properties["ProfileGroup.ProfileSetting"]. // propertyNames: list of properties that should be included in the = flattened list (others are excluded) // properties: object containing properties to flatten // groupName: current group name used for recursion _flattenProperties: Sys$Services$_ProfileService$_flattenProperties, _get_path: Sys$Services$_ProfileService$_get_path, =20 _onLoadComplete: Sys$Services$_ProfileService$_onLoadComplete, _onLoadFailed: Sys$Services$_ProfileService$_onLoadFailed, _onSaveComplete: Sys$Services$_ProfileService$_onSaveComplete, _onSaveFailed: Sys$Services$_ProfileService$_onSaveFailed, _unflattenProperties: = Sys$Services$_ProfileService$_unflattenProperties } Sys.Services._ProfileService.registerClass('Sys.Services._ProfileService'= , Sys.Net.WebServiceProxy); Sys.Services.ProfileService =3D new Sys.Services._ProfileService(); Sys.Services.ProfileGroup =3D function = Sys$Services$ProfileGroup(properties) { /// /// var e =3D Function._validateParams(arguments, [ {name: "properties", mayBeNull: true, optional: true} ]); if (e) throw e; if (properties) { for (var property in properties) { this[property] =3D properties[property]; } } } Sys.Services.ProfileGroup.registerClass('Sys.Services.ProfileGroup'); Sys.Services._AuthenticationService =3D function = Sys$Services$_AuthenticationService() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); Sys.Services._AuthenticationService.initializeBase(this); } Sys.Services._AuthenticationService.DefaultWebServicePath =3D ''; function = Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback() = { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultLoginCompletedCallback; } function = Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback(val= ue) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._defaultLoginCompletedCallback =3D value; } function = Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback() = { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultLogoutCompletedCallback; } function = Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback(va= lue) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._defaultLogoutCompletedCallback =3D value; } function Sys$Services$_AuthenticationService$get_isLoggedIn() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._authenticated; } function Sys$Services$_AuthenticationService$get_path() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // override from base to ensure returned value is '' even if = usercode sets to null. // also refactored from v1 to ensure empty string on getter = instead of setter. return this._path || ''; } function Sys$Services$_AuthenticationService$login(username, = password, isPersistent, customInfo, redirectUrl, loginCompletedCallback, = failedCallback, userContext) { /// /// /// /// /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "username", type: String}, {name: "password", type: String, mayBeNull: true}, {name: "isPersistent", type: Boolean, mayBeNull: true, = optional: true}, {name: "customInfo", type: String, mayBeNull: true, = optional: true}, {name: "redirectUrl", type: String, mayBeNull: true, = optional: true}, {name: "loginCompletedCallback", type: Function, mayBeNull: = true, optional: true}, {name: "failedCallback", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; // note: use of internal type here, but theres no other way this._invoke(this._get_path(), "Login", false, { userName: username, password: = password, createPersistentCookie: isPersistent }, Function.createDelegate(this, = this._onLoginComplete), Function.createDelegate(this, = this._onLoginFailed), [username, password, = isPersistent, customInfo, redirectUrl, loginCompletedCallback, = failedCallback, userContext]); } function Sys$Services$_AuthenticationService$logout(redirectUrl, = logoutCompletedCallback, failedCallback, userContext) { /// /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "redirectUrl", type: String, mayBeNull: true, = optional: true}, {name: "logoutCompletedCallback", type: Function, mayBeNull: = true, optional: true}, {name: "failedCallback", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; // note: use of internal type here, but theres no other way this._invoke(this._get_path(), "Logout", false, {},=20 Function.createDelegate(this, = this._onLogoutComplete), Function.createDelegate(this, = this._onLogoutFailed), [redirectUrl, = logoutCompletedCallback, failedCallback, userContext]); } function Sys$Services$_AuthenticationService$_get_path() { var path =3D this.get_path(); if(!path.length) { path =3D = Sys.Services._AuthenticationService.DefaultWebServicePath; } if(!path || !path.length) { throw Error.invalidOperation(Sys.Res.servicePathNotSet); } return path; } function = Sys$Services$_AuthenticationService$_onLoginComplete(result, /*login = param list*/context, methodName) { if(typeof(result) !=3D=3D "boolean") { throw = Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,= methodName, "Boolean")); } =20 var redirectUrl =3D context[4]; var userContext =3D context[7] || this.get_defaultUserContext(); var callback =3D context[5] || = this.get_defaultLoginCompletedCallback() || = this.get_defaultSucceededCallback(); =20 if(result) { this._authenticated =3D true; if (callback) { callback(true, userContext, = "Sys.Services.AuthenticationService.login"); } =20 if (typeof(redirectUrl) !=3D=3D "undefined" && redirectUrl = !=3D=3D null) { // url may be empty which is a valid link window.location.href =3D redirectUrl; } } else if (callback) { callback(false, userContext, = "Sys.Services.AuthenticationService.login"); } } function Sys$Services$_AuthenticationService$_onLoginFailed(err, = context, methodName) { var callback =3D context[6] || this.get_defaultFailedCallback(); if (callback) { var userContext =3D context[7] || = this.get_defaultUserContext(); callback(err, userContext, = "Sys.Services.AuthenticationService.login"); } else { Sys.Net.WebServiceProxy._defaultFailedCallback(err, = methodName); } } function = Sys$Services$_AuthenticationService$_onLogoutComplete(result, context, = methodName) { if(result !=3D=3D null) { throw = Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,= methodName, "null")); } =20 var redirectUrl =3D context[0]; var userContext =3D context[3] || this.get_defaultUserContext(); var callback =3D context[1] || = this.get_defaultLogoutCompletedCallback() || = this.get_defaultSucceededCallback(); this._authenticated =3D false; =20 if (callback) { callback(null, userContext, = "Sys.Services.AuthenticationService.logout"); } =20 // always redirect when logging out if(!redirectUrl) { window.location.reload(); } else { window.location.href =3D redirectUrl; } } function Sys$Services$_AuthenticationService$_onLogoutFailed(err, = context, methodName) { var callback =3D context[2] || this.get_defaultFailedCallback(); if (callback) { callback(err, context[3], = "Sys.Services.AuthenticationService.logout"); } else { Sys.Net.WebServiceProxy._defaultFailedCallback(err, = methodName); } } function = Sys$Services$_AuthenticationService$_setAuthenticated(authenticated) { this._authenticated =3D authenticated; } Sys.Services._AuthenticationService.prototype =3D { _defaultLoginCompletedCallback: null, _defaultLogoutCompletedCallback: null, _path: '', _timeout: 0, _authenticated: false, get_defaultLoginCompletedCallback: = Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback, set_defaultLoginCompletedCallback: = Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback, get_defaultLogoutCompletedCallback: = Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback, set_defaultLogoutCompletedCallback: = Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback, get_isLoggedIn: Sys$Services$_AuthenticationService$get_isLoggedIn, get_path: Sys$Services$_AuthenticationService$get_path, =20 login: Sys$Services$_AuthenticationService$login, logout: Sys$Services$_AuthenticationService$logout, _get_path: Sys$Services$_AuthenticationService$_get_path, _onLoginComplete: = Sys$Services$_AuthenticationService$_onLoginComplete, _onLoginFailed: Sys$Services$_AuthenticationService$_onLoginFailed, _onLogoutComplete: = Sys$Services$_AuthenticationService$_onLogoutComplete, _onLogoutFailed: = Sys$Services$_AuthenticationService$_onLogoutFailed, _setAuthenticated: = Sys$Services$_AuthenticationService$_setAuthenticated =20 } Sys.Services._AuthenticationService.registerClass('Sys.Services._Authenti= cationService', Sys.Net.WebServiceProxy); Sys.Services.AuthenticationService =3D new = Sys.Services._AuthenticationService(); Sys.Services._RoleService =3D function Sys$Services$_RoleService() { Sys.Services._RoleService.initializeBase(this); this._roles =3D []; } Sys.Services._RoleService.DefaultWebServicePath =3D ''; function = Sys$Services$_RoleService$get_defaultLoadCompletedCallback() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._defaultLoadCompletedCallback; } function = Sys$Services$_RoleService$set_defaultLoadCompletedCallback(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Function, mayBeNull: true}]); if (e) throw e; this._defaultLoadCompletedCallback =3D value; } function Sys$Services$_RoleService$get_path() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // override from base to ensure returned value is '' even if = usercode sets to null, consistent with other appservices in v1. return this._path || ''; } function Sys$Services$_RoleService$get_roles() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return Array.clone(this._roles); } function Sys$Services$_RoleService$isUserInRole(role) { /// /// var e =3D Function._validateParams(arguments, [ {name: "role", type: String} ]); if (e) throw e; var v =3D this._get_rolesIndex()[role.trim().toLowerCase()]; return !!v; } function Sys$Services$_RoleService$load(loadCompletedCallback, = failedCallback, userContext) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "loadCompletedCallback", type: Function, mayBeNull: = true, optional: true}, {name: "failedCallback", type: Function, mayBeNull: true, = optional: true}, {name: "userContext", mayBeNull: true, optional: true} ]); if (e) throw e; Sys.Net.WebServiceProxy.invoke( this._get_path(), "GetRolesForCurrentUser", false, {} /* no params*/, Function.createDelegate(this, this._onLoadComplete), Function.createDelegate(this, this._onLoadFailed), [loadCompletedCallback, failedCallback, = userContext], this.get_timeout()); } function Sys$Services$_RoleService$_get_path() { var path =3D this.get_path(); if(!path || !path.length) { path =3D Sys.Services._RoleService.DefaultWebServicePath; } if(!path || !path.length) { throw Error.invalidOperation(Sys.Res.servicePathNotSet); } return path; } function Sys$Services$_RoleService$_get_rolesIndex() { if (!this._rolesIndex) { var index =3D {}; for(var i=3D0; i < this._roles.length; i++) { index[this._roles[i].toLowerCase()] =3D true; } this._rolesIndex =3D index; } return this._rolesIndex; } function Sys$Services$_RoleService$_onLoadComplete(result, context, = methodName) { if(result && !(result instanceof Array)) { throw = Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,= methodName, "Array")); } this._roles =3D result; this._rolesIndex =3D null; var callback =3D context[0] || = this.get_defaultLoadCompletedCallback() || = this.get_defaultSucceededCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); var clonedResult =3D Array.clone(result); callback(clonedResult, userContext, = "Sys.Services.RoleService.load"); } } function Sys$Services$_RoleService$_onLoadFailed(err, context, = methodName) { var callback =3D context[1] || this.get_defaultFailedCallback(); if (callback) { var userContext =3D context[2] || = this.get_defaultUserContext(); callback(err, userContext, "Sys.Services.RoleService.load"); } else { Sys.Net.WebServiceProxy._defaultFailedCallback(err, = methodName); } } Sys.Services._RoleService.prototype =3D { _defaultLoadCompletedCallback: null, _rolesIndex: null, _timeout: 0, _path: '', get_defaultLoadCompletedCallback: = Sys$Services$_RoleService$get_defaultLoadCompletedCallback, set_defaultLoadCompletedCallback: = Sys$Services$_RoleService$set_defaultLoadCompletedCallback, get_path: Sys$Services$_RoleService$get_path, get_roles: Sys$Services$_RoleService$get_roles, isUserInRole: Sys$Services$_RoleService$isUserInRole, load: Sys$Services$_RoleService$load, _get_path: Sys$Services$_RoleService$_get_path, =20 _get_rolesIndex: Sys$Services$_RoleService$_get_rolesIndex, _onLoadComplete: Sys$Services$_RoleService$_onLoadComplete, _onLoadFailed: Sys$Services$_RoleService$_onLoadFailed } Sys.Services._RoleService.registerClass('Sys.Services._RoleService', = Sys.Net.WebServiceProxy); Sys.Services.RoleService =3D new Sys.Services._RoleService(); Type.registerNamespace('Sys.Serialization'); Sys.Serialization.JavaScriptSerializer =3D function = Sys$Serialization$JavaScriptSerializer() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); // DevDiv #62350: Considered making all methods static and removing = this constructor, // but this would have been a breaking change from Atlas 1.0 to = Atlas Orcas so was rejected. } Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.J= avaScriptSerializer'); Sys.Serialization.JavaScriptSerializer._serverTypeFieldName =3D = '__type'; // DevDiv Bugs 139383: // Escape the backslashes so to _stringRegEx so we pass an escape = sequence to the RegExp, // not the literal character. Safari does not support the literal = characters, and it fails on iPhone 1.01. Sys.Serialization.JavaScriptSerializer._stringRegEx =3D new = RegExp('["\\b\\f\\n\\r\\t\\\\\\x00-\\x1F]', 'i'); Sys.Serialization.JavaScriptSerializer._dateRegEx =3D new = RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4}= )?\\)\\\\/\\"', 'g'); Sys.Serialization.JavaScriptSerializer._jsonRegEx =3D new = RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g'); Sys.Serialization.JavaScriptSerializer._jsonStringRegEx =3D new = RegExp('"(\\\\.|[^"\\\\])*"', 'g'); Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder =3D = function = Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(objec= t, stringBuilder) { stringBuilder.append(object.toString()); } Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder =3D = function = Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object= , stringBuilder) { if (isFinite(object)) { stringBuilder.append(String(object)); } else { throw = Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers); } } Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder =3D = function = Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(object= , stringBuilder) { stringBuilder.append('"'); // DevDiv 139383: Removed Safari check here. // Safari 2 supports \x## escapes in regular expressions as long as = they are escaped in the regex pattern if = (Sys.Serialization.JavaScriptSerializer._stringRegEx.test(object)) { var length =3D object.length; for (i =3D 0; i < length; ++i) { var curChar =3D object.charAt(i); // currently '/u001f' or below are escaped if (curChar >=3D ' ') { // Handle backslashes and quotes by escaping if (curChar =3D=3D=3D '\\' || curChar =3D=3D=3D '"') { stringBuilder.append('\\'); } stringBuilder.append(curChar); } else { switch (curChar) { case '\b': stringBuilder.append('\\b'); break; case '\f': stringBuilder.append('\\f'); break; case '\n': stringBuilder.append('\\n'); break; case '\r': stringBuilder.append('\\r'); break; case '\t': stringBuilder.append('\\t'); break; default: // Add the escaped code stringBuilder.append('\\u00'); if (curChar.charCodeAt() < 16) = stringBuilder.append('0'); = stringBuilder.append(curChar.charCodeAt().toString(16)); } } } } else { stringBuilder.append(object); } stringBuilder.append('"'); =20 } Sys.Serialization.JavaScriptSerializer._serializeWithBuilder =3D = function = Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, = stringBuilder, sort, prevObjects) { var i; switch (typeof object) { case 'object': if (object) { if (prevObjects){ // The loop below makes serilzation O(n^2) worst case = for linked list like struture // where in depth of graph is in linear proportion to = number of elements. // However the depth of graph is limited by call stack = size(less than 1000 in IE7) hence=20 // the performance hit is within reasonable bounds for = debug mode for( var j =3D 0; j < prevObjects.length; j++) { if (prevObjects[j] =3D=3D=3D object) { throw = Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle); } } } else { prevObjects =3D new Array(); } try { Array.add(prevObjects, object); =20 if (Number.isInstanceOfType(object)){ = Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object= , stringBuilder); } else if (Boolean.isInstanceOfType(object)){ = Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(objec= t, stringBuilder); } else if (String.isInstanceOfType(object)){ = Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object= , stringBuilder); } =20 // Arrays else if (Array.isInstanceOfType(object)) { stringBuilder.append('['); =20 for (i =3D 0; i < object.length; ++i) { if (i > 0) { stringBuilder.append(','); } = Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], = stringBuilder,false,prevObjects); } stringBuilder.append(']'); } else { // DivDev 41125: Do not confuse atlas serialized = strings with dates // Currently it always serialize as = \/Date({milliseconds from 1970/1/1})\/ // For example \/Date(123)\/ if (Date.isInstanceOfType(object)) { stringBuilder.append('"\\/Date('); stringBuilder.append(object.getTime()); stringBuilder.append(')\\/"'); break; } var properties =3D []; var propertyCount =3D 0; for (var name in object) { // skip internal properties that should not be = serialized. if (name.startsWith('$')) { continue; } //DevDiv 74427 : Need to make sure that _type is = first item on JSON serialization if (name =3D=3D=3D = Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && = propertyCount !=3D=3D 0){ // if current propery Name is __type, swap = it with the first element on property array. properties[propertyCount++] =3D = properties[0]; properties[0] =3D name; } else{ properties[propertyCount++] =3D name; } } if (sort) properties.sort(); stringBuilder.append('{'); var needComma =3D false; =20 for (i=3D0; i /// /// var e =3D Function._validateParams(arguments, [ {name: "object", mayBeNull: true} ]); if (e) throw e; var stringBuilder =3D new Sys.StringBuilder(); Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, = stringBuilder, false); return stringBuilder.toString(); } Sys.Serialization.JavaScriptSerializer.deserialize =3D function = Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "data", type: String}, {name: "secure", type: Boolean, optional: true} ]); if (e) throw e; =20 if (data.length =3D=3D=3D 0) throw Error.argument('data', = Sys.Res.cannotDeserializeEmptyString); // DevDiv 41127: Never confuse atlas serialized strings with dates. // DevDiv 74430: JavasciptSerializer will need to handle date time = offset - following WCF design // serilzed dates might look like "\/Date(123)\/" or "\/Date(123A)" = or "Date(123+4567)" or Date(123-4567)" // the regex escaped version of this pattern is = \"\\/Date\(123(?:[a-zA-Z]|(?:\+|-)[0-9]{4})?\)\\/\" // but we must also do js escaping to put it in the string. Escape = all \ with \\ // Result: = \\"\\\\/Date\\(123(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\" // The 123 can really be any number with an optional -, and we want = to capture it. // Regex for that is: (-?[0-9]+) // Result: = \\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\" // We want to avoid replacing serialized strings that happen to = contain this string as a substring. // We can do that by excluding matches that start with a slash \ = since that means the first quote is escaped. // The first quote of a real date string will never be escaped and = so will never be preceeded with \ // So we want to add regex pattern (^|[^\\]) to the beginning, which = means "beginning of string or anything but slash". // JS Escaped version: (^|[^\\\\]) // Result: = (^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\= \/\\" // Finally, the replace string is $1new Date($2). We must include $1 = so we put back the potentially matched character we captured. try { =20 var exp =3D = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new = Date($2)"); =20 if (secure && = Sys.Serialization.JavaScriptSerializer._jsonRegEx.test( = exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, = ''))) throw null; return eval('(' + exp + ')'); } catch (e) { throw Error.argument('data', = Sys.Res.cannotDeserializeInvalidJson); } } // CultureInfo must go after JavaScriptSerializer since it deserializes = the __cultureInfo object inline. =20 Sys.CultureInfo =3D function Sys$CultureInfo(name, numberFormat, = dateTimeFormat) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "name", type: String}, {name: "numberFormat", type: Object}, {name: "dateTimeFormat", type: Object} ]); if (e) throw e; this.name =3D name; this.numberFormat =3D numberFormat; this.dateTimeFormat =3D dateTimeFormat; } function Sys$CultureInfo$_getDateTimeFormats() { if (! this._dateTimeFormats) { var dtf =3D this.dateTimeFormat; this._dateTimeFormats =3D [ dtf.MonthDayPattern, dtf.YearMonthPattern, dtf.ShortDatePattern, dtf.ShortTimePattern, dtf.LongDatePattern, dtf.LongTimePattern, dtf.FullDateTimePattern, dtf.RFC1123Pattern, dtf.SortableDateTimePattern, dtf.UniversalSortableDateTimePattern ]; } return this._dateTimeFormats; } function Sys$CultureInfo$_getMonthIndex(value) { if (!this._upperMonths) { this._upperMonths =3D = this._toUpperArray(this.dateTimeFormat.MonthNames); } return Array.indexOf(this._upperMonths, this._toUpper(value)); } function Sys$CultureInfo$_getAbbrMonthIndex(value) { if (!this._upperAbbrMonths) { this._upperAbbrMonths =3D = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames); } return Array.indexOf(this._upperAbbrMonths, = this._toUpper(value)); } function Sys$CultureInfo$_getDayIndex(value) { if (!this._upperDays) { this._upperDays =3D = this._toUpperArray(this.dateTimeFormat.DayNames); } return Array.indexOf(this._upperDays, this._toUpper(value)); } function Sys$CultureInfo$_getAbbrDayIndex(value) { if (!this._upperAbbrDays) { this._upperAbbrDays =3D = this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames); } return Array.indexOf(this._upperAbbrDays, this._toUpper(value)); } function Sys$CultureInfo$_toUpperArray(arr) { var result =3D []; for (var i =3D 0, il =3D arr.length; i < il; i++) { result[i] =3D this._toUpper(arr[i]); } return result; } function Sys$CultureInfo$_toUpper(value) { // 'he-IL' has non-breaking space (\u00A0) in weekday names. In = this case replace // didn't work using the space escape code ('\s'), so must match = the exact character. return value.split("\u00A0").join(' ').toUpperCase(); } Sys.CultureInfo.prototype =3D { _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats, _getMonthIndex: Sys$CultureInfo$_getMonthIndex, _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex, _getDayIndex: Sys$CultureInfo$_getDayIndex, _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex, _toUpperArray: Sys$CultureInfo$_toUpperArray, _toUpper: Sys$CultureInfo$_toUpper } Sys.CultureInfo._parse =3D function Sys$CultureInfo$_parse(value) { var cultureInfo =3D = Sys.Serialization.JavaScriptSerializer.deserialize(value); return new Sys.CultureInfo(cultureInfo.name, = cultureInfo.numberFormat, cultureInfo.dateTimeFormat); } Sys.CultureInfo.registerClass('Sys.CultureInfo'); // Make sure the invariant and 'en-US' cultureInfos contained in this = file contain unicode in // place of the non-ascii characters so it matches the encoding of the = MicrosoftAjax.js script. // This is especially required when jsCrunch builds the release script, = because it will not // convert non-ascii characters to unicode correctly for the current = MicrosoftAjax.js encoding. Sys.CultureInfo.InvariantCulture =3D = Sys.CultureInfo._parse('{"name":"","numberFormat":{"CurrencyDecimalDigits= ":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes"= :[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparat= or":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePatt= ern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegat= ivePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","Nu= mberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":= ",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","Posi= tiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","Per= centGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","Na= tiveDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution"= :1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTi= me":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","Algor= ithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnl= y":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"Ful= lDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, = dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM = dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy = HH\':\'mm\':\'ss = \'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","Sort= ableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSepar= ator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd = HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy = MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"= ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunda= y","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"Abbrev= iatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","= Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","= May","June","July","August","September","October","November","December","= "],"IsReadOnly":true,"NativeCalendarName":"Gregorian = Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May",= "Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["Janu= ary","February","March","April","May","June","July","August","September",= "October","November","December",""]}}'); if (typeof(__cultureInfo) =3D=3D=3D 'undefined') { var __cultureInfo =3D = '{"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecim= alSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroup= Sizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","Currency= Symbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegative= Pattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"Negativ= eInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"= NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositiveP= attern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","Percent= DecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",= ","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","= 2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{= "AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@= ","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarT= ype":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparat= or":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dd= dd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, = yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM = dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy = HH\':\'mm\':\'ss = \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm = tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","= TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd= HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, = yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"= ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunda= y","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"Abbrev= iatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","= Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","= May","June","July","August","September","October","November","December","= "],"IsReadOnly":false,"NativeCalendarName":"Gregorian = Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May",= "Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["Janu= ary","February","March","April","May","June","July","August","September",= "October","November","December",""]}}'; } Sys.CultureInfo.CurrentCulture =3D = Sys.CultureInfo._parse(__cultureInfo); delete __cultureInfo; =20 Sys.UI.Behavior =3D function Sys$UI$Behavior(element) { /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; Sys.UI.Behavior.initializeBase(this); this._element =3D element; var behaviors =3D element._behaviors; if (!behaviors) { element._behaviors =3D [this]; } else { behaviors[behaviors.length] =3D this; } } function Sys$UI$Behavior$get_element() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._element; } function Sys$UI$Behavior$get_id() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); var baseId =3D Sys.UI.Behavior.callBaseMethod(this, 'get_id'); if (baseId) return baseId; if (!this._element || !this._element.id) return ''; return this._element.id + '$' + this.get_name(); } function Sys$UI$Behavior$get_name() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this._name) return this._name; var name =3D Object.getTypeName(this); var i =3D name.lastIndexOf('.'); if (i !=3D -1) name =3D name.substr(i + 1); if (!this.get_isInitialized()) this._name =3D name; return name; } function Sys$UI$Behavior$set_name(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; if ((value =3D=3D=3D '') || (value.charAt(0) =3D=3D=3D ' ') || = (value.charAt(value.length - 1) =3D=3D=3D ' ')) throw Error.argument('value', Sys.Res.invalidId); if (typeof(this._element[value]) !=3D=3D 'undefined') throw = Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, = value)); if (this.get_isInitialized()) throw = Error.invalidOperation(Sys.Res.cantSetNameAfterInit); this._name =3D value; } function Sys$UI$Behavior$initialize() { Sys.UI.Behavior.callBaseMethod(this, 'initialize'); var name =3D this.get_name(); if (name) this._element[name] =3D this; } function Sys$UI$Behavior$dispose() { Sys.UI.Behavior.callBaseMethod(this, 'dispose'); if (this._element) { var name =3D this.get_name(); if (name) { this._element[name] =3D null; } Array.remove(this._element._behaviors, this); delete this._element; } } Sys.UI.Behavior.prototype =3D { _name: null, get_element: Sys$UI$Behavior$get_element, get_id: Sys$UI$Behavior$get_id, get_name: Sys$UI$Behavior$get_name, set_name: Sys$UI$Behavior$set_name, initialize: Sys$UI$Behavior$initialize, dispose: Sys$UI$Behavior$dispose } Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component); Sys.UI.Behavior.getBehaviorByName =3D function = Sys$UI$Behavior$getBehaviorByName(element, name) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "name", type: String} ]); if (e) throw e; var b =3D element[name]; return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null; } Sys.UI.Behavior.getBehaviors =3D function = Sys$UI$Behavior$getBehaviors(element) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; if (!element._behaviors) return []; return Array.clone(element._behaviors); } Sys.UI.Behavior.getBehaviorsByType =3D function = Sys$UI$Behavior$getBehaviorsByType(element, type) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true}, {name: "type", type: Type} ]); if (e) throw e; var behaviors =3D element._behaviors; var results =3D []; if (behaviors) { for (var i =3D 0, l =3D behaviors.length; i < l; i++) { if (type.isInstanceOfType(behaviors[i])) { results[results.length] =3D behaviors[i]; } } } return results; } =20 Sys.UI.VisibilityMode =3D function Sys$UI$VisibilityMode() { /// /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.UI.VisibilityMode.prototype =3D { hide: 0, collapse: 1 } Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode"); =20 Sys.UI.Control =3D function Sys$UI$Control(element) { /// /// var e =3D Function._validateParams(arguments, [ {name: "element", domElement: true} ]); if (e) throw e; if (typeof(element.control) !=3D 'undefined') throw = Error.invalidOperation(Sys.Res.controlAlreadyDefined); Sys.UI.Control.initializeBase(this); this._element =3D element; element.control =3D this; } function Sys$UI$Control$get_element() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._element; } function Sys$UI$Control$get_id() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._element) return ''; return this._element.id; } function Sys$UI$Control$set_id(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String}]); if (e) throw e; throw Error.invalidOperation(Sys.Res.cantSetId); } function Sys$UI$Control$get_parent() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (this._parent) return this._parent; if (!this._element) return null; =20 var parentElement =3D this._element.parentNode; while (parentElement) { if (parentElement.control) { return parentElement.control; } parentElement =3D parentElement.parentNode; } return null; } function Sys$UI$Control$set_parent(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Sys.UI.Control}]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); var parents =3D [this]; var current =3D value; while (current) { if (Array.contains(parents, current)) throw = Error.invalidOperation(Sys.Res.circularParentChain); parents[parents.length] =3D current; current =3D current.get_parent(); } this._parent =3D value; } function Sys$UI$Control$get_visibilityMode() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); return Sys.UI.DomElement.getVisibilityMode(this._element); } function Sys$UI$Control$set_visibilityMode(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Sys.UI.VisibilityMode}]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); Sys.UI.DomElement.setVisibilityMode(this._element, value); } function Sys$UI$Control$get_visible() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); return Sys.UI.DomElement.getVisible(this._element); } function Sys$UI$Control$set_visible(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Boolean}]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); Sys.UI.DomElement.setVisible(this._element, value) } function Sys$UI$Control$addCssClass(className) { /// /// var e =3D Function._validateParams(arguments, [ {name: "className", type: String} ]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); Sys.UI.DomElement.addCssClass(this._element, className); } function Sys$UI$Control$dispose() { Sys.UI.Control.callBaseMethod(this, 'dispose'); if (this._element) { this._element.control =3D undefined; delete this._element; } if (this._parent) delete this._parent; } function Sys$UI$Control$onBubbleEvent(source, args) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "source"}, {name: "args", type: Sys.EventArgs} ]); if (e) throw e; return false; } function Sys$UI$Control$raiseBubbleEvent(source, args) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "source"}, {name: "args", type: Sys.EventArgs} ]); if (e) throw e; var currentTarget =3D this.get_parent(); while (currentTarget) { if (currentTarget.onBubbleEvent(source, args)) { return; } currentTarget =3D currentTarget.get_parent(); } } function Sys$UI$Control$removeCssClass(className) { /// /// var e =3D Function._validateParams(arguments, [ {name: "className", type: String} ]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); Sys.UI.DomElement.removeCssClass(this._element, className); } function Sys$UI$Control$toggleCssClass(className) { /// /// var e =3D Function._validateParams(arguments, [ {name: "className", type: String} ]); if (e) throw e; if (!this._element) throw = Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); Sys.UI.DomElement.toggleCssClass(this._element, className); } Sys.UI.Control.prototype =3D { _parent: null, _visibilityMode: Sys.UI.VisibilityMode.hide, get_element: Sys$UI$Control$get_element, get_id: Sys$UI$Control$get_id, set_id: Sys$UI$Control$set_id, get_parent: Sys$UI$Control$get_parent, set_parent: Sys$UI$Control$set_parent, get_visibilityMode: Sys$UI$Control$get_visibilityMode, set_visibilityMode: Sys$UI$Control$set_visibilityMode, get_visible: Sys$UI$Control$get_visible, set_visible: Sys$UI$Control$set_visible, addCssClass: Sys$UI$Control$addCssClass, dispose: Sys$UI$Control$dispose, onBubbleEvent: Sys$UI$Control$onBubbleEvent, raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent, removeCssClass: Sys$UI$Control$removeCssClass, toggleCssClass: Sys$UI$Control$toggleCssClass } Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component); Type.registerNamespace('Sys'); Sys.Res=3D{ "argumentTypeName":"Value is not the name of an existing type.", "methodRegisteredTwice":"Method {0} has already been registered.", "cantSetIdAfterInit":"The id property can\u0027t be set on this object = after initialization.", "cantBeCalledAfterDispose":"Can\u0027t be called after dispose.", "componentCantSetIdAfterAddedToApp":"The id property of a component = can\u0027t be set after it\u0027s been added to the Application = object.", "behaviorDuplicateName":"A behavior with name \u0027{0}\u0027 already = exists or it is the name of an existing property on the target = element.", "notATypeName":"Value is not a valid type name.", "typeShouldBeTypeOrString":"Value is not a valid type or a valid type = name.", "boolTrueOrFalse":"Value must be \u0027true\u0027 or = \u0027false\u0027.", "stringFormatInvalid":"The format string is invalid.", "referenceNotFound":"Component \u0027{0}\u0027 was not found.", "enumReservedName":"\u0027{0}\u0027 is a reserved name that can\u0027t = be used as an enum value name.", "eventHandlerNotFound":"Handler not found.", "circularParentChain":"The chain of control parents can\u0027t have = circular references.", "undefinedEvent":"\u0027{0}\u0027 is not an event.", "notAMethod":"{0} is not a method.", "propertyUndefined":"\u0027{0}\u0027 is not a property or an existing = field.", "eventHandlerInvalid":"Handler was not added through the = Sys.UI.DomEvent.addHandler method.", "scriptLoadFailedDebug":"The script \u0027{0}\u0027 failed to load. = Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable = \u0027Display a notification about every script error\u0027 under = advanced settings.\r\n Missing call to = Sys.Application.notifyScriptLoaded().", "propertyNotWritable":"\u0027{0}\u0027 is not a writable property.", "enumInvalidValueName":"\u0027{0}\u0027 is not a valid name for an enum = value.", "controlAlreadyDefined":"A control is already associated with the = element.", "addHandlerCantBeUsedForError":"Can\u0027t add a handler for the error = event using this method. Please set the window.onerror property = instead.", "namespaceContainsObject":"Object {0} already exists and is not a = namespace.", "cantAddNonFunctionhandler":"Can\u0027t add a handler that is not a = function.", "scriptLoaderAlreadyLoading":"ScriptLoader.loadScripts cannot be called = while the ScriptLoader is already loading scripts.", "invalidNameSpace":"Value is not a valid namespace identifier.", "notAnInterface":"Value is not a valid interface.", "eventHandlerNotFunction":"Handler must be a function.", "propertyNotAnArray":"\u0027{0}\u0027 is not an Array property.", "typeRegisteredTwice":"Type {0} has already been registered. The type = may be defined multiple times or the script file that defines it may = have already been loaded. A possible cause is a change of settings = during a partial update.", "cantSetNameAfterInit":"The name property can\u0027t be set on this = object after initialization.", "appDuplicateComponent":"Two components with the same id \u0027{0}\u0027 = can\u0027t be added to the application.", "appComponentMustBeInitialized":"Components must be initialized before = they are added to the Application object.", "baseNotAClass":"Value is not a class.", "methodNotFound":"No method found with name \u0027{0}\u0027.", "arrayParseBadFormat":"Value must be a valid string representation for = an array. It must start with a \u0027[\u0027 and end with a = \u0027]\u0027.", "cantSetId":"The id property can\u0027t be set on this object.", "stringFormatBraceMismatch":"The format string contains an unmatched = opening or closing brace.", "enumValueNotInteger":"An enumeration definition can only contain = integer values.", "propertyNullOrUndefined":"Cannot set the properties of \u0027{0}\u0027 = because it returned a null value.", "argumentDomNode":"Value must be a DOM element or a text node.", "componentCantSetIdTwice":"The id property of a component can\u0027t be = set more than once.", "createComponentOnDom":"Value must be null for Components that are not = Controls or Behaviors.", "createNotComponent":"{0} does not derive from Sys.Component.", "createNoDom":"Value must not be null for Controls and Behaviors.", "cantAddWithoutId":"Can\u0027t add a component that doesn\u0027t have an = id.", "badTypeName":"Value is not the name of the type being registered or the = name is a reserved word.", "argumentInteger":"Value must be an integer.", "scriptLoadMultipleCallbacks":"The script \u0027{0}\u0027 contains = multiple calls to Sys.Application.notifyScriptLoaded(). Only one is = allowed.", "invokeCalledTwice":"Cannot call invoke more than once.", "webServiceFailed":"The server method \u0027{0}\u0027 failed with the = following error: {1}", "webServiceInvalidJsonWrapper":"The server method \u0027{0}\u0027 = returned invalid data. The \u0027d\u0027 property is missing from the = JSON wrapper.", "argumentType":"Object cannot be converted to the required type.", "argumentNull":"Value cannot be null.", "controlCantSetId":"The id property can\u0027t be set on a control.", "formatBadFormatSpecifier":"Format specifier was invalid.", "webServiceFailedNoMsg":"The server method \u0027{0}\u0027 failed.", "argumentDomElement":"Value must be a DOM element.", "invalidExecutorType":"Could not create a valid = Sys.Net.WebRequestExecutor from: {0}.", "cannotCallBeforeResponse":"Cannot call {0} when responseAvailable is = false.", "actualValue":"Actual value was {0}.", "enumInvalidValue":"\u0027{0}\u0027 is not a valid value for enum {1}.", "scriptLoadFailed":"The script \u0027{0}\u0027 could not be loaded.", "parameterCount":"Parameter count mismatch.", "cannotDeserializeEmptyString":"Cannot deserialize empty string.", "formatInvalidString":"Input string was not in a correct format.", "invalidTimeout":"Value must be greater than or equal to zero.", "cannotAbortBeforeStart":"Cannot abort when executor has not started.", "argument":"Value does not fall within the expected range.", "cannotDeserializeInvalidJson":"Cannot deserialize. The data does not = correspond to valid JSON.", "invalidHttpVerb":"httpVerb cannot be set to an empty or null string.", "nullWebRequest":"Cannot call executeRequest with a null webRequest.", "eventHandlerInvalid":"Handler was not added through the = Sys.UI.DomEvent.addHandler method.", "cannotSerializeNonFiniteNumbers":"Cannot serialize non finite = numbers.", "argumentUndefined":"Value cannot be undefined.", "webServiceInvalidReturnType":"The server method \u0027{0}\u0027 = returned an invalid type. Expected type: {1}", "servicePathNotSet":"The path to the web service has not been set.", "argumentTypeWithTypes":"Object of type \u0027{0}\u0027 cannot be = converted to type \u0027{1}\u0027.", "cannotCallOnceStarted":"Cannot call {0} once started.", "badBaseUrl1":"Base URL does not contain ://.", "badBaseUrl2":"Base URL does not contain another /.", "badBaseUrl3":"Cannot find last / in base URL.", "setExecutorAfterActive":"Cannot set executor after it has become = active.", "paramName":"Parameter name: {0}", "cannotCallOutsideHandler":"Cannot call {0} outside of a completed event = handler.", "cannotSerializeObjectWithCycle":"Cannot serialize object with cyclic = reference within child properties.", "format":"One of the identified items was in an invalid format.", "assertFailedCaller":"Assertion Failed: {0}\r\nat {1}", "argumentOutOfRange":"Specified argument was out of the range of valid = values.", "webServiceTimedOut":"The server method \u0027{0}\u0027 timed out.", "notImplemented":"The method or operation is not implemented.", "assertFailed":"Assertion Failed: {0}", "invalidOperation":"Operation is not valid due to the current state of = the object.", "breakIntoDebugger":"{0}\r\n\r\nBreak into debugger?" }; if(typeof(Sys)!=3D=3D'undefined')Sys.Application.notifyScriptLoaded(); ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www4.lehigh.edu/ScriptResource.axd?d=loW88CNzdSgiGHZ5XzJKDrRVdb9WUrzSDKpOvFGYpTiISy-rwPMLjVlu7vNFYKSzsDm764BKmYKZF2dqNjfkGmwuTyhrPNet4BEk3QTqrKA9YvZIfQ7lGfaGA0xU6LRm0&t=633826662976786683 =EF=BB=BF// Name: MicrosoftAjaxWebForms.debug.js // Assembly: System.Web.Extensions // Version: 3.5.0.0 // FileVersion: 3.5.21022.8 //!----------------------------------------------------------------------= - //! Copyright (C) Microsoft Corporation. All rights reserved. //!----------------------------------------------------------------------= - //! MicrosoftAjaxWebForms.js //! Microsoft AJAX ASP.NET WebForms Framework. // Partial Rendering Type.registerNamespace('Sys.WebForms'); Sys.WebForms.BeginRequestEventArgs =3D function = Sys$WebForms$BeginRequestEventArgs(request, postBackElement) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "request", type: Sys.Net.WebRequest}, {name: "postBackElement", mayBeNull: true, domElement: true} ]); if (e) throw e; Sys.WebForms.BeginRequestEventArgs.initializeBase(this); this._request =3D request; this._postBackElement =3D postBackElement; } function Sys$WebForms$BeginRequestEventArgs$get_postBackElement() { /// = if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._postBackElement; } function Sys$WebForms$BeginRequestEventArgs$get_request() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._request; } Sys.WebForms.BeginRequestEventArgs.prototype =3D { get_postBackElement: = Sys$WebForms$BeginRequestEventArgs$get_postBackElement, get_request: Sys$WebForms$BeginRequestEventArgs$get_request } Sys.WebForms.BeginRequestEventArgs.registerClass('Sys.WebForms.BeginReque= stEventArgs', Sys.EventArgs); =20 Sys.WebForms.EndRequestEventArgs =3D function = Sys$WebForms$EndRequestEventArgs(error, dataItems, response) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "error", type: Error, mayBeNull: true}, {name: "dataItems", type: Object, mayBeNull: true}, {name: "response", type: Sys.Net.WebRequestExecutor} ]); if (e) throw e; Sys.WebForms.EndRequestEventArgs.initializeBase(this); this._errorHandled =3D false; this._error =3D error; // Need to use "new Object()" instead of "{}", since the latter = breaks code coverage. this._dataItems =3D dataItems || new Object(); this._response =3D response; } function Sys$WebForms$EndRequestEventArgs$get_dataItems() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._dataItems; } function Sys$WebForms$EndRequestEventArgs$get_error() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._error; } function Sys$WebForms$EndRequestEventArgs$get_errorHandled() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._errorHandled; } function Sys$WebForms$EndRequestEventArgs$set_errorHandled(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Boolean}]); if (e) throw e; this._errorHandled =3D value; } function Sys$WebForms$EndRequestEventArgs$get_response() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._response; } Sys.WebForms.EndRequestEventArgs.prototype =3D { get_dataItems: Sys$WebForms$EndRequestEventArgs$get_dataItems, get_error: Sys$WebForms$EndRequestEventArgs$get_error, get_errorHandled: Sys$WebForms$EndRequestEventArgs$get_errorHandled, set_errorHandled: Sys$WebForms$EndRequestEventArgs$set_errorHandled, get_response: Sys$WebForms$EndRequestEventArgs$get_response } Sys.WebForms.EndRequestEventArgs.registerClass('Sys.WebForms.EndRequestEv= entArgs', Sys.EventArgs); Sys.WebForms.InitializeRequestEventArgs =3D function = Sys$WebForms$InitializeRequestEventArgs(request, postBackElement) { /// /// /// var e =3D Function._validateParams(arguments, [ {name: "request", type: Sys.Net.WebRequest}, {name: "postBackElement", mayBeNull: true, domElement: true} ]); if (e) throw e; Sys.WebForms.InitializeRequestEventArgs.initializeBase(this); this._request =3D request; this._postBackElement =3D postBackElement; } function = Sys$WebForms$InitializeRequestEventArgs$get_postBackElement() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._postBackElement; } function Sys$WebForms$InitializeRequestEventArgs$get_request() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._request; } Sys.WebForms.InitializeRequestEventArgs.prototype =3D { get_postBackElement: = Sys$WebForms$InitializeRequestEventArgs$get_postBackElement, get_request: Sys$WebForms$InitializeRequestEventArgs$get_request } Sys.WebForms.InitializeRequestEventArgs.registerClass('Sys.WebForms.Initi= alizeRequestEventArgs', Sys.CancelEventArgs); =20 Sys.WebForms.PageLoadedEventArgs =3D function = Sys$WebForms$PageLoadedEventArgs(panelsUpdated, panelsCreated, = dataItems) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "panelsUpdated", type: Array}, {name: "panelsCreated", type: Array}, {name: "dataItems", type: Object, mayBeNull: true} ]); if (e) throw e; Sys.WebForms.PageLoadedEventArgs.initializeBase(this); this._panelsUpdated =3D panelsUpdated; this._panelsCreated =3D panelsCreated; // Need to use "new Object()" instead of "{}", since the latter = breaks code coverage. this._dataItems =3D dataItems || new Object(); } function Sys$WebForms$PageLoadedEventArgs$get_dataItems() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._dataItems; } function Sys$WebForms$PageLoadedEventArgs$get_panelsCreated() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._panelsCreated; } function Sys$WebForms$PageLoadedEventArgs$get_panelsUpdated() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._panelsUpdated; } Sys.WebForms.PageLoadedEventArgs.prototype =3D { get_dataItems: Sys$WebForms$PageLoadedEventArgs$get_dataItems, get_panelsCreated: = Sys$WebForms$PageLoadedEventArgs$get_panelsCreated, get_panelsUpdated: = Sys$WebForms$PageLoadedEventArgs$get_panelsUpdated } Sys.WebForms.PageLoadedEventArgs.registerClass('Sys.WebForms.PageLoadedEv= entArgs', Sys.EventArgs); Sys.WebForms.PageLoadingEventArgs =3D function = Sys$WebForms$PageLoadingEventArgs(panelsUpdating, panelsDeleting, = dataItems) { /// /// /// /// var e =3D Function._validateParams(arguments, [ {name: "panelsUpdating", type: Array}, {name: "panelsDeleting", type: Array}, {name: "dataItems", type: Object, mayBeNull: true} ]); if (e) throw e; Sys.WebForms.PageLoadingEventArgs.initializeBase(this); this._panelsUpdating =3D panelsUpdating; this._panelsDeleting =3D panelsDeleting; // Need to use "new Object()" instead of "{}", since the latter = breaks code coverage. this._dataItems =3D dataItems || new Object(); } function Sys$WebForms$PageLoadingEventArgs$get_dataItems() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._dataItems; } function Sys$WebForms$PageLoadingEventArgs$get_panelsDeleting() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._panelsDeleting; } function Sys$WebForms$PageLoadingEventArgs$get_panelsUpdating() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._panelsUpdating; } Sys.WebForms.PageLoadingEventArgs.prototype =3D { get_dataItems: Sys$WebForms$PageLoadingEventArgs$get_dataItems, get_panelsDeleting: = Sys$WebForms$PageLoadingEventArgs$get_panelsDeleting, get_panelsUpdating: = Sys$WebForms$PageLoadingEventArgs$get_panelsUpdating } Sys.WebForms.PageLoadingEventArgs.registerClass('Sys.WebForms.PageLoading= EventArgs', Sys.EventArgs); =20 Sys.WebForms.PageRequestManager =3D function = Sys$WebForms$PageRequestManager() { this._form =3D null; this._activeDefaultButton =3D null; this._activeDefaultButtonClicked =3D false; this._updatePanelIDs =3D null; this._updatePanelClientIDs =3D null; this._oldUpdatePanelIDs =3D null; this._childUpdatePanelIDs =3D null; this._panelsToRefreshIDs =3D null; this._updatePanelHasChildrenAsTriggers =3D null; this._asyncPostBackControlIDs =3D null; this._asyncPostBackControlClientIDs =3D null; this._postBackControlIDs =3D null; this._postBackControlClientIDs =3D null; this._scriptManagerID =3D null; this._pageLoadedHandler =3D null; this._additionalInput =3D null; this._onsubmit =3D null; this._onSubmitStatements =3D []; this._originalDoPostBack =3D null; this._originalDoPostBackWithOptions =3D null; this._originalFireDefaultButton =3D null; this._originalDoCallback =3D null; this._isCrossPost =3D false; this._postBackSettings =3D null; this._request =3D null; this._onFormSubmitHandler =3D null; this._onFormElementClickHandler =3D null; this._onWindowUnloadHandler =3D null; this._asyncPostBackTimeout =3D null; this._controlIDToFocus =3D null; this._scrollPosition =3D null; this._dataItems =3D null; this._updateContext =3D null; this._processingRequest =3D false; this._scriptDisposes =3D {}; } function Sys$WebForms$PageRequestManager$_get_eventHandlerList() { if (!this._events) { this._events =3D new Sys.EventHandlerList(); } return this._events; } function Sys$WebForms$PageRequestManager$get_isInAsyncPostBack() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._request !=3D=3D null; } function Sys$WebForms$PageRequestManager$add_beginRequest(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("beginRequest", = handler); } function = Sys$WebForms$PageRequestManager$remove_beginRequest(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("beginRequest", = handler); } function Sys$WebForms$PageRequestManager$add_endRequest(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("endRequest", handler); } function Sys$WebForms$PageRequestManager$remove_endRequest(handler) = { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("endRequest", = handler); } function = Sys$WebForms$PageRequestManager$add_initializeRequest(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("initializeRequest", = handler); } function = Sys$WebForms$PageRequestManager$remove_initializeRequest(handler) { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("initializeRequest", = handler); } function Sys$WebForms$PageRequestManager$add_pageLoaded(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("pageLoaded", handler); } function Sys$WebForms$PageRequestManager$remove_pageLoaded(handler) = { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("pageLoaded", = handler); } function Sys$WebForms$PageRequestManager$add_pageLoading(handler) { /// var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().addHandler("pageLoading", handler); } function Sys$WebForms$PageRequestManager$remove_pageLoading(handler) = { var e =3D Function._validateParams(arguments, [{name: "handler", = type: Function}]); if (e) throw e; this._get_eventHandlerList().removeHandler("pageLoading", = handler); } function Sys$WebForms$PageRequestManager$abortPostBack() { if (!this._processingRequest && this._request) { this._request.get_executor().abort(); this._request =3D null; } } function Sys$WebForms$PageRequestManager$_cancelPendingCallbacks() { // DevDiv Bugs 125825: To avoid EVENTVALIDATION corruption we = must cancel pending callbacks when an async postback begins // to cancel callbacks, we run logic similar to = WebForm_CallbackComplete, // except we do not run WebForm_ExecuteCallback for them. This = code is exactly // WebForm_CallbackComplete except without the call to = WebForm_ExecuteCallback. // We are basically treating each callback as completed, = ignoring the response if any. for (var i =3D 0, l =3D window.__pendingCallbacks.length; i < l; = i++) { var callback =3D window.__pendingCallbacks[i]; if (callback) { if (!callback.async) { // we just cancelled the single allowed instance of = a synchronous callback window.__synchronousCallBackIndex =3D -1; } window.__pendingCallbacks[i] =3D null; var callbackFrameID =3D "__CALLBACKFRAME" + i; var xmlRequestFrame =3D = document.getElementById(callbackFrameID); if (xmlRequestFrame) { = xmlRequestFrame.parentNode.removeChild(xmlRequestFrame); } } } } function = Sys$WebForms$PageRequestManager$_createPageRequestManagerTimeoutError() = { // Creates a PageRequestManagerTimeoutException representing a = request that timed out. var displayMessage =3D = "Sys.WebForms.PageRequestManagerTimeoutException: " + = Sys.WebForms.Res.PRM_TimeoutError; var e =3D Error.create(displayMessage, {name: = 'Sys.WebForms.PageRequestManagerTimeoutException'}); e.popStackFrame(); return e; } function = Sys$WebForms$PageRequestManager$_createPageRequestManagerServerError(http= StatusCode, message) { // Creates a PageRequestManagerServerErrorException representing = an error that occurred on the server. var displayMessage =3D = "Sys.WebForms.PageRequestManagerServerErrorException: " + (message || String.format(Sys.WebForms.Res.PRM_ServerError, = httpStatusCode)); var e =3D Error.create(displayMessage, { name: 'Sys.WebForms.PageRequestManagerServerErrorException', httpStatusCode: httpStatusCode }); e.popStackFrame(); return e; } function = Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError(pars= erErrorMessage) { // Creates a PageRequestManagerParserErrorException representing = a parser error that occurred while processing a response from the = server. var displayMessage =3D = "Sys.WebForms.PageRequestManagerParserErrorException: " + = String.format(Sys.WebForms.Res.PRM_ParserError, parserErrorMessage); var e =3D Error.create(displayMessage, {name: = 'Sys.WebForms.PageRequestManagerParserErrorException'}); e.popStackFrame(); return e; } function = Sys$WebForms$PageRequestManager$_createPostBackSettings(async, panelID, = sourceElement) { return { async:async, panelID:panelID, = sourceElement:sourceElement }; } function Sys$WebForms$PageRequestManager$_convertToClientIDs(source, = destinationIDs, destinationClientIDs) { if (source) { for (var i =3D 0; i < source.length; i++) { Array.add(destinationIDs, source[i]); Array.add(destinationClientIDs, = this._uniqueIDToClientID(source[i])); } } } function Sys$WebForms$PageRequestManager$_destroyTree(element) { // We only need to walk into children collections if this node = is an element if (element.nodeType =3D=3D=3D 1) { // We can't just set innerHTML to "" because we have to walk = through // all children in order to dispose script that may be = associated with them. var childNodes =3D element.childNodes; for (var i =3D childNodes.length - 1; i >=3D 0; i--) { var node =3D childNodes[i]; if (node.nodeType =3D=3D=3D 1) { if (node.dispose && typeof(node.dispose) =3D=3D=3D = "function") { node.dispose(); } else if (node.control && = typeof(node.control.dispose) =3D=3D=3D "function") { node.control.dispose(); } var behaviors =3D = Sys.UI.Behavior.getBehaviors(node); for (var j =3D behaviors.length - 1; j >=3D 0; j--) = { behaviors[j].dispose(); } this._destroyTree(node); } } } } function Sys$WebForms$PageRequestManager$dispose() { if (this._form) { Sys.UI.DomEvent.removeHandler(this._form, 'submit', = this._onFormSubmitHandler); Sys.UI.DomEvent.removeHandler(this._form, 'click', = this._onFormElementClickHandler); Sys.UI.DomEvent.removeHandler(window, 'unload', = this._onWindowUnloadHandler); Sys.UI.DomEvent.removeHandler(window, 'load', = this._pageLoadedHandler); } if (this._originalDoPostBack) { window.__doPostBack =3D this._originalDoPostBack; this._originalDoPostBack =3D null; } if (this._originalDoPostBackWithOptions) { window.WebForm_DoPostBackWithOptions =3D = this._originalDoPostBackWithOptions; this._originalDoPostBackWithOptions =3D null; } if (this._originalFireDefaultButton) { window.WebForm_FireDefaultButton =3D = this._originalFireDefaultButton; this._originalFireDefaultButton =3D null; } if (this._originalDoCallback) { window.WebForm_DoCallback =3D this._originalDoCallback; this._originalDoCallback =3D null; } this._form =3D null; this._updatePanelIDs =3D null; this._oldUpdatePanelIDs =3D null; this._childUpdatePanelIDs =3D null; this._updatePanelClientIDs =3D null; this._asyncPostBackControlIDs =3D null; this._asyncPostBackControlClientIDs =3D null; this._postBackControlIDs =3D null; this._postBackControlClientIDs =3D null; this._asyncPostBackTimeout =3D null; this._scrollPosition =3D null; this._dataItems =3D null; } function Sys$WebForms$PageRequestManager$_doCallback(eventTarget, = eventArgument, eventCallback, context, errorCallback, useAsync) { // DevDiv Bugs 125825: Do not allow callbacks to begin while an = async postback is in progress to prevent EVENTVALIDATION corruption if (!this.get_isInAsyncPostBack()) { this._originalDoCallback(eventTarget, eventArgument, = eventCallback, context, errorCallback, useAsync); } } function Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, = eventArgument) { this._additionalInput =3D null; var form =3D this._form; if ((eventTarget =3D=3D=3D null) || (typeof(eventTarget) = =3D=3D=3D "undefined") || (this._isCrossPost)) { // Allow the default form submit to take place. Since it's a = cross-page postback. // DevDiv 80942: we should fall to a full postback if event = target is null or undefined this._postBackSettings =3D = this._createPostBackSettings(false, null, null); // set to false so subsequent posts that don't go through = DPWO aren't considered cross post this._isCrossPost =3D false; } else { // If it's not a cross-page post, see if we can find the DOM = element that caused the postback var clientID =3D this._uniqueIDToClientID(eventTarget); var postBackElement =3D document.getElementById(clientID); if (!postBackElement) { // If the control has no matching DOM element we look = for an exact // match from RegisterAsyncPostBackControl or = RegisterPostBackControl. // If we can't find anything about it then we do a = search based on // naming containers to still try and find a match. if (Array.contains(this._asyncPostBackControlIDs, = eventTarget)) { // Exact match for async postback this._postBackSettings =3D = this._createPostBackSettings(true, this._scriptManagerID + '|' + = eventTarget, null); } else { if (Array.contains(this._postBackControlIDs, = eventTarget)) { // Exact match for regular postback this._postBackSettings =3D = this._createPostBackSettings(false, null, null); } else { // Find nearest element based on UniqueID in = case the element calling // __doPostBack doesn't have an ID. GridView = does this for its Update // button and without this we can't do async = postbacks. var nearestUniqueIDMatch =3D = this._findNearestElement(eventTarget); if (nearestUniqueIDMatch) { // We found a related parent element, so = walk up the DOM to find out what kind // of postback we should do. this._postBackSettings =3D = this._getPostBackSettings(nearestUniqueIDMatch, eventTarget); } else { // Can't find any DOM element at all related = to the eventTarget, // so we just give up and do a regular = postback. this._postBackSettings =3D = this._createPostBackSettings(false, null, null); } } } } else { // The element was found, so walk up the DOM to find out = what kind // of postback we should do. this._postBackSettings =3D = this._getPostBackSettings(postBackElement, eventTarget); } } if (!this._postBackSettings.async) { // Temporarily restore the form's onsubmit handler expando = while calling // the original ASP.NET 2.0 __doPostBack() function. form.onsubmit =3D this._onsubmit; this._originalDoPostBack(eventTarget, eventArgument); form.onsubmit =3D null; return; } form.__EVENTTARGET.value =3D eventTarget; form.__EVENTARGUMENT.value =3D eventArgument; this._onFormSubmit(); } function = Sys$WebForms$PageRequestManager$_doPostBackWithOptions(options) { this._isCrossPost =3D options && options.actionUrl; // note that when DoPostBackWithOptions is used, _doPostBack or = _onFormSubmit, one of the two, // are guaranteed to be called next. // In both of those methods it is important to clear the = isCrossPost flag so subsequent posts that // don't use DoPostBackWithOptions are not considered cross page = posts. this._originalDoPostBackWithOptions(options); } function Sys$WebForms$PageRequestManager$_elementContains(container, = element) { while (element) { if (element =3D=3D=3D container) { return true; } element =3D element.parentNode; } return false; } function Sys$WebForms$PageRequestManager$_endPostBack(error, = response) { // DevDiv Bugs 130268: There could have been a 2nd request that = started while this one was being // processed. Detect this by comparing the request for the = current response to the _request field, // which stores the latest request that has begun. If they are = different, do not clear the state // data that will be required by the 2nd request's response. if (this._request =3D=3D=3D response.get_webRequest()) { this._processingRequest =3D false; this._additionalInput =3D null; this._request =3D null; } var handler =3D = this._get_eventHandlerList().getHandler("endRequest"); var errorHandled =3D false; if (handler) { var eventArgs =3D new = Sys.WebForms.EndRequestEventArgs(error, this._dataItems, response); handler(this, eventArgs); errorHandled =3D eventArgs.get_errorHandled(); } // DevDiv Bugs 130268: See above if (!this._processingRequest) { this._dataItems =3D null; } if (error && !errorHandled) { // DevDiv 89485: throw, don't alert() throw error; } } function = Sys$WebForms$PageRequestManager$_findNearestElement(uniqueID) { while (uniqueID.length > 0) { var clientID =3D this._uniqueIDToClientID(uniqueID); var element =3D document.getElementById(clientID); if (element) { return element; } var indexOfLastDollar =3D uniqueID.lastIndexOf('$'); if (indexOfLastDollar =3D=3D=3D -1) { return null; } uniqueID =3D uniqueID.substring(0, indexOfLastDollar); } return null; } function Sys$WebForms$PageRequestManager$_findText(text, location) { var startIndex =3D Math.max(0, location - 20); var endIndex =3D Math.min(text.length, location + 20); return text.substring(startIndex, endIndex); } function Sys$WebForms$PageRequestManager$_fireDefaultButton(event, = target) { // This is a copy of the function WebForm_FireDefaultButton as = defined in WebForms.js. // The purpose is to hook into the WebForm_FireDefaultButton = call with the code commented in the middle. // Other than that, there have been a few minor changes to the = code but the logic is the same. if ((event.keyCode =3D=3D=3D 13) && !(event.srcElement && = (event.srcElement.tagName.toLowerCase() =3D=3D=3D "textarea"))) { var defaultButton =3D document.getElementById(target); if (defaultButton && (typeof(defaultButton.click) !=3D=3D = "undefined")) { =20 // Beginning of new code... =20 // In all but FF this causes the form.onclick event to = fire with the button as the event target. // In FF the the form.onclick event has the current = focus control as the target, which prevents the // default button's server-side click event from firing. = So we ensure the correct control is determined // to have caused the postback by saving the default = button before clicking on it. The code in // onFormSubmit looks for this field and ensures the = postback target is the button. this._activeDefaultButton =3D defaultButton; this._activeDefaultButtonClicked =3D false; try { // click is synchronous -- it will immediately cause = a form onclick event and then a form onsubmit event // assuming nothing uses preventDefault() to cancel = the event. defaultButton.click(); } finally { // form submission may or may not be occuring after = this point this._activeDefaultButton =3D null; } =20 // ...End of new code =20 // cancel submission caused by hitting enter in the = input control event.cancelBubble =3D true; if (typeof(event.stopPropagation) =3D=3D=3D "function") = { event.stopPropagation(); } return false; } } return true; } function = Sys$WebForms$PageRequestManager$_getPageLoadedEventArgs(initialLoad) { // = -------------+------------------------------------+----------------------= - // Situation | In ID collections | In = eventArg property // = -------------+------------------------------------+----------------------= - // Update (exp) | in panelsToRefresh | updated // Update (imp) | in new, in old, in childUP | created // Create (exp) | in new, not in old, not in childUP | created // Create (imp) | in new, not in old, in childUP | created // Delete (exp) | not in new, in old, not in childUP | --- // Delete (imp) | not in new, in old, in childUP | --- // = -------------+------------------------------------+----------------------= - // (exp) =3D explicit // (imp) =3D implicit (happened as result of parent UpdatePanel = updating) // = -------------------------------------------------------------------------= - // in panelsToRefresh =3D updated // not updated, in new =3D created // else =3D don't care // = -------------------------------------------------------------------------= - var updated =3D []; var created =3D []; // Default to empty array, else short circuit OR will take care = of value var oldIDs =3D this._oldUpdatePanelIDs || []; // All panels = before update var newIDs =3D this._updatePanelIDs; // All panels after update var childIDs =3D this._childUpdatePanelIDs || []; // Child = panels created after update var refreshedIDs =3D this._panelsToRefreshIDs || []; // Parent = panels created after update // in panelsToRefresh =3D updated for (var i =3D 0; i < refreshedIDs.length; i++) { Array.add(updated, = document.getElementById(this._uniqueIDToClientID(refreshedIDs[i]))); } // If the panel is in the new list and it is either the initial = load // of the page a refreshed child, it is 'created'. for (var i =3D 0; i < newIDs.length; i++) { if (initialLoad || Array.indexOf(childIDs, newIDs[i]) = !=3D=3D -1) { Array.add(created, = document.getElementById(this._uniqueIDToClientID(newIDs[i]))); } } return new Sys.WebForms.PageLoadedEventArgs(updated, created, = this._dataItems); } function Sys$WebForms$PageRequestManager$_getPageLoadingEventArgs() = { // = -------------+------------------------------------+----------------------= - // Situation | In ID collections | In = eventArg property // = -------------+------------------------------------+----------------------= - // Update (exp) | in panelsToRefresh | updated // Update (imp) | in old, in new, in childUP | deleted // Create (exp) | not in old, in new, not in childUP | --- // Create (imp) | not in old, in new, in childUP | --- // Delete (exp) | in old, not in new, not in childUP | deleted // Delete (imp) | in old, not in new, in childUP | deleted // = -------------+------------------------------------+----------------------= - // (exp) =3D explicit // (imp) =3D implicit (happened as result of parent UpdatePanel = updating) // = -------------------------------------------------------------------------= - // in panelsToRefresh =3D updated // not updated, (not in new or in childUP) =3D deleted // else =3D don't care // = -------------------------------------------------------------------------= - var updated =3D []; var deleted =3D []; var oldIDs =3D this._oldUpdatePanelIDs; var newIDs =3D this._updatePanelIDs; var childIDs =3D this._childUpdatePanelIDs; var refreshedIDs =3D this._panelsToRefreshIDs; // in panelsToRefresh =3D updated for (var i =3D 0; i < refreshedIDs.length; i++) { Array.add(updated, = document.getElementById(this._uniqueIDToClientID(refreshedIDs[i]))); } // not in new or in childUP =3D deleted for (var i =3D 0; i < oldIDs.length; i++) { if (Array.indexOf(refreshedIDs, oldIDs[i]) =3D=3D=3D -1 && (Array.indexOf(newIDs, oldIDs[i]) =3D=3D=3D -1 || = Array.indexOf(childIDs, oldIDs[i]) > -1)) { Array.add(deleted, = document.getElementById(this._uniqueIDToClientID(oldIDs[i]))); } } return new Sys.WebForms.PageLoadingEventArgs(updated, deleted, = this._dataItems); } function = Sys$WebForms$PageRequestManager$_getPostBackSettings(element, = elementUniqueID) { var originalElement =3D element; // Keep track of whether we have an AsyncPostBackControl but = still // want to see if we're inside an UpdatePanel anyway. var proposedSettings =3D null; // Walk up DOM hierarchy to find out the nearest container of // the element that caused the postback. while (element) { if (element.id) { // First try an exact match for async postback, regular = postback, or UpdatePanel if (!proposedSettings && = Array.contains(this._asyncPostBackControlClientIDs, element.id)) { // The element explicitly causes an async postback proposedSettings =3D = this._createPostBackSettings(true, this._scriptManagerID + '|' + = elementUniqueID, originalElement); } else { if (!proposedSettings && = Array.contains(this._postBackControlClientIDs, element.id)) { // The element explicitly doesn't cause an async = postback return this._createPostBackSettings(false, null, = null); } else { var indexOfPanel =3D = Array.indexOf(this._updatePanelClientIDs, element.id); if (indexOfPanel !=3D=3D -1) { // The element causes an async postback = because it is inside an UpdatePanel if = (this._updatePanelHasChildrenAsTriggers[indexOfPanel]) { // If it was in an UpdatePanel and the = panel has ChildrenAsTriggers=3Dtrue, then // we do an async postback and refresh = the given panel // Although we do the search by looking = at ClientIDs, we end // up sending a UniqueID back to the = server so that we can // call FindControl() with it. return = this._createPostBackSettings(true, this._updatePanelIDs[indexOfPanel] + = '|' + elementUniqueID, originalElement); } else { // The element was inside an UpdatePanel = so we do an async postback, // but because it has = ChildrenAsTriggers=3Dfalse we don't update this panel. return = this._createPostBackSettings(true, this._scriptManagerID + '|' + = elementUniqueID, originalElement); } } } } // Then try near matches if (!proposedSettings && = this._matchesParentIDInList(element.id, = this._asyncPostBackControlClientIDs)) { // The element explicitly causes an async postback proposedSettings =3D = this._createPostBackSettings(true, this._scriptManagerID + '|' + = elementUniqueID, originalElement); } else { if (!proposedSettings && = this._matchesParentIDInList(element.id, this._postBackControlClientIDs)) = { // The element explicitly doesn't cause an async = postback return this._createPostBackSettings(false, null, = null); } } } element =3D element.parentNode; } // If we have proposed settings that means we found a match for = an // AsyncPostBackControl but were still searching for an = UpdatePanel. // If we got here that means we didn't find the UpdatePanel so = we // just fall back to the original AsyncPostBackControl settings = that // we created. if (!proposedSettings) { // The element doesn't cause an async postback return this._createPostBackSettings(false, null, null); } else { return proposedSettings; } } function Sys$WebForms$PageRequestManager$_getScrollPosition() { var d =3D document.documentElement; if (d && (this._validPosition(d.scrollLeft) || = this._validPosition(d.scrollTop))) { return { x: d.scrollLeft, y: d.scrollTop }; } else { d =3D document.body; if (d && (this._validPosition(d.scrollLeft) || = this._validPosition(d.scrollTop))) { return { x: d.scrollLeft, y: d.scrollTop }; } else { if (this._validPosition(window.pageXOffset) || = this._validPosition(window.pageYOffset)) { return { x: window.pageXOffset, y: window.pageYOffset }; } else { return { x: 0, y: 0 }; } } } } function = Sys$WebForms$PageRequestManager$_initializeInternal(scriptManagerID, = formElement) { if (this._prmInitialized) { throw = Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice); } this._prmInitialized =3D true; this._scriptManagerID =3D scriptManagerID; this._form =3D formElement; // TODO: Check that we found the form this._onsubmit =3D this._form.onsubmit; this._form.onsubmit =3D null; this._onFormSubmitHandler =3D Function.createDelegate(this, = this._onFormSubmit); this._onFormElementClickHandler =3D = Function.createDelegate(this, this._onFormElementClick); this._onWindowUnloadHandler =3D Function.createDelegate(this, = this._onWindowUnload); Sys.UI.DomEvent.addHandler(this._form, 'submit', = this._onFormSubmitHandler); Sys.UI.DomEvent.addHandler(this._form, 'click', = this._onFormElementClickHandler); Sys.UI.DomEvent.addHandler(window, 'unload', = this._onWindowUnloadHandler); this._originalDoPostBack =3D window.__doPostBack; if (this._originalDoPostBack) { window.__doPostBack =3D Function.createDelegate(this, = this._doPostBack); } this._originalDoPostBackWithOptions =3D = window.WebForm_DoPostBackWithOptions; if (this._originalDoPostBackWithOptions) { window.WebForm_DoPostBackWithOptions =3D = Function.createDelegate(this, this._doPostBackWithOptions); } this._originalFireDefaultButton =3D = window.WebForm_FireDefaultButton; if (this._originalFireDefaultButton) { window.WebForm_FireDefaultButton =3D = Function.createDelegate(this, this._fireDefaultButton); } this._originalDoCallback =3D window.WebForm_DoCallback; if (this._originalDoCallback) { window.WebForm_DoCallback =3D Function.createDelegate(this, = this._doCallback); } this._pageLoadedHandler =3D Function.createDelegate(this, = this._pageLoadedInitialLoad); Sys.UI.DomEvent.addHandler(window, 'load', = this._pageLoadedHandler); } function = Sys$WebForms$PageRequestManager$_matchesParentIDInList(clientID, = parentIDList) { for (var i =3D 0; i < parentIDList.length; i++) { if (clientID.startsWith(parentIDList[i] + "_")) { return true; } } return false; } function = Sys$WebForms$PageRequestManager$_onFormElementActive(element, offsetX, = offsetY) { // element: the form element that is active // offsetX/Y: if the element is an image button, the coordinates = of the click if (element.disabled) { return; } // Check if the element that was clicked on should cause an = async postback this._postBackSettings =3D this._getPostBackSettings(element, = element.name); if (element.name) { if (element.tagName =3D=3D=3D 'INPUT') { var type =3D element.type; if (type =3D=3D=3D 'submit') { // DevDiv Bugs 109456: Encode the name as well as = the value this._additionalInput =3D = encodeURIComponent(element.name) + '=3D' + = encodeURIComponent(element.value); } else if (type =3D=3D=3D 'image') { // DevDiv Bugs 109456: Encode the name as well as = the value this._additionalInput =3D = encodeURIComponent(element.name) + '.x=3D' + offsetX + '&' + = encodeURIComponent(element.name) + '.y=3D' + offsetY; } } else if ((element.tagName =3D=3D=3D 'BUTTON') && = (element.name.length !=3D=3D 0) && (element.type =3D=3D=3D 'submit')) { // DevDiv Bugs 109456: Encode the name as well as the = value this._additionalInput =3D = encodeURIComponent(element.name) + '=3D' + = encodeURIComponent(element.value); } } } function Sys$WebForms$PageRequestManager$_onFormElementClick(evt) { // flag used by fireDefaultButton to know whether calling = click() on the default button raised this event. this._activeDefaultButtonClicked =3D (evt.target =3D=3D=3D = this._activeDefaultButton); this._onFormElementActive(evt.target, evt.offsetX, evt.offsetY); } function Sys$WebForms$PageRequestManager$_onFormSubmit(evt) { var continueSubmit =3D true; var isCrossPost =3D this._isCrossPost; // set to false so subsequent posts that don't go through DPWO = aren't considered cross post this._isCrossPost =3D false; // Call the statically declared form onsubmit statement if there = was one if (this._onsubmit) { continueSubmit =3D this._onsubmit(); } // If necessary, call dynamically added form onsubmit statements if (continueSubmit) { for (var i =3D 0; i < this._onSubmitStatements.length; i++) = { if (!this._onSubmitStatements[i]()) { continueSubmit =3D false; break; } } } if (!continueSubmit) { if (evt) { evt.preventDefault(); } return; } var form =3D this._form; if (isCrossPost) { // Allow the default form submit to take place. Since it's a = cross-page postback. return; } // DevDiv Bugs 123782 if (this._activeDefaultButton && = !this._activeDefaultButtonClicked) { // we are submitting because a default button's click method = was called by _fireDefaultButton // but calling click() explicitly did not cause a click = event or raised it for a different element, // so we must manually create the correct postback options. // The button was clicked programmatically, so there are no = offsetX or offsetY coordinates. this._onFormElementActive(this._activeDefaultButton, 0, 0); } // If the postback happened from outside an update panel, fall = back // and do a normal postback. if (!this._postBackSettings.async) { return; } // Construct the form body var formBody =3D new Sys.StringBuilder(); // DevDiv Bugs 109456: ScriptManager and UpdatePanel IDs should = be encoded as well formBody.append(encodeURIComponent(this._scriptManagerID) + = '=3D' + encodeURIComponent(this._postBackSettings.panelID) + '&'); var count =3D form.elements.length; for (var i =3D 0; i < count; i++) { var element =3D form.elements[i]; var name =3D element.name; if (typeof(name) =3D=3D=3D "undefined" || (name =3D=3D=3D = null) || (name.length =3D=3D=3D 0)) { continue; } var tagName =3D element.tagName; if (tagName =3D=3D=3D 'INPUT') { var type =3D element.type; if ((type =3D=3D=3D 'text') || (type =3D=3D=3D 'password') || (type =3D=3D=3D 'hidden') || (((type =3D=3D=3D 'checkbox') || (type =3D=3D=3D = 'radio')) && element.checked)) { // DevDiv Bugs 109456: Encode the name as well as = the value formBody.append(encodeURIComponent(name)); formBody.append('=3D'); formBody.append(encodeURIComponent(element.value)); formBody.append('&'); } } else if (tagName =3D=3D=3D 'SELECT') { var optionCount =3D element.options.length; for (var j =3D 0; j < optionCount; j++) { var option =3D element.options[j]; if (option.selected) { // DevDiv Bugs 109456: Encode the name as well = as the value formBody.append(encodeURIComponent(name)); formBody.append('=3D'); = formBody.append(encodeURIComponent(option.value)); formBody.append('&'); } } } else if (tagName =3D=3D=3D 'TEXTAREA') { // DevDiv Bugs 109456: Encode the name as well as the = value formBody.append(encodeURIComponent(name)); formBody.append('=3D'); formBody.append(encodeURIComponent(element.value)); formBody.append('&'); } } if (this._additionalInput) { formBody.append(this._additionalInput); this._additionalInput =3D null; } =20 var request =3D new Sys.Net.WebRequest(); var action =3D form.action; if (Sys.Browser.agent =3D=3D=3D Sys.Browser.InternetExplorer) { // DevDiv Bugs 85367: In IE we must encode the path portion = of the request because XHR doesn't do it for us. // We only want to encode the path fragment, not the = querystring. var queryIndex =3D action.indexOf('?'); if (queryIndex !=3D=3D -1) { var path =3D action.substr(0, queryIndex); if (path.indexOf("%") =3D=3D=3D -1) { // only encode if the path portion is not already = encoded // tear off the query, encode, then put the query = back action =3D encodeURI(path) + = action.substr(queryIndex); } } else if (action.indexOf("%") =3D=3D=3D -1) { // only encode if the path portion is not already = encoded action =3D encodeURI(action); } } request.set_url(action); request.get_headers()['X-MicrosoftAjax'] =3D 'Delta=3Dtrue'; request.get_headers()['Cache-Control'] =3D 'no-cache'; request.set_timeout(this._asyncPostBackTimeout); request.add_completed(Function.createDelegate(this, = this._onFormSubmitCompleted)); request.set_body(formBody.toString()); var handler =3D = this._get_eventHandlerList().getHandler("initializeRequest"); if (handler) { var eventArgs =3D new = Sys.WebForms.InitializeRequestEventArgs(request, = this._postBackSettings.sourceElement); handler(this, eventArgs); continueSubmit =3D !eventArgs.get_cancel(); } if (!continueSubmit) { if (evt) { evt.preventDefault(); } return; } // Save the scroll position this._scrollPosition =3D this._getScrollPosition(); // If we're going on to make a new request (i.e. the user didn't = cancel), and // there's still an ongoing request, we have to abort it. If we = don't then it // will exhaust the browser's two connections per server limit = very quickly. this.abortPostBack(); handler =3D = this._get_eventHandlerList().getHandler("beginRequest"); if (handler) { var eventArgs =3D new = Sys.WebForms.BeginRequestEventArgs(request, = this._postBackSettings.sourceElement); handler(this, eventArgs); } =20 // DevDiv Bugs 125825: Cancel any pending callbacks when an = async postback begins if (this._originalDoCallback) { this._cancelPendingCallbacks(); } this._request =3D request; request.invoke(); // Suppress the default form submit functionality if (evt) { evt.preventDefault(); } } function = Sys$WebForms$PageRequestManager$_onFormSubmitCompleted(sender, = eventArgs) { this._processingRequest =3D true; var delimitByLengthDelimiter =3D '|'; // sender is the executor object if (sender.get_timedOut()) { = this._endPostBack(this._createPageRequestManagerTimeoutError(), sender); return; } if (sender.get_aborted()) { this._endPostBack(null, sender); return; } // If the response isn't the response to the latest request, = ignore it (last one wins) if (!this._request || sender.get_webRequest() !=3D=3D = this._request) { return; } var errorMessage; var delta =3D []; // If we have an invalid status code, go into error mode if (sender.get_statusCode() !=3D=3D 200) { = this._endPostBack(this._createPageRequestManagerServerError(sender.get_st= atusCode()), sender); return; } // Parse the message format // General format: length|type|id|content| var reply =3D sender.get_responseData(); var delimiterIndex, len, type, id, content; var replyIndex =3D 0; var parserErrorDetails =3D null; while (replyIndex < reply.length) { // length| - from index to next delimiter delimiterIndex =3D reply.indexOf(delimitByLengthDelimiter, = replyIndex); if (delimiterIndex =3D=3D=3D -1) { parserErrorDetails =3D this._findText(reply, = replyIndex); break; } len =3D parseInt(reply.substring(replyIndex, = delimiterIndex), 10); if ((len % 1) !=3D=3D 0) { parserErrorDetails =3D this._findText(reply, = replyIndex); break; } replyIndex =3D delimiterIndex + 1; // type| - from index to next delimiter delimiterIndex =3D reply.indexOf(delimitByLengthDelimiter, = replyIndex); if (delimiterIndex =3D=3D=3D -1) { parserErrorDetails =3D this._findText(reply, = replyIndex); break; } type =3D reply.substring(replyIndex, delimiterIndex); replyIndex =3D delimiterIndex + 1; // id| - from index to next delimiter delimiterIndex =3D reply.indexOf(delimitByLengthDelimiter, = replyIndex); if (delimiterIndex =3D=3D=3D -1) { parserErrorDetails =3D this._findText(reply, = replyIndex); break; } id =3D reply.substring(replyIndex, delimiterIndex); replyIndex =3D delimiterIndex + 1; // content - the next 'len' characters after index if ((replyIndex + len) >=3D reply.length) { parserErrorDetails =3D this._findText(reply, = reply.length); break; } // DevDiv 75383: We no longer encode null characters in the = response content, so we no longer decode them either. // See comment in server side PageRequestManager for why. content =3D reply.substr(replyIndex, len); replyIndex +=3D len; // terminating delimiter if (reply.charAt(replyIndex) !=3D=3D = delimitByLengthDelimiter) { parserErrorDetails =3D this._findText(reply, = replyIndex); break; } replyIndex++; Array.add(delta, {type: type, id: id, content: content}); } // If there was a parser error, go into error mode if (parserErrorDetails) { = this._endPostBack(this._createPageRequestManagerParserError(String.format= (Sys.WebForms.Res.PRM_ParserErrorDetails, parserErrorDetails)), sender); return; } var updatePanelNodes =3D []; var hiddenFieldNodes =3D []; var arrayDeclarationNodes =3D []; var scriptBlockNodes =3D []; var scriptStartupNodes =3D []; var expandoNodes =3D []; var onSubmitNodes =3D []; var dataItemNodes =3D []; var dataItemJsonNodes =3D []; var scriptDisposeNodes =3D []; var asyncPostBackControlIDsNode, postBackControlIDsNode, updatePanelIDsNode, asyncPostBackTimeoutNode, childUpdatePanelIDsNode, panelsToRefreshNode, = formActionNode; // Sort delta by type for (var i =3D 0; i < delta.length; i++) { var deltaNode =3D delta[i]; switch (deltaNode.type) { case "updatePanel": Array.add(updatePanelNodes, deltaNode); break; case "hiddenField": Array.add(hiddenFieldNodes, deltaNode); break; case "arrayDeclaration": Array.add(arrayDeclarationNodes, deltaNode); break; case "scriptBlock": Array.add(scriptBlockNodes, deltaNode); break; case "scriptStartupBlock": Array.add(scriptStartupNodes, deltaNode); break; case "expando": Array.add(expandoNodes, deltaNode); break; case "onSubmit": Array.add(onSubmitNodes, deltaNode); break; case "asyncPostBackControlIDs": asyncPostBackControlIDsNode =3D deltaNode; break; case "postBackControlIDs": postBackControlIDsNode =3D deltaNode; break; case "updatePanelIDs": updatePanelIDsNode =3D deltaNode; break; case "asyncPostBackTimeout": asyncPostBackTimeoutNode =3D deltaNode; break; case "childUpdatePanelIDs": childUpdatePanelIDsNode =3D deltaNode; break; case "panelsToRefreshIDs": panelsToRefreshNode =3D deltaNode; break; case "formAction": formActionNode =3D deltaNode; break; case "dataItem": Array.add(dataItemNodes, deltaNode); break; case "dataItemJson": Array.add(dataItemJsonNodes, deltaNode); break; case "scriptDispose": Array.add(scriptDisposeNodes, deltaNode); break; case "pageRedirect": // DevDiv Bugs 100201: IE does not set referrer = header on redirect if you set window.location, inject anchor node = instead // dynamic anchor technique only works on IE if (Sys.Browser.agent =3D=3D=3D = Sys.Browser.InternetExplorer) { var anchor =3D document.createElement("a"); anchor.style.display =3D 'none'; // cancel bubble so body.onclick is not raised anchor.attachEvent("onclick", cancelBubble); anchor.href =3D deltaNode.content; document.body.appendChild(anchor); anchor.click(); anchor.detachEvent("onclick", cancelBubble); document.body.removeChild(anchor); =20 function cancelBubble(e) { e.cancelBubble =3D true; } } else { window.location.href =3D deltaNode.content; } return; case "error": // The id contains the HTTP status code and the = content contains the message = this._endPostBack(this._createPageRequestManagerServerError(Number.parseI= nvariant(deltaNode.id), deltaNode.content), sender); return; case "pageTitle": document.title =3D deltaNode.content; break; case "focus": this._controlIDToFocus =3D deltaNode.content; break; default: // If there was an unknown message, go into error = mode = this._endPostBack(this._createPageRequestManagerParserError(String.format= (Sys.WebForms.Res.PRM_UnknownToken, deltaNode.type)), sender); return; } } var i; // Update the list of UpdatePanels and async postback controls if (asyncPostBackControlIDsNode && postBackControlIDsNode && updatePanelIDsNode && panelsToRefreshNode && asyncPostBackTimeoutNode && childUpdatePanelIDsNode) { this._oldUpdatePanelIDs =3D this._updatePanelIDs; var childUpdatePanelIDsString =3D = childUpdatePanelIDsNode.content; this._childUpdatePanelIDs =3D = childUpdatePanelIDsString.length ? childUpdatePanelIDsString.split(',') = : []; var asyncPostBackControlIDsArray =3D = this._splitNodeIntoArray(asyncPostBackControlIDsNode); var postBackControlIDsArray =3D = this._splitNodeIntoArray(postBackControlIDsNode); var updatePanelIDsArray =3D = this._splitNodeIntoArray(updatePanelIDsNode); this._panelsToRefreshIDs =3D = this._splitNodeIntoArray(panelsToRefreshNode); // Validate that all the top level UpdatePanels that we plan = to update exist // in the active document. We do this early so that we can = later assume that // all referenced UpdatePanels exist. for (i =3D 0; i < this._panelsToRefreshIDs.length; i++) { var panelClientID =3D = this._uniqueIDToClientID(this._panelsToRefreshIDs[i]); if (!document.getElementById(panelClientID)) { = this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.P= RM_MissingPanel, panelClientID)), sender); return; } } var asyncPostBackTimeout =3D = asyncPostBackTimeoutNode.content; this._updateControls(updatePanelIDsArray, = asyncPostBackControlIDsArray, postBackControlIDsArray, = asyncPostBackTimeout); } // Process data items this._dataItems =3D {}; for (i =3D 0; i < dataItemNodes.length; i++) { var dataItemNode =3D dataItemNodes[i]; this._dataItems[dataItemNode.id] =3D dataItemNode.content; } for (i =3D 0; i < dataItemJsonNodes.length; i++) { var dataItemJsonNode =3D dataItemJsonNodes[i]; this._dataItems[dataItemJsonNode.id] =3D = Sys.Serialization.JavaScriptSerializer.deserialize(dataItemJsonNode.conte= nt); } var handler =3D = this._get_eventHandlerList().getHandler("pageLoading"); if (handler) { handler(this, this._getPageLoadingEventArgs()); } // Update the form action (it may have changed due to cookieless = session, etc.) if (formActionNode) { this._form.action =3D formActionNode.content; } =20 // DevDiv Bugs 127756: Load script includes before updating the = HTML. // After updating the HTML, load script blocks, startup scripts, = hidden fields, arrays, expandos, and onsubmit statements // Includes must be loaded first because the new DOM may have = inline event handlers declared that depend on new // resources in the include files. They may also depend on = resources in client script blocks. // However, script blocks can still load after updating the HTML = because they load synchronously, // and therefore will still be loaded before any event handlers = could fire. They can't be loaded before updating the HTML, // because dispose scripts must be executed first in case they = dispose of resources declared by the script blocks. // Neither can the HTML be disposed of, then scripts loaded, and = then the HTML updated, because that would cause a flicker. // This means ClientScriptIncludes and ClientScriptBlocks will = load disjunct from one another during async updates, // but script includes should not depend on script blocks. This = mechanism allows inline event handlers, a likely scenario, // whereas complex dependencies between script includes and = script blocks is uncommon and not recommended. // Finally -- startup scripts could contain more script = includes, so there are two calls to the script loader, which breaks the // completion handling of an async update into 3 separate = functions: _onFormSubmitCompleted, _scriptIncludesLoadComplete, = _scriptsLoadComplete. =20 // Read existing script elements (user code may have manually = inserted a script element, this will ensure we know about those). // This is used to detect duplicates so we don't reload scripts = that have already loaded. Sys._ScriptLoader.readLoadedScripts(); // Starting batch mode for component creation to allow for // two-pass creation and components that reference each other. // endCreateComponents called from _scriptsLoadComplete. Sys.Application.beginCreateComponents(); // First load ClientScriptIncludes var scriptLoader =3D Sys._ScriptLoader.getInstance(); this._queueScripts(scriptLoader, scriptBlockNodes, true, false); =20 // Save context into a member so that we can later get it from = the completion callback this._updateContext =3D { response: sender, updatePanelNodes: updatePanelNodes, scriptBlockNodes: scriptBlockNodes, scriptDisposeNodes: scriptDisposeNodes, hiddenFieldNodes: hiddenFieldNodes, arrayDeclarationNodes: arrayDeclarationNodes, expandoNodes: expandoNodes, scriptStartupNodes: scriptStartupNodes, onSubmitNodes: onSubmitNodes }; // PRM does not support load timeout // timeout, completeCallback, = failedCallback, timeoutCallback scriptLoader.loadScripts(0, Function.createDelegate(this, = this._scriptIncludesLoadComplete), Function.createDelegate(this, = this._scriptIncludesLoadFailed), null); } function Sys$WebForms$PageRequestManager$_onWindowUnload(evt) { this.dispose(); } function Sys$WebForms$PageRequestManager$_pageLoaded(initialLoad) { var handler =3D = this._get_eventHandlerList().getHandler("pageLoaded"); if (handler) { handler(this, this._getPageLoadedEventArgs(initialLoad)); } if (!initialLoad) { // If this isn't the first page load (i.e. we are doing an = async postback), we // need to re-raise the Application's load event. Sys.Application.raiseLoad(); } } function Sys$WebForms$PageRequestManager$_pageLoadedInitialLoad(evt) = { this._pageLoaded(true); } function Sys$WebForms$PageRequestManager$_queueScripts(scriptLoader, = scriptBlockNodes, queueIncludes, queueBlocks) { =20 for (i =3D 0; i < scriptBlockNodes.length; i++) { var scriptBlockType =3D scriptBlockNodes[i].id; switch (scriptBlockType) { case "ScriptContentNoTags": if (!queueBlocks) { continue; } // The content contains raw JavaScript = scriptLoader.queueScriptBlock(scriptBlockNodes[i].content); break; case "ScriptContentWithTags": // The content contains serialized attributes for = the script tag var scriptTagAttributes; eval("scriptTagAttributes =3D " + = scriptBlockNodes[i].content); if (scriptTagAttributes.src) { // Don't reload a script that's already in the = DOM // or if not queuing includes if (!queueIncludes || = Sys._ScriptLoader.isScriptLoaded(scriptTagAttributes.src)) { continue; } } else if (!queueBlocks) { // its a script block continue; } = scriptLoader.queueCustomScriptTag(scriptTagAttributes); break; case "ScriptPath": // Don't reload a script that's already in the DOM // only if we aren't loading includes if (!queueIncludes || = Sys._ScriptLoader.isScriptLoaded(scriptBlockNodes[i].content)) { continue; } // The content contains the URL reference of the = script to load = scriptLoader.queueScriptReference(scriptBlockNodes[i].content); break; } } =20 } function = Sys$WebForms$PageRequestManager$_registerDisposeScript(panelID, = disposeScript) { if (!this._scriptDisposes[panelID]) { this._scriptDisposes[panelID] =3D [disposeScript]; } else { Array.add(this._scriptDisposes[panelID], disposeScript); } } function = Sys$WebForms$PageRequestManager$_scriptIncludesLoadComplete() { var ctx =3D this._updateContext; // Update the rendering for each delta panel and dispose all the = contents. // The dispose can happen either through DOM elements that have = dispose // support or through direct dispose registrations done on the = server. for (i =3D 0; i < ctx.updatePanelNodes.length; i++) { var deltaUpdatePanel =3D ctx.updatePanelNodes[i]; var deltaPanelID =3D deltaUpdatePanel.id; var deltaPanelRendering =3D deltaUpdatePanel.content; var updatePanelElement =3D = document.getElementById(deltaPanelID); if (!updatePanelElement) { = this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.P= RM_MissingPanel, deltaPanelID)), ctx.response); return; } this._updatePanel(updatePanelElement, deltaPanelRendering); } // Update the dispose entries // We have to do this after we disposed all the panels since = otherwise // we would run the dispose scripts on the brand new markup. for (i =3D 0; i < ctx.scriptDisposeNodes.length; i++) { var disposePanelId =3D ctx.scriptDisposeNodes[i].id; var disposeScript =3D ctx.scriptDisposeNodes[i].content; this._registerDisposeScript(disposePanelId, disposeScript); } // Update the hidden fields var viewStateEncrypted =3D false; for (i =3D 0; i < ctx.hiddenFieldNodes.length; i++) { var id =3D ctx.hiddenFieldNodes[i].id; var value =3D ctx.hiddenFieldNodes[i].content; =20 // DevDiv Bugs 138251: Must remove this hidden field if it = is not contained in the update if (id =3D=3D=3D "__VIEWSTATEENCRYPTED") { viewStateEncrypted =3D true; } var hiddenFieldElement =3D document.getElementById(id); if (!hiddenFieldElement) { // If the hidden field doesn't exist, create it hiddenFieldElement =3D document.createElement('input'); hiddenFieldElement.id =3D id; hiddenFieldElement.name =3D id; hiddenFieldElement.type =3D 'hidden'; this._form.appendChild(hiddenFieldElement); } hiddenFieldElement.value =3D value; } =20 if (!viewStateEncrypted) { // DevDiv Bugs 138251 // The __VIEWSTATEENCRYPTED field was not registered, so = viewstate is not encrypted. // Remove the __VIEWSTATEENCRYPTED hidden field if it = exists. ASP.NET uses the existence of // this field to indicate that viewstate is encrypted. var viewStateEncryptedField =3D = document.getElementById("__VIEWSTATEENCRYPTED"); if (viewStateEncryptedField) { = viewStateEncryptedField.parentNode.removeChild(viewStateEncryptedField); } } if (ctx.scriptsFailed) { // the script includes in the first step failed to load. = Raise the error now that the DOM is updated. throw = Sys._ScriptLoader._errorScriptLoadFailed(ctx.scriptsFailed.src, = ctx.scriptsFailed.multipleCallbacks); } =20 // continue on to loading literal client script blocks, arrays, = expandos, startup scripts, and onSubmitStatements (in that order) var scriptLoader =3D Sys._ScriptLoader.getInstance(); =20 // Load literal script blocks this._queueScripts(scriptLoader, ctx.scriptBlockNodes, false, = true); // Update array declarations var arrayScript =3D ''; for (i =3D 0; i < ctx.arrayDeclarationNodes.length; i++) { arrayScript +=3D = "Sys.WebForms.PageRequestManager._addArrayElement('" + = ctx.arrayDeclarationNodes[i].id + "', " + = ctx.arrayDeclarationNodes[i].content + ");\r\n"; } // Update expandos var expandoScript =3D ''; for (i =3D 0; i < ctx.expandoNodes.length; i++) { var propertyReference =3D ctx.expandoNodes[i].id; var propertyValue =3D ctx.expandoNodes[i].content; expandoScript +=3D propertyReference + " =3D " + = propertyValue + "\r\n"; } // Execute these dynamically created scripts through the = ScriptLoader so that // they get executed in the global window context. If we execute = them through // calls to eval() then they will evaluate in this function's = context, which // is incorrect. if (arrayScript.length) { scriptLoader.queueScriptBlock(arrayScript); } if (expandoScript.length) { scriptLoader.queueScriptBlock(expandoScript); } =20 this._queueScripts(scriptLoader, ctx.scriptStartupNodes, true, = true); // Update onsubmit statements // Create a function that calls the submit statement and = otherwise returns true; var onSubmitStatementScript =3D ''; for (var i =3D 0; i < ctx.onSubmitNodes.length; i++) { if (i =3D=3D=3D 0) { onSubmitStatementScript =3D = 'Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStateme= nts, function() {\r\n'; } onSubmitStatementScript +=3D ctx.onSubmitNodes[i].content + = "\r\n"; } if (onSubmitStatementScript.length) { onSubmitStatementScript +=3D "\r\nreturn true;\r\n});\r\n"; scriptLoader.queueScriptBlock(onSubmitStatementScript); } // PRM does not support load timeout // timeout, completeCallback, = failedCallback, timeoutCallback // no failed callback -- if there is a failure ScriptLoader will = throw. scriptLoader.loadScripts(0, Function.createDelegate(this, = this._scriptsLoadComplete), null, null); // Do not add code after the call to loadScripts(). If you need = to do extra // processing after scripts are loaded, do it in = _scriptsLoadComplete. } function = Sys$WebForms$PageRequestManager$_scriptIncludesLoadFailed(scriptLoader, = scriptElement, multipleCallbacks) { // called when script includes fail to load from = _onFormSubmitComplete // save error details so we can raise the error later this._updateContext.scriptsFailed =3D { src: scriptElement.src, = multipleCallbacks: multipleCallbacks }; this._scriptIncludesLoadComplete(); } function Sys$WebForms$PageRequestManager$_scriptsLoadComplete() { // This function gets called after all scripts have been loaded = by the PRM. // It might also get called directly if there aren't any scripts = to load. // Its purpose is to finish off the processing of a postback. var response =3D this._updateContext.response; this._updateContext =3D null; // These two variables are used by ASP.net callbacks. // Because of how callbacks work, we have to re-initialize the // variables to an empty state so that their values don't keep // growing on every async postback. Then we have to = re-initialize // the callback process. if (window.__theFormPostData) { window.__theFormPostData =3D ""; } if (window.__theFormPostCollection) { window.__theFormPostCollection =3D []; } if (window.WebForm_InitCallback) { window.WebForm_InitCallback(); } // Restore scroll position if (this._scrollPosition) { // window.scrollTo() is supported by IE and Firefox (and = possibly Safari) if (window.scrollTo) { window.scrollTo(this._scrollPosition.x, = this._scrollPosition.y); } this._scrollPosition =3D null; } Sys.Application.endCreateComponents(); // Raise completion events this._pageLoaded(false); this._endPostBack(null, response); // Set focus if (this._controlIDToFocus) { var focusTarget; var oldContentEditableSetting; if (Sys.Browser.agent =3D=3D=3D = Sys.Browser.InternetExplorer) { // IE6 and IE7 have a bug where you can't focus certain = elements // if they've been changed in the DOM. To work around = this they // suggested turning off contentEditable temporarily = while focusing // the target element. var targetControl =3D $get(this._controlIDToFocus); focusTarget =3D targetControl; // If the focus control isn't focusable, default to the = first focusable child if (targetControl && (!WebForm_CanFocus(targetControl))) = { focusTarget =3D = WebForm_FindFirstFocusableChild(targetControl); } // If we found the focus target and it supports = contentEditable then // turn it off. Otherwise forget we ever tried to = disable content editing. if (focusTarget && (typeof(focusTarget.contentEditable) = !=3D=3D "undefined")) { oldContentEditableSetting =3D = focusTarget.contentEditable; focusTarget.contentEditable =3D false; } else { focusTarget =3D null; } } WebForm_AutoFocus(this._controlIDToFocus); if (focusTarget) { // If we did the contentEditable hack, reset the value focusTarget.contentEditable =3D = oldContentEditableSetting; } this._controlIDToFocus =3D null; } } function Sys$WebForms$PageRequestManager$_splitNodeIntoArray(node) { var str =3D node.content; var arr =3D str.length ? str.split(',') : []; return arr; } function = Sys$WebForms$PageRequestManager$_uniqueIDToClientID(uniqueID) { // Convert unique IDs to client IDs by replacing all '$' with = '_' return uniqueID.replace(/\$/g, '_'); } function = Sys$WebForms$PageRequestManager$_updateControls(updatePanelIDs, = asyncPostBackControlIDs, postBackControlIDs, asyncPostBackTimeout) { if (updatePanelIDs) { // Parse the array that has the UniqueIDs and split the data = out. // The array contains UniqueIDs with either a 't' or 'f' = prefix // indicating whether the panel has ChildrenAsTriggers = enabled. this._updatePanelIDs =3D new Array(updatePanelIDs.length); this._updatePanelClientIDs =3D new = Array(updatePanelIDs.length); this._updatePanelHasChildrenAsTriggers =3D new = Array(updatePanelIDs.length); for (var i =3D 0; i < updatePanelIDs.length; i++) { var realPanelID =3D updatePanelIDs[i].substr(1); var childrenAsTriggers =3D (updatePanelIDs[i].charAt(0) = =3D=3D=3D 't'); // The three arrays are kept in sync by index this._updatePanelHasChildrenAsTriggers[i] =3D = childrenAsTriggers; this._updatePanelIDs[i] =3D realPanelID; this._updatePanelClientIDs[i] =3D = this._uniqueIDToClientID(realPanelID); } this._asyncPostBackTimeout =3D asyncPostBackTimeout * 1000; } else { this._updatePanelIDs =3D []; this._updatePanelClientIDs =3D []; this._updatePanelHasChildrenAsTriggers =3D []; this._asyncPostBackTimeout =3D 0; } this._asyncPostBackControlIDs =3D []; this._asyncPostBackControlClientIDs =3D []; this._convertToClientIDs(asyncPostBackControlIDs, = this._asyncPostBackControlIDs, this._asyncPostBackControlClientIDs); this._postBackControlIDs =3D []; this._postBackControlClientIDs =3D []; this._convertToClientIDs(postBackControlIDs, = this._postBackControlIDs, this._postBackControlClientIDs); } function = Sys$WebForms$PageRequestManager$_updatePanel(updatePanelElement, = rendering) { for (var updatePanelID in this._scriptDisposes) { if (this._elementContains(updatePanelElement, = document.getElementById(updatePanelID))) { // Run all the dispose scripts for this panel var disposeScripts =3D = this._scriptDisposes[updatePanelID]; for (var i =3D 0; i < disposeScripts.length; i++) { eval(disposeScripts[i]); } // Remove the dispose entries for this panel delete this._scriptDisposes[updatePanelID]; } } this._destroyTree(updatePanelElement); // Update the region with the new UpdatePanel content updatePanelElement.innerHTML =3D rendering; } function Sys$WebForms$PageRequestManager$_validPosition(position) { return (typeof(position) !=3D=3D "undefined") && (position = !=3D=3D null) && (position !=3D=3D 0); } Sys.WebForms.PageRequestManager.prototype =3D { _get_eventHandlerList: = Sys$WebForms$PageRequestManager$_get_eventHandlerList, get_isInAsyncPostBack: = Sys$WebForms$PageRequestManager$get_isInAsyncPostBack, // Events add_beginRequest: Sys$WebForms$PageRequestManager$add_beginRequest, remove_beginRequest: = Sys$WebForms$PageRequestManager$remove_beginRequest, add_endRequest: Sys$WebForms$PageRequestManager$add_endRequest, remove_endRequest: = Sys$WebForms$PageRequestManager$remove_endRequest, add_initializeRequest: = Sys$WebForms$PageRequestManager$add_initializeRequest, remove_initializeRequest: = Sys$WebForms$PageRequestManager$remove_initializeRequest, add_pageLoaded: Sys$WebForms$PageRequestManager$add_pageLoaded, remove_pageLoaded: = Sys$WebForms$PageRequestManager$remove_pageLoaded, add_pageLoading: Sys$WebForms$PageRequestManager$add_pageLoading, remove_pageLoading: = Sys$WebForms$PageRequestManager$remove_pageLoading, abortPostBack: Sys$WebForms$PageRequestManager$abortPostBack, _cancelPendingCallbacks: = Sys$WebForms$PageRequestManager$_cancelPendingCallbacks, _createPageRequestManagerTimeoutError: = Sys$WebForms$PageRequestManager$_createPageRequestManagerTimeoutError, _createPageRequestManagerServerError: = Sys$WebForms$PageRequestManager$_createPageRequestManagerServerError, _createPageRequestManagerParserError: = Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError, _createPostBackSettings: = Sys$WebForms$PageRequestManager$_createPostBackSettings, _convertToClientIDs: = Sys$WebForms$PageRequestManager$_convertToClientIDs, _destroyTree: Sys$WebForms$PageRequestManager$_destroyTree, dispose: Sys$WebForms$PageRequestManager$dispose, _doCallback: Sys$WebForms$PageRequestManager$_doCallback, // New implementation of __doPostBack _doPostBack: Sys$WebForms$PageRequestManager$_doPostBack, _doPostBackWithOptions: = Sys$WebForms$PageRequestManager$_doPostBackWithOptions, _elementContains: Sys$WebForms$PageRequestManager$_elementContains, _endPostBack: Sys$WebForms$PageRequestManager$_endPostBack, // Finds the nearest element to the given UniqueID. If an element is = not // found for the exact UniqueID, it walks up the parent chain to = look for it. _findNearestElement: = Sys$WebForms$PageRequestManager$_findNearestElement, _findText: Sys$WebForms$PageRequestManager$_findText, _fireDefaultButton: = Sys$WebForms$PageRequestManager$_fireDefaultButton, _getPageLoadedEventArgs: = Sys$WebForms$PageRequestManager$_getPageLoadedEventArgs, _getPageLoadingEventArgs: = Sys$WebForms$PageRequestManager$_getPageLoadingEventArgs, _getPostBackSettings: = Sys$WebForms$PageRequestManager$_getPostBackSettings, _getScrollPosition: = Sys$WebForms$PageRequestManager$_getScrollPosition, _initializeInternal: = Sys$WebForms$PageRequestManager$_initializeInternal, _matchesParentIDInList: = Sys$WebForms$PageRequestManager$_matchesParentIDInList, _onFormElementActive: = Sys$WebForms$PageRequestManager$_onFormElementActive, _onFormElementClick: = Sys$WebForms$PageRequestManager$_onFormElementClick, _onFormSubmit: Sys$WebForms$PageRequestManager$_onFormSubmit, _onFormSubmitCompleted: = Sys$WebForms$PageRequestManager$_onFormSubmitCompleted, _onWindowUnload: Sys$WebForms$PageRequestManager$_onWindowUnload, _pageLoaded: Sys$WebForms$PageRequestManager$_pageLoaded, _pageLoadedInitialLoad: = Sys$WebForms$PageRequestManager$_pageLoadedInitialLoad, _queueScripts: Sys$WebForms$PageRequestManager$_queueScripts, _registerDisposeScript: = Sys$WebForms$PageRequestManager$_registerDisposeScript, _scriptIncludesLoadComplete: = Sys$WebForms$PageRequestManager$_scriptIncludesLoadComplete, _scriptIncludesLoadFailed: = Sys$WebForms$PageRequestManager$_scriptIncludesLoadFailed, _scriptsLoadComplete: = Sys$WebForms$PageRequestManager$_scriptsLoadComplete, _splitNodeIntoArray: = Sys$WebForms$PageRequestManager$_splitNodeIntoArray, _uniqueIDToClientID: = Sys$WebForms$PageRequestManager$_uniqueIDToClientID, _updateControls: Sys$WebForms$PageRequestManager$_updateControls, _updatePanel: Sys$WebForms$PageRequestManager$_updatePanel, _validPosition: Sys$WebForms$PageRequestManager$_validPosition } Sys.WebForms.PageRequestManager.getInstance =3D function = Sys$WebForms$PageRequestManager$getInstance() { /// /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); var prm =3D Sys.WebForms.PageRequestManager._instance; if (!prm) { prm =3D Sys.WebForms.PageRequestManager._instance =3D new = Sys.WebForms.PageRequestManager(); } return prm; } Sys.WebForms.PageRequestManager._addArrayElement =3D function = Sys$WebForms$PageRequestManager$_addArrayElement(arrayName) { if (!window[arrayName]) { // Create array if doesn't already exist window[arrayName] =3D new Array(); } // add the argument list, not counting arrayName // note: cannot use Array.addRange or Array.dequeue // because 'arguments' is not actually an instance of an Array. for (var i =3D 1, l =3D arguments.length; i < l; i++) { Array.add(window[arrayName], arguments[i]); } } Sys.WebForms.PageRequestManager._initialize =3D function = Sys$WebForms$PageRequestManager$_initialize(scriptManagerID, = formElement) { = Sys.WebForms.PageRequestManager.getInstance()._initializeInternal(scriptM= anagerID, formElement); } Sys.WebForms.PageRequestManager.registerClass('Sys.WebForms.PageRequestMa= nager'); =20 Sys.UI._UpdateProgress =3D function Sys$UI$_UpdateProgress(element) { Sys.UI._UpdateProgress.initializeBase(this,[element]); this._displayAfter =3D 500; this._dynamicLayout =3D true; this._associatedUpdatePanelId =3D null; this._beginRequestHandlerDelegate =3D null; this._startDelegate =3D null; this._endRequestHandlerDelegate =3D null; this._pageRequestManager =3D null; this._timerCookie =3D null; } function Sys$UI$_UpdateProgress$get_displayAfter() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._displayAfter; } function Sys$UI$_UpdateProgress$set_displayAfter(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Number}]); if (e) throw e; this._displayAfter =3D value; } function Sys$UI$_UpdateProgress$get_dynamicLayout() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._dynamicLayout; } function Sys$UI$_UpdateProgress$set_dynamicLayout(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: Boolean}]); if (e) throw e; this._dynamicLayout =3D value; } function Sys$UI$_UpdateProgress$get_associatedUpdatePanelId() { /// if (arguments.length !=3D=3D 0) throw Error.parameterCount(); return this._associatedUpdatePanelId; } function Sys$UI$_UpdateProgress$set_associatedUpdatePanelId(value) { var e =3D Function._validateParams(arguments, [{name: "value", = type: String, mayBeNull: true}]); if (e) throw e; this._associatedUpdatePanelId =3D value; } function Sys$UI$_UpdateProgress$_handleBeginRequest(sender, arg) { var curElem =3D arg.get_postBackElement(); var showProgress =3D !this._associatedUpdatePanelId;=20 while (!showProgress && curElem) { if (curElem.id && this._associatedUpdatePanelId =3D=3D=3D = curElem.id) { showProgress =3D true;=20 } curElem =3D curElem.parentNode;=20 }=20 if (showProgress) { this._timerCookie =3D window.setTimeout(this._startDelegate, = this._displayAfter); } } function Sys$UI$_UpdateProgress$_startRequest() { if (this._pageRequestManager.get_isInAsyncPostBack()) { if (this._dynamicLayout) this.get_element().style.display = =3D 'block'; else this.get_element().style.visibility =3D 'visible'; } this._timerCookie =3D null; } function Sys$UI$_UpdateProgress$_handleEndRequest(sender, arg) { if (this._dynamicLayout) this.get_element().style.display =3D = 'none'; else this.get_element().style.visibility =3D 'hidden'; if (this._timerCookie) { window.clearTimeout(this._timerCookie); this._timerCookie =3D null; } } function Sys$UI$_UpdateProgress$dispose() { if (this._pageRequestManager !=3D=3D null) { = this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDel= egate); = this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegat= e); } Sys.UI._UpdateProgress.callBaseMethod(this,"dispose"); } function Sys$UI$_UpdateProgress$initialize() { Sys.UI._UpdateProgress.callBaseMethod(this, 'initialize'); this._beginRequestHandlerDelegate =3D Function.createDelegate(this, = this._handleBeginRequest); this._endRequestHandlerDelegate =3D Function.createDelegate(this, = this._handleEndRequest); this._startDelegate =3D Function.createDelegate(this, = this._startRequest); if (Sys.WebForms && Sys.WebForms.PageRequestManager) { this._pageRequestManager =3D = Sys.WebForms.PageRequestManager.getInstance(); } if (this._pageRequestManager !=3D=3D null ) { // Review: should we throw if there's no pageRequestManager = this._pageRequestManager.add_beginRequest(this._beginRequestHandlerDelega= te); = this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate);= } } Sys.UI._UpdateProgress.prototype =3D { get_displayAfter: Sys$UI$_UpdateProgress$get_displayAfter, set_displayAfter: Sys$UI$_UpdateProgress$set_displayAfter, get_dynamicLayout: Sys$UI$_UpdateProgress$get_dynamicLayout, set_dynamicLayout: Sys$UI$_UpdateProgress$set_dynamicLayout, get_associatedUpdatePanelId: = Sys$UI$_UpdateProgress$get_associatedUpdatePanelId, set_associatedUpdatePanelId: = Sys$UI$_UpdateProgress$set_associatedUpdatePanelId, _handleBeginRequest: Sys$UI$_UpdateProgress$_handleBeginRequest, _startRequest: Sys$UI$_UpdateProgress$_startRequest, _handleEndRequest: Sys$UI$_UpdateProgress$_handleEndRequest, dispose: Sys$UI$_UpdateProgress$dispose, initialize: Sys$UI$_UpdateProgress$initialize } Sys.UI._UpdateProgress.registerClass('Sys.UI._UpdateProgress', = Sys.UI.Control); Type.registerNamespace('Sys.WebForms'); Sys.WebForms.Res=3D{ "PRM_MissingPanel":"Could not find UpdatePanel with ID \u0027{0}\u0027. = If it is being updated dynamically then it must be inside another = UpdatePanel.", "PRM_ServerError":"An unknown error occurred while processing the = request on the server. The status code returned from the server was: = {0}", "PRM_ParserError":"The message received from the server could not be = parsed.", "PRM_TimeoutError":"The server request timed out.", "PRM_CannotRegisterTwice":"The PageRequestManager cannot be initialized = more than once.", "PRM_UnknownToken":"Unknown token: \u0027{0}\u0027.", "PRM_MissingPanel":"Could not find UpdatePanel with ID \u0027{0}\u0027. = If it is being updated dynamically then it must be inside another = UpdatePanel.", "PRM_ServerError":"An unknown error occurred while processing the = request on the server. The status code returned from the server was: = {0}", "PRM_ParserError":"The message received from the server could not be = parsed. Common causes for this error are when the response is modified = by calls to Response.Write(), response filters, HttpModules, or server = trace is enabled.\r\nDetails: {0}", "PRM_TimeoutError":"The server request timed out.", "PRM_ParserErrorDetails":"Error parsing near \u0027{0}\u0027.", "PRM_CannotRegisterTwice":"The PageRequestManager cannot be initialized = more than once." }; if(typeof(Sys)!=3D=3D'undefined')Sys.Application.notifyScriptLoaded(); ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en =0A= (function() {=0A= var f =3D document.getElementById('cse-search-box');=0A= if (!f) {=0A= f =3D document.getElementById('searchbox_demo');=0A= }=0A= if (f && f.q) {=0A= var q =3D f.q;=0A= var n =3D navigator;=0A= var l =3D location;=0A= if (n.platform =3D=3D 'Win32') {=0A= q.style.cssText =3D 'border: 1px solid #7e9db9; padding: 2px;';=0A= }=0A= var b =3D function() {=0A= if (q.value =3D=3D '') {=0A= q.style.background =3D '#FFFFFF = url(http:\x2F\x2Fwww.google.com\x2Fcoop\x2Fintl\x2Fen\x2Fimages\x2Fgoogle= _custom_search_watermark.gif) left no-repeat';=0A= }=0A= };=0A= var f =3D function() {=0A= q.style.background =3D '#ffffff';=0A= };=0A= q.onfocus =3D f;=0A= q.onblur =3D b;=0A= if (!/[&?]q=3D[^&]/.test(l.search)) {=0A= b();=0A= }=0A= }=0A= })();=0A= ------=_NextPart_000_00E5_01CA0AE2.2DAA90C0--