From: <Saved by Windows Internet Explorer 7>
Subject: China Confidential: Like Corn Ethanol and Soy Biodiesel, Big Wind Power Push Depends on Government Mandates
Date: Fri, 11 Apr 2008 11:33:48 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_01E7_01C89BC7.E8C06820"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

This is a multi-part message in MIME format.

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://s10.sitemeter.com/meter.asp?site=s10ConfidentialReporter

R0lGODlhUAAPANUAAD8/P5+fn+Xs4W9vb36eaouneT5tH/L18HGUW9ji0qW7lpOTk+fn58/Pz7LF
pYeHh0t3LktLS1iAPVdXV8PDw2NjY/Pz89vb23t7e7/OtLe3t6urq5yok7TAq5ixiGWKTMzYwzFj
EAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABQAA8AAAb/QJFw
SCwaj8ikcskcjp7QqHRKrVqv2Kwwy+16u4kP4jDdUikDy3edzXgS04TH4QmFQGVRdRNhNDZscQpr
dh9TCHaId3lSDQ1qTwMDUBcNDFEgcCOZUAcgeCMehk8CIAKYZFGFUx+FdqBRZk8VABEYAQADALsB
DwC0GiAhEnYExCEFmwYQBhIFdiEezxDRwgSLI6UHq1AgB60h4LBQsg0AFCMMuCOSIxoAFyMBEdYj
zwQj1wcG+AIGCqI2LVIQwsGwUyP2hbgWDso1A+DEMXrCIEIFDfIAsJuEYUKAXgA4LBKGR1gdAh48
QEBpyIOBlM/qZOjmKty9iDUVGDCAcISsuhEXMAB4sK7dAI8fA3QYybROgZQe3LSEAHXOnW8GnoWr
ubUrzmjk9EhZAKDopAcRIAksyZTgICgeJIwgmGqtsBAGaoLzqteOh7BQKNyq4FEjrgUNInhcsIDk
2rXXUCIQQLBAhmUpCZC8S41vX89/n8i6sGDAAj8BRlh4MIABg9IPKAjwcGp2bdojHCD44OHAgQIf
TIlCoMD2iN0JgIMA7sDBBwXOC4SRLiYBgjGAA2nfvqaJ9+/gwxsJAgA7

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://tracksy.com/stats-image.cgi?host=t;user=malraux;site=01

R0lGODlhAQABAPcAAAAAADMAAGYAAJkAAMwAAP8AAAAzADMzAGYzAJkzAMwzAP8zAABmADNmAGZm
AJlmAMxmAP9mAACZADOZAGaZAJmZAMyZAP+ZAADMADPMAGbMAJnMAMzMAP/MAAD/ADP/AGb/AJn/
AMz/AP//AAAAMzMAM2YAM5kAM8wAM/8AMwAzMzMzM2YzM5kzM8wzM/8zMwBmMzNmM2ZmM5lmM8xm
M/9mMwCZMzOZM2aZM5mZM8yZM/+ZMwDMMzPMM2bMM5nMM8zMM//MMwD/MzP/M2b/M5n/M8z/M///
MwAAZjMAZmYAZpkAZswAZv8AZgAzZjMzZmYzZpkzZswzZv8zZgBmZjNmZmZmZplmZsxmZv9mZgCZ
ZjOZZmaZZpmZZsyZZv+ZZgDMZjPMZmbMZpnMZszMZv/MZgD/ZjP/Zmb/Zpn/Zsz/Zv//ZgAAmTMA
mWYAmZkAmcwAmf8AmQAzmTMzmWYzmZkzmcwzmf8zmQBmmTNmmWZmmZlmmcxmmf9mmQCZmTOZmWaZ
mZmZmcyZmf+ZmQDMmTPMmWbMmZnMmczMmf/MmQD/mTP/mWb/mZn/mcz/mf//mQAAzDMAzGYAzJkA
zMwAzP8AzAAzzDMzzGYzzJkzzMwzzP8zzABmzDNmzGZmzJlmzMxmzP9mzACZzDOZzGaZzJmZzMyZ
zP+ZzADMzDPMzGbMzJnMzMzMzP/MzAD/zDP/zGb/zJn/zMz/zP//zAAA/zMA/2YA/5kA/8wA//8A
/wAz/zMz/2Yz/5kz/8wz//8z/wBm/zNm/2Zm/5lm/8xm//9m/wCZ/zOZ/2aZ/5mZ/8yZ//+Z/wDM
/zPM/2bM/5nM/8zM///M/wD//zP//2b//5n//8z//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANAALAAAAAABAAEA
AAgEAKEFBAA7Cg==

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://bp1.blogger.com/_hntojuBOgo0/R_e8NgY6qsI/AAAAAAAACVI/GcxnJzEYgqU/s320/ChinaWindFarm2.jpg

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
TbxUsr6x0i3Qjabk2p3D57T/AErPajPh/J//2Q==

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/icon18_email.gif

R0lGODlhEgANAOMAAIqKioCAgOXl5f////Ly8urq6uTk5AAAAMzMzLS0tBoaGjMzM2ZmZk1NTf//
/////ywAAAAAEgANAAAEWRDISSsIk+jN+QUIQAxkaRIgVoSjWaKIoa6iOxygIQNFz56Lg27X89UO
isMiqZv1AAnRgdFYHoROqEAAQCqZxIJ2SxYsA03euLw9CBJozJpdhmMC+Lx+j48AADs=

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/icon18_edit_allbkg.gif

R0lGODlhEgASAOMAANDHu6pqNFRTUOWjJQAAABYWFhAJA9CPKUk1ErmIF+KjUygVBjMmBv/BMfy2
I9DHuyH5BAEAAA8ALAAAAAASABIAAARP8MlJq72TYLyM3hQRBB4oFcoxlhujAMAKIk6jKMKHIY0z
qLoLz3dIFEAMBzGBABkGy+aGkCAGpBjRcmEKAFKB4KUAg4kvhPJ5TCBgTfBKBAA7

------=_NextPart_000_01E7_01C89BC7.E8C06820
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_01E7_01C89BC7.E8C06820
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.feedburner.com/fb/images/pub/xml_button.gif

R0lGODlhJAAOANUAANVYBPHUwOFdBP/28P9yFeCngvfp4OVeBPRkBe3JsfBjBfr079+ecv+rc/fg
0NByM+e9of/j0Z9BA//m1eWEQ/+FNP/awc5VBM1nI//t4eezkeirgtRhFPBsFOR3Lt1uJPDBofjX
wf98JOZ7M/PCofqWU/CugiEOAfmygv/Rsv+PRP+0gn0zAv+aV8JQBD8aAf/IpP////9mAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAkAA4AAAbKwAls
SCwaj8ijpyVrOp/QqDTKYk6vWKq12YgNCDJVLEJYxWKVJuwcjlmmVWgoliBkYo+LOQZBEM4xLmIB
AFJxTyILMQ4xDC4IZoofKwNngjGEhltOJWcBLgcyZhB0AySWg4VaUWIxBhxNZgUgZxiomKpQh04E
AwOMGrExBSN0LreZq08pjQ9nFKLDAgguALcGGysrKk+7Ml2fByiuHbICTreAMSYKTt4yB9VNAi4u
MvTnTvUyCvX++TLeZRlIRcKLgwgTKlzIcOGJIAA7

------=_NextPart_000_01E7_01C89BC7.E8C06820
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
}
.icon-action {
	MARGIN: 0px 0px -5px 0.5em; BORDER-TOP-STYLE: none! important; =
BORDER-RIGHT-STYLE: none! important; BORDER-LEFT-STYLE: none! important; =
BORDER-BOTTOM-STYLE: none! important
}
.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
}

@media All   =20
{
.BLOG_mobile_video_class {
	DISPLAY: none
}

}

@media Handheld   =20
{
.BLOG_mobile_video_class {
	DISPLAY: inline
}
.BLOG_video_class {
	DISPLAY: none
}

}

------=_NextPart_000_01E7_01C89BC7.E8C06820
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! important
}
#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 {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: block; BORDER-LEFT: 0px; =
BORDER-BOTTOM: 0px
}
#navbar-iframe {
	Z-INDEX: 500; LEFT: 0px; POSITION: absolute; TOP: 0px
}

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/navbar/1/btn_search_this.png

iVBORw0KGgoAAAANSUhEUgAAAGAAAAAPCAMAAAAs5DqFAAAAdVBMVEUfWIwJQ3h+seRhlckmX5MJ
QnhLgbUQSn88c6dSiLtonNAIQngYUYYIQndCd6t3qt0uZpo1bKFCeKxvo9ZDeq4/cqQwYpJCeKsS
S4ARRHdZjsISSoBDeKw+caMwYpMvYpI/caMlXJESSn0mXZElXZESSX0mXZKP7sSuAAABZUlEQVR4
XrWS14rlQAwFVerknH3jhM3//4mLLJjdl4F58cFGgS6KNpbfb9+G5ay8Xu7y/uvJabn9vMh+aznR
sMvSnyho20GufYJ51JmoqhGyZqwfZ5BVM1FBI7CpasBHVKNjcJAbhA1sl73U0DPIQoJxKsVISxMa
Q6gU1orun8CLj2zBMRcwqQmwXaeCvQKJqwy9CZqDjBGKzlqsrxtEC77/EPjoAsfAT7sguqhqsKR2
kZeUQFadiBoCTMrRN2P0Ox37D4GPLnDMT6z1/wK2EFUhschgAnj4x4U8hjFbnwOiHXz6iRxzAUXF
BIgWmop5JbpArqmFKj7q4+6FUMfaZHTa0dQxfiKom+IYGFmpGNqxbpN2dGNVKdAO8mKCHOqChBCE
IEiwhzxT6lBZb1vw4iMhiGNwkBPkEGbkYa2VDKlf/Dc9Le0ir7cTBf1tl8v3Z5vS/Yvxg1/O88+b
/Ljs1+Ws7O/3v7uMJw2wTNG0AAAAAElFTkSuQmCC

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/v-css/navbar/3328360018-navbar.css

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 100%; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; FONT-FAMILY: "Trebuchet =
MS",Verdana,Arial,Sans-serif; WHITE-SPACE: nowrap
}
A {
	TEXT-DECORATION: none
}
#b-navbar {
	FONT-SIZE: 0.85em; LINE-HEIGHT: 0.85em; BORDER-BOTTOM: #024 1px solid; =
