From: Subject: Searching For Minnesota: Quirky Stuff - The Rooster at Weldon's Gifts Date: Tue, 22 May 2007 09:00:51 -0500 MIME-Version: 1.0 Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_000_0051_01C79C4F.B2A92F10" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962 This is a multi-part message in MIME format. ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://photos1.blogger.com/blogger/7574/2862/320/twoharbors_rooster.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP ERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCADwAUADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwC7tpQt SBacFr7K58yRAGnAVJtpQtFxke2jaamC0u2i4EO00bTU22l20XGQbaXbU22jZTuIhApQpqbZRtou BFtNGDU22jbSuMhxRtqbbSbadwIsGjFS7aNtFwIcUYqbbRtouBARSEGpytJtp3Ah20mDU+2k20XA h20FamK0m2i4EBWjFT7aTbRcRARSbTU23ijbRcCAqaTFT7aQrRcCAimlTU+2kK07gV8UhBqwVppW i4rFcg0hFT7aaVp3AgxTSKnK0hWi4jS207bUgWlC8VhcqxGFpdtSBacFouOxGFpQtSbaXbRcCPbS 7aftpQtFwI9tLtqTbRtouBHto21Lto20XAi20bal20u2i4EO2jbU22jbTuMh20bam20baLgQ7aTb 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 df8A61Ysq1j/2Q== ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://photos1.blogger.com/blogger/7574/2862/1600/gear1_2.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP ERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAEfAL8DASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDyjqx4 OKUdCtDEgCo7iaOFDJKyqqjk1yHYKx2mqF9qNtaE+Y/PZRyTWVfaxcXchgsYzg8b8cmr2neGZPLF 1qUnlr1+c8mtYUpS9DOU0ivDNda5dxWEC+RE7/M59O5NekaTpVrpVlHb2YRhuAkcclj6msTwvpcF 3JJNbIVghBUNj7zf5/nXR6dGba52qvcdRXiZjWSqKCei3PRwtNuHM1qehXPhu0/4RkQ+UpvI4ywZ OGMhGce9cZqGh6lZwie4tTs7kHOPriu28P3x1LVZI2mWIeUjMh6s3Qge3eo73S7jVtQllvLjytKh YgBXwGCnGf8A69dk6NLEQUoLX+tzmjUnSk1JnIeGNLh1K9CzzRxxqctHn53HoBVvxF4eFtMr2CyE OCzW7DLxgdzjtXVeL7OwsPDYMFnArl1ELofunPUH1wKztAbVU0kXH2e3nWQnBaTErY7E9/xqHhqa fsWrvuivbTfvp6HAzxtnaFbPoBzV3RNWu9JdxEFkikHzxnof8K6DUdSlsImje0lW/df9ZIF+Ueox 174qv4cNhaxGSR1kubghHWQbVRc8nJ4Nc8aUac0ozszRzc4+9E3NPu7WW0MkLi1laPYAW+VckHgi kVJFcXFw7OFOWdASSAOn09T7e9Ubzw/ZyTSJYsUjhQSTSRv5isT0UL3NMkt9Ygd7WzuIGxCZJGOU 2ezDlc/T0r01OS1kr+hy8q6MvzahJJOnkGNo/uqHU/exx9O/4Cs3xFpUbRnVdPzb3EIMjEcBsdx7 1kXdx4ijRLi4YrHIPkfy1Kt9DVK8utVuovKubyRo+69B+lctbGQs4zTubU8PO94sdpITWdVc6jPI 0jDco/vH+nFT+JNLjjtluLOzkhSMZlcsCGUnAOMk1lLEB07dwaeJJVjaJZJPLYDcu44NcKxEeTlc fn1On2Uua6Zm7v8AZJNMeOaQ8JtFaXlZAG2lYMic4x71ze07I15e5mCzkYcufoKY9myLg4/GtAmU ngY98U7yGk5kOT61ftJLcXKjJikktyVPzIeqntWjpN5Cu6F2XyzypPb2qK4h2g5xisa9nijcqMEi r5VUJu4lWCa91O4Nro9o9w+eXI+VfxrrdB+G8t0Vm1q5kuGPPlRnCD2zXoXh3w7Z6fapDDAkUa9h 3+vrXRwxRoMKor6uFGMdzxZVX0PG9Y8L6b4L/wBKMLT+ex+zhhkKe4JqkNFvtShW/wBZnNpbSHFv DnEkx7BR6e/pXrni5lg0a4vWtYrlrZTIqyAEAjv+HX8K8OvvEd3qWpfabeK4vrmNtwZRhE7Y9AOa mvNpWitQpxUndnf6VZw2GmwWkK7VjGPqfWpAq+aOgYdqztC1KS8hVbi3aCcD50zkDn1rWmVcLJzx 3FfFYinUjNqotT6ClOLj7oXKcB1JV16EcVe0/WNQW3WAzGSAEExvyCAc49cVTjdXB70y1H70qOma VGpKGsXYVSClujqrrVrHWJbaPVbbyoIiWcpkgnGAPYV0Gmx2l955tZrcxqgWNcDKkD72P89K4cJj mnhtpyBj3Fd9LNakH7yv+DOeeCi/hdjX03wzcajcHU9amXyMBl5wGH/so/xq946s7SHw2vlQxpmV UTbjGOvH5Vlw61fLbGzkl862ONyMOSoIOM9e2K0PFOtaZqmhxwRWzR3CyAqp6KMckEda644yhKjK MdG+/UxdGqqib28ijoPhaZ9NgubfVWtbmcEqqHgjsDj2qOdLzTbKSw1fT/tFrJL+8uYz8z4PPzfp zW7pemtoGgXF6y+dcyLuxnG0YyR/j+FZOh6pfa3e2lhNGhigbzJTzhwo4yPrWijCCjFXjJ9tV8ye aUnJ7pFj+1NNnsJpoVjYwOI7a0bAJJUKOPTk1i6po1nDZJcTWbTTsVDpBJtXcx6L+YGK6278N2N9 ePNc2cKxKmQ6fKWOecgelc5beGI9RlkvNLnNvZI+2HeSWZh3/P8AlXRVjUslKKk/67/5mdOUXqnY zdT8K2drpklwtxIHij3SbhkBj/D6g1y+wD0/Ku28Vf8ACQQ2kdjqUiyQsflZQCZCPU9TXJvCwyCv Q9DXiY2Uee0Y2PQw6ly6u5Aqps3N+ApiReadxHHara2rSOFA4FWvJWJPmwDjgVw81jotcz54kjUb Vye5qrIzP8i/iavTrv555PAqCeMxxZAyxPArSOhD1Me6VppTbRnB/iI6isfVNH2yq0H3jwxPeuqs LVQGZfvMcknrVe9jO8pIACOnvXXSnYxmetwtuxjp7VYPypuPA9T0qnbLeQhY5IMvgAnPfFTSl23L M3yKemOpr6yFWMo8yeh4C1MbWtYXc9qFMasNplmUqhyOxxjFctb6ZbR5ttPVUh+42BtQgHr+J54r rL268xjGm7Z3CjrWVBcWd7MbezlSVopDHMqn/VsOoPvzXJUzDDxbTmjojh6j2QukaTFHv8uaV92V bbgDB5xTre20uazEtnehU3tGGlb5WYNtxk+4xT/Ea36+HZV0qaW3kjkSR2ji3yGNWBcIPXH16His Xwz4Mvb9POvb2WHTzI01pGPv/eZkfBGFyJG3KRnhaUoUcXC+jRcZ1KMuxoXNu8EhSVPLPv0P0NNt kVSSSOT0Fb80LIBBuMwQBNz/ADFsDv61542n+INB0Z7y9l+2SR35ecp8/wDoxbBKLjjbwcc96+Qq Sh7WUKbWmnqe1B3ipSR2KAN+VR3Z2MqjjNUdBu5dS+0yWTRXENvcGASxsCsmADkHp/FWrdQzMQsk LpImCQR2/wAisoxlzNW2NG1YgXZtweSetMkBHBUsO1IUkye3NMeR1G1h+Iq9bk3RN9q1AWzWy3Dp A/DJuyDWloWtLplt5JskfknzFYhs+prGSRt+0/MKmVlPO3mtqWJqUnzRZE6UJqzR1c+uaP8A8I5P b2800c5TbtYHcWJ5P8627zSmm8OWljpjYt5NgkkzgiLqSPc15pOuRkKc+1W9L1zULKNore8ljTBU oTkfka9Klmrv+9X3HLPA6e4/vOz1ZDcazp2n26KzKwmcMMhFA+UH+f5VNr/h3Tb+6tElHkqC290G Gb5c4z9fWs3w34is7ewn+1ea12wYtKeTJxwM9uwrX8Q3v2HwzBGsm6WaJVBzkngbjXesRQnSlJu/ l28jm9nUhNRWhwGqWlvY3UsFvKZUU4DEc1kyqSSMnHc1pzgMT0qpOqxjrknoBXzTalJtI9ezSsym sYzmoJl8yXYvYc+wqzdt5MGcfO3AFQSRzR2gjj/185xnGcU1vcXQs2sEEeUaRd3U81DNBYzT+Sqi WU843hahfSbiB/MgbeW+8G71Dc2VxMpbZ5ZyMAHOaE5X0Y2o22PX1XeqN0zls+1YfibUtO0myM2p XkVnaowDySN95j29TXT36eSA44ABwOx44rx280+/8WePZb+dlj0jSJDDarIu4SzD77gHjg8ZPoK2 ljFPCwpKVlbX/I8bAUvdU7XN3WtQW6s4bXQXjuPtiENNE3+rRkbbID/vYrW8J+G7Pw1o019ftH9o lJmndjgMx5Jq1oGmWWkWhnFuwt4Wy21dxYk/ryagvdSuLqSSW8A8pWH7sAFbcHoT13y+gHT869DI cvUoe0ktOl+p0Yys78qepMupecBEdPukb5WhVAC+0/xEfwj6mr7x3OwLA3mDqz/xfSpPDFteRB7i b9xG44jlwZGOcl3J7+i9q0pI45JCyptPqpr3MThIVE1FuL7o4I1uV7XOcSJhkSKc+9PEIb+H866G SFJIws8e70ZRzTV0yBxmPeB9a+PxPDeJUr05KX4M9WnmNNq0lYwbWyFuPLtYYo1ZslVUAEnvx3ro YbdsDcgzjnjpU9pp8KNuXcxHdqvBOOOa9fJ8rq4WMpVXqzkxeLjUaUDMOnWsgPmW0bZ65WqF74e0 yRT/AKMyk/3DiuhaEN3qJomUdc/jXrSw1OW6OaNeS2Z5vqvhi+hcyWYMiDkKSA2KwGluI5WhmQo6 9Q3BFetXlxb26F5WUY9a898a69Z3EM0dlZw395Gp2Lv2AHsC/b6VwV8phPWGjOinjpR+Ip27Merb h+opJ4A2SvB9RXOeHdQur/TotQ8uS1ZgQ8Tc7WBwQPbI610FtctIRDcIYpMbhnoR6ivKxOW1sPHm lqvI76OLp1HZbhatJFLtbpWjlmjGScAcAniqMySA7j0qx5gjgBbknoO9ebrc61awyd2H3V59TUEc Z3bnOWNP3SSPkrgD3p7japbr71psiLXZmsDPqDEj93F8q+571IxX7QzebtA+UAGnqBGshHQDr71H HIiT+XIodNmWyMlT603sCauXoJ0xgfN+tRy72AkXIU84rjNe1qaCdYbGTY/LSkDI5PC/lVG98Tap PpxtNyxsSMyKMHAPQelehRyutUipLZng4niPB0Jypybuj6EuXlurCBIyBJu2jPPb9az1srWNAoWR cc+oJqzcXj21r9otbY3O0hvKBw3XnHvUNjqFvqjeZbt+7kyRgghTkjH6GssowNCpTbqRuc9DF1Ix Siyyl3EbY2gXZCQQc9SKqabp0FrIsiI0vlk+SCoCRjPUAd/frWrHaxFdrbRjv3pTDMuMSF4+wHym vrqaUIqMdgcnJ3ZCsM1zNmUnk9+wrSitNoHOAPenWMSDJ3Nu9zWhCq9M5q0IqRwAHccVIOD8o+Wp 5UUf4UiRsevTuKBXEXLcfyFOIVT15rM8QeIdL0G0aW6k5HREUsxP0HNcRefENbq5NvY28n2goXId T+7AH8Xp+NKwXPQ5biOKMu8gVQOSTwK4rxV46htbWdtNtLjUmh4ZLYBmJxnHJFeU654y17ULybT5 YJpZVYrtXKrjPUDv0NZ+m6pq2kTStdWM0MDEB3AEgUjgZA6dfb6VyYipV5P3Ku/M1w0qLnapsXoP EviTxFqzPr9tNothgiC2YEyzt0wfb2A5+lXNLsVXT7eQyKsZADg8fNitbRbJdakgmS9mkCHzPMUq pA9AAOPSugtvCtpJdhl86O3ChPLVuGwDgDufvGufDU8XFuckrvzZ316mHlFQi3ZeRU0XTobixEsD I4A3AjG3HTI9elJrWiXNxpsjLhmX5kKnDA12p077NpFtb7t0kYESv3Kcdaguzb26Fbi5iiUdAWr1 LXVpHm3s9Dy/w7rclwtza3iHNuwRn+ozk1spNHP80TggDBcdB9Kg1HTdOt9UvZ7CYuLxg0gIwFbb jA9u9cVbaxaaHf3UOoZcPDujiB+ZpFONo9M5/TNeJismjKV6btc9ClmDjF8y2O+jwCTk/nSXLlYR tXcSegPWvMLfxVq8cjSHytrsSIscKPTNdBY+LbWaJP7QjmiZMkBOQ1edUyrEU+l15GdLiHA1Hyud n5m9cTiRGjZXG7HTg8GsHX9Tks1kZSPPlUqo9B61cn8S21xGLPTLS4urmX5Y4wmSxrmNa0DXtElR tdsbi3a4JZJHIdHPXAYEj8OtdmBy6c3epGyR52b5yoUX9WfN5roZy5P3m3MeST60Y5rttN+F3iTV tBtda0ibTbq3uY9wjMzRyKQSCpyu3IIPesjWPBXi7R0Ml/4evxCCAZIVE6g/9syT+lfRqDS0R8NP BYl/vHFu/wAz3aGVLwNHIqhmU/d43DHOa5vwpaQ6Rq2oaPu2ncksZPUoSRn8K3rWGOaZVtXfzhg8 Dp7mmeJ9KlnmtdQhAhvbfjJ6SKeq5/zivz3LcV7Cdm/dZ9bSmblqhI8vguuc+49au29tIW3t17ZH FR6XCwZJ1A3mMAhvrWmonblpY1UdwK+4pTvFHapaEaRNj5l5+lIfNUnav51V1zVLfTIBNPctycKg UbmPtXnuqa9qWoSvvuHWBicRq2ABWydx3O01TxJpOnMRLcCab/nnF8xz+HSuX1nxjqV3BJFZD7Er AhZAAzr788ZrDKqUZflzj7oHNN2r9373AGSOlWkgOCHiS507UV8OeMbm4+1THdDqiyYWdS3Gf7vp jpW6ujrp8jztfTLbo2+O3QBVAxg7scuevJrK+LuhrqvhOe5RM3FgDNGQOSv8S/lz+Fb+mOdU8NWS WTG8mntl2lORnZg89uaT2dgk7LQ5yW7iW4GqbfKuYZixwSVlRuCp9COv4Gup0zQLvWp7q8MBispo ghYZMkqg9VHT1/8Ar1o+HfAljbW4v/E6qzCXMcBbKAA53e59B0rmPiF8XIdGtptH8I2xjkUlDcOu NhHoP8ef51nRhNuz3fQWHpVJpt7HZ3WveGPBGgRrKsaSqpEVrFgvJ3z+PXJrhI/jJq9xdSLa2Nhb k52sxLkD0HIrxPVdY1LVD/xMdRmuAWL4duAT1NXfB+i3eq6hHJbpst42+aVhwfYetdssFOC55SXo d0J4Xk9nyu/819vRf8E9Yl+JGtySg3zLcoTtAgl2ED0AGc1ffxU8kBa10uUOR1uDg/XjJP6Vk6do draOBDGrOOWkIGT+NWz+4IcYBHYDr6msL3W1jknGMZNRd16WKz32vTTmRHjXexYqsQAGTnqc1yGq p9q8SXF/KXZ0URktjG/+LAHA/wAc10mua/cAGys9sUjcvKOqD0HvWDDutmjaBmRoyGRlPzBh3+tJ 6ng5rj4wXsYvV7nZ+DvhZ4g8QRx3l0V0myfBWSdCZHHqsfB/E4rq/FnwfsdP8Ky3Wi3l5c6jb/vH E7KFlQDlQABg9x64x3qrZfGa+i8PeTc6clxq6EKs5OI3X+8wHOfYcH2re+06T8W/DJs0uX0/WrVS 4hMh2hsdcfxofXqv86TRhSjg5U3Cmryt1H+AdL03S/hX/blhapNqEtpLLLJjLsy7vkHoBjpWz4A1 jSviP4OuNK1a3jaZUCXUQ7Z+7Knp7ehFedeBvE194H1K58M+JIJIrQS5cEZMLf3x/eRvb616j8Ov CvhrTb258S6HePLFdxkAJMrQKpIY7cdOnc8UHRhZuaUYaJaNFb4LLPptnrXhW8ffPo9+yg/3o35D fjjP41s+H9O1HS7+/ubrxPLqVhLI3kwSqB9mO4/LvyScfdx7V5jb+OLDSv2gdf1R55P7CuLJLV5k BZWmjVfmUDqMgjNanhLx94ftvFfiKO41PZpV9di8s3lhYBWZFEqnjjLDP507m0K2HppQc1p5mjpk 772RZGVpfmBB6itSS7njtpEc7lC/MH5AFchoNy7tGytzEDyfp/8ArrpYoY5LAXF1clbdvmI7t7V+ WSTizOEmdL4evoriBY5PllVckH+Ieta53vGfKGSASMdK41FWGKOfesbsOIs5bH4dKr6nrOqWtsY/ v6c5w8qEiTJ/hb0+o619ZlOYRmlSluehRqX0KPxGmtL7UYkhKyJbjaS3OGJ+bn8hXNQTQxkxRZKD 3ztHpXTwaTYzRQXFlHDcrJ93ByVOejDsaut4PEytM2LMk7mJIx+VfQps6EclgqGbaAeOetB3KucY U8nvxjrUmvWDaUxmuLy1mgQkkpIRn8CK5iTxLczTt5NqioPuGT5v0/xrSKctiJVFHc6+PSP7Qs5H vriOw011IeaQ4LgjHyg9f5VlXWt+EfB/hiXRfCtgXjRDuuJicscctk8n6cCuX1XUbm6BmvrmSZh3 Zun09K5CeGbW9YhsoriG0t7grEbm7fEceTyc9vb1p1LQsm9WdWAozxMnJR92OrJdV8QeKviDr8dp aTTTuP8AVpEdqqB39FX1auF8XQzaX4g/srT71JprRgskltkr5w7A9Wx0z65r3bxPa2vg3w43hfwU sbalKu27v2+8vHLsR35wqjpnNcx4N8A2/wDalrYxKHupWzJPKuSqgZZuegxmiHLFWgtO/c6a2LqV tEuWPRI5Lw/8N9d8RTw3V3dW0fmN5k6F0jYr3IGRk/pXrOg+F5ZJTpuj2jRpAuCX+VcgdM8j0HFd Dodp4SuL+PS7WzutSu0yyTv8kZ2Y5XkAAduK7WwsdU022mktYY3ZskRSSbhn64Bptt7nM1FI8317 RDockNs95BcahcFQtrHGxZgxxkHpjP0rnr9prO8vbO/s5bae0TzHScgEqRwRjrXT20VwdauNQ8Qa paWzLOJJ5XlHmOynhVT7ygYHGPzrF1aeXxJrGpaxeN5QuE8i3QgB1iUHBI7E5JquVWZFSL5Xy7nn N/drEyySbTLPJwM4GT2/p+VddoF34Ngt45rvTr2/umP+pYk8+nBA/nXIeJvD7NtEzMNpPk3CHjP+ e1ZFp52josl1NKzPIVDxk/KBzuJ6/h9ay1R8zh40k2qi9++t1d/I+g5brT10ow6l4D0+LRHCrK8E yfaFLEBSqgAlskcA5rjPHPh+4+H3iGy1DSNW+WUtJbEkCaMDqHHQjnGeh54rF8O+NIBrdrc6pNJe fZUJtlXhUfH3iP72OAfeuN+KHii/1vWHaeRvPmADhT9xP4Yx/n+dDlodGIowq8qSs++1j3BPFvgP 4raFNpmtahFouvWkDYuRheAMs0ZP317lDz6eteO6FYf2TbyRpcSSbnOWBKqwzwdvbiqPh7RY9PhS 4lQNctycjOz2FbhXII9aLtnlY/HJ/u6b06vuZuqtrdvAb63g3WP2gwmYjKq+0MFPoccj/wCsagt9 bjkOy8UQOOjZ+Rv8K7z4Xma78Qaj4fW3i1Kz1KzP2nTZn2JOycgh/wDlnIASVbpxg9cjnviR4Iuf CsqXUkF1Jo1wxEE88e2SB+8UoHRx6j5WHIp2bV0dVPBUqtBSUfu3PTNNuTDerEh+VkbP0xXT2TL5 NpFOzPgbUGeBzXF6dzq0A46lfwxW7NdNG8e08qBgd85/+tX5tVhc6Tr7uSIX628CLiNcMQMlmqa0 eO3uTFOA1vMNr7hxise3uNhH8O4ZLHqTWxCRLFsZg3HpXPGTgzWnOzJH0m3sd32dmjjk5DocZ9qz tfv/AOz9O+0arqKm2TlVccs3p7/StfT5fIzaXPNu/wBwnop9K88+KHhPVBff2t9olv7BeVQ9bf6g dR7/AJ19jlWaQqtUqztLo+52+2904jU72fWNRa8uPlXJEaDOFXt+NQ3EyQRnJq1b2dzcxSvbxjZC uXYnAHt9cVSl023mYvf6pbgAjbChJB/3iOfwFfUSqxgrCo4ariJe6mytaWepayxkt7S4lgGcui5A A6nPTiuuXRYSJ7GPTJLezlRIpIXTexdAfnJxw/zHgdjWRpetDQ9Rjns40aP7s0UTkxTR+hHGDXpM /iKxvLO0vtIvrVnN693JHI+10JAAUr1PGRXnqnCc3OTuz6nFPFYTDxpU48kPLdvzZX8C+Dxd6hFd 3yZ0+MMQYx/EBn5vQYzz3q7FHpOneJ9QjvJG060vbaSGGd02eUHIIPP3QemT7VraP4msbeGVLW4D SEeXFGuQ6oTlVwRyVJIB9MVQ1K2l1YmS6sponKny1cAO/Xjacnbnku2fQV0nhqTvc5XS5F0fX4Li J47gWVwVbyHDLIvKttPfIJwPpXrel6xY6jZpe2haa2bIDKOh7g+hHpXC2HhaGORhcIn2eMZfCiNU PXBJ+76nv0rasV8L+GdMub5dXtoGYmSeSK4BLnsAmTn0HGaa12K+JGh4g0PTdaZI4rQRyyy+ZNdg /NGvGQM926AdByasavLonhPw/LOLeG2gjXaqRoN0jHoo/vMa80l8b+KrqGS6sVtraCRyYDNBulEf qcELk/Sucl1IXt0NS1jU59RuYSceZwqeyoOFq7JfEVaUmo3ueparZeDde8Ox6xfSRW9mmPPkyIjx 1jfvn9fTrXgGvWdml9czabDcSaLJKVt5LhQCw9/6V0b3NpqF9bxX1lu8yT5GQnaP6Njua2Tp8D/6 LI2bdwQV27hjHpU80JR03OXNMqcklNWfRnlVvY2tm8l3E37vbkDOQMc8VyuiRNf6813MMhSZDn1z x/n2rv8Ax14aXQYtRk028+02bxMxhH+sgOQGLjty3Ht1rlfBkKvaXT9yyqD+FZyi1ueBKNXD0qkq ju9rnSAbgM+lavhe10u616ztNZu5LSylkCSzIASmeh56DPU9utY9uxx5b9uhq3DbyzrJ5Mckmxd7 7VLbV9TjoKaPnE1Gd2ro9ub4L6ct9Z6x4f8AEV5Y3FpKC0qhZCQuc4xxuzx6Dkc1veE/EcHiDULv wn4o0yC31WIbzaTlJUnjByrYGRuGASvbqOK8F8PeI9b0O7WXT9QmjADgxMxaN1b7wZehz/8AXrjW 1TULPxbJeaXesl1GoG/fnnaVP6HGabZ9Jg8dSk7Uo2tv2PU7L5bxWXqpJU++a2of3mqMewbcBWQi kYZBypJ49M5/rWzpYBuDO/ZQSPU1+c1GbGlfsfMXHYA/hWv4fuPOuJV+8I13E/XoK5rULwIrSE84 wBXU+DbX7Josl5cD5pMu2e3pXNJLl1COrNyONLiIqyggjkVPaTR2sP2e9mRUztjeRsBh/dJPevNv iZ4+l8FeHY5oIkfUtQLLZRyDKoo+9Kw74yAB3J9q+ZvE3iDXdbvnvNU1e9u5mOcvKcD6DoB9K9fL skr4ynz35V0O6jBtXPsbXvBsE9ncf2OIbZ5lOYyMRkk9eOn8q4m90O4sYvKutMRpM7VEgULj1zXj /wAMfjN4k8IyJaXsj6vpWeYJ3y8Y9Uc9PocivqDwH4y8M/EDSWm0m5SV1A8+0mAEsR917j3HFd0q 2Ny33ay54dzspVJ0Hdfr+h4Z4lsZLG4RZILWEuMhICTxnvmqFrNJZyrPEdrKcjn9K+i9R+HXhu7v xdvayLJjkpKQD+B4qbSfC/hvQY/LtNMtzI5OHlUSOBjpls0pZ9SteMXc+qjxLRVBQnBt/h+rPGPC +raddatbDVN1tGXDMQMhvoa9Mm1PWLcNJN5E8ZBMc1uQu5eww4ww+hrkPEWjW9vreoW3lRtayS+Z FHtAChhkgenNN0O8uNGb7Ou68snz+7bLPAfVTkflmvo8NV9pBS7niV3h6kuaireQ3WvEUmp6cmiP ZyWVjF810khHmXMp5IIBOEyc9Tnj0rFtdLsJLoSW+nW4YdCq8D39Kv6mlt9skaFlaJm3hsYHPPQ9 PpWHcaxcLM8+n/6Rawjy5EiQgg/3gT97n0rthzyfuuyOVttlnWb66sLnzkiMltGuJxGQzpnufTFU 9A0FpJo9Qubu4kSQfu18va0gPPz+tQaboN5NcJeT3jAsMswGJDz0PrnpzXd2K2en6c+pXCRzFZI4 Yo55MISxJLNnjaqqzEd8AVs5WXJDcqKvsZiaPYeZ5kStCw4BAq1BZrbDzJppnkHKhcKMe5/wq3aW Wu3Kte3F55EUpVoke6SEFduGAAOCC3IIAH6gU4bq6sdQh07WbYyOwyGSEK5JJO5cfKVwAec5J4Pe sXSSvqtDWVOT1vcqL4dXUPEMOsQsqzwMm+LZkOBxvPGOB13dR3z15DW/Cv2CWfUdPhjVLs+fLawD 5YvUr7Z7Y6YxXo1293pwkijjCCUEb8Z3rWN9mllkjggVi7HaoXnJqI11WgnF3RyYzDxrUnSqI80d Qw3qcn2rd8E+K5fCeuJrCBWiCmO5jYZEkRxuX9OPpXTePPBdtpHh86019FDeZzLB/BJ7L33fzrzH WI/P02RouQMEjvgGpcWlc+KnhZ4XEKLfzO7vtL0vxDdXPiY3I8IeGJCfLeeIyP5uD8oVWPBOcHgH BA5rz7xXrGiSRWlroWhz27xsxuL1rgytcnoCowuxcc4xnn2r1rQfCjfEnTJdP1/VI9P0rQ5kh0v7 PCAPKaJZcSHHTYRg59eDVDxr8KfDnhrSotR03xLYXTZ2+SzAO4J6ptzngrn880WbPbnSp0Ic8YX/ AK9S6qrb7kPUEYJ7rirUUvkw8nB7fSqUrEwQyscsRg/Sq97cMdsSEl2O1a/OrcwmaWjwvqmqoG5h jbn3NektGJIYLFf9XkNIR6DtXN+ENMW2gXd1A5J9a6uEfKzcZxXNN80rI0pxPnD9p++Wfx1aWaNk WtguR/dLMx/livKcb1w1dd8arxrv4ma3IWJEdwIU+iKF/pXHxsN3zcj0r9Oyqn7PDQj5HowXuorT xFfu/pVvw9rWp+HtWh1TSbuS1uoGyjocfgfUe1SLskBC8VWuLZsEqvHauqth4zi01dGiZ9cfCP4t WnjaxWzmhEGtxL+9gEpCyj++g9PUdq7+0jaS8b7RCEJA2HPIr4Esrm50+8iurWaW3uIWDRyxsVZG HcEV9K/B341Nr11Y6D4qkig1Anyob8YVLj0D9lfI69D7V+f5tkEqDdWhrHt2Mp02tUeg+OLM2dx5 xDHzBgHPX2rjbrzSrbf3ZbABPOK9V8V25u9JlhuY/wB/BiRcfxAd688ukEUXXPHGPrXr5DifaYfl 6xLpPSxwcWm6v/bUonK3EJB3SsQAVP8ADj+grZ07TlsbdoYt6oZCQGOQoPYDtWz5TM24cEnoetPj jJUh16eor6OVWU1Y3uQCPEJ8lSQpBJxVjU983hy13xqFhvCWYnYPmjk6t/CBtySOea2bfQn8R29h 5K3lslrId8iT7Q4xxzt7Y468ZHeuS8Q6dr2ueKLzw9pEjQafYTASXDEgBwuMlupPJwB7mueeIjh/ fkepgsBHEPSaXe/Q6XWI5hYSX0Fu001vYAkElVyqdB+tcD4M8eRQ6+kHiS/SO2mi8u1VhgK27gA+ nzHrTvEMOu+F7qHQ7bxBfX93ewu0kESbwkXTdhs9eQB9T0FcDq1tNqOnQaPP4iglhDFoY57DE6ks eEKDP4A+1eRVnVrXVdJxfSz2/X8D01SoUKclTXM3tLb8z317vw7faxFaajqTwysrLDCY5EVu5O4q Afu1s+HdFtEuWuNPl+1MV+WfIKIp7jH+TXjvg34e68+nW91JJqFzaZLJvuCJG7fKufkU/mfauzs2 fT7COwiJt7eH5Vgj+VU56Y/nXLUzWnlsI04Ut9rKyOL+znife9pt31aOz8R+AdF1+ZJtVmvpvLGE VZ9qL6kACuQ8S/CnSFsXbw29zHdqMhJpQ0co7g8cfWkjur5T50V1NEYyW/dMG4x3B4NJYePrXS9Q k/tjVJrmG5G2JxFu2yqcFAqjIPI49vevdwuY1sRSSqR5fK9/0PCxuU0btfF5nDf2vdWuk3fhzUFk tJBFHF842/NCzFFb32vIoPcBBXIeJrq40/SDfW8aOqzpExYcAsrEZx/umva/EXh258bTC7e1TTIU QiGSSP8AfTjsXH8K+g61zUPg3UNHspl1jRotYsbyTyZbAhyJNmGSQSKPkwc4zjI3DvXQnc+brZfU jXi6i5oognmZvlB+UcCrnhOyOoap5zDKIdq5/nVC9jIAjX7zkKv+Nd34L08W1nkrhuOMV+dVJqMN DpgtTpkjW3hESjPGc0y/vrTSdMlvL65jt7aJS0kjnAUVBr2rWGh6NNqupz+VbW43OepJ7KPU+1fL XxX+I2o+Mr7yU32umRN+5tg3U/3n9W/lWuWZdVxk9Ph7nZTpuTOf8b6nDqvivVNRtyxiuLuSSPcM HaWJBI+lYyNmom6e9Oh6k1+j0o+ziorodyVkWkl8sYHU9asxXCbfmPOazHYluPzqe0jknuUjRSzO wVAOSSTiuiNRoOU9F+Enwx1L4ia2cB7TR7cg3d3t5P8AsJ6sf0HNXvjZ8JNS8HXI1PSoZJtJIAd1 GTEQMZb6+vTPpX1J8MBo+leF7PRbC3S1jtowGTuWx8zE9yT3o8b+N/AOiwva+INf05d4KtbhvNcj 0KLk/nXJVfNK5SR49+z38U38SWo8GeJJi+pxREWFy5+adFHMberAdD3A9evRztuuGUqeCRnuTXif jfVvA3h74h6d4k+Ht090bWcTyW727LAGH90nDc56Yq3afHK7t7kzXXhmwuVLlsec6k8/iMfSvIo4 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 ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://buttons.blogger.com/bloggerbutton1.gif R0lGODlhWAAfAOYAAPjx6P9mAABDev///+jcy8i1n+/m2e3j1ezi1O7k1vTr4fPr4PTs4vXt4vLp 3vPq3/Hp3fHo2/Dn2kJxl7bDy/+zgOfl4SFaiRFPgYSgtf/Zv/8AAP+MQFN9nw5NgNfa2XSUrf+W UB1XhjJmkDxsk8bO0jxskv9wEGOJpjtrkUFwlrW/xJWrvLS+wrW/w/ngy//Gn/yaV9LSzrW/xdXW 0ztskv/iz0p2mPmWUsTKy/5uDvDUu0t3mZeruLbAxkt2mdXV0sTJybO/xv/s3/HWvlqAnvmVUYae r4efsP9vD1F7naW0vcTKyniVqmmLpdTU0ZWptf+DMJirueTg2ixhjNTW1Et2mC1ijYegsniWq7O+ xv/172iKo6e2v5aruKSzu7TAxsPJzP+fYJaptsPIyHmWrGqMpkp1l2mLpLO9wQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAEAABsALAAAAABYAB8AAAf/gBsbBISFhoeIiYqLjI2OiIKDCJOUlZaXmJmam5ydlwSDB6KjpKWm p6ipqqusqAUECbE7RgG1tre4tkY7sb2+v8DBwsPEwa8GBkQ6uczMOkTI0SkpUNFcKWdf0dvc3d7f 4NHHBjjN5rg43Gkp2ylHRyLh8vPzrxIS5/m29/wtNfwSarSQIUDGGA8iyCC5IcEDEn8Sbghg2IJK QYAYM2q89ypCBGYhKogUKeaEOY8oXZhAGcFEERErPSxBYyKIBxcCrDQpskREBBEuXIgIwrKo0aMo X0GAgOuEhgFQow7YEqLZ0qsrTFyFYALLCghMBEBYIVaAkx8efnjJIqDtiqxb/+PKnbv1lQMHuJ5K 3RuF2d2/M0j8dUBixl8BT3oIJuGhhwgROXKIACx4sOXLmP++evDgVoi9oGEw40z6igcppEn4IG3G g4AuD8oIAMLDA+faHoD4IEG6t+/fwB+8WrDgVoWoMDgo/wx1CDPi0KNLh05jyvToNGhc385d+isF CoxHrVrrxJCoJnGBX8++vZYw7ePLn0+f/isGDMRHtaFBr1QNHNyC34BKqGCgEkLgJ4QAKgzo4IMQ RijhhPi90kAD+oEGWgW3XOhhWyAKUEUDYDDo4Ykopqjiiixe+AoAAGSooVQc2gLjjW0BYEEHAmQA AAUCTHDjkEQWaeSRSML4Yv+Mthy3X3/92UDjLUTmCAAIPf4YJIwWoNAWChbAWMIFAoCQQQdcThAk CxN8AGMGGAQZJgAdZOAlC0QumSF5nkVVYy1V9ggCBheECaSQAKh5AZmIknlBnALA6CWhbVEAAAsC XDDClgC09ailQ+rZJHLKlcoBDH5SOWSIZcJ4qI4CYGCBBXFa8EGsWkYKAJkl0CqApZu6SWaYbX0w Z6gEwNjnjHsFaOOqv1KwKQhaCvlqotFyaqWValraVgYZkOmtrkWKaot/zGqAS6Cu5vjqtd1eu62u 3XYa5AT4umlluckyaYtTzA6gQXrP4qhrBu5uaUGss9Z6Kwa5wsirr8AKUALHu0aa69lIHFfg7LrQ 4tsWmkBi4KOijEoswAiQSpopmb8CgDAGE7AM47559quPPkRCOvKcm6K5489ikomlrhaoWXPMMsPc gZsYQJxxvzHsbE4MSWaNJM4w1qs1vzC+kITVuSTxwtdfs2AmjxeIiUIGR7uJNrI3vlA12bXEcPbc WfPYFgZ4yhwitXzfuGThiPNdAgUUHAvAB4zLnXgBGxSQ+OWYZ65kJAV07vnnoIcu+uikl2766aFH ovrqrLfu+uuwxy777IIEAgA7 ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/css/blog_controls.css .item-control { DISPLAY: none } .item-control A { TEXT-DECORATION: none! important } .item-action A { TEXT-DECORATION: none! important } .widget-item-control { FLOAT: right } .quick-edit-icon { PADDING-RIGHT: 9px; PADDING-LEFT: 9px; BACKGROUND: = url(/img/icon18_edit_allbkg.gif) no-repeat left 50%; PADDING-BOTTOM: = 9px; MARGIN: 0px 0px 0px 0.5em; PADDING-TOP: 9px } .widget-item-control .quick-edit-icon { BACKGROUND: url(/img/icon18_wrench_allbkg.gif) no-repeat left 50% } .delete-comment-icon { PADDING-RIGHT: 7px; PADDING-LEFT: 7px; BACKGROUND: = url(/img/icon_delete13.gif) no-repeat left 50%; PADDING-BOTTOM: 7px; = PADDING-TOP: 7px } .email-post-icon { PADDING-RIGHT: 9px; PADDING-LEFT: 9px; BACKGROUND: = url(/img/icon18_email.gif) no-repeat left 50%; PADDING-BOTTOM: 9px; = MARGIN: 0px 0px 0px 0.5em; PADDING-TOP: 9px } ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/css/navbar/classic.css HTML BODY { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-TOP: 0px } BODY #wrapper { MARGIN-TOP: 30px } BODY #header { MARGIN-TOP: 50px } #leftcontent { _margin-top: 30px } #rightcontent { MARGIN-TOP: 30px! important } #Main #Title { MARGIN-TOP: 30px! important } BODY #wrap #wrap2 #header { MARGIN-TOP: 0px } BODY #wrap { MARGIN-TOP: 34px } #blog-header { MARGIN-TOP: -4px } BODY #wrap4 { PADDING-RIGHT: 15px; MARGIN-TOP: -4px; PADDING-LEFT: 15px; = PADDING-BOTTOM: 0px; PADDING-TOP: 15px } #space-for-ie { DISPLAY: none; _border: 0; _display: block } #navbar-iframe { Z-INDEX: 500; LEFT: 0px; POSITION: absolute; TOP: 0px } ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.blogger.com/img/navbar/3/btn_search_this.gif R0lGODlhYAAPAMQAAERERF5eXmRkZDc3N5KSknFxcWtra1hYWFFRUYWFhT09PUxMTIyMjHh4eGdn Zzg4ODU1NTk5OUtLS11dXX5+fi8vL39/f0pKSpmZmWZmZjAwMAAAAAAAAAAAAAAAAAAAACH5BAAA AAAALAAAAABgAA8AAAX/ICQFmZOdaKqubKuabizPZRYs0HJFleb/wKBwSAz2isikEhiRLCYP33FJ VU6rWGuEpKlcs2BpeDzsVU5mzYGAOWgumPjFZ8AYfHAMwa0BMOxvGD4Ycz4CcRgWgYNzcmpsfHiI Aj4WlD5rgJhsBV4+JZ4VBAgDA4tACRYJkhoBghoMARoKp4RBtrVzAooao6VAcBoIr5Y/owoYALPJ fWJoXb0JhXAXhQNtGKbUBasA2T/U1LfThOK7PgTSQdurGsWnxQHtQWiefhgIgRa8wxr4gQkIzAkG LpEFXD9wwdln61yfP/kKWmBQoNIlgsV25flxxoGQBooI0iFggcCdYAYUr3mjxcpfoYTkGGlw6AMk MEHXlL3zZiqBrAMMAk05Aa3VhQYVw5myUOBCgZCCkNFK0HTgK4Qyc2ngZirA0YoFL7jS2ZQWAwHD aCkgEMBVFy9EPaUsYArAPgs6ldntw8uAmwFPZe11pwwIhcKD8bpTPNfUD7v7Iqa04AYAyIh9QN55 +8wTGTCeP48xcybAgzSis3xJDSbCBB1RVrNGInt2Ei8PnOSYQKO379/Afd+AEAIAOw== ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/css/navbar/navbar.css?v=1 #b-navbar { DISPLAY: block! important; Z-INDEX: 1; MIN-HEIGHT: 24px; LEFT: 0px; = MARGIN-BOTTOM: 10px; PADDING-BOTTOM: 4px; FONT: x-small "Trebuchet = MS",Verdana,Arial,Sans-serif; WIDTH: 100%; COLOR: #47a; BORDER-BOTTOM: = #024 1px solid; POSITION: absolute! important; TOP: 0px } .bt1 { FONT-SIZE: 1px; MARGIN: 0px 1px; LINE-HEIGHT: 1px; POSITION: relative; = HEIGHT: 1px } .bt2 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 83%; PADDING-BOTTOM: = 2px; PADDING-TOP: 2px; POSITION: relative } #b-next { PADDING-LEFT: 5px } #b-search-this { MARGIN: 0px; TEXT-TRANSFORM: uppercase; CURSOR: pointer; WHITE-SPACE: = nowrap; POSITION: relative; TEXT-DECORATION: none } #b-flag-this { PADDING-LEFT: 5px; MARGIN: 0px; TEXT-TRANSFORM: uppercase; CURSOR: = pointer; WHITE-SPACE: nowrap; POSITION: relative; TEXT-DECORATION: none } #b-navbar #b-logo { BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; LEFT: 5px; = BORDER-BOTTOM-WIDTH: 0px; POSITION: absolute! important; TOP: 0.15em; = BORDER-RIGHT-WIDTH: 0px } @media All =20 { #b-search { MARGIN: 0px 0px 0px 34px; HEIGHT: 1em; BACKGROUND-COLOR: #147 } #b-search TABLE { PADDING-RIGHT: 5px } #b-search TD { FONT-SIZE: 80%; LINE-HEIGHT: 0.8em } #b-more { FLOAT: right } #b-searchbtn { MARGIN-RIGHT: 5px } #b-more { FLOAT: right } #b-search TABLE { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FLOAT: left; PADDING-BOTTOM: = 1px; PADDING-TOP: 1px } #b-search A { LINE-HEIGHT: 1em; TEXT-DECORATION: none } #b-search A:hover { LINE-HEIGHT: 1em; TEXT-DECORATION: none } #b-search TD { LINE-HEIGHT: 0.8; PADDING-TOP: 2px } #b-search TD TD { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } #b-searchbtn { DISPLAY: block } } @media Handheld =20 { #b-search { DISPLAY: none! important } #b-more { DISPLAY: none! important } } .navbar-right { PADDING-RIGHT: 10px } TD.navbutton { PADDING-RIGHT: 5px; PADDING-TOP: 0.3em } TD.navsearch { PADDING-LEFT: 5px } #b-query { VERTICAL-ALIGN: top; WIDTH: 12em; MARGIN-RIGHT: 0.25em } #b-query { FONT-SIZE: x-small! important } @media All =20 { BODY DIV.b-mobile { DISPLAY: none } #b-sms { DISPLAY: none! important } } @media Handheld =20 { BODY DIV.b-mobile { DISPLAY: block } #b-sms { PADDING-RIGHT: 7px; DISPLAY: block! important; PADDING-LEFT: 7px; = FONT-SIZE: 100%; PADDING-BOTTOM: 4px; MARGIN: 0px 0px 0px 100px; = LINE-HEIGHT: 1em; PADDING-TOP: 4px; TEXT-ALIGN: left } #b-sms A { LINE-HEIGHT: 1em; MARGIN-RIGHT: 0.5em; WHITE-SPACE: nowrap; = TEXT-DECORATION: none } #b-sms A:hover { COLOR: #fff; TEXT-DECORATION: underline } } @media All =20 { #flagi { PADDING-RIGHT: 1px; DISPLAY: none; PADDING-LEFT: 1px; Z-INDEX: 300; = PADDING-BOTTOM: 1px; PADDING-TOP: 1px; TOP: 7px; BACKGROUND-COLOR: #333 } #unflagi { PADDING-RIGHT: 1px; DISPLAY: none; PADDING-LEFT: 1px; Z-INDEX: 300; = PADDING-BOTTOM: 1px; PADDING-TOP: 1px; TOP: 7px; BACKGROUND-COLOR: #333 } } @media Handheld =20 { #flagi { DISPLAY: none! important } #unflagi { DISPLAY: none! important } } #flagi-body { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; FONT-SIZE: = 10px; PADDING-BOTTOM: 3px; LINE-HEIGHT: 14px; PADDING-TOP: 3px; = FONT-FAMILY: "Trebuchet MS", Vedana, Arial, Sans-serif; = BACKGROUND-COLOR: #ffff99; TEXT-ALIGN: center } #flagi-body A { FONT-SIZE: 10px; COLOR: #3366cc; TEXT-DECORATION: none } #flagi-body A:hover { TEXT-DECORATION: underline } #unflagi-body { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; FONT-SIZE: = 10px; PADDING-BOTTOM: 3px; LINE-HEIGHT: 14px; PADDING-TOP: 3px; = FONT-FAMILY: "Trebuchet MS", Vedana, Arial, Sans-serif; = BACKGROUND-COLOR: #ffff99; TEXT-ALIGN: center } #unflagi-body A { FONT-SIZE: 10px; COLOR: #3366cc; TEXT-DECORATION: none } #unflagi-body A:hover { TEXT-DECORATION: underline } ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/css/navbar/3.css?v=1 #b-navbar { COLOR: #999; BORDER-BOTTOM: #222 1px solid; BACKGROUND-COLOR: #111 } #b-search TABLE { BACKGROUND: url(../../img/navbar/3/corner.gif) #333 no-repeat left = bottom } #b-query { BORDER-RIGHT: #555 1px solid; BORDER-TOP: #555 1px solid; BORDER-LEFT: = #555 1px solid; BORDER-BOTTOM: #555 1px solid } #b-search A { COLOR: #ccc } #b-search A:hover { COLOR: #fff } #b-search TD { COLOR: #fff } #b-sms A { COLOR: #ccc } #b-sms A:hover { COLOR: #fff } #navbar-logo { BACKGROUND-IMAGE: url(../../img/navbar/3/logobar.gif); WIDTH: 24px; = HEIGHT: 24px } #b-search-this { BACKGROUND: #333333 } .bt1 { BACKGROUND-COLOR: #555555 } .bt2 { BORDER-RIGHT: #555555 1px solid; BORDER-LEFT: #555555 1px solid; COLOR: = #cccccc; BACKGROUND-COLOR: #333333 } DIV.bt2:hover { BACKGROUND-COLOR: #555555 } #bt-flag { PADDING-LEFT: 8px; BACKGROUND: url(../../img/navbar/3/flag.gif) = no-repeat left 50% } ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/js/cookies.common.js // Copyright 2005, Google Inc.=0A= // =0A= // Operations on cookies that are common across our pages.=0A= //=0A= // Original Author: Pal Takacsi-Nagy (pal@google.com)=0A= =0A= =0A= /**=0A= * Sets a Cookie with the given name and value.=0A= *=0A= * name Name of the cookie=0A= * value Value of the cookie=0A= * [expires] Expiration date of the cookie (default: end of current = session)=0A= * [path] Path where the cookie is valid (default: path of calling = document)=0A= * [domain] Domain where the cookie is valid=0A= * (default: domain of calling document)=0A= * [secure] Boolean value indicating if the cookie transmission = requires a=0A= * secure transmission=0A= */=0A= function setCookie(name, value, domain, expires, path, secure) {=0A= document.cookie =3D name + "=3D" + escape(value) +=0A= ((expires) ? "; expires=3D" + expires.toGMTString() : "") +=0A= ((path) ? "; path=3D" + path : "") +=0A= ((domain) ? "; domain=3D" + domain : "") +=0A= ((secure) ? "; secure" : "");=0A= }=0A= =0A= /**=0A= * Gets the value of the specified cookie.=0A= *=0A= * name Name of the desired cookie.=0A= *=0A= * Returns a string containing value of specified cookie,=0A= * or null if cookie does not exist.=0A= */=0A= function getCookie(name) {=0A= var dc =3D document.cookie;=0A= var prefix =3D name + "=3D";=0A= var begin =3D dc.indexOf("; " + prefix);=0A= =0A= if (begin =3D=3D -1) {=0A= begin =3D dc.indexOf(prefix);=0A= if (begin !=3D 0) return null;=0A= } else {=0A= begin +=3D 2;=0A= }=0A= =0A= var end =3D document.cookie.indexOf(";", begin);=0A= =0A= if (end =3D=3D -1) {=0A= end =3D dc.length;=0A= }=0A= =0A= return unescape(dc.substring(begin + prefix.length, end));=0A= }=0A= ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/app/scripts/common.js // Copied from .../google3/javascript/common.js=0A= =0A= //-----------------------------------------------------------------------= -=0A= // This file contains common utilities and basic javascript = infrastructure.=0A= //=0A= // Notes:=0A= // * Press 'D' to toggle debug mode.=0A= //=0A= // Functions:=0A= //=0A= // - Assertions=0A= // DEPRECATED: Use assert.js=0A= // AssertTrue(): assert an expression. Throws an exception if false.=0A= // Fail(): Throws an exception. (Mark block of code that should be = unreachable)=0A= // AssertEquals(): assert that two values are equal.=0A= // AssertNumArgs(): assert number of arguments for the function=0A= // AssertType(): assert that a value has a particular type=0A= //=0A= // - Cookies=0A= // SetCookie(): Sets a cookie.=0A= // ExpireCookie(): Expires a cookie.=0A= // GetCookie(): Gets a cookie value.=0A= //=0A= // - Dynamic HTML/DOM utilities=0A= // MaybeGetElement(): get an element by its id=0A= // GetElement(): get an element by its id=0A= // GetParentNode(): Get the parent of an element=0A= // GetAttribute(): Get attribute value of a DOM node=0A= // SetInnerHTML(): set the inner HTML of a node=0A= // GetInnerHTML(): get the inner HTML of a node=0A= // ClearInnerHTML(): clear the inner HTML of a node=0A= // SetCssStyle(): Sets a CSS property of a node.=0A= // GetStyleProperty(): Get CSS property from a style attribute string=0A= // ShowElement(): Show/hide element by setting the "display" css = property.=0A= // ShowBlockElement(): Show/hide block element=0A= // SetButtonText(): Set the text of a button element.=0A= // AppendNewElement(): Create and append a html element to a parent node.=0A= // CreateDIV(): Create a DIV element and append to the document.=0A= // CreateIFRAME(): Create an IFRAME and append to the document.=0A= // HasClass(): check if element has a given class=0A= // AddClass(): add a class to an element=0A= // RemoveClass(): remove a class from an element=0A= //=0A= // - Window/Screen utiltiies=0A= // GetPageOffsetLeft(): get the X page offset of an element=0A= // GetPageOffsetTop(): get the Y page offset of an element=0A= // GetPageOffset(): get the X and Y page offsets of an element=0A= // GetPageOffsetRight() : get X page offset of the right side of an = element=0A= // GetPageOffsetRight() : get Y page offset of the bottom of an element=0A= // GetScrollTop(): get the vertical scrolling pos of a window.=0A= // GetScrollLeft(): get the horizontal scrolling pos of a window=0A= // IsScrollAtEnd(): check if window scrollbar has reached its maximum = offset=0A= // ScrollTo(): scroll window to a position=0A= // ScrollIntoView(): scroll window so that an element is in view.=0A= // GetWindowWidth(): get width of a window.=0A= // GetWindowHeight(): get height of a window=0A= // GetAvailScreenWidth(): get available screen width=0A= // GetAvailScreenHeight(): get available screen height=0A= // GetNiceWindowHeight(): get a nice height for a new browser window.=0A= // Open{External/Internal}Window(): open a separate window=0A= // CloseWindow(): close a window=0A= //=0A= // - DOM walking utilities=0A= // AnnotateTerms(): find terms in a node and decorate them with some tag=0A= // AnnotateText(): find terms in a text node and decorate them with some = tag=0A= //=0A= // - String utilties=0A= // HtmlEscape(): html escapes a string=0A= // HtmlUnescape(): remove html-escaping.=0A= // QuoteEscape(): escape " quotes.=0A= // CollapseWhitespace(): collapse multiple whitespace into one = whitespace.=0A= // Trim(): trim whitespace on ends of string=0A= // IsEmpty(): check if CollapseWhiteSpace(String) =3D=3D ""=0A= // IsLetterOrDigit(): check if a character is a letter or a digit=0A= // ConvertEOLToLF(): normalize the new-lines of a string.=0A= // HtmlEscapeInsertWbrs(): HtmlEscapes and inserts s (word break = tags)=0A= // after every n non-space chars and/or after or before certain = special chars=0A= //=0A= // - TextArea utilities=0A= // GetCursorPos(): finds the cursor position of a textfield=0A= // SetCursorPos(): sets the cursor position in a textfield=0A= //=0A= // - Array utilities=0A= // FindInArray(): do a linear search to find an element value.=0A= // DeleteArrayElement(): return a new array with a specific value = removed.=0A= // CloneObject(): clone an object, copying its values recursively.=0A= // CloneEvent(): clone an event; cannot use CloneObject because it=0A= // suffers from infinite recursion=0A= //=0A= // - Formatting utilities=0A= // PrintArray(): used to print/generate HTML by combining static text=0A= // and dynamic strings.=0A= // ImageHtml(): create html for an img tag=0A= // FormatJSLink(): formats a link that invokes js code when clicked.=0A= // MakeId3(): formats an id that has two id numbers, eg, foo_3_7=0A= //=0A= // - Miscellaneous=0A= // IsDefined(): returns true if argument is not undefined=0A= //-----------------------------------------------------------------------= -=0A= =0A= // browser detection=0A= var agent =3D navigator.userAgent.toLowerCase();=0A= var is_ie =3D (agent.indexOf('msie') !=3D -1);=0A= //var is_ie5 =3D (agent.indexOf('msie 5') !=3D -1 && document.all);=0A= var is_konqueror =3D (agent.indexOf('konqueror') !=3D -1);=0A= var is_safari =3D (agent.indexOf('safari') !=3D -1) || is_konqueror;=0A= var is_nav =3D !is_ie && !is_safari && (agent.indexOf('mozilla') !=3D = -1);=0A= var is_win =3D (agent.indexOf('win') !=3D -1);=0A= delete agent;=0A= =0A= =0A= var BACKSPACE_KEYCODE =3D 8;=0A= var COMMA_KEYCODE =3D 188; // ',' key=0A= var DEBUG_KEYCODE =3D 68; // 'D' key=0A= var DELETE_KEYCODE =3D 46;=0A= var DOWN_KEYCODE =3D 40; // DOWN arrow key=0A= var ENTER_KEYCODE =3D 13; // ENTER key=0A= var ESC_KEYCODE =3D 27; // ESC key=0A= var LEFT_KEYCODE =3D 37; // LEFT arrow key=0A= var RIGHT_KEYCODE =3D 39; // RIGHT arrow key=0A= var SPACE_KEYCODE =3D 32; // space bar=0A= var TAB_KEYCODE =3D 9; // TAB key=0A= var UP_KEYCODE =3D 38; // UP arrow key=0A= var SHIFT_KEYCODE =3D 16;=0A= =0A= // This is a "constant" but has different values depending on the browser=0A= var semicolon_keycode =3D (is_ie ? 186 : 59);=0A= =0A= var MAX_EMAIL_ADDRESS_LENGTH =3D 320; // 64 + '@' + 255=0A= var MAX_SIGNATURE_LENGTH =3D 1000; // 1000 chars of maximum = signature=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Assertions=0A= // DEPRECATED: Use assert.js=0A= //-----------------------------------------------------------------------= -=0A= /**=0A= * DEPRECATED: Use assert.js=0A= */=0A= function raise(msg) {=0A= if (typeof Error !=3D 'undefined') {=0A= throw new Error(msg || 'Assertion Failed');=0A= } else {=0A= throw (msg);=0A= }=0A= }=0A= =0A= /**=0A= * DEPRECATED: Use assert.js=0A= *=0A= * Fail() is useful for marking logic paths that should=0A= * not be reached. For example, if you have a class that uses=0A= * ints for enums:=0A= *=0A= * MyClass.ENUM_FOO =3D 1;=0A= * MyClass.ENUM_BAR =3D 2;=0A= * MyClass.ENUM_BAZ =3D 3;=0A= *=0A= * And a switch statement elsewhere in your code that=0A= * has cases for each of these enums, then you can=0A= * "protect" your code as follows:=0A= *=0A= * switch(type) {=0A= * case MyClass.ENUM_FOO: doFooThing(); break;=0A= * case MyClass.ENUM_BAR: doBarThing(); break;=0A= * case MyClass.ENUM_BAZ: doBazThing(); break;=0A= * default:=0A= * Fail("No enum in MyClass with value: " + type);=0A= * }=0A= *=0A= * This way, if someone introduces a new value for this enum=0A= * without noticing this switch statement, then the code will=0A= * fail if the logic allows it to reach the switch with the=0A= * new value, alerting the developer that he should add a=0A= * case to the switch to handle the new value he has introduced.=0A= *=0A= * @param {string} opt_msg to display for failure=0A= * DEFAULT: "Assertion failed"=0A= */=0A= function Fail(opt_msg) {=0A= if (opt_msg =3D=3D=3D undefined) opt_msg =3D 'Assertion failed';=0A= if (IsDefined(DumpError)) DumpError(opt_msg + '\n');=0A= raise(opt_msg);=0A= }=0A= =0A= /**=0A= * DEPRECATED: Use assert.js=0A= *=0A= * Asserts that an expression is true (non-zero and non-null).=0A= *=0A= * Note that it is critical not to pass logic=0A= * with side-effects as the expression for AssertTrue=0A= * because if the assertions are removed by the=0A= * JSCompiler, then the expression will be removed=0A= * as well, in which case the side-effects will=0A= * be lost. So instead of this:=0A= *=0A= * AssertTrue( criticalComputation() );=0A= *=0A= * Do this:=0A= *=0A= * var result =3D criticalComputation();=0A= * AssertTrue(result);=0A= *=0A= * @param {anything} expression to evaluate=0A= * @param {string} opt_msg to display if the assertion fails=0A= *=0A= */=0A= function AssertTrue(expression, opt_msg) {=0A= if (!expression) {=0A= if (opt_msg =3D=3D=3D undefined) opt_msg =3D 'Assertion failed';=0A= Fail(opt_msg);=0A= }=0A= }=0A= =0A= /**=0A= * DEPRECATED: Use assert.js=0A= *=0A= * Asserts that two values are the same.=0A= *=0A= * @param {anything} val1=0A= * @param {anything} val2=0A= * @param {string} opt_msg to display if the assertion fails=0A= */=0A= function AssertEquals(val1, val2, opt_msg) {=0A= if (val1 !=3D val2) {=0A= if (opt_msg =3D=3D=3D undefined) {=0A= opt_msg =3D "AssertEquals failed: <" + val1 + "> !=3D <" + val2 + = ">";=0A= }=0A= Fail(opt_msg);=0A= }=0A= }=0A= =0A= /**=0A= * DEPRECATED: Use assert.js=0A= *=0A= * Asserts that a value is of the provided type.=0A= *=0A= * AssertType(6, Number);=0A= * AssertType("ijk", String);=0A= * AssertType([], Array);=0A= * AssertType({}, Object);=0A= * AssertType(ICAL_Date.now(), ICAL_Date);=0A= *=0A= * @param {anything} value=0A= * @param {constructor function} type=0A= * @param {string} opt_msg to display if the assertion fails=0A= */=0A= function AssertType(value, type, opt_msg) {=0A= // for backwards compatability only=0A= if (typeof value =3D=3D type) return;=0A= =0A= if (value || value =3D=3D "") {=0A= try {=0A= if (type =3D=3D AssertTypeMap[typeof value] || value instanceof = type) return;=0A= } catch (e) { /* failure, type was an illegal argument to instanceof = */ }=0A= }=0A= if (opt_msg =3D=3D=3D undefined) {=0A= if (typeof type =3D=3D 'function') {=0A= var match =3D type.toString().match(/^\s*function\s+([^\s\{]+)/);=0A= if (match) type =3D match[1];=0A= }=0A= opt_msg =3D "AssertType failed: <" + value + "> not typeof "+ type;=0A= }=0A= Fail(opt_msg);=0A= }=0A= =0A= var AssertTypeMap =3D {=0A= 'string' : String,=0A= 'number' : Number,=0A= 'boolean' : Boolean=0A= };=0A= =0A= /**=0A= * DEPRECATED: Use assert.js=0A= *=0A= * Asserts that the number of arguments to a=0A= * function is num. For example:=0A= *=0A= * function myFunc(one, two, three) [=0A= * AssertNumArgs(3);=0A= * ...=0A= * }=0A= *=0A= * myFunc(1, 2); // assertion fails!=0A= *=0A= * Note that AssertNumArgs does not take the function=0A= * as an argument; it is simply used in the context=0A= * of the function.=0A= *=0A= * @param {int} number of arguments expected=0A= * @param {string} opt_msg to display if the assertion fails=0A= */=0A= function AssertNumArgs(num, opt_msg) {=0A= var caller =3D AssertNumArgs.caller; // This is not supported in = safari 1.0=0A= if (caller && caller.arguments.length !=3D num) {=0A= if (opt_msg =3D=3D=3D undefined) {=0A= opt_msg =3D caller.name + ' expected ' + num + ' arguments '=0A= + ' but received ' + caller.arguments.length;=0A= }=0A= Fail(opt_msg);=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Cookies=0A= //-----------------------------------------------------------------------= -=0A= var ILLEGAL_COOKIE_CHARS_RE =3D /[\s;]/=0A= /**=0A= * Sets a cookie.=0A= * The max_age can be -1 to set a session cookie. To expire cookies, use=0A= * ExpireCookie() instead.=0A= *=0A= * @param name The cookie name.=0A= * @param value The cookie value.=0A= * @param opt_max_age The max age in seconds (from now). Use -1 to set a=0A= * session cookie. If not provided, the default is -1 (i.e. set a = session=0A= * cookie).=0A= * @param opt_path The path of the cookie, or null to not specify a path=0A= * attribute (browser will use the full request path). If not = provided, the=0A= * default is '/' (i.e. path=3D/).=0A= * @param opt_domain The domain of the cookie, or null to not specify a = domain=0A= * attribute (brower will use the full request host name). If not = provided,=0A= * the default is null (i.e. let browser use full request host name).=0A= * @return Void.=0A= */=0A= function SetCookie(name, value, opt_max_age, opt_path, opt_domain) {=0A= =0A= value =3D '' + value;=0A= AssertTrue((typeof name =3D=3D 'string' &&=0A= typeof value =3D=3D 'string' &&=0A= !name.match(ILLEGAL_COOKIE_CHARS_RE) &&=0A= !value.match(ILLEGAL_COOKIE_CHARS_RE)),=0A= 'trying to set an invalid cookie');=0A= =0A= if (!IsDefined(opt_max_age)) opt_max_age =3D -1;=0A= if (!IsDefined(opt_path)) opt_path =3D '/';=0A= if (!IsDefined(opt_domain)) opt_domain =3D null;=0A= =0A= var domain_str =3D (opt_domain =3D=3D null) ? '' : ';domain=3D' + = opt_domain;=0A= var path_str =3D (opt_path =3D=3D null) ? '' : ';path=3D' + opt_path;=0A= =0A= var expires_str;=0A= =0A= // Case 1: Set a session cookie.=0A= if (opt_max_age < 0) {=0A= expires_str =3D '';=0A= =0A= // Case 2: Expire the cookie.=0A= // Note: We don't tell people about this option in the function doc = because=0A= // we prefer people to use ExpireCookie() to expire cookies.=0A= } else if (opt_max_age =3D=3D 0) {=0A= // Note: Don't use Jan 1, 1970 for date because NS 4.76 will try to = convert=0A= // it to local time, and if the local time is before Jan 1, 1970, = then the=0A= // browser will ignore the Expires attribute altogether.=0A= var pastDate =3D new Date(1970, 1 /*Feb*/, 1); // Feb 1, 1970=0A= expires_str =3D ';expires=3D' + pastDate.toUTCString();=0A= =0A= // Case 3: Set a persistent cookie.=0A= } else {=0A= var futureDate =3D new Date(Now() + opt_max_age * 1000);=0A= expires_str =3D ';expires=3D' + futureDate.toUTCString();=0A= }=0A= =0A= document.cookie =3D name + '=3D' + value + domain_str + path_str + = expires_str;=0A= }=0A= =0A= var EXPIRED_COOKIE_VALUE =3D 'EXPIRED';=0A= =0A= /**=0A= * Expires a cookie.=0A= *=0A= * @param name The cookie name.=0A= * @param opt_path The path of the cookie, or null to expire a cookie = set at=0A= * the full request path. If not provided, the default is '/' (i.e. = path=3D/).=0A= * @param opt_domain The domain of the cookie, or null to expire a = cookie set=0A= * at the full request host name. If not provided, the default is null = (i.e.=0A= * cookie at full request host name).=0A= * @return Void.=0A= */=0A= function ExpireCookie(name, opt_path, opt_domain) {=0A= SetCookie(name, EXPIRED_COOKIE_VALUE, 0, opt_path, opt_domain);=0A= }=0A= =0A= /** Returns the value for the first cookie with the given name=0A= * @param name : string=0A= * @return a string or the empty string if no cookie found.=0A= */=0A= function GetCookie(name) {=0A= var nameeq =3D name + "=3D";=0A= var cookie =3D String(document.cookie);=0A= for (var pos =3D -1; (pos =3D cookie.indexOf(nameeq, pos + 1)) >=3D = 0;) {=0A= var i =3D pos;=0A= // walk back along string skipping whitespace and looking for a ; = before=0A= // the name to make sure that we don't match cookies whose name = contains=0A= // the given name as a suffix.=0A= while (--i >=3D 0) {=0A= var ch =3D cookie.charAt(i);=0A= if (ch =3D=3D ';') {=0A= i =3D -1; // indicate success=0A= break;=0A= } else if (' \t'.indexOf(ch) < 0) {=0A= break;=0A= }=0A= }=0A= if (-1 =3D=3D=3D i) { // first cookie in the string or we found a ;=0A= var end =3D cookie.indexOf(';', pos);=0A= if (end < 0) { end =3D cookie.length; }=0A= return cookie.substring(pos + nameeq.length, end);=0A= }=0A= }=0A= return "";=0A= }=0A= =0A= =0A= //-----------------------------------------------------------------------= -=0A= // Time=0A= //-----------------------------------------------------------------------= -=0A= function Now() {=0A= return (new Date()).getTime();=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Dynamic HTML/DOM utilities=0A= //-----------------------------------------------------------------------= -=0A= // Gets a element by its id, may return null=0A= function MaybeGetElement(win, id) {=0A= return win.document.getElementById(id);=0A= }=0A= =0A= // Same as MaybeGetElement except that it throws an exception if it's = null=0A= function GetElement(win, id) {=0A= var el =3D win.document.getElementById(id);=0A= if (!el) {=0A= DumpError("Element " + id + " not found.");=0A= }=0A= return el;=0A= }=0A= =0A= // Gets elements by its id/name=0A= // IE treats getElementsByName as searching over ids, while Moz use = names.=0A= // so tags must have both id and name as the same string=0A= function GetElements(win, id) {=0A= return win.document.getElementsByName(id);=0A= }=0A= =0A= // Gets the parent of a html element.=0A= function GetParentNode(n) {=0A= try {=0A= return n.parentNode;=0A= } catch (e) {=0A= // n.parentNode may throw a permission-denied exception on mozilla=0A= // (e.g. on text element), ignore this exception.=0A= return n;=0A= }=0A= }=0A= =0A= function IsDescendant(parent, child) {=0A= do {=0A= if (parent =3D=3D=3D child) return true;=0A= child =3D GetParentNode(child);=0A= } while (child && child !=3D=3D document.body);=0A= return false;=0A= }=0A= =0A= // Get attribute value of a DOM node=0A= function GetAttribute(node, attribute) {=0A= if (!node.getAttribute) {=0A= return null;=0A= }=0A= var attr =3D node.getAttribute(attribute);=0A= if (is_ie && attribute =3D=3D "style") {=0A= return attr.value;=0A= } else {=0A= return attr;=0A= }=0A= }=0A= =0A= // Sets inner html of a html element=0A= function SetInnerHTML(win, id, html) {=0A= try {=0A= GetElement(win, id).innerHTML =3D html;=0A= } catch (ex) {=0A= DumpException(ex);=0A= }=0A= }=0A= =0A= // Gets inner-html of a html element=0A= function GetInnerHTML(win, id) {=0A= try {=0A= return GetElement(win, id).innerHTML;=0A= } catch (ex) {=0A= DumpException(ex);=0A= return "";=0A= }=0A= }=0A= =0A= // Clears inner html of a html element=0A= function ClearInnerHTML(win, id) {=0A= try {=0A= GetElement(win, id).innerHTML =3D "";=0A= } catch (ex) {=0A= DumpException(ex);=0A= }=0A= }=0A= =0A= // Sets a CSS style of an element=0A= function SetCssStyle(win, id, name, value) {=0A= try {=0A= var elem =3D GetElement(win, id);=0A= elem.style[name] =3D value;=0A= } catch (ex) {=0A= DumpException(ex);=0A= }=0A= }=0A= =0A= // Get CSS property from a style attribute string=0A= function GetStyleProperty(style, name) {=0A= var i =3D style.indexOf(name);=0A= if (i !=3D -1) {=0A= var j =3D style.indexOf(";", i);=0A= if (j =3D=3D -1) {=0A= j =3D style.length;=0A= }=0A= // the +1 below is for the colon following the attribute name=0A= return CollapseWhitespace(style.substring(i + name.length + 1, j));=0A= }=0A= return null;=0A= }=0A= =0A= // Show/hide an element.=0A= function ShowElement(el, show) {=0A= el.style.display =3D show ? "" : "none";=0A= }=0A= =0A= // Show/hide a block element.=0A= // ShowElement() doesn't work if object has an initial class with = display:none=0A= function ShowBlockElement(el, show) {=0A= el.style.display =3D show ? "block" : "none";=0A= }=0A= =0A= // Show/hide an inline element.=0A= // ShowElement() doesn't work when an element starts off display:none.=0A= function ShowInlineElement(el, show) {=0A= el.style.display =3D show ? "inline" : "none";=0A= }=0A= =0A= // Set the text of a button. This is to get around a bug in mozilla,=0A= // where we can't set the text of a button by setting innerHTML.=0A= function SetButtonText(button, text) {=0A= button.childNodes[0].nodeValue =3D text;=0A= }=0A= =0A= // Append a new HTML element to a HTML node.=0A= function AppendNewElement(win, parent, tag) {=0A= var e =3D win.document.createElement(tag);=0A= parent.appendChild(e);=0A= return e;=0A= }=0A= =0A= // Finds the child with the given ID, or null if there is node.=0A= // This does not search the children's children.=0A= function FindChildWithID(parent, id) {=0A= var el;=0A= for (el =3D parent.firstChild; el && el.id !=3D id; el =3D = el.nextSibling) {=0A= // skip=0A= }=0A= return el;=0A= }=0A= =0A= // Adds a disabled option to the given menu=0A= function AddMenuDisabledOption(win, menu, html) {=0A= var op =3D AppendNewElement(win, menu, 'OPTION');=0A= op.disabled =3D true;=0A= op.innerHTML =3D html;=0A= =0A= return op;=0A= }=0A= =0A= // Adds a option to the given menu=0A= function AddMenuOption(win, menu, value, html) {=0A= var op =3D AppendNewElement(win, menu, 'OPTION');=0A= op.value =3D value;=0A= op.innerHTML =3D html;=0A= =0A= return op;=0A= }=0A= =0A= // Create a new DIV (append it to the end of the document)=0A= function CreateDIV(win, id) {=0A= var div =3D MaybeGetElement(win, id);=0A= if (!div) {=0A= div =3D AppendNewElement(win, win.document.body, "div");=0A= div.id =3D id;=0A= }=0A= return div;=0A= }=0A= =0A= // Create a new IFRAME (append it to the end of the document)=0A= function CreateIFRAME(win, id, url) {=0A= var iframe =3D MaybeGetElement(win, id);=0A= if (!iframe) {=0A= // We cannot create an IFRAME directly (IE doesn't allow it), so we=0A= // create a DIV and then insert an IFRAME.=0A= // We also give the IFRAME a name (same as id)=0A= var div =3D AppendNewElement(win, win.document.body, "div");=0A= div.innerHTML =3D "";=0A= iframe =3D GetElement(win, id);=0A= }=0A= return iframe;=0A= }=0A= =0A= // Create a new TR containing the given td's=0A= function Tr(win, tds) {=0A= var tr =3D win.document.createElement("TR");=0A= for (var i =3D 0; i < tds.length; i++) {=0A= tr.appendChild(tds[i]);=0A= }=0A= return tr;=0A= }=0A= =0A= // Create a new TD, with an optional colspan=0A= function Td(win, opt_colspan) {=0A= var td =3D win.document.createElement("TD");=0A= if (opt_colspan) {=0A= td.colSpan =3D opt_colspan;=0A= }=0A= return td;=0A= }=0A= =0A= =0A= // Check if an element has a given class=0A= function HasClass(el, cl) {=0A= if (el =3D=3D null || el.className =3D=3D null) return false;=0A= var classes =3D el.className.split(" ");=0A= for (var i =3D 0; i < classes.length; i++) {=0A= if (classes[i] =3D=3D cl) {=0A= return true;=0A= }=0A= }=0A= return false;=0A= }=0A= =0A= // Add a class to element=0A= function AddClass(el, cl) {=0A= if (HasClass(el, cl)) return;=0A= el.className +=3D " " + cl;=0A= }=0A= =0A= // Remove a class from an element=0A= function RemoveClass(el, cl) {=0A= if (el.className =3D=3D null) return;=0A= var classes =3D el.className.split(" ");=0A= var result =3D [];=0A= var changed =3D false;=0A= for (var i =3D 0; i < classes.length; i++) {=0A= if (classes[i] !=3D cl) {=0A= if (classes[i]) { result.push(classes[i]); }=0A= } else {=0A= changed =3D true;=0A= }=0A= }=0A= if (changed) { el.className =3D result.join(" "); }=0A= }=0A= =0A= // Performs an in-order traversal of the tree rooted at the given node=0A= // (excluding the root node) and returns an array of nodes that match the=0A= // given selector. The selector must implement the method:=0A= //=0A= // boolean select(node);=0A= //=0A= // This method is a generalization of the DOM method = "getElementsByTagName"=0A= //=0A= function GetElementsBySelector(root, selector) {=0A= var nodes =3D [];=0A= for (var child =3D root.firstChild; child; child =3D = child.nextSibling) {=0A= AddElementBySelector_(child, selector, nodes);=0A= }=0A= return nodes;=0A= }=0A= =0A= // Recursive helper for GetElemnetsBySelector()=0A= function AddElementBySelector_(root, selector, nodes) {=0A= // First test the parent=0A= if (selector.select(root)) {=0A= nodes.push(root);=0A= }=0A= =0A= // Then recurse through the children=0A= for (var child =3D root.firstChild; child; child =3D = child.nextSibling) {=0A= AddElementBySelector_(child, selector, nodes);=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Window/screen utilities=0A= // TODO: these should be renamed (e.g. GetWindowWidth to = GetWindowInnerWidth=0A= // and moved to geom.js)=0A= //-----------------------------------------------------------------------= -=0A= // Get page offset of an element=0A= function GetPageOffsetLeft(el) {=0A= var x =3D el.offsetLeft;=0A= if (el.offsetParent !=3D null)=0A= x +=3D GetPageOffsetLeft(el.offsetParent);=0A= return x;=0A= }=0A= =0A= // Get page offset of an element=0A= function GetPageOffsetTop(el) {=0A= var y =3D el.offsetTop;=0A= if (el.offsetParent !=3D null)=0A= y +=3D GetPageOffsetTop(el.offsetParent);=0A= return y;=0A= }=0A= =0A= // Get page offset of an element=0A= function GetPageOffset(el) {=0A= var x =3D el.offsetLeft;=0A= var y =3D el.offsetTop;=0A= if (el.offsetParent !=3D null) {=0A= var pos =3D GetPageOffset(el.offsetParent);=0A= x +=3D pos.x;=0A= y +=3D pos.y;=0A= }=0A= return {x: x, y: y};=0A= }=0A= =0A= function GetPageOffsetRight(el) {=0A= return GetPageOffsetLeft(el) + el.offsetWidth;=0A= }=0A= =0A= function GetPageOffsetBottom(el) {=0A= return GetPageOffsetTop(el) + el.offsetHeight;=0A= }=0A= =0A= // Get the y position scroll offset.=0A= function GetScrollTop(win) {=0A= // all except Explorer=0A= if ("pageYOffset" in win) {=0A= return win.pageYOffset;=0A= }=0A= // Explorer 6 Strict Mode=0A= else if ("documentElement" in win.document &&=0A= "scrollTop" in win.document.documentElement) {=0A= return win.document.documentElement.scrollTop;=0A= }=0A= // other Explorers=0A= else if ("scrollTop" in win.document.body) {=0A= return win.document.body.scrollTop;=0A= }=0A= =0A= return 0;=0A= }=0A= =0A= // Get the x position scroll offset.=0A= function GetScrollLeft(win) {=0A= // all except Explorer=0A= if ("pageXOffset" in win) {=0A= return win.pageXOffset;=0A= }=0A= // Explorer 6 Strict Mode=0A= else if ("documentElement" in win.document &&=0A= "scrollLeft" in win.document.documentElement) {=0A= return win.document.documentElement.scrollLeft;=0A= }=0A= // other Explorers=0A= else if ("scrollLeft" in win.document.body) {=0A= return win.document.body.scrollLeft;=0A= }=0A= =0A= return 0;=0A= }=0A= =0A= /**=0A= * Checks if window scrollbar has reached its maximum offset=0A= *=0A= * @param win a window object=0A= * @param opt_isHoriz true if horizontal bar, false if vertical=0A= */=0A= function IsScrollAtEnd(win, opt_isHoriz) {=0A= var total =3D=0A= (opt_isHoriz) ? document.body.offsetWidth : = document.body.offsetHeight;=0A= var inner =3D=0A= (opt_isHoriz) ? GetWindowWidth(win) : GetWindowHeight(win);=0A= var offset =3D=0A= (opt_isHoriz) ? GetScrollLeft(win) : GetScrollTop(win);=0A= =0A= return (inner + offset >=3D total || total < inner);=0A= }=0A= =0A= // Scroll window to pos=0A= // position: 0 =3D top, 0.5 =3D middle, 1 =3D bottom=0A= function ScrollTo(win, el, position) {=0A= var y =3D GetPageOffsetTop(el);=0A= y -=3D GetWindowHeight(win) * position;=0A= win.scrollTo(0, y);=0A= }=0A= =0A= // Scroll so that as far as possible the entire element is in view.=0A= var ALIGN_BOTTOM =3D 'b';=0A= var ALIGN_MIDDLE =3D 'm';=0A= var ALIGN_TOP =3D 't';=0A= function ScrollIntoView(win, el, alignment) {=0A= var el_top =3D GetPageOffsetTop(el);=0A= var el_bottom =3D el_top + el.offsetHeight;=0A= var win_top =3D GetScrollTop(win);=0A= var win_height =3D GetWindowHeight(win);=0A= var win_bottom =3D win_top + win_height;=0A= =0A= // Out of view?=0A= if (el_top < win_top ||=0A= el_bottom > win_bottom) {=0A= =0A= var scrollto_y;=0A= if (alignment =3D=3D ALIGN_BOTTOM) {=0A= scrollto_y =3D el_bottom - win_height + 5;=0A= } else if (alignment =3D=3D ALIGN_MIDDLE) {=0A= scrollto_y =3D (el_top + el_bottom) / 2 - win_height/2;=0A= } else {=0A= scrollto_y =3D el_top - 5; // ALIGN_TOP=0A= }=0A= =0A= Debug("Scrolling to " + scrollto_y);=0A= win.scrollTo(0, scrollto_y);=0A= }=0A= }=0A= =0A= function IsElementVisible(win, id) {=0A= var el =3D MaybeGetElement(win, id);=0A= if (el =3D=3D null) {=0A= return false;=0A= }=0A= var el_top =3D GetPageOffsetTop(el);=0A= var el_bottom =3D el_top + el.offsetHeight;=0A= var win_top =3D GetScrollTop(win);=0A= var win_bottom =3D win_top + GetWindowHeight(win);=0A= if (el_top >=3D win_top && el_bottom <=3D win_bottom) {=0A= return true;=0A= }=0A= return false;=0A= }=0A= =0A= function GetWindowWidth(win) {=0A= // all except Explorer=0A= if ("innerWidth" in win) {=0A= return win.innerWidth;=0A= }=0A= // Explorer 6 Strict Mode=0A= else if ("documentElement" in win.document &&=0A= "clientWidth" in win.document.documentElement) {=0A= return win.document.documentElement.clientWidth;=0A= }=0A= // other Explorers=0A= else if ("clientWidth" in win.document.body) {=0A= return win.document.body.clientWidth;=0A= }=0A= =0A= return 0;=0A= }=0A= =0A= function GetWindowHeight(win) {=0A= // all except Explorer=0A= if ("innerHeight" in win) {=0A= return win.innerHeight;=0A= }=0A= // Explorer 6 Strict Mode=0A= else if ("documentElement" in win.document &&=0A= "clientHeight" in win.document.documentElement) {=0A= return win.document.documentElement.clientHeight;=0A= }=0A= // other Explorers=0A= else if ("clientHeight" in win.document.body) {=0A= return win.document.body.clientHeight;=0A= }=0A= =0A= return 0;=0A= }=0A= =0A= function GetAvailScreenWidth(win) {=0A= return win.screen.availWidth;=0A= }=0A= =0A= function GetAvailScreenHeight(win) {=0A= return win.screen.availHeight;=0A= }=0A= =0A= // Returns a "nice" window height.=0A= // Use the screen height. (Or should we use the height of the current = window?)=0A= function GetNiceWindowHeight(win) {=0A= return Math.floor(0.8 * GetAvailScreenHeight(win));=0A= }=0A= =0A= // Used for horizontally centering a new window of the given width in the=0A= // available screen. Set the new window's distance from the left of the = screen=0A= // equal to this function's return value.=0A= // Params: width: the width of the new window=0A= // Returns: the distance from the left edge of the screen for the new = window to=0A= // be horizontally centered=0A= function GetCenteringLeft(win, width) {=0A= return (win.screen.availWidth - width) >> 1;=0A= }=0A= =0A= // Used for vertically centering a new window of the given height in the=0A= // available screen. Set the new window's distance from the top of the = screen=0A= // equal to this function's return value.=0A= // Params: height: the height of the new window=0A= // Returns: the distance from the top edge of the screen for the new = window to=0A= // be vertically aligned.=0A= function GetCenteringTop(win, height) {=0A= return (win.screen.availHeight - height) >> 1;=0A= }=0A= =0A= /*=0A= * Opens a child popup window that has no browser toolbar/decorations.=0A= * (Copied from caribou's common.js library with small modifications.)=0A= *=0A= * @param url the URL for the new window (Note: this will be = unique-ified)=0A= * @param opt_name the name of the new window=0A= * @param opt_width the width of the new window=0A= * @param opt_height the height of the new window=0A= * @param opt_center if true, the new window is centered in the = available screen=0A= * @param opt_hide_scrollbars if true, the window hides the scrollbars=0A= * @param opt_noresize if true, makes window unresizable=0A= * @param opt_blocked_msg message warning that the popup has been blocked=0A= * @return a reference to the new child window=0A= */=0A= function Popup(url, opt_name, opt_width, opt_height, opt_center,=0A= opt_hide_scrollbars, opt_noresize, opt_blocked_msg) {=0A= if (!opt_height) {=0A= opt_height =3D Math.floor(GetWindowHeight(window.top) * 0.8);=0A= }=0A= if (!opt_width) {=0A= opt_width =3D Math.min(GetAvailScreenWidth(window), opt_height);=0A= }=0A= =0A= var features =3D "resizable=3D" + (opt_noresize ? "no" : "yes") + "," +=0A= "scrollbars=3D" + (opt_hide_scrollbars ? "no" : "yes") = + "," +=0A= "width=3D" + opt_width + ",height=3D" + opt_height;=0A= if (opt_center) {=0A= features +=3D ",left=3D" + GetCenteringLeft(window, opt_width) + "," = +=0A= "top=3D" + GetCenteringTop(window, opt_height);=0A= }=0A= return OpenWindow(window, url, opt_name, features, opt_blocked_msg);=0A= }=0A= =0A= /*=0A= * Opens a new window. Returns the new window handle. Tries to open the = new=0A= * window using top.open() first. If that doesn't work, then tries = win.open().=0A= * If that still doesn't work, prints an alert.=0A= * (Copied from caribou's common.js library with small modifications.)=0A= *=0A= * @param win the parent window from which to open the new child window=0A= * @param url the URL for the new window (Note: this will be = unique-ified)=0A= * @param opt_name the name of the new window=0A= * @param opt_features the properties of the new window=0A= * @param opt_blocked_msg message warning that the popup has been blocked=0A= * @return a reference to the new child window=0A= */=0A= function OpenWindow(win, url, opt_name, opt_features, opt_blocked_msg) {=0A= var newwin =3D OpenWindowHelper(top, url, opt_name, opt_features);=0A= if (!newwin || newwin.closed || !newwin.focus) {=0A= newwin =3D OpenWindowHelper(win, url, opt_name, opt_features);=0A= }=0A= if (!newwin || newwin.closed || !newwin.focus) {=0A= if (opt_blocked_msg) alert(opt_blocked_msg);=0A= } else {=0A= // Make sure that the window has the focus=0A= newwin.focus();=0A= }=0A= return newwin;=0A= }=0A= =0A= /*=0A= * Helper for OpenWindow().=0A= * (Copied from caribou's common.js library with small modifications.)=0A= */=0A= function OpenWindowHelper(win, url, name, features) {=0A= var newwin;=0A= if (features) {=0A= newwin =3D win.open(url, name, features);=0A= } else if (name) {=0A= newwin =3D win.open(url, name);=0A= } else {=0A= newwin =3D win.open(url);=0A= }=0A= return newwin;=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // DOM walking utilities=0A= //-----------------------------------------------------------------------= -=0A= =0A= function MaybeEscape(str, escape) {=0A= return escape ? HtmlEscape(str) : str;=0A= }=0A= =0A= =0A= //-----------------------------------------------------------------------= -=0A= // Window data=0A= //-----------------------------------------------------------------------= -=0A= // Gets an array, which can store data for the window. This data=0A= // is deleted when the window is unloaded.=0A= var windata =3D [];=0A= function GetWindowData(win) {=0A= var data =3D windata[win.name];=0A= if (!data) {=0A= windata[win.name] =3D data =3D [];=0A= }=0A= return data;=0A= }=0A= =0A= // Clear js data for a window.=0A= function ClearWindowData(win_name) {=0A= if (windata[win_name]) {=0A= windata[win_name] =3D null;=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // String utilities=0A= //-----------------------------------------------------------------------= -=0A= // Do html escaping=0A= var amp_re_ =3D /&/g;=0A= var lt_re_ =3D //g;=0A= =0A= // Convert text to HTML format. For efficiency, we just convert '&', = '<', '>'=0A= // characters.=0A= // Note: Javascript >=3D 1.3 supports lambda expression in the = replacement=0A= // argument. But it's slower on IE.=0A= // Note: we can also implement HtmlEscape by setting the value=0A= // of a textnode and then reading the 'innerHTML' value, but that=0A= // that turns out to be slower.=0A= // Params: str: String to be escaped.=0A= // Returns: The escaped string.=0A= function HtmlEscape(str) {=0A= if (!str) return "";=0A= return str.replace(amp_re_, "&").replace(lt_re_, "<").=0A= replace(gt_re_, ">").replace(quote_re_, """);=0A= }=0A= =0A= /** converts html entities to plain text. It covers the most common = named=0A= * entities and numeric entities.=0A= * It does not cover all named entities -- it covers = &{lt,gt,amp,quot,nbsp}; but=0A= * does not handle some of the more obscure ones like &{ndash,eacute};.=0A= */=0A= function HtmlUnescape(str) {=0A= if (!str) return "";=0A= return str.=0A= replace(/&#(\d+);/g,=0A= function (_, n) { return String.fromCharCode(parseInt(n, 10)); }).=0A= replace(/&#x([a-f0-9]+);/gi,=0A= function (_, n) { return String.fromCharCode(parseInt(n, 16)); }).=0A= replace(/&(\w+);/g, function (_, entity) {=0A= entity =3D entity.toLowerCase();=0A= return entity in HtmlUnescape.unesc ? HtmlUnescape.unesc[entity] : = '?';=0A= });=0A= }=0A= HtmlUnescape.unesc =3D { lt: '<', gt: '>', quot: '"', nbsp: ' ', amp: = '&' };=0A= =0A= // Replace multiple spaces with   to retain whitespace formatting=0A= // in addition to escaping '&', '<', and '>'.=0A= var dbsp_re_ =3D / /g;=0A= var ret_re_ =3D /\r/g;=0A= var nl_re_ =3D /\n/g;=0A= function HtmlWhitespaceEscape(str) {=0A= str =3D HtmlEscape(str);=0A= str =3D str.replace(dbsp_re_, "  ");=0A= str =3D str.replace(ret_re_, "");=0A= str =3D str.replace(nl_re_, "
");=0A= return str;=0A= }=0A= =0A= // Escape double quote '"' characters in addition to '&', '<', '>' so = that a=0A= // string can be included in an HTML tag attribute value within double = quotes.=0A= // Params: str: String to be escaped.=0A= // Returns: The escaped string.=0A= var quote_re_ =3D /\"/g;=0A= function QuoteEscape(str) {=0A= return HtmlEscape(str).replace(quote_re_, """);=0A= }=0A= =0A= var JS_SPECIAL_RE_ =3D /[\'\\\r\n\b\"<>&]/g;=0A= =0A= function JSEscOne_(s) {=0A= if (!JSEscOne_.js_escs_) {=0A= var escapes =3D {};=0A= escapes['\\'] =3D '\\\\';=0A= escapes['\''] =3D '\\047';=0A= escapes['\n'] =3D '\\n';=0A= escapes['\r'] =3D '\\r';=0A= escapes['\b'] =3D '\\b';=0A= escapes['\"'] =3D '\\042';=0A= escapes['<'] =3D '\\074';=0A= escapes['>'] =3D '\\076';=0A= escapes['&'] =3D '\\046';=0A= =0A= JSEscOne_.js_escs_ =3D escapes;=0A= }=0A= =0A= return JSEscOne_.js_escs_[s];=0A= }=0A= =0A= /** convert a string to a javascript string literal. This function has = the=0A= * property that the return value is also already html escaped, so the = output=0A= * can be embedded in an html handler attribute.=0A= */=0A= function ToJSString(s) {=0A= return "'" + s.toString().replace(JS_SPECIAL_RE_, JSEscOne_) + "'";=0A= }=0A= =0A= // converts multiple ws chars to a single space, and strips=0A= // leading and trailing ws=0A= var spc_re_ =3D /\s+/g;=0A= var beg_spc_re_ =3D /^ /;=0A= var end_spc_re_ =3D / $/;=0A= function CollapseWhitespace(str) {=0A= if (!str) return "";=0A= return str.replace(spc_re_, " ").replace(beg_spc_re_, "").=0A= replace(end_spc_re_, "");=0A= }=0A= =0A= var newline_re_ =3D /\r?\n/g;=0A= var spctab_re_ =3D /[ \t]+/g;=0A= var nbsp_re_ =3D /\xa0/g;=0A= function StripNewlines(str) {=0A= if (!str) return "";=0A= return str.replace(newline_re_, " ");=0A= }=0A= =0A= function CanonicalizeNewlines(str) {=0A= if (!str) return "";=0A= return str.replace(newline_re_, '\n');=0A= }=0A= =0A= function HtmlifyNewlines(str) {=0A= if (!str) return "";=0A= return str.replace(newline_re_, "
");=0A= }=0A= =0A= function NormalizeSpaces(str) {=0A= if (!str) return "";=0A= return str.replace(spctab_re_, " ").replace(nbsp_re_, " ");=0A= }=0A= =0A= // URL encodes the string.=0A= function UrlEncode(str) {=0A= return encodeURIComponent(str);=0A= }=0A= =0A= function Trim(str) {=0A= if (!str) return "";=0A= return str.replace(/^\s+/, "").replace(/\s+$/, "");=0A= }=0A= =0A= function EndsWith(str, suffix) {=0A= if (!str) return !suffix;=0A= return (str.lastIndexOf(suffix) =3D=3D (str.length - suffix.length));=0A= }=0A= =0A= // Check if a string is empty=0A= function IsEmpty(str) {=0A= return CollapseWhitespace(str) =3D=3D "";=0A= }=0A= =0A= // Check if a character is a letter=0A= function IsLetterOrDigit(ch) {=0A= return ((ch >=3D "a" && ch <=3D "z") ||=0A= (ch >=3D "A" && ch <=3D "Z") ||=0A= (ch >=3D '0' && ch <=3D '9'));=0A= }=0A= =0A= // Check if a character is a space character=0A= function IsSpace(ch) {=0A= return (" \t\r\n".indexOf(ch) >=3D 0);=0A= }=0A= =0A= // Converts any instances of "\r" or "\r\n" style EOLs into "\n" (Line = Feed),=0A= // and also trim the extra newlines and whitespaces at the end.=0A= var eol_re_ =3D /\r\n?/g;=0A= var trailingspc_re_ =3D /[\n\t ]+$/;=0A= function NormalizeText(str) {=0A= return str.replace(eol_re_, "\n").replace(trailingspc_re_, "");=0A= }=0A= =0A= // Inserts s (word break tag) after every n non-space chars and/or=0A= // after or before certain special chars. The input string should be = plain=0A= // text that has not yet been HTML-escaped.=0A= // Params:=0A= // str: The string to insert s into.=0A= // n: The maximum number of consecutive non-space characters to allow = before=0A= // adding a . To turn off this rule (i.e. if you only want to = add=0A= // breaks based on special characters), pass in the value -1.=0A= // chars_to_break_after: The list of special characters (concatenated = into a=0A= // string) after which a should be added, if there is no = natural=0A= // break at that point. To turn off this rule, pass in the empty = string.=0A= // chars_to_break_before: The list of special characters (concatenated = into a=0A= // string) before which a should be added, if there is no = natural=0A= // break at that point. To turn off this rule, pass in the empty = string.=0A= // Returns: The string str htmlescaped, and with s inserted = according to=0A= // the rules specified by the other arguments.=0A= function HtmlEscapeInsertWbrs(str, n, chars_to_break_after,=0A= chars_to_break_before) {=0A= AssertNumArgs(4);=0A= =0A= var out =3D '';=0A= var strpos =3D 0;=0A= var spc =3D 0;=0A= =0A= for (var i =3D 1; i < str.length; ++i) {=0A= var prev_char =3D str.charAt(i - 1);=0A= var next_char =3D str.charAt(i);=0A= if (IsSpace(next_char)) {=0A= spc =3D i;=0A= } else if (i - spc =3D=3D n ||=0A= chars_to_break_after.indexOf(prev_char) !=3D -1 ||=0A= chars_to_break_before.indexOf(next_char) !=3D -1) {=0A= out +=3D HtmlEscape(str.substring(strpos, i)) + '';=0A= strpos =3D i;=0A= spc =3D i;=0A= }=0A= }=0A= out +=3D HtmlEscape(str.substr(strpos));=0A= return out;=0A= }=0A= =0A= // Converts a string to its canonicalized label form.=0A= var illegal_chars_re_ =3D /[ \/(){}&|\\\"\000]/g;=0A= function CanonicalizeLabel(str, lowercase) {=0A= var uppercase =3D str.replace(illegal_chars_re_, '-');=0A= return lowercase ? uppercase.toLowerCase() : uppercase;=0A= }=0A= =0A= // Case-insensitive string comparator=0A= function CompareStringsIgnoreCase(s1, s2) {=0A= s1 =3D s1.toLowerCase();=0A= s2 =3D s2.toLowerCase();=0A= =0A= if (s1 < s2) {=0A= return -1;=0A= } else if (s1 =3D=3D s2) {=0A= return 0;=0A= } else {=0A= return 1;=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // TextArea utilities=0A= //-----------------------------------------------------------------------= -=0A= =0A= // Gets the cursor pos in a text area. Returns -1 if the cursor pos = cannot=0A= // be determined or if the cursor out of the textfield.=0A= function GetCursorPos(win, textfield) {=0A= try {=0A= if (IsDefined(textfield.selectionEnd)) {=0A= // Mozilla directly supports this=0A= return textfield.selectionEnd;=0A= =0A= } else if (win.document.selection && = win.document.selection.createRange) {=0A= // IE doesn't export an accessor for the endpoints of a selection.=0A= // Instead, it uses the TextRange object, which has an extremely = obtuse=0A= // API. Here's what seems to work:=0A= =0A= // (1) Obtain a textfield from the current selection (cursor)=0A= var tr =3D win.document.selection.createRange();=0A= =0A= // Check if the current selection is in the textfield=0A= if (tr.parentElement() !=3D textfield) {=0A= return -1;=0A= }=0A= =0A= // (2) Make a text range encompassing the textfield=0A= var tr2 =3D tr.duplicate();=0A= tr2.moveToElementText(textfield);=0A= =0A= // (3) Move the end of the copy to the beginning of the selection=0A= tr2.setEndPoint("EndToStart", tr);=0A= =0A= // (4) The span of the textrange copy is equivalent to the cursor = pos=0A= var cursor =3D tr2.text.length;=0A= =0A= // Finally, perform a sanity check to make sure the cursor is in = the=0A= // textfield. IE sometimes screws this up when the window is = activated=0A= if (cursor > textfield.value.length) {=0A= return -1;=0A= }=0A= return cursor;=0A= } else {=0A= Debug("Unable to get cursor position for: " + navigator.userAgent);=0A= =0A= // Just return the size of the textfield=0A= // TODO: Investigate how to get cursor pos in Safari!=0A= return textfield.value.length;=0A= }=0A= } catch (e) {=0A= DumpException(e, "Cannot get cursor pos");=0A= }=0A= =0A= return -1;=0A= }=0A= =0A= function SetCursorPos(win, textfield, pos) {=0A= if (IsDefined(textfield.selectionEnd) &&=0A= IsDefined(textfield.selectionStart)) {=0A= // Mozilla directly supports this=0A= textfield.selectionStart =3D pos;=0A= textfield.selectionEnd =3D pos;=0A= =0A= } else if (win.document.selection && textfield.createTextRange) {=0A= // IE has textranges. A textfield's textrange encompasses the=0A= // entire textfield's text by default=0A= var sel =3D textfield.createTextRange();=0A= =0A= sel.collapse(true);=0A= sel.move("character", pos);=0A= sel.select();=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Array utilities=0A= //-----------------------------------------------------------------------= -=0A= // Find an item in an array, returns the key, or -1 if not found=0A= function FindInArray(array, x) {=0A= for (var i =3D 0; i < array.length; i++) {=0A= if (array[i] =3D=3D x) {=0A= return i;=0A= }=0A= }=0A= return -1;=0A= }=0A= =0A= // Inserts an item into an array, if it's not already in the array=0A= function InsertArray(array, x) {=0A= if (FindInArray(array, x) =3D=3D -1) {=0A= array[array.length] =3D x;=0A= }=0A= }=0A= =0A= // Delete an element from an array=0A= function DeleteArrayElement(array, x) {=0A= var i =3D 0;=0A= while (i < array.length && array[i] !=3D x)=0A= i++;=0A= array.splice(i, 1);=0A= }=0A= =0A= // Copies a flat array=0A= function CopyArray(array) {=0A= var copy =3D [];=0A= for (var i =3D 0; i < array.length; i++) {=0A= copy[i] =3D array[i];=0A= }=0A= return copy;=0A= }=0A= =0A= // Clone an object (recursively)=0A= function CloneObject(x) {=0A= if ((typeof x) =3D=3D "object") {=0A= var y =3D [];=0A= for (var i in x) {=0A= y[i] =3D CloneObject(x[i]);=0A= }=0A= return y;=0A= }=0A= return x;=0A= }=0A= =0A= /**=0A= * Clone an event; cannot use CloneObject(event)=0A= * because it suffers from infinite recursion.=0A= * Thus, only a subset of the event properties are=0A= * cloned -- if you need others, just add them=0A= * to this function (just don't remove any!)=0A= */=0A= function CloneEvent(ev) {=0A= var clone =3D {};=0A= clone.clientX =3D ev.clientX;=0A= clone.clientY =3D ev.clientY;=0A= clone.pageX =3D ev.pageX;=0A= clone.pageY =3D ev.pageY;=0A= clone.type =3D ev.type;=0A= clone.srcElement =3D ev.srcElement;=0A= clone.target =3D ev.target;=0A= clone.cancelBubble =3D ev.cancelBubble;=0A= clone.explicitOriginalTarget =3D ev.explicitOriginalTarget;=0A= // add more properties here=0A= =0A= return clone;=0A= }=0A= =0A= function GetEventTarget(/*Event*/ ev) {=0A= // Event is not a type in IE; IE uses Object for events=0A= // AssertType(ev, Event, 'arg passed to GetEventTarget not an Event');=0A= return ev.srcElement || ev.target;=0A= }=0A= =0A= /** cancels the event */=0A= // from http://www.quirksmode.org/js/events_order.html=0A= function CancelEvent(/*Event*/ ev) {=0A= if (is_ie) {=0A= ev.cancelBubble =3D true;=0A= } else if (ev.stopPropagation) {=0A= ev.stopPropagation();=0A= }=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Formatting utilities=0A= //-----------------------------------------------------------------------= -=0A= // A simple printf type function that takes in a template array, and a = data=0A= // array. e.g. PrintArray(["a",,"b",,"c"], ["x", "y"]) =3D> axbyc=0A= function PrintArray(array, data) {=0A= // Check that the argument count is correct.=0A= AssertEquals(array.length, data.length * 2 + 1);=0A= =0A= for (var i =3D 0, idx =3D 1; i < data.length; i++, idx +=3D 2) {=0A= array[idx] =3D data[i];=0A= }=0A= return array.join("");=0A= }=0A= =0A= function ImageHtml(url, attributes) {=0A= return "";=0A= }=0A= =0A= // Formats an object id that has two id numbers, eg, foo_3_7=0A= function MakeId3(idprefix, m, n) {=0A= return idprefix + m + "_" + n;=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Email address parsing=0A= //-----------------------------------------------------------------------= -=0A= // Parse an email address of the form "name"
into [name, = address]=0A= function ParseAddress(addr) {=0A= var name =3D "";=0A= var address =3D "";=0A= for (var i =3D 0; i < addr.length;) {=0A= var token =3D GetEmailToken(addr, i);=0A= if (token.charAt(0) =3D=3D '<') {=0A= var end =3D token.indexOf(">");=0A= address =3D token.substring(1, (end !=3D -1) ? end : token.length);=0A= } else if (address =3D=3D "") {=0A= name +=3D token;=0A= }=0A= i +=3D token.length;=0A= }=0A= =0A= // Check if it's a simple email address of the form "jlim@google.com"=0A= if (address =3D=3D "" && name.indexOf("@") !=3D -1) {=0A= address =3D name;=0A= name =3D "";=0A= }=0A= =0A= name =3D CollapseWhitespace(name);=0A= name =3D StripQuotes(name, "'");=0A= name =3D StripQuotes(name, "\"");=0A= address =3D CollapseWhitespace(address);=0A= return [name, address];=0A= }=0A= =0A= // Given an email address, get the address part=0A= function GetAddress(address) {=0A= return ParseAddress(address)[1];=0A= }=0A= =0A= // Get the username part of an email address=0A= function GetAddressUsername(address) {=0A= address =3D GetAddress(address);=0A= var at =3D address.indexOf("@");=0A= return (at =3D=3D -1) ? address : address.substr(0, at);=0A= }=0A= =0A= // Given an email address, get the personal part=0A= function GetPersonal(address) {=0A= return ParseAddress(address)[0];=0A= }=0A= =0A= // Given an address, get a short name=0A= function GetPersonalElseUsername(address) {=0A= var personal =3D GetPersonal(address);=0A= if (personal !=3D "") {=0A= return personal;=0A= } else {=0A= return GetAddressUsername(address);=0A= }=0A= }=0A= =0A= // Strip ' or " chars around a string=0A= function StripQuotes(str, quotechar) {=0A= var len =3D str.length;=0A= if (str.charAt(0) =3D=3D quotechar &&=0A= str.charAt(len - 1) =3D=3D quotechar) {=0A= return str.substring(1, len - 1);=0A= }=0A= return str;=0A= }=0A= =0A= // Convert a string containing list of email addresses into an array=0A= // of strings=0A= function EmailsToArray(str) {=0A= var result =3D [];=0A= var email =3D "";=0A= var token;=0A= =0A= for (var i =3D 0; i < str.length; ) {=0A= token =3D GetEmailToken(str, i);=0A= if (token =3D=3D ",") {=0A= AddEmailAddress(result, email);=0A= email =3D "";=0A= i++;=0A= continue;=0A= }=0A= email +=3D token;=0A= i +=3D token.length;=0A= }=0A= =0A= // Add last=0A= if (email !=3D"" || token =3D=3D ",") {=0A= AddEmailAddress(result, email);=0A= }=0A= return result;=0A= }=0A= =0A= // Get the next token from a position in an address string=0A= var openers_ =3D "\"<([";=0A= var closers_ =3D "\">)]";=0A= function GetEmailToken(str, pos) {=0A= var ch =3D str.charAt(pos);=0A= var p =3D openers_.indexOf(ch);=0A= if (p =3D=3D -1)=0A= return ch;=0A= var end_pos =3D str.indexOf(closers_.charAt(p), pos + 1);=0A= var token =3D (end_pos >=3D 0) ? str.substring(pos, end_pos + 1) :=0A= str.substr(pos);=0A= return token;=0A= }=0A= =0A= // Add an email address to the result array.=0A= function AddEmailAddress(result, email) {=0A= email =3D CleanEmailAddress(email);=0A= result[result.length] =3D email;=0A= }=0A= =0A= // Clean up email address:=0A= // - remove extra spaces=0A= // - Surround name with quotes if it contains special characters=0A= // to check if we need " quotes=0A= // Note: do not use /g in the regular expression, otherwise the=0A= // regular expression cannot be reusable.=0A= var specialchars_re_ =3D /[()<>@,;:\\\".\[\]]/;=0A= =0A= function CleanEmailAddress(str) {=0A= var name_address =3D ParseAddress(str);=0A= var name =3D name_address[0];=0A= var address =3D name_address[1];=0A= =0A= if (name.indexOf("\"") =3D=3D -1) { // If there's no "=0A= var quote_needed =3D specialchars_re_.test(name);=0A= if (quote_needed) {=0A= name =3D "\"" + name + "\"";=0A= }=0A= }=0A= =0A= if (name =3D=3D "")=0A= return address;=0A= else if (address =3D=3D "")=0A= return name;=0A= else=0A= return name + " <" + address + ">";=0A= }=0A= =0A= //-----------------------------------------------------------------------= -=0A= // Misc=0A= //-----------------------------------------------------------------------= -=0A= // Compare long hex strings=0A= function CompareID(a, b) {=0A= if (a.length !=3D b.length) {=0A= return (a.length - b.length);=0A= } else {=0A= return (a < b) ? -1 : (a > b) ? 1 : 0;=0A= }=0A= }=0A= =0A= // Check if a value is defined=0A= function IsDefined(value) {=0A= return (typeof value) !=3D 'undefined';=0A= }=0A= =0A= function GetKeyCode(event) {=0A= var code;=0A= if (event.keyCode) {=0A= code =3D event.keyCode;=0A= } else if (event.which) {=0A= code =3D event.which;=0A= }=0A= return code;=0A= }=0A= =0A= // define a forid function to fetch a DOM node by id.=0A= function forid_1(id) {=0A= return document.getElementById(id);=0A= }=0A= function forid_2(id) {=0A= return document.all[id];=0A= }=0A= =0A= /**=0A= * Fetch an HtmlElement by id.=0A= * DEPRECATED: use $ in dom.js=0A= */=0A= var forid =3D document.getElementById ? forid_1 : forid_2;=0A= =0A= =0A= =0A= function log(msg) {=0A= /* a top level window is its own parent. Use !=3D or else fails on IE = with=0A= * infinite loop.=0A= */=0A= try {=0A= if (window.parent !=3D window && window.parent.log) {=0A= window.parent.log(window.name + '::' + msg);=0A= return;=0A= }=0A= } catch (e) {=0A= // Error: uncaught exception: Permission denied to get property = Window.log=0A= }=0A= var logPane =3D forid('log');=0A= if (logPane) {=0A= var logText =3D '

' + new = Date() +=0A= '' + msg + '

';=0A= logPane.innerHTML =3D logText + logPane.innerHTML;=0A= } else {=0A= window.status =3D msg;=0A= }=0A= }=0A= ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/app/scripts/dom.common.js =0A= // Commonly-used functions, reduced.=0A= =0A= function d(s) {return document.getElementById(s);}=0A= function dE(o,s) {return o.getElementsByTagName(s);}=0A= =0A= /**=0A= * toggleDisplay()=0A= *=0A= * Will toggle the display property of the style object for any=0A= * DOM element or object that supports style as a property.=0A= *=0A= * Warning: This'll wreak havoc if applied to elements. Those=0A= * babies got different types "table-row" | "block" dependant on =0A= * what browser's being used.=0A= *=0A= * Warning: Written in Texas. Yeehaw.=0A= *=0A= * Typical usage:=0A= * toggleDisplay(document.getElementById("foo"));=0A= */=0A= function toggleDisplay(o)=0A= { =0A= var display =3D getStyle(o, "display"); =0A= =0A= if (o.style)=0A= o.style.display =3D=0A= (display !=3D "none") ? "none" : getDisplayStyleByTagName(o);=0A= }=0A= =0A= =0A= function getDisplayStyleByTagName(o)=0A= {=0A= n =3D o.nodeName.toLowerCase(); =0A= return (=0A= n =3D=3D "span"=0A= || n =3D=3D "img"=0A= || n =3D=3D "a"=0A= ) ? "inline" : "block";=0A= }=0A= =0A= =0A= /**=0A= * hideElement()=0A= *=0A= * Hides an element from view.=0A= *=0A= * Typical usage:=0A= * hideElement(getElement("the-id-of-the-element"));=0A= */=0A= function hideElement(o)=0A= {=0A= if (o && o.style) o.style.display =3D "none";=0A= }=0A= =0A= =0A= =0A= /**=0A= * showElement()=0A= *=0A= * Shows an element that was hidden from view.=0A= *=0A= * Typical usage:=0A= * showElement(getElement("the-id-of-the-element"));=0A= */=0A= function showElement(o)=0A= {=0A= =0A= if (o && o.style) o.style.display =3D getDisplayStyleByTagName(o);=0A= }=0A= =0A= =0A= /**=0A= * getElement()=0A= *=0A= * Returns an element by its ID or shows an alert if it can't be found.=0A= *=0A= * Typical usage:=0A= * getElement("the-id-of-the-element");=0A= */=0A= function getElement(id) {=0A= var e =3D d(id);=0A= if (!e) {=0A= alert("Cannot get element: " + id);=0A= }=0A= return e;=0A= }=0A= =0A= /**=0A= * setInnerHTML()=0A= *=0A= * Sets the innerHTML of an element or shows an alert if can't be set.=0A= *=0A= * Typical usage:=0A= * setInnerHTML("the-id-of-the-element");=0A= */=0A= function setInnerHTML(id, html) {=0A= try {=0A= getElement(id).innerHTML =3D html;=0A= } catch (ex) {=0A= alert("Cannot set inner HTML: " + id);=0A= }=0A= }=0A= =0A= =0A= /**=0A= * setCssStyle()=0A= *=0A= * Sets the style of an element by its id or shows an alert if can't be = set.=0A= *=0A= * Typical usage:=0A= * setCssStyle("the-id-of-the-element", "display", "block");=0A= */=0A= function setCssStyle(id, name, value) {=0A= try {=0A= getElement(id).style[name] =3D value;=0A= } catch (ex) {=0A= alert("Cannot set style: " + id);=0A= }=0A= }=0A= =0A= =0A= /**=0A= * getStyle()=0A= *=0A= * Gets the computed style of any object.=0A= *=0A= * WARNING: Produces unexpected results in Safari. To achieve best =0A= * results, explicitly set the style property for that browser when the =0A= * element is rendered.=0A= *=0A= * Typical usage:=0A= * getStyle(object, "display");=0A= */=0A= function getStyle(el, style) {=0A= if (!document.getElementById || !el) return;=0A= =0A= if (document.defaultView=0A= && document.defaultView.getComputedStyle) {=0A= return document.defaultView.=0A= getComputedStyle(el, "").getPropertyValue(style);=0A= } =0A= else if (el.currentStyle) {=0A= return el.currentStyle[style];=0A= } =0A= else { =0A= return el.style.display;=0A= }=0A= }=0A= =0A= /**=0A= * getStyleAttribute()=0A= *=0A= * Returns the style attribute of the specified node.=0A= */=0A= function getStyleAttribute(node) {=0A= if (Detect.IE()) {=0A= return node.getAttribute('style').value;=0A= }else {=0A= return node.getAttribute('style');=0A= }=0A= }=0A= =0A= =0A= /*=0A= * showProps()=0A= *=0A= * Displays all the properties for a given element=0A= */=0A= function showProps(o) {=0A= s=3D""; for (p in o) {=0A= s+=3Dp+": "+o[p]+"\n
";=0A= }=0A= document.write(s);=0A= }=0A= =0A= =0A= =0A= function setIFrameEvent(iframe, eventName, func)=0A= {=0A= if (document.all) {=0A= eval('getIFrameDocument(iframe).on' + eventName + ' =3D func;');=0A= } else {=0A= iframe.contentWindow.addEventListener(eventName, func, true);=0A= }=0A= }=0A= =0A= function setIFrameBody(iframe, strStyle, innerHtml) =0A= {=0A= if (!innerHtml) innerHtml =3D '';=0A= if (innerHtml =3D=3D '' && Detect.IE()) {=0A= innerHtml =3D '
';=0A= }=0A= var doc =3D getIFrameDocument(iframe);=0A= doc.open();=0A= doc.write('' =0A= + innerHtml + '');=0A= doc.close();=0A= }=0A= =0A= =0A= function getIFrameDocument(iframe)=0A= {=0A= if (Detect.IE()) {=0A= return iframe.document;=0A= } else {=0A= return iframe.contentDocument;=0A= }=0A= }=0A= =0A= function getIFrame(strId)=0A= {=0A= if (Detect.IE()) {=0A= return document.frames[strId];=0A= } else {=0A= return document.getElementById(strId);=0A= }=0A= }=0A= =0A= =0A= function createElementandAppend(nodeName, strId, appendTo) {=0A= var el =3D document.createElement(nodeName);=0A= el.setAttribute("id", strId);=0A= if (appendTo) {=0A= appendTo.appendChild(el); =0A= } else {=0A= document.body.appendChild(el); =0A= }=0A= return el; =0A= }=0A= =0A= function createElementandInsertBefore(nodeName, strId, appendTo, = sibling) {=0A= var el =3D document.createElement(nodeName);=0A= el.setAttribute("id", strId);=0A= if (appendTo) {=0A= appendTo.insertBefore(el, sibling); =0A= } else {=0A= document.body.insertBefore(el, sibling); =0A= }=0A= return el; =0A= }=0A= =0A= =0A= /**=0A= * getXY()=0A= *=0A= * Returns the position of any element as an object.=0A= *=0A= * Typical usage:=0A= * var pos =3D getXY(object);=0A= * alert(pos.x + " " +pos.y);=0A= */=0A= function getXY(el) {=0A= var x =3D el.offsetLeft;=0A= var y =3D el.offsetTop;=0A= if (el.offsetParent !=3D null) {=0A= var pos =3D getXY(el.offsetParent);=0A= x +=3D pos.x;=0A= y +=3D pos.y;=0A= }=0A= return {x: x, y: y}=0A= }=0A= =0A= // The following 3 functions are taken from common.js=0A= function hasClass(el, cl) {=0A= if (el =3D=3D null || el.className =3D=3D null) return false;=0A= var classes =3D el.className.split(" ");=0A= for (var i =3D 0; i < classes.length; i++) {=0A= if (classes[i] =3D=3D cl) {=0A= return true;=0A= }=0A= }=0A= return false;=0A= }=0A= =0A= // Add a class to element=0A= function addClass(el, cl) {=0A= if (hasClass(el, cl)) return;=0A= el.className +=3D " " + cl;=0A= } =0A= =0A= // Remove a class from an element=0A= function removeClass(el, cl) {=0A= if (el.className =3D=3D null) return;=0A= var classes =3D el.className.split(" ");=0A= var result =3D [];=0A= var changed =3D false;=0A= for (var i =3D 0; i < classes.length; i++) {=0A= if (classes[i] !=3D cl) {=0A= if (classes[i]) { result.push(classes[i]); }=0A= } else {=0A= changed =3D true;=0A= } =0A= } =0A= if (changed) { el.className =3D result.join(" "); }=0A= } =0A= =0A= function toggleClass(el, cl) {=0A= if (hasClass(el, cl)) {=0A= removeClass(el, cl);=0A= } else {=0A= addClass(el, cl);=0A= }=0A= }=0A= =0A= =0A= /* Constants for node types, since IE doesn't support Node.TEXT_NODE */=0A= var TEXT_NODE =3D 3;=0A= var ELEMENT_NODE =3D 1;=0A= =0A= =0A= ------=_NextPart_000_0051_01C79C4F.B2A92F10 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0068_01C79C4F.B2AB7900" ------=_NextPart_001_0068_01C79C4F.B2AB7900 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://searchingforminnesota.blogspot.com/2006/09/quirky-stuff-rooster-at-weldons-gifts.html =EF=BB=BF Searching For = Minnesota: Quirky Stuff - The Rooster at Weldon's Gifts

Searching=20 For Minnesota

Things that make Minnesota great

Tuesday, September 05, 2006

Quirky Stuff - The Rooster at Weldon's Gifts =

Two Harbors, MN



Two = Harbors=20 is located about 25 minutes northeast of Duluth on the North Shore of = Lake=20 Superior. When driving to Two Harbors from the south, you will see a = notable=20 piece of roadside architecture on your left just as you enter town; an = 8-foot=20 tall rooster. This majestic bird sits in front of Weldon=E2=80=99s Gifts = along Highway=20 61, and he has been greeting North Country travelers for decades.

Labels: Quirky Stuff

0 Comments:

Post=20 a Comment

<< Home =

About Me

3D"=20
Name: Jean=20
Location: Twin Cities, = Minnesota, US=20

I'm an avid runner, and I enjoy running in = road and=20 trail races. When I am not running, I can be found cooking, reading = cookbooks,=20 enjoying a glass of wine, taking a hike, going on a road trip, or simply = enjoying TV!

Links to Great Minnesota Cities and = Places

Searching For Minnesota - The Purpose

  • Searching=20 For Minnesota

Minnesota Places Archive

  • Index=20 of Minnesota Places

Minnesota Events Archive

  • Index=20 of Minnesota Events

Minnesota Foods Archive

  • Index=20 of Minnesota Foods

Minnesota Drinks Archive

  • Index=20 of Minnesota Drinks

Minnesota Restaurants Archive

  • Index=20 of Minnesota Restaurants

Minnesota Landmarks and History Archive

  • Index=20 of Minnesota Landmarks and History

Minnesota's Quirky Stuff Archive

  • Index=20 of Minnesota's Quirky Stuff

Previous Posts

  • Landmarks=20 and History - Father Baraga=E2=80=99s Cross=20
  • Events=20 - Minnesota's 150th in 2008=20
  • Places=20 - Milan=20
  • Places=20 - Buffalo=20
  • Places=20 - New Germany=20
  • Restaurants=20 - The Red Rooster=20
  • Places=20 - Delano=20
  • Restaurants=20 - Gold Nugget=20
  • Restaurants=20 - Schuller's Tavern=20
  • Events=20 - Minnesota State Fair

3D"Powered


 

------=_NextPart_001_0068_01C79C4F.B2AB7900 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.blogger.com/navbar.g?targetBlogID=31478086&blogName=Searching+For+Minnesota&publishMode=PUBLISH_MODE_BLOGSPOT&navbarType=BLACK&layoutType=CLASSIC&homepageUrl=http%3A%2F%2Fsearchingforminnesota.blogspot.com%2F&searchRoot=http%3A%2F%2Fsearchingforminnesota.blogspot.com%2Fsearch =EF=BB=BF
Notify Blogger about objectionable content on this page.
You flagged this blog as having objectionable content.
Send=20 As SMS
------=_NextPart_001_0068_01C79C4F.B2AB7900-- ------=_NextPart_000_0051_01C79C4F.B2A92F10--