HEIGHT: 29px
}
#b-navbar #b-logo {
	LEFT: 5px; POSITION: absolute; TOP: 0.15em
}
#b-navbar #b-logo #navbar-logo {
	WIDTH: 24px; HEIGHT: 24px
}
#b-navbar #b-logo SPAN {
	DISPLAY: block; LEFT: -9000px; POSITION: absolute
}
#b-search {
	PADDING-RIGHT: 1em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 3px; MARGIN: =
0px 0px 0px 34px; PADDING-TOP: 4px
}
#b-search TD {
	VERTICAL-ALIGN: middle
}
#b-query {
	MARGIN: 0px 0.5em 0px 0px
}
.btn {
	PADDING-RIGHT: 0px; BORDER-TOP: 1px solid; PADDING-LEFT: 0px; =
FONT-SIZE: 0.8em; PADDING-BOTTOM: 0px; MARGIN: 0px 0.5em 0px 1px; =
TEXT-TRANSFORM: uppercase; CURSOR: hand; LINE-HEIGHT: 0.85em; =
PADDING-TOP: 0px; BORDER-BOTTOM: 1px solid; WHITE-SPACE: nowrap
}
.btn DIV {
	BORDER-RIGHT: 1px solid; PADDING-RIGHT: 0.3em; PADDING-LEFT: 0.3em; =
PADDING-BOTTOM: 0.21em; MARGIN: 0px -1px; BORDER-LEFT: 1px solid; =
PADDING-TOP: 0.21em; POSITION: relative; HEIGHT: 0.85em
}
.btn DIV IMG {
	LEFT: 0.3em; POSITION: absolute; TOP: 0.2em
}
#bt-flag-body {
	PADDING-LEFT: 1em
}
#bt-unflag-body {
	PADDING-LEFT: 1em
}
#bt-unflag-body {
	DISPLAY: none
}
.flagged #bt-flag-body {
	DISPLAY: none
}
.flagged #bt-unflag-body {
	DISPLAY: block
}
#flagi {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #333 1px =
solid; DISPLAY: none; PADDING-LEFT: 4px; FONT-SIZE: 0.7em; Z-INDEX: 300; =
PADDING-BOTTOM: 4px; BORDER-LEFT: #333 1px solid; COLOR: #000; =
LINE-HEIGHT: 0.8em; PADDING-TOP: 4px; BORDER-BOTTOM: #333 1px solid; =
TOP: 3px; BACKGROUND-COLOR: #ff9
}
#unflagi {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #333 1px =
solid; DISPLAY: none; PADDING-LEFT: 4px; FONT-SIZE: 0.7em; Z-INDEX: 300; =
PADDING-BOTTOM: 4px; BORDER-LEFT: #333 1px solid; COLOR: #000; =
LINE-HEIGHT: 0.8em; PADDING-TOP: 4px; BORDER-BOTTOM: #333 1px solid; =
TOP: 3px; BACKGROUND-COLOR: #ff9
}
#flagi A {
	COLOR: #3366cc; TEXT-DECORATION: underline
}
#unflagi A {
	COLOR: #3366cc; TEXT-DECORATION: underline
}
.b-mobile {
	DISPLAY: none
}
#b-sms {
	PADDING-RIGHT: 7px; 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
}
#b-sms A:hover {
	TEXT-DECORATION: underline
}

@media Handheld   =20
{
BODY .b-mobile {
	DISPLAY: block
}
BODY #b-search {
	DISPLAY: none
}
BODY #flagi {
	DISPLAY: none
}
BODY #unflagi {
	DISPLAY: none
}
BODY #b-navbar #b-logo SPAN {
	DISPLAY: none
}

}

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/v-css/navbar/1297325411-1.css

BODY {
	COLOR: #fff
}
A {
	COLOR: #9cf
}
.btn DIV {
	COLOR: #9cf
}
A:hover {
	COLOR: #fff
}
#navbar-logo {
	BACKGROUND-IMAGE: url(../../img/navbar/1/logobar.png)
}
#b-navbar {
	BORDER-BOTTOM: #024 1px solid; BACKGROUND-COLOR: #036
}
#b-search {
	BACKGROUND: url(../../img/navbar/1/corner.gif) #147 no-repeat left =
bottom
}
#b-query {
	BORDER-RIGHT: #47a 1px solid; BORDER-TOP: #47a 1px solid; BORDER-LEFT: =
#47a 1px solid; BORDER-BOTTOM: #47a 1px solid
}
.btn {
	BORDER-LEFT-COLOR: #47a; BORDER-BOTTOM-COLOR: #47a; BORDER-TOP-COLOR: =
#47a; BORDER-RIGHT-COLOR: #47a
}
.btn DIV {
	BORDER-LEFT-COLOR: #47a; BORDER-BOTTOM-COLOR: #47a; BORDER-TOP-COLOR: =
#47a; BORDER-RIGHT-COLOR: #47a
}
.btn DIV:hover {
	BACKGROUND-COLOR: #47a
}

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/v-js/3625575137-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_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/v-app/scripts/1019856700-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 <wbr>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 "<iframe id=3D" + id + " name=3D" + id +=0A=
             " src=3D" + url + "></iframe>";=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=
var gt_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_, "&amp;").replace(lt_re_, "&lt;").=0A=
    replace(gt_re_, "&gt;").replace(quote_re_, "&quot;");=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 &nbsp; 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_, "&nbsp;&nbsp;");=0A=
  str =3D str.replace(ret_re_, "");=0A=
  str =3D str.replace(nl_re_, "<br>");=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_, "&quot;");=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_, "<br>");=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 <wbr>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 <wbr>s into.=0A=
//   n: The maximum number of consecutive non-space characters to allow =
before=0A=
//     adding a <wbr>. 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 <wbr> 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 <wbr> 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 <wbr>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)) + '<wbr>';=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 "<img " + attributes + " src=3D" + url + ">";=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" <address> 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 '<p class=3Dlogentry><span class=3Dlogdate>' + new =
Date() +=0A=
                  '</span><span class=3Dlogmsg>' + msg + '</span></p>';=0A=
    logPane.innerHTML =3D logText + logPane.innerHTML;=0A=
  } else {=0A=
    window.status =3D msg;=0A=
  }=0A=
}=0A=

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/v-app/scripts/107652916-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 <TR> 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=
  var 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=
	var s=3D""; for (var p in o) {=0A=
		s+=3Dp+": "+o[p]+"\n<br />";=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 '<div></div>';=0A=
  }=0A=
  var doc =3D getIFrameDocument(iframe);=0A=
  doc.open();=0A=
  doc.write('<head></head><body style=3D"' + strStyle + '">'=0A=
    + innerHtml + '</body>');=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_01E7_01C89BC7.E8C06820
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0206_01C89BC7.E8C52310"


------=_NextPart_001_0206_01C89BC7.E8C52310
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://chinaconfidential.blogspot.com/2008/04/like-corn-ethanol-and-soy-biodiesel.html

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>China Confidential: Like Corn Ethanol and Soy =
Biodiesel, Big Wind Power Push Depends on Government Mandates</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<STYLE type=3Dtext/css>BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #f6f6f6; =
PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #000000; PADDING-TOP: 0px; =
FONT-FAMILY: "Trebuchet MS",Trebuchet,Verdana,Sans-Serif
}
A {
	COLOR: #de7008
}
A:hover {
	COLOR: #e0ad12
}
#logo {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
DIV#mainClm {
	PADDING-RIGHT: 7%; PADDING-LEFT: 3%; FLOAT: right; PADDING-BOTTOM: =
10px; BORDER-LEFT: #e0ad12 1px dotted; WIDTH: 66%; PADDING-TOP: 30px
}
DIV#sideBar {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
20px 0px 0px 1em; PADDING-TOP: 0px; TEXT-ALIGN: left
}
#header {
	PADDING-RIGHT: 0px; BORDER-TOP: #eeeeee 1px solid; PADDING-LEFT: 0px; =
BACKGROUND: #f5e39e; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: white; =
PADDING-TOP: 0px; BORDER-BOTTOM: #e0ad12 1px dotted
}
H1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H5 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H6 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
H1 A:link {
	COLOR: #f5deb3; TEXT-DECORATION: none
}
H1 A:visited {
	COLOR: #f5deb3; TEXT-DECORATION: none
}
H1 {
	PADDING-RIGHT: 0px; BORDER-TOP: #bf5c00 3px double; PADDING-LEFT: 5%; =
BACKGROUND: #de7008; PADDING-BOTTOM: 10px; FONT: bold 300% =
Verdana,Sans-Serif; COLOR: #f5deb3; PADDING-TOP: 25px; BORDER-BOTTOM: =
#e89e47 1px solid; LETTER-SPACING: -2px
}
H2 {
	FONT-WEIGHT: bold; COLOR: #9e5205; FONT-FAMILY: Verdana,Sans-Serif; =
LETTER-SPACING: -1px
}
H3 {
	FONT-SIZE: 105%; MARGIN: 10px 0px 0px; COLOR: #777777
}
H4 {
	COLOR: #aa0033
}
H6 {
	FONT-SIZE: 140%; COLOR: #b8a80d
}
H2.sidebar-title {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 120%; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #b8a80d; PADDING-TOP: 0px
}
#sideBar UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 95%; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 33px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#sideBar LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 95%; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#description {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 7px 12% 7px 5%; FONT: =
bold 85% Verdana,Sans-Serif; COLOR: #9e5205; PADDING-TOP: 0px
}
.blogPost {
	FONT-SIZE: 100%; MARGIN: 0px 0px 30px
}
.blogPost STRONG {
	FONT-WEIGHT: bold; COLOR: #000000
}
#sideBar UL A {
	BORDER-RIGHT: medium none; PADDING-RIGHT: 2px; BORDER-TOP: medium none; =
PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: 1px; BORDER-LEFT: medium =
none; WIDTH: 100%; COLOR: #999999; PADDING-TOP: 2px; BORDER-BOTTOM: =
medium none; TEXT-DECORATION: none
}
#sideBar UL A:link {
	COLOR: #999999
}
#sideBar UL A:visited {
	COLOR: #999999
}
#sideBar UL A:active {
	COLOR: #ff0000
}
#sideBar UL A:hover {
	COLOR: #de7008; TEXT-DECORATION: none
}
PRE {
	COLOR: #999999
}
CODE {
	COLOR: #999999
}
STRIKE {
	COLOR: #999999
}
.bug {
	BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: =
5px; PADDING-BOTTOM: 5px; BORDER-LEFT: 0px; PADDING-TOP: 5px; =
BORDER-BOTTOM: 0px
}
.byline {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #444444; PADDING-TOP: 0px
}
.byline A {
	BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium =
none; COLOR: #968a0a; BORDER-BOTTOM: medium none; TEXT-DECORATION: none
}
.byline A:hover {
	TEXT-DECORATION: underline
}
.blogComments {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
110%; PADDING-BOTTOM: 0px; COLOR: #9e5205; PADDING-TOP: 0px; =
FONT-FAMILY: Verdana,Sans-Serif
}
.blogComment {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 100%; COLOR: black
}
.blogComments .byline {
	DISPLAY: inline; FONT-WEIGHT: normal; FONT-SIZE: 80%; PADDING-BOTTOM: =
20px; COLOR: #444444; MARGIN-RIGHT: 10px
}
.deleted-comment {
	COLOR: gray; FONT-STYLE: italic
}
#profile-container {
=09
}
.profile-datablock {
=09
}
.profile-img {
	DISPLAY: inline
}
.profile-img IMG {
	FLOAT: left; MARGIN-RIGHT: 5px
}
.profile-data STRONG {
=09
}
#profile-container P {
=09
}
#profile-container .profile-textblock {
=09
}
.profile-link A:link {
	COLOR: #999999; TEXT-DECORATION: none
}
.profile-link A:active {
	COLOR: #ff0000; TEXT-DECORATION: none
}
.profile-link A:visited {
	COLOR: #999999; TEXT-DECORATION: none
}
.profile-link A:hover {
	COLOR: #de7008; TEXT-DECORATION: none
}
</STYLE>

<META content=3D"MSHTML 6.00.6000.16640" name=3DGENERATOR></HEAD>
<BODY>.comment-link {margin-left:.6em;} </STYLE>
<META content=3Dtrue name=3DMSSmartTagsPreventParsing>
<META content=3DBlogger name=3Dgenerator><LINK title=3D"China =
Confidential - Atom"=20
href=3D"http://chinaconfidential.blogspot.com/feeds/posts/default"=20
type=3Dapplication/atom+xml rel=3Dalternate><LINK title=3D"China =
Confidential - RSS"=20
href=3D"http://chinaconfidential.blogspot.com/feeds/posts/default?alt=3Dr=
ss"=20
type=3Dapplication/rss+xml rel=3Dalternate><LINK title=3D"China =
Confidential - Atom"=20
href=3D"http://www.blogger.com/feeds/12050584/posts/default"=20
type=3Dapplication/atom+xml rel=3Dservice.post><LINK title=3DRSD=20
href=3D"http://www.blogger.com/rsd.g?blogID=3D12050584" =
type=3Dapplication/rsd+xml=20
rel=3DEditURI><LINK title=3D"China Confidential - Atom"=20
href=3D"http://chinaconfidential.blogspot.com/feeds/2406324760364812834/c=
omments/default"=20
type=3Dapplication/atom+xml rel=3Dalternate>
<STYLE type=3Dtext/css>@import url( =
http://www.blogger.com/css/blog_controls.css );
@import url( =
http://www.blogger.com/dyn-css/authorization.css?targetBlogID=3D12050584 =
);
</STYLE>
<!-- -->
<STYLE type=3Dtext/css>@import url( =
http://www.blogger.com/css/navbar/classic.css );
DIV.b-mobile {
	DISPLAY: none
}
</STYLE>
<IFRAME id=3Dnavbar-iframe title=3D"Blogger Navigation and Search" =
marginWidth=3D0=20
marginHeight=3D0=20
src=3D"http://www.blogger.com/navbar.g?targetBlogID=3D12050584&amp;blogNa=
me=3DChina+Confidential&amp;publishMode=3DPUBLISH_MODE_BLOGSPOT&amp;navba=
rType=3DBLUE&amp;layoutType=3DCLASSIC&amp;homepageUrl=3Dhttp%3A%2F%2Fchin=
aconfidential.blogspot.com%2F&amp;searchRoot=3Dhttp%3A%2F%2Fchinaconfiden=
tial.blogspot.com%2Fsearch"=20
frameBorder=3D0 width=3D"100%" scrolling=3Dno height=3D30></IFRAME>
<DIV id=3Dspace-for-ie></DIV><!-- Site Meter -->
<SCRIPT=20
src=3D"http://s10.sitemeter.com/js/counter.js?site=3Ds10ConfidentialRepor=
ter"=20
type=3Dtext/javascript>
</SCRIPT>
<NOSCRIPT><A=20
href=3D"http://s10.sitemeter.com/stats.asp?site=3Ds10ConfidentialReporter=
"=20
target=3D_top><IMG alt=3D"Site Meter"=20
src=3D"http://s10.sitemeter.com/meter.asp?site=3Ds10ConfidentialReporter"=
=20
border=3D0></A> </NOSCRIPT><!-- Copyright (c)2006 Site Meter --><!-- =
Start Tracksy Code -->
<SCRIPT =
src=3D"http://tracksy.com/stats-js.cgi?host=3Dt;user=3Dmalraux;site=3D01"=
=20
type=3Dtext/javascript></SCRIPT>
<NOSCRIPT><A href=3D"http://tracksy.com/"><IMG height=3D1 alt=3D"Tracksy =
Web Stats"=20
src=3D"http://tracksy.com/stats-image.cgi?host=3Dt;user=3Dmalraux;site=3D=
01" width=3D1=20
border=3D0></A> </NOSCRIPT><!-- End Tracksy Code -->
<SCRIPT src=3D"http://embed.technorati.com/embed/qtfagicc.js"=20
type=3Dtext/javascript></SCRIPT>

<DIV id=3Dheader>
<H1><A href=3D"http://chinaconfidential.blogspot.com/">China =
Confidential=20
</A></H1>
<P id=3Ddescription>Foreign Reporting and Analysis Since April =
2005</P></DIV>
<SCRIPT =
src=3D"http://track.mybloglog.com/js/jsserv.php?mblID=3D2006051509592735"=
=20
defer type=3Dtext/javascript></SCRIPT>
<!-- Main Column -->
<DIV id=3DmainClm><!-- Blog Posts -->
<H3>Saturday, April 05, 2008</H3><A =
name=3D2406324760364812834>&nbsp;</A>=20
<H2>Like Corn Ethanol and Soy Biodiesel, Big Wind Power Push Depends on=20
Government Mandates</H2>
<DIV class=3DblogPost>
<DIV style=3D"CLEAR: both"></DIV><A=20
onblur=3D"try {parent.deselectBloggerImageGracefully();} catch(e) {}"=20
href=3D"http://bp1.blogger.com/_hntojuBOgo0/R_e8NgY6qsI/AAAAAAAACVI/GcxnJ=
zEYgqU/s1600-h/ChinaWindFarm2.jpg"><IMG=20
id=3DBLOGGER_PHOTO_ID_5185820436159179458=20
style=3D"FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt=3D""=20
src=3D"http://bp1.blogger.com/_hntojuBOgo0/R_e8NgY6qsI/AAAAAAAACVI/GcxnJz=
EYgqU/s320/ChinaWindFarm2.jpg"=20
border=3D0></A><BR><BR><SPAN style=3D"FONT-STYLE: italic">Carbon=20
Confidential.</SPAN>...<BR><BR>Another renewable nightmare.<BR><BR>China =
is=20
expected to overtake Germany and the US to become the world's largest =
wind power=20
producer by 2020. Boasting long coastal lines and abundant wind power =
resources,=20
China has set up more than 60 wind power farms around the country.=20
<BR><BR>According to China's national development plan, the total =
installed=20
capacity of wind power will reach 5 million kw by 2010 and 30 million kw =
by=20
2020.<BR><BR>Critics say it all adds up to a planning fiasco. Pointing =
to=20
Europe, they cite at least two major studies that reached identical =
conclusions:=20
(1) wind power actually provides only 8 percent effective capacity, and =
(2) the=20
relative contribution of wind power to Germany=E2=80=99s guaranteed =
capacity will fall=20
continuously to 4 percent by 2020.<BR><SPAN=20
style=3D"FONT-WEIGHT: bold"><BR>Germany's Windmill =
Madness</SPAN><BR><BR>Though=20
Germany has more than 20,000 wind turbines, it is currently building 26 =
new=20
coal-fired power stations--a sad commentary on the state of the wind=20
industry.<BR><BR>The German magazine Der Spiegel exposed what it called =
"The=20
Windmill Madness" in March of 2004. What had begun as "the dream of=20
environmentally friendly energy" had turned out to mean the "highly =
subsidised=20
destruction of the landscape," the magazine found, explaining that in =
one=20
region, the wind was strong enough to utilize more than half the =
available=20
capacity on only 36 days of the year--less than one day in 10. On 150 =
days, less=20
than 10 percent of capacity was being used. Der Spiegel reported that =
for every=20
megawatt of wind power, the system required 800-900 kilowatts of power =
in=20
reserve from other sources.<BR><BR>Denmark, which has one of the world's =
highest=20
concentrations of wind turbines, has ironically become a case study for =
the=20
downside of wind power. The installation of large numbers of wind =
turbines has=20
led to problems balancing the Danish power grid. On windy days, more =
electricity=20
is produced than can be used locally and the excess has to be sold on =
the open=20
market, usually for much less than the subsidised price paid to create =
it.=20
Conversely, on calmer days, the country has to import electricity from=20
neighbouring countries. <BR><BR><SPAN style=3D"FONT-WEIGHT: =
bold">Constant,=20
Horrible Hum</SPAN><BR><BR>Wind power is also running into increased =
opposition=20
in the US and Australia, where neighbors of the metallic monsters =
complain of=20
unbearable noise--a constant, horrible hum from which there is no=20
escape.<BR><BR>A team in Portugal investigating heart, lung, and nerve =
damage=20
from industrial low-frequency noise has found that the conditions for =
causing=20
"vibroacoustic disease" exist inside houses near large wind turbines. =
Canadian=20
News has reported families forced to leave their homes because of =
headaches,=20
dizziness, irritability, and sheer lack of sleep.<BR><BR>The =
land-intensive=20
technology is far from green. The towering turbines--which are typically =
well=20
over 400 feet tall to the tip of their blades--weigh anywhere from 150 =
to 350=20
tons, sweep a vertical air space of 1.5 to 2 acres with tip speeds =
between 150=20
and 200 miles per hour, and need a thousand tons of steel-reinforced =
concrete,=20
extensive road infrasture and acres of road clearance. In terms of =
visual=20
pollution, the turbines can be just as bad or worse than high-voltage =
overhead=20
power lines.<BR><BR>Not surprisingly, wind energy companies worldwide =
are=20
targeting vulnerable rural communities and landscapes for construction =
of the=20
turbines; and developers are building roads and wind power plants in =
wilderness=20
areas, particularly on prominent ridge lines.<BR><BR><SPAN=20
style=3D"FONT-WEIGHT: bold">Hazardous to Birds</SPAN><BR><BR>Giant wind =
farms are=20
also hazardous to birds. Wind blades have killed thousands of birds =
worldwide in=20
the last decade, including endangered species. The results of a =
five-month study=20
of the new giant turbines on New York State's Tug Hill plateau suggest =
that the=20
annual toll for the complete facility is more than 16,000 birds and =
bats. The=20
Sierra Club and the National Audubon Society have criticized wind =
power=E2=80=99s=20
effects on birds, but wind power zealots--and their fawning supporters =
in the=20
media--have largely ignored the problem.<BR><BR>Reason: in the US and =
abroad,=20
wind power is currently the favorite source of renewable energy. The=20
forever-in-its-infancy industry benefits from heavy government =
incentives=20
stretching back more than two decades. For all the help, however, the =
Energy=20
Information Administration of the US Department of Energy projects that =
wind's=20
share of electricity production in the US will be less than one percent =
in=20
2030.<BR><BR>In short, like corn-based ethanol and biodiesel derived =
from soy=20
and other edible and unsustainable oilseed crops, wind power--at least, =
in its=20
current technological incarnation--appears to be a destructive=20
boondoggle.<BR><BR>Peter Glover and Michael Economides have written a=20
devastating critique of windmill madness in the UK. Click <A=20
href=3D"http://www.energytribune.com/articles.cfm?aid=3D842#">here</A> =
to read the=20
entire piece in <A href=3D"http://www.energytribune.com/">Energy =
Tribune</A>.=20
Excerpts appear below.<BR><BR><BR><SPAN style=3D"FONT-WEIGHT: bold">
<BLOCKQUOTE>If you have a hankering to see Britain's green and pleasant=20
  countryside or its rugged coastline, you shouldn't wait too long. They =
are=20
  both likely to disappear soon under thousands of massive, swirling, =
400-foot=20
  wind turbines. Recently, UK Industry Secretary John Hutton announced =
that the=20
  British government is planning 25 gigawatts of offshore wind power =
capacity,=20
  adding to the 8 GW already in development. A grand plan that could, in =
theory=20
  anyway, power all of Britain's 25 million homes by as early as=20
  2020.<BR><BR>Wind seems to be blowing in the minds of the politically =
correct=20
  and those on the environmentalist bandwagon. But the cost is going to =
be huge,=20
  no companies will plunge into it without massive government subsidies, =
and=20
  should the turbines actually be built, power reliability will almost =
certainly=20
  take a nosedive.<BR><BR>The extent of Britain's wind power commitment =
can be=20
  shown by the fact that by itself, the 8 GW capacity under construction =
will=20
  give Britain world leadership in installed wind power production. So =
why is=20
  Britain jumping ahead?<BR><BR>Wind power has become the energy source =
du jour,=20
  the darling of (most) environmental groups and governments. Currently, =
just 2=20
  percent of the UK's power comes from renewable energy sources, with =
wind=20
  providing less than 0.5 GW of the total generation capacity. Hutton's =
plan=20
  would mean an astonishing leap for the British wind power industry. Of =
the 8=20
  GW in capacity that=E2=80=99s currently planned, the London Array, =
with 271 wind=20
  turbines to be built in the Thames estuary, will be the world's =
largest plant,=20
  providing 1 GW of nominal capacity by itself. The London Array should =
be=20
  operational by 2014 and is expected to power 750,000 homes. But it =
would be=20
  upstaged by an even bigger project currently under consideration: the =
proposed=20
  $6 billion Atlantic Array, which would consist of 350 turbines off the =

  southwest coast of England<BR><BR>Hutton's plan would literally change =
the=20
  face of Britain. On the BBC's =E2=80=9CPolitics Show=E2=80=9D he =
recently said the plan will=20
  result in roughly 7,000 turbines =E2=80=93 astoundingly, one every =
half-mile around=20
  the entire coast of Britain....<BR><BR></BLOCKQUOTE><BR></SPAN>
<DIV style=3D"CLEAR: both; PADDING-BOTTOM: 0.25em"></DIV><BR>
<DIV class=3Dbyline><A title=3D"permanent link"=20
href=3D"http://chinaconfidential.blogspot.com/2008/04/like-corn-ethanol-a=
nd-soy-biodiesel.html">#</A>=20
posted by Confidential Reporter @ 6:31 PM <SPAN class=3Ditem-action><A=20
title=3D"Email Post"=20
href=3D"http://www.blogger.com/email-post.g?blogID=3D12050584&amp;postID=3D=
2406324760364812834"><IMG=20
class=3Dicon-action alt=3D""=20
src=3D"http://www.blogger.com/img/icon18_email.gif"></A></SPAN><SPAN=20
class=3D"item-control blog-admin pid-2105565737"><A title=3D"Edit Post"=20
style=3D"BORDER-RIGHT: medium none; BORDER-TOP: medium none; =
BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"=20
href=3D"http://www.blogger.com/post-edit.g?blogID=3D12050584&amp;postID=3D=
2406324760364812834"><IMG=20
class=3Dicon-action alt=3D""=20
src=3D"http://www.blogger.com/img/icon18_edit_allbkg.gif"></A></SPAN> =
</DIV></DIV>
<DIV class=3DblogComments><BR><BR><BR><BR><A=20
href=3D"http://chinaconfidential.blogspot.com/">&lt;&lt; Home</A> =
</DIV><!-- 	In accordance to the Blogger terms of service, please leave =
this button somewhere on your blogger-powered page. Thanks! -->
<P><A href=3D"http://www.blogger.com/"><IMG height=3D31=20
alt=3D"This page is powered by Blogger. Isn't yours?"=20
src=3D"http://buttons.blogger.com/bloggerbutton1.gif" width=3D88=20
border=3D0></A></P></DIV><!-- Sidebar -->
<DIV id=3DsideBar>
<DIV id=3Dprofile-container>
<H2 class=3Dsidebar-title>About Me</H2>
<DL class=3Dprofile-datablock>
  <DD class=3Dprofile-data><STRONG>Name:</STRONG> Confidential Reporter=20
  <DD class=3Dprofile-data><STRONG>Location:</STRONG> United States =
</DD></DL>
<P class=3Dprofile-link><A=20
href=3D"http://www.blogger.com/profile/06021310141781953216">View my =
complete=20
profile</A></P></DIV><!--=20
		=09
			+++++++++++++++++++++++++++++++++++++++++++++++++
				=09
			Add things to your sidebar here.
			Use the format:
			<script type=3D"text/javascript" =
src=3D"http://embed.technorati.com/embed/qtfagicc.js"></script>
			<li><a href=3D"URL">Link Text</a></li>
		<script type=3D"text/javascript" =
src=3D"http://embed.technorati.com/embed/jm589nfy97.js"></script>
<script type=3D"text/javascript" =
src=3D"http://embed.technorati.com/embed/jm589nfy97.js"></script>
			++++++++++++++++++++++++++++++++++++++++++++++++			=09
		-->
<H6>Links</H6>
<UL <li><A href=3D"http://www.allroadsleadtochina.com/">All Roads Lead =
to=20
  China</A>=20
  <LI><A href=3D"http://www.america.gov/">America.gov</A>=20
  <LI><A href=3D"http://www.americaneconomicalert.org/">American =
Economic=20
  Alert</A>=20
  <LI><A href=3D"http://www.americanthinker.com/">American Thinker</A>=20
  <LI><A href=3D"http://www.asiabizblog.com/">Asia Business =
Intelligence</A>=20
  <LI><A href=3D"http://asiabizlaw.blogspot.com/">Asia Business Law</A>=20
  <LI><A href=3D"http://www.asiapundit.com/">Asia Pundit</A>=20
  <LI><A href=3D"http://atlasshrugs2000.typepad.com/atlas_shrugs/">Atlas =

  Shrugs</A>=20
  <LI><A href=3D"http://www.burmawatch.org/">Burma Watch</A>=20
  <LI><A href=3D"http://www.chiefasiainspector.com/">Chief Asia =
Inspector</A>=20
  <LI><A href=3D"http://www.china-alberta.com/">China-Alberta</A>=20
  <LI><A href=3D"http://www.chinacompanystartupguide.com/">China Company =
Startup=20
  Guide</A>=20
  <LI><A href=3D"http://www.china-crossroads.com/">China Crossroads</A>=20
  <LI><A href=3D"http://www.chinacubed.com/">China Cubed</A>=20
  <LI><A href=3D"http://chinadigitaltimes.net/">China Digital Times</A>=20
  <LI><A href=3D"http://china-economics-blog.blogspot.com/">China =
Economics Blog=20
  <LI></A><A href=3D"http://www.china-intel.blogspot.com/">China =
Intel</A>=20
  <LI><A href=3D"http://chinalawblog.typepad.com/">China Law Blog</A>=20
  <LI><A href=3D"http://chinamatters.blogspot.com/">China Matters</A>=20
  <LI><A href=3D"http://chinaredux.com/%22">ChinaRedux</A>=20
  <LI><A href=3D"http://claro.motime.com/%22">Claro</A>=20
  <LI><A href=3D"http://tomasestradapalma4a.blogspot.com/">Cuban =
Economic=20
  Reform</A>=20
  <LI><A href=3D"http://deadlinepundit.blogspot.com/">Deadline =
Pundit</A>=20
  <LI><A href=3D"http://eaglespeak.blogspot.com/">EagleSpeak</A>=20
  <LI><A href=3D"http://elcubanocafe.blogspot.com/">El Cafe Cubano</A>=20
  <LI><A =
href=3D"http://www.zonaeuropa.com/weblog.htm/">EastSouthWestNorth</A>=20
  <LI><A href=3D"http://www.globalvoicesonline.org/">Global Voices =
Online</A>=20
  <LI><A =
href=3D"http://newsweek.washingtonpost.com/postglobal/america/">How the=20
  World Sees America</A>=20
  <LI><A href=3D"http://israelmatzav.blogspot.com/">Israel matzav</A>=20
  <LI><A href=3D"http://www.israpundit.com/2008/">IsraPundit</A>=20
  <LI><A href=3D"http://www.junkscience.com/">Junk Science</A>=20
  <LI><A href=3D"http://www.mandarinplanet.com/">Mandarin Planet</A>=20
  <LI><A href=3D"http://neveryetmelted.com/">Never Yet Melted</A>=20
  <LI><A href=3D"http://www.newsvine.com/">Newsvine</A>=20
  <LI><A href=3D"http://nomorespin.blogspot.com/">No More Spin</A>
  <LI>
  <LI><A href=3D"http://redapes.org/">Orangutan Outreach</A>=20
  <LI><A href=3D"http://panasianbiz.com/">PanAsianBiz</A>=20
  <LI><A href=3D"http://politicsofcp.blogspot.com/">Politics of CP</A>=20
  <LI><A =
href=3D"http://blog.washingtonpost.com/postglobal/">PostGlobal</A>=20
  <LI><A href=3D"http://www.rfa.org/english/">Radio Free Asia</A>=20
  <LI><A href=3D"http://www.ran.org/">Rain Forest Action Network</A>=20
  <LI><A href=3D"http://random10.blogspot.com/">Random 10</A>=20
  <LI><A href=3D"http://rightdemocrat.blogspot.com/">Right Democrat</A>=20
  <LI><A href=3D"http://www.rightalk.com/">Rightalk.com</A>=20
  <LI><A href=3D"http://spaces.msn.com/plamonitor/">PLA Monitor</A>=20
  <LI><A href=3D"http://www.stopahmadinejad.com/">Stop Ahmadinejad</A>=20
  <LI><A href=3D"http://www.thebaldingblog.blogspot.com/">The Balding =
Blog</A>=20
  <LI><A href=3D"http://www.burmacampaign.org.uk/">The Burma Campaign =
UK</A>
  <LI>
  <LI><A href=3D"http://www.theepochtimes.com/">The Epoch Times</A>=20
  <LI><A href=3D"http://pmsol3.wordpress.com/">The Postnational =
Monitor</A>=20
  <LI><A href=3D"http://www.schifferreport.net/">The Schiffer Report</A>
  <LI>
  <LI><A href=3D"http://michaelturton.blogspot.com/">The View From =
Taiwan</A>=20
  <LI><A href=3D"http://bsimmons.wordpress.com/">Thoughts of a =
Conservative=20
  Christian</A>=20
  <LI><A href=3D"http://tomasestradapalma4today.blogspot.com/">Tomas =
Estrada Palma=20
  For Today</A>
  <LI>
  <LI><A href=3D"http://tomnelson.blogspot.com/">Tom Nelson</A>
  <LI>
  <LI><A =
href=3D"http://www.transnationallawblog.typepad.com/">Transnational Law=20
  Blog</A>=20
  <LI><A href=3D"http://louis-fina.blogspot.com/">Wandering Around =
Financial=20
  Cities</A>
  <LI>
  <LI><A =
href=3D"http://westernhemispherepolicywatch.blogspot.com/">Western=20
  Hemisphere Policy Watch</A>=20
  <LI><A href=3D"http://westernresistance.com/">Western Resistance</A>
  <LI>
  <SCRIPT src=3D"http://embed.technorati.com/embed/gdf86hnirj.js"=20
  type=3Dtext/javascript></SCRIPT>
  </LI></UL>
<H6>archives</H6>
<UL>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_04_01_archive.html">Ap=
ril=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_05_01_archive.html">Ma=
y=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_06_01_archive.html">Ju=
ne=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_07_01_archive.html">Ju=
ly=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_08_01_archive.html">Au=
gust=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_09_01_archive.html">Se=
ptember=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_10_01_archive.html">Oc=
tober=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_11_01_archive.html">No=
vember=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2005_12_01_archive.html">De=
cember=20
  2005</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_01_01_archive.html">Ja=
nuary=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_02_01_archive.html">Fe=
bruary=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_03_01_archive.html">Ma=
rch=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_04_01_archive.html">Ap=
ril=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_05_01_archive.html">Ma=
y=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_06_01_archive.html">Ju=
ne=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_07_01_archive.html">Ju=
ly=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_08_01_archive.html">Au=
gust=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_09_01_archive.html">Se=
ptember=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_10_01_archive.html">Oc=
tober=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_11_01_archive.html">No=
vember=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2006_12_01_archive.html">De=
cember=20
  2006</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_01_01_archive.html">Ja=
nuary=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_02_01_archive.html">Fe=
bruary=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_03_01_archive.html">Ma=
rch=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_04_01_archive.html">Ap=
ril=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_05_01_archive.html">Ma=
y=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_06_01_archive.html">Ju=
ne=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_07_01_archive.html">Ju=
ly=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_08_01_archive.html">Au=
gust=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_09_01_archive.html">Se=
ptember=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_10_01_archive.html">Oc=
tober=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_11_01_archive.html">No=
vember=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2007_12_01_archive.html">De=
cember=20
  2007</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2008_01_01_archive.html">Ja=
nuary=20
  2008</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2008_02_01_archive.html">Fe=
bruary=20
  2008</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2008_03_01_archive.html">Ma=
rch=20
  2008</A>
  <LI><A=20
  =
href=3D"http://chinaconfidential.blogspot.com/2008_04_01_archive.html">Ap=
ril=20
  2008</A> <!-- Link to the front page, from your archives -->
  <SCRIPT type=3Dtext/javascript>if =
(location.href.indexOf("archive")!=3D-1) document.write("<li><strong><a =
href=3D\"http://chinaconfidential.blogspot.com/\">Current =
Posts</a></strong></li>");</SCRIPT>
  </LI></UL><A title=3D"Atom feed"=20
href=3D"http://chinaconfidential.blogspot.com/feeds/posts/default">Site =
Feed</A>=20
<A title=3D"Subscribe to my feed, China Confidential"=20
href=3D"http://feeds.feedburner.com/blogspot/Vliq" =
type=3Dapplication/rss+xml=20
rel=3Dalternate><IMG=20
style=3D"BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; =
BORDER-BOTTOM: 0px"=20
alt=3D"" =
src=3D"http://www.feedburner.com/fb/images/pub/xml_button.gif"></A> =
<LINK=20
title=3D"China Confidential"=20
href=3D"http://www.chinaconfidential.blogspot.com/rss.xml"=20
type=3Dapplication/rss+xml rel=3Dalternate></DIV></BODY></HTML>

------=_NextPart_001_0206_01C89BC7.E8C52310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/navbar.g?targetBlogID=12050584&blogName=China+Confidential&publishMode=PUBLISH_MODE_BLOGSPOT&navbarType=BLUE&layoutType=CLASSIC&homepageUrl=http%3A%2F%2Fchinaconfidential.blogspot.com%2F&searchRoot=http%3A%2F%2Fchinaconfidential.blogspot.com%2Fsearch

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML dir=3Dltr><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dutf-8"><LINK=20
href=3D"http://www.blogger.com/v-css/navbar/3328360018-navbar.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK =
href=3D"http://www.blogger.com/v-css/navbar/1297325411-1.css"=20
type=3Dtext/css rel=3Dstylesheet>
<META content=3D"MSHTML 6.00.6000.16640" name=3DGENERATOR></HEAD>
<BODY>
<SCRIPT src=3D"http://www.blogger.com/v-js/3625575137-cookies.common.js" =

type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.blogger.com/v-app/scripts/1019856700-common.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.blogger.com/v-app/scripts/107652916-dom.common.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
=0A=
  =0A=
   var ID =3D "12050584";=0A=
   var FLAG_COOKIE_NAME =3D 'flaggedBlog';=0A=
   var MAX_FLAGGED_BLOGS =3D 10;=0A=
   var FLAG_BLOG_URL =3D "http://www.blogger.com" +=0A=
                       "/flag-blog.g?nav=3D" +=0A=
                       "1" +=0A=
                       "&toFlag=3D" + ID;=0A=
   var UNFLAG_BLOG_URL =3D "http://www.blogger.com" +=0A=
                       "/unflag-blog.g?nav=3D" +=0A=
                       "1" +=0A=
                       "&toFlag=3D" + ID;=0A=
=0A=
   var ncHasFlagged =3D false;=0A=
   var servletTarget =3D new Image();=0A=
=0A=
  =0A=
  function hasFlagged() {=0A=
    if (getCookie(FLAG_COOKIE_NAME)) {=0A=
      var bloglist =3D getCookie(FLAG_COOKIE_NAME);=0A=
      var blogarray =3D bloglist.split(",")=0A=
      if (FindInArray(blogarray, ID) > 0) {=0A=
        return true;=0A=
      }=0A=
    }=0A=
    return ncHasFlagged;=0A=
  }=0A=
  =0A=
=0A=
  function toggleFlag() {=0A=
    var date =3D new Date();=0A=
    var flagBtn =3D document.getElementById('b-flag-this');=0A=
=0A=
    if (hasFlagged()) {=0A=
      removeBlogFromFlagCookie();=0A=
      servletTarget.src =3D UNFLAG_BLOG_URL + '&d=3D' + date.getTime();=0A=
=0A=
      RemoveClass(flagBtn, 'flagged');=0A=
      ncHasFlagged =3D false;=0A=
    } else {=0A=
      setBloggerFlagCookie();=0A=
      servletTarget.src =3D FLAG_BLOG_URL + '&d=3D' + date.getTime();=0A=
=0A=
      AddClass(flagBtn, 'flagged');=0A=
      ncHasFlagged =3D true;=0A=
    }=0A=
=0A=
    refreshDrop();=0A=
  }=0A=
=0A=
  =0A=
  function showDrop() {=0A=
   var overlap =3D 5;=0A=
   var dropdown_position =3D=0A=
     GetPageOffsetRight(document.getElementById('b-flag-this')) - =
overlap + "px";=0A=
=0A=
   document.getElementById('unflagi').style.display =3D 'none';=0A=
   document.getElementById('flagi').style.display =3D 'none';=0A=
=0A=
   if (!hasFlagged()) {=0A=
      document.getElementById('flagi').style.display =3D 'inline';=0A=
      document.getElementById('flagi').style.left =3D dropdown_position;=0A=
      showElement(document.getElementById('flagi'));=0A=
    } else {=0A=
      document.getElementById('unflagi').style.display =3D 'inline';=0A=
      document.getElementById('unflagi').style.left =3D =
dropdown_position;=0A=
      showElement(document.getElementById('unflagi'));=0A=
    }=0A=
  }=0A=
=0A=
  =0A=
  function hideDrop() {=0A=
      hideElement(document.getElementById('flagi'));=0A=
      hideElement(document.getElementById('unflagi'));=0A=
  }=0A=
=0A=
  =0A=
  function refreshDrop() {=0A=
    hideDrop();=0A=
    showDrop();=0A=
  }=0A=
=0A=
  =0A=
  function setBloggerFlagCookie() {=0A=
    var bloglist =3D ""=0A=
    if (getCookie(FLAG_COOKIE_NAME)) {=0A=
      bloglist =3D getCookie(FLAG_COOKIE_NAME)=0A=
      var blogarray =3D bloglist.split(",")=0A=
      if (blogarray.length >=3D MAX_FLAGGED_BLOGS) {=0A=
        blogarray.shift()=0A=
      }=0A=
      InsertArray(blogarray, ID)=0A=
      bloglist =3D blogarray.toString();=0A=
    } else {=0A=
      bloglist =3D ID=0A=
    }=0A=
    setCookie(FLAG_COOKIE_NAME, bloglist, null, null, '/', null)=0A=
   }=0A=
=0A=
  =0A=
  function removeBlogFromFlagCookie(){=0A=
    if (getCookie(FLAG_COOKIE_NAME)) {=0A=
      var bloglist =3D getCookie(FLAG_COOKIE_NAME);=0A=
      var blogarray =3D bloglist.split(",")=0A=
      if (FindInArray(blogarray, ID) > 0) {=0A=
        DeleteArrayElement(blogarray, ID)=0A=
        bloglist =3D blogarray.toString();=0A=
      }=0A=
      setCookie(FLAG_COOKIE_NAME, bloglist, null, null, '/', null);=0A=
    }=0A=
  }=0A=
  =0A=
=0A=
  </SCRIPT>

<DIV id=3Dflagi onmouseover=3DshowDrop() style=3D"POSITION: absolute"=20
onmouseout=3DhideDrop();>Notify Blogger about <A=20
href=3D"http://help.blogger.com/bin/answer.py?answer=3D42517"=20
target=3D_blank>objectionable content</A> on this page.</DIV>
<DIV id=3Dunflagi onmouseover=3DshowDrop() style=3D"POSITION: absolute"=20
onmouseout=3DhideDrop()>You flagged this blog as having <A=20
href=3D"http://help.blogger.com/bin/answer.py?answer=3D42517"=20
target=3D_blank>objectionable content</A>.</DIV>
<DIV id=3Db-navbar><A id=3Db-logo title=3D"Go to Blogger.com" =
tabIndex=3D1=20
href=3D"http://www.blogger.com/">
<DIV id=3Dnavbar-logo><SPAN>Blogger</SPAN></DIV></A>
<DIV class=3Db-mobile id=3Db-sms><A tabIndex=3D2=20
href=3D"sms:?body=3DHi%2C%20check%20out%20China%20Confidential%20at%20htt=
p%3A%2F%2Fchinaconfidential.blogspot.com%2F">Send=20
As SMS</A></DIV>
<DIV id=3Db-search>
<TABLE cellSpacing=3D0 cellPadding=3D0 border=3D0>
  <TBODY>
  <TR>
    <TD class=3Dnavsearch vAlign=3Dcenter noWrap>
      <FORM id=3Dsearchthis style=3D"DISPLAY: inline"=20
      action=3Dhttp://chinaconfidential.blogspot.com/search =
method=3Dget>
      <TABLE cellSpacing=3D0 cellPadding=3D0>
        <TBODY>
        <TR>
          <TD vAlign=3Dcenter><INPUT id=3Db-query title=3D"Search Blog" =
tabIndex=3D3=20
            name=3Dq></TD>
          <TD class=3Dnavbutton vAlign=3Dcenter><NOSCRIPT><INPUT =
id=3Db-searchbtn=20
            title=3D"Search this blog" tabIndex=3D4 type=3Dimage=20
            alt=3D"Search This Blog"=20
            =
src=3D"http://www.blogger.com/img/navbar/1/btn_search_this.png"></NOSCRIP=
T>
            <SCRIPT type=3Dtext/javascript>=0A=
  document.write("\74div id\75\42b-search-this\42 class\75\42btn\42 =
onclick\75\42document.getElementById(\47searchthis\47).submit()\42 =
tabindex\75\0424\42\76\74div\76Search Blog\74/div\76\74/div\076");=0A=
</SCRIPT>
             </TD>
          <TD class=3Dnavbutton vAlign=3Dcenter>
            <SCRIPT type=3Dtext/javascript>=0A=
  document.write("\74div id\75\42b-flag-this\42 class\75\42btn\42 =
onclick\75\42toggleFlag();\42 onmouseover\75\42showDrop()\42 =
onmouseout\75\42hideDrop()\42 tabindex\75\0425\42\76\74div =
id\75\42bt-flag-body\42\76\74img class\75\42flag\42 alt\75\42\42 =
src\75\42http://www.blogger.com/img/navbar/1/flag.gif\42\76\nFlag =
Blog\74/div\76\n\74div id\75\42bt-unflag-body\42\76\74img =
class\75\42flag\42 alt\75\42\42 =
src\75\42http://www.blogger.com/img/navbar/1/unflag.gif\42\76\nUnflag =
Blog\74/div\76\74/div\076");=0A=
</SCRIPT>
          </TD></TR></TBODY></TABLE></FORM></TD>
    <TD vAlign=3Dcenter noWrap width=3D"100%"><A id=3Db-next =
tabIndex=3D6=20
      href=3D"http://www.blogger.com/next-blog?navBar=3Dtrue">Next =
Blog=C2=BB</A></TD>
    <TD class=3Dnavbar-right vAlign=3Dcenter noWrap align=3Dright><A =
id=3Db-getorpost=20
      tabIndex=3D7 href=3D"http://www.blogger.com/signup.g">Create =
Blog</A> | <A=20
      tabIndex=3D8 href=3D"http://www.blogger.com/">Sign=20
In</A></TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>

------=_NextPart_001_0206_01C89BC7.E8C52310--

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://s10.sitemeter.com/js/counter.js?site=s10ConfidentialReporter

// Copyright (c)2006 Site Meter, Inc.=20
// <![CDATA[
var SiteMeter =3D
{
	init:function( sCodeName, sServerName, sSecurityCode )
	{
		SiteMeter.CodeName =3D sCodeName;
		SiteMeter.ServerName =3D sServerName;	=09
		SiteMeter.SecurityCode =3D sSecurityCode;=09
		SiteMeter.IP =3D "63.131.6.192";=09
		SiteMeter.trackingImage =3D new Image();

		if (typeof(g_sLastCodeName) !=3D 'undefined')
			if (g_sLastCodeName =3D=3D sCodeName)
				return;
			=09
		SiteMeter.onPageLoad();
//		if (!SiteMeter.addEvent( window, "load", SiteMeter.displayCounter ))
//			SiteMeter.onPageLoad();

		SiteMeter.addEvent( window, "load", SiteMeter.trackOutClicks );
	},
=09
	aimInit:function(sCodeName)
	{
		var sSubDomain =3D sCodeName.substr(0,3);
		SiteMeter.init( sCodeName, sSubDomain + ".sitemeter.com", "");
	},

	trackOutClicks:function()
	{
		for(var i=3D0;i<document.links.length;i++)
		{
			SiteMeter.addEvent( document.links[i], "click", SiteMeter.onClick );
			SiteMeter.addEvent( document.links[i], "contextmenu", =
SiteMeter.onContextClick );		=09
		}
	=09
	},

	onPageLoad:function()
	{
		var newImage  =3D document.createElement("img");
		var newHref   =3D document.createElement("a")	=09
		var scriptRef =3D SiteMeter.getScriptElement();

		var newIFrame =3D document.createElement("iframe");
    newIFrame.frameBorder=3D0;
		newIFrame.width =3D 0;
		newIFrame.height =3D 0;
		newIFrame.src =3D "http://dg.specificclick.net/?u=3D" + =
escape(document.location) + "&r=3D" + SiteMeter.getReferral();

		var today=3Dnew Date();
		var sTZO=3D(typeof(today.getTimezoneOffset)!=3D'undefined') ? =
today.getTimezoneOffset() : '';
	=09
		newHref.target =3D "_top";
		newHref.href =3D "http://www.sitemeter.com/stats.asp?site=3D" + =
SiteMeter.CodeName;
		newHref.id =3D "idSiteMeterHREF";
	=09
		newImage.border =3D "0";
		newImage.alt =3D "Site Meter";
	=09
		var sImage =3D "http://" + SiteMeter.ServerName + "/meter.asp?site=3D" =
+ SiteMeter.CodeName;=20
		sImage +=3D "&refer=3D"+SiteMeter.getReferral();
		if (SiteMeter.IP !=3D "")
			sImage +=3D "&ip=3D"+SiteMeter.IP;
		sImage +=3D "&w=3D"+window.screen.width;=20
		sImage +=3D "&h=3D"+window.screen.height;
		sImage +=3D "&clr=3D"+window.screen.colorDepth;
		sImage +=3D "&tzo=3D" + sTZO;
		sImage +=3D "&lang=3D"+escape(navigator.language ? navigator.language =
: navigator.userLanguage);
		if (SiteMeter.SecurityCode !=3D "")
			sImage +=3D "&sc=3D"+escape(SiteMeter.SecurityCode);
		sImage +=3D "&pg=3D"+escape(document.location);
		sImage +=3D "&js=3D1&rnd=3D"+Math.random();
	=09
		newImage.src =3D sImage;
		newHref.appendChild(newImage);
		var parentOfScript =3D SiteMeter.getParent( scriptRef );
	=09
		if (parentOfScript){
			parentOfScript.insertBefore(newHref,scriptRef);
			parentOfScript.insertBefore(newIFrame,scriptRef);
		}
		else
			SiteMeter.trackingImage.src =3D sImage;
	},
=09
	logEvent:function(sEvent, sText, sURL )
	{
		if (document.images && !SiteMeter.isLocalURL(sURL))
		{
			var sImg =3D "http://" + SiteMeter.ServerName + "/meter.asp?site=3D" =
+ SiteMeter.CodeName;=20
			sImg +=3D "&e=3D" + sEvent;
			sImg +=3D "&l=3D" + escape(sURL);
			sImg +=3D "&t=3D" + escape(sText);
			sImg +=3D "&pg=3D"+ escape(document.location);
			if (SiteMeter.SecurityCode !=3D "") sImg +=3D =
"&sc=3D"+escape(SiteMeter.SecurityCode);
			if (SiteMeter.IP !=3D "")	sImg +=3D "&ip=3D"+SiteMeter.IP;
			sImg +=3D "&rnd=3D"+Math.random();
			if (SiteMeter.trackingImage)
				SiteMeter.trackingImage.src =3D sImg;
		}
	},
=09
	trimFragment:function(sString)
	{
		return sString.indexOf("#")>0?sString.substring(0, =
sString.indexOf("#")):sString;
	},
=09
	isLocalURL:function(sURL)
	{
		return (SiteMeter.trimFragment(document.location.href) =3D=3D =
SiteMeter.trimFragment(sURL));
	},
=09
	getReferral:function()
	{
	 	var sRef=3D"";
		var g_d =3D document;
		if (typeof(g_frames) !=3D "undefined")
		if (g_frames)
			sRef=3Dtop.document.referrer;
		if ((sRef =3D=3D "") || (sRef =3D=3D "[unknown origin]") || (sRef =
=3D=3D "unknown") || (sRef =3D=3D "undefined"))
		if (document["parent"] !=3D null)=20
			if (parent["document"] !=3D null) // ACCESS ERROR HERE!
				if (parent.document["referrer"] !=3D null)=20
					if (typeof(parent.document) =3D=3D "object")
						sRef=3Dparent.document.referrer;=20
		if ((sRef =3D=3D "") || (sRef =3D=3D "[unknown origin]") || (sRef =
=3D=3D "unknown") || (sRef =3D=3D "undefined"))
		if (g_d["referrer"] !=3D null)=20
			sRef =3D g_d["referrer"];
		if ((sRef =3D=3D "[unknown origin]") || (sRef =3D=3D "unknown") || =
(sRef =3D=3D "undefined"))
			sRef =3D "";
		=09
		return escape(sRef);
	},
=09
	getParent:function(e)
	{
		if (!e)
			return null;
		else
			if (e.parentElement)=20
				return e.parentElement;		=09
			else=09
				if (e.parentNode)
					return e.parentNode;
				else
					return null;
	},
=09
	getTarget:function(e)
	{
		var targ=3Dnull;
		if (!e) var e =3D window.event;
		if (e.target)=20
			targ =3D e.target;
		else if (e.srcElement)=20
			targ =3D e.srcElement;
		if (targ.nodeType)=20
			if (targ.nodeType =3D=3D 3) // Safari bug
				targ =3D targ.parentNode;
		return targ;
	},
=09
	getScriptElement:function()
	{
		var refScript=3Dnull;
		refScript =3D document.getElementById( "SiteMeterScript" );
		if (refScript)
			return refScript;
		=09
		var pageScripts =3D document.getElementsByTagName("script");
		for(var i=3D0;i<pageScripts.length;i++)
		{
			if (pageScripts[i].src)
			{
				var sSource =3D pageScripts[i].src.toLowerCase();
				if (sSource.indexOf("site=3D" + SiteMeter.CodeName) > 0)
					return pageScripts[i];
			}
		}

		return null;
	},
=09
	elementText:function(e)
	{
		do
		{
			var sText =3D (e.text)?e.text:e.innerText;
			if (sText) return sText.substr(0,100);
			if (e.alt) return e.alt;
			if (e.src) return e.src;
			e =3D SiteMeter.getParent(e);
		}
		while (e);
		return "";
	},
=09
	elementURL:function(e)
	{
		do
		{
			if ((e.href) && (e.nodeName.toUpperCase() =3D=3D 'A')) return e.href;
			e =3D SiteMeter.getParent(e);
		}
		while (e);
		return "";
	},
=09
	onClick:function(e)
	{
		var target =3D SiteMeter.getTarget(e);
		SiteMeter.logEvent( "click", SiteMeter.elementText(target), =
SiteMeter.elementURL(target) );
	},
=09
	onContextClick:function(e)
	{
		var target =3D SiteMeter.getTarget(e);
		SiteMeter.logEvent( "context", SiteMeter.elementText(target), =
SiteMeter.elementURL(target) );
	},

	addEvent:function( obj, sEvent, func )
	{
		if (obj.addEventListener)
		    obj.addEventListener(sEvent, func, false);
		else=20
			if (obj.attachEvent)=09
			   obj.attachEvent( "on"+sEvent, func );
			else
				return false;
		return true;
	}

}

SiteMeter.init('s10confidentialreporter', 's10.sitemeter.com', '');

var g_sLastCodeName =3D 's10confidentialreporter';
// ]]>

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://tracksy.com/stats-js.cgi?host=t;user=malraux;site=01

document.write ('<iframe =
src=3D"http://tracksy.com/stats-frame.cgi?t||malraux||01||' + =
document.referrer + '||' + screen.width + 'x' + screen.height + '||' + =
screen.colorDepth + '" scrolling=3D"no" height=3D"1" width=3D"1" =
marginwidth=3D"0" marginheight=3D"0" frameborder=3D"0"></iframe>');=0A=

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://embed.technorati.com/embed/qtfagicc.js

<!--=0A=
/* Embed was not displayable.  Please verify your embed settings at =
http://technorati.com/account/#blogs. */=0A=
-->
------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://track.mybloglog.com/js/jsserv.php?mblID=2006051509592735

=0A=
<!--=0A=
var mbl_recent_visitor=3D'';=0A=
var mbl_current_visitor=3D'';=0A=
if(typeof(mbl_jsserv_loaded)=3D=3D'undefined'){var =
mbl_jsserv_loaded=3Dtrue;function =
m_r_e(obj,w,f){if(window.addEventListener){obj.addEventListener(w,f,false=
);}else if(window.attachEvent){obj.attachEvent('on'+w,f);}else{}}=0A=
function =
m_rm_e(obj,w,f){if(window.addEventListener){obj.removeEventListener(w,f,f=
alse);}else if(window.attachEvent){obj.detachEvent('on'+w,f);}else{}}=0A=
function m_i_eu(url){if(!url){return false;}=0A=
if(typeof(url)!=3D'string'){return true;}=0A=
url=3Durl.toLowerCase();if(url.indexOf('https://')=3D=3D0){url=3Durl.subs=
tring(8);}=0A=
else if(url.indexOf('http://')=3D=3D0){url=3Durl.substring(7);}=0A=
else if(url.indexOf('ftp://')=3D=3D0){url=3Durl.substring(6);}=0A=
else if(url.indexOf('ssl://')=3D=3D0){url=3Durl.substring(6);}=0A=
else if(url.indexOf('mailto:')=3D=3D0){return true;}=0A=
else{return false;}=0A=
if(url.indexOf('www.')=3D=3D0){url=3Durl.substring(4);}=0A=
var =
hn=3Ddocument.location.hostname.toLowerCase();if(hn.indexOf('www.')=3D=3D=
0){hn=3Dhn.substring(4);}=0A=
if(hn=3D=3D''){return true;}=0A=
if(url.indexOf(hn)!=3D0){return true;}=0A=
return false;}=0A=
=0A=
var cs_mbl_isAOL_V8=3Dfalse;if(navigator.userAgent.indexOf('AOL =
8.0')>0){cs_mbl_isAOL_V8=3Dtrue;}=0A=
var =
cs_mblID=3D'2006051509592735',cs_url_trker=3D'http://track.mybloglog.com/=
tr/urltrk.php',mbl_isi=3D'N2008040709023592',mblco_on=3D'',mblco_pu=3D'',=
mblco_n=3D'',mblco_e=3D'',mblco_u=3D'',mblco_c=3D'';function =
m_p_c(obj,flag){for(var =
j=3D0;j<=3D5;j++){if(flag=3D=3D1){if(obj&&obj.nodeName.toUpperCase()=3D=3D=
'A'){return =
obj;}}if(flag=3D=3D2){if(obj&&obj.nodeName.toUpperCase()!=3D'BODY'&&obj.o=
nclick){return obj;}}if(!obj.parentNode){return =
null;}obj=3Dobj.parentNode;}=0A=
return null;}=0A=
function m_is_u(s){if(!s){return false;}=0A=
var =
regexp=3D/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?=
+=3D&%@!\-\/]))?/i=0A=
return regexp.test(s);}=0A=
function =
m_trim(str,ch){while(str.substring(0,1)=3D=3Dch){str=3Dstr.substring(1,st=
r.length);}=0A=
while(str.substring(str.length-1,str.length)=3D=3Dch){str=3Dstr.substring=
(0,str.length-1);}=0A=
return str;}=0A=
function m_ctx_c(e){var =
tg=3Dnull;if(e){tg=3De.target;}else{tg=3Dwindow.event.srcElement;}m_d_t(t=
g,false);}=0A=
function m_oclk(e){var =
tg=3Dnull;if(e){tg=3De.target;}else{tg=3Dwindow.event.srcElement;}m_d_t(t=
g,true);}=0A=
function m_d_t(tg,delay){var =
url=3Dnull,text=3Dnull,co_qstr=3D'';try{if(tg){tgP=3Dm_p_c(tg,1);if(tgP&&=
tgP.nodeName.toUpperCase()=3D=3D'A'){tg=3DtgP;}=0A=
if(tg.nodeName.toUpperCase()=3D=3D'A'){url=3Dtg.href;if(tg.innerHTML){tex=
t=3Dtg.innerHTML;}else if(tg.innerText){text=3Dtg.innerText;}else =
if(tg.text){text=3Dtg.text;}else{}}=0A=
else =
if(tg.nodeName.toUpperCase()=3D=3D'AREA'){url=3Dtg.href;text=3Dtg.getAttr=
ibute('alt')?tg.getAttribute('alt'):tg.getAttribute('id');if(text=3D=3Dnu=
ll||text=3D=3D''){text=3Durl;}}=0A=
else =
if(tg.nodeName.toUpperCase()=3D=3D'INPUT'&&tg.type.toUpperCase()=3D=3D'SU=
BMIT'){url=3Dm_trim(tg.form.action,'/');url=3Dm_trim(url,' =
');text=3Dtg.value;var =
co_name=3D'',co_email=3D'',co_url=3D'',co_text=3D'';if(url.toLowerCase().=
indexOf('comment')>0){if(tg.form.elements['author']){co_name=3Dtg.form.el=
ements['author'].value;}if(tg.form.elements['email']){co_email=3Dtg.form.=
elements['email'].value;}if(tg.form.elements['url']){co_url=3Dtg.form.ele=
ments['url'].value;}if(tg.form.elements['comment']){co_text=3Dtg.form.ele=
ments['comment'].value;}else =
if(tg.form.elements['text']){co_text=3Dtg.form.elements['text'].value;}el=
se{}}=0A=
if(co_text!=3D''){co_qstr=3D'&co_n=3D'+escape(co_name)+'&co_e=3D'+escape(=
co_email)+'&co_u=3D'+escape(co_url)+'&co_c=3D'+escape(co_text)+'&co_pt=3D=
'+escape(document.title);}}else{}=0A=
if(url=3D=3Dnull||text=3D=3Dnull){return true;}=0A=
if(co_qstr!=3D''||m_i_eu(url)){if(cs_mbl_isAOL_V8&&(tg.target=3D=3D'_new'=
||tg.target=3D=3D'_blank')){return =
true;}url=3Descape(url);text=3Descape(text);m_trk(text,url,co_qstr,delay)=
;}}}catch(err){}}=0A=
function m_trk(text,url,co_qstr,delay){try{var now=3Dnew Date();var =
trackURL=3Dcs_url_trker+'?t=3D2&u=3D'+url+'&te=3D'+text+'&i=3D'+cs_mblID+=
'&now=3D'+now.valueOf()+'&d=3D20080407'+'&db=3D'+'&v=3D'+mbl_isi+co_qstr;=
var =
x=3Ddocument.createElement('IMG');x.src=3DtrackURL;if(delay){m_pse(900);}=
}catch(err){}}=0A=
function m_t_ol(){try{var now=3Dnew Date();var =
url=3Descape(document.location.href);var =
ext_referrer=3Ddocument.referrer;if(ext_referrer!=3D''&&m_i_eu(ext_referr=
er)){var ext_referrer_para=3D'&eref=3D'+escape(ext_referrer);}else{var =
ext_referrer_para=3D'';}=0A=
var =
trackURL=3Dcs_url_trker+'?i=3D'+cs_mblID+'&t=3D1&u=3D'+url+'&a=3D'+escape=
(navigator.userAgent)+'&d=3D20080407'+ext_referrer_para+'&db=3D'+'&now=3D=
'+now.valueOf()+'&v=3D'+mbl_isi;var =
x=3Ddocument.createElement('IMG');x.src=3DtrackURL;}catch(err){}=0A=
return true;}=0A=
function m_pse(numberMillis){var now=3Dnew Date();var =
exitTime=3Dnow.getTime()+numberMillis;while(true){now=3Dnew =
Date();if(now.getTime()>exitTime){return;}}}=0A=
var m_px=3D0,m_py=3D0,m_as_frms=3Dnew =
Array(),is_ie=3Ddocument.all?true:false;function m_as_init(){var =
ad=3Ddocument.getElementsByTagName('iframe');for(var =
i=3D0;i<ad.length;i++){if(ad[i].src.indexOf('googlesyndication.com')>-1){=
m_as_frms[m_as_frms.length]=3Dnew =
Array(ad[i],'http://pagead2.googlesyndication.com','Google =
AdSense');if(is_ie){ad[i].onfocus=3Dm_trk_as;}}else =
if(ad[i].src.indexOf('ypn-js.overture.com')>-1){m_as_frms[m_as_frms.lengt=
h]=3Dnew Array(ad[i],'http://ypn-js.overture.com','Yahoo! Publisher =
Network');if(is_ie){ad[i].onfocus=3Dm_trk_as;}}else{}}=0A=
if(m_as_frms.length>0&&!is_ie){m_r_e(window,'beforeunload',m_as_ul);m_r_e=
(document,'mousemove',m_gm);}}=0A=
function m_gm(e){if(!e){var e=3Dwindow.event;}=0A=
if(e.pageX||e.pageY){m_px=3De.pageX;m_py=3De.pageY;}=0A=
else =
if(e.clientX||e.clientY){m_px=3De.clientX+document.body.scrollLeft+docume=
nt.documentElement.scrollLeft;m_py=3De.clientY+document.body.scrollTop+do=
cument.documentElement.scrollTop;}}=0A=
function m_gpos(obj){var =
curleft=3Dcurtop=3D0;if(obj.offsetParent){curleft=3Dobj.offsetLeft;curtop=
=3Dobj.offsetTop;while(obj=3Dobj.offsetParent){curleft+=3Dobj.offsetLeft;=
curtop+=3Dobj.offsetTop;}}=0A=
return[curleft,curtop];}=0A=
function m_as_ul(e){try{var m_as_size=3D'';for(var =
i=3D0;i<m_as_frms.length;i++){var ad_pos=3Dm_gpos(m_as_frms[i][0]);var =
a_fx=3D(m_px>(ad_pos[0]-10)&&m_px<(parseInt(ad_pos[0])+parseInt(m_as_frms=
[i][0].width)+15));var =
a_fy=3D(m_py>(ad_pos[1]-10)&&m_py<(parseInt(ad_pos[1])+parseInt(m_as_frms=
[i][0].height)+10));if(a_fx&&a_fy){m_trk_as(m_as_frms[i][0]);break;}}}cat=
ch(err){}}=0A=
function m_trk_as(f){try{if(!f&&window.event.srcElement){var =
f=3Dwindow.event.srcElement;}=0A=
for(var i=3D0;i<m_as_frms.length;i++){if(m_as_frms[i][0]=3D=3Df){var =
a_si=3Dm_as_frms[i][0].width+'x'+m_as_frms[i][0].height;m_trk(escape(m_as=
_frms[i][2]+' =
('+a_si+')'),escape(m_as_frms[i][1]+'#'+a_si),'',true);break;}}=0A=
if(is_ie){window.focus();}}catch(err){}}=0A=
if(document.body){document.body.onclick=3Dm_oclk;document.body.oncontextm=
enu=3Dm_ctx_c;}else =
if(document){document.onclick=3Dm_oclk;document.oncontextmenu=3Dm_ctx_c;}=
else{}=0A=
m_t_ol();m_r_e(window,'load',m_as_init);=0A=
  }// --><!-- g1w3.mbl.re1.yahoo.com compressed/chunked Mon Apr  7 =
09:02:35 PDT 2008 -->=0A=

------=_NextPart_000_01E7_01C89BC7.E8C06820
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://embed.technorati.com/embed/gdf86hnirj.js

<!--=0A=
/* Embed was not found.  Please verify your embed code at =
http://technorati.com/account/#blogs. */=0A=
-->
------=_NextPart_000_01E7_01C89BC7.E8C06820--

