Japan launched =
on Monday=20
morning an automated system that intends to provide several seconds =
warning=20
before shaking occurs after a major earthquake.
The system, which has been tested for more than a year, went into =
operation=20
at 9a.m. local time and is operated by the Jap=
an=20
Meteorological Agency (JMA). It links together about 1,000 =
seismographs=20
throughout Japan with a fast network and computing to calculate the =
location and=20
strength of an earthquake within a few seconds of it occurring.
The seismographs measure the weak but fast moving primary waves from =
an=20
earthquake. These are followed by secondary waves, which move at about =
half the=20
speed but which are much more destructive. The system attempts to beat =
the=20
arrival of the secondary waves and provide a warning that strong shaking =
is=20
about to occur.
How much warning people have will depend on how far they are from the =
earthquake.
Meisei=
=20
Electric Co. Ltd., a manufacturer of earthquake sensors, estimates =
that=20
residents in Tokyo would=20
have about 40 seconds warning if a long-expected earthquake occurs in =
the Tokai=20
region, about 100 kilometers from Tokyo. In Shizuoka, the=20
city nearest to the predicted epicenter, about 10 seconds warning would =
be=20
given.
The Tokai quake is long overdue and is expected to kill up to 10,000 =
people=20
and injure tens of thousands, according to government estimates.
From Monday the warnings will automatically flash across Japan's =
major TV=20
channels and other companies are selling commercial systems that can do =
things=20
like stop heavy factory machinery, halt trains, take elevators to the =
nearest=20
floor and cut gas supplies.
Japan is one of the most seismically active nations on earth with =
about=20
100,000 earthquakes occurring in and around the country each year.
In 1923 Tokyo was largely destroyed and up to 142,000 people were =
killed by a=20
quake that was estimated at between magnitude 7.9 and 8.4. More recently =
a=20
magnitude 7.3 quake caused widespread destruction in the western =
Japanese city=20
of Kobe and killed 6,434 people. Earlier this year a strong quake in Niigata struck =
about 19=20
kilometers from the Kashiwazaki-Kariwa=20
nuclear plant, which is the world's largest nuclear plant by capacity, =
but no=20
serious damage was caused at the plant.
New instructions let users of hacked iPhones roll =
back the=20
Apple firmware upgrade that rendered their devices unuseable, but they =
can't=20
reactivate the phone--yet. 01-Oct-2007 =
Rule proposed by the U.S. Department of the Treasury =
and the=20
Federal Reserve System would implement the Unlawful Internet Gambling=20
Enforcement Act passed by Congress last year. 01-Oct-2007
NekFIT is a new fitness product for iPod shuffle and =
nano=20
users that puts your iPod on the back of your neck, between your =
shoulders.=20
01-Oct-2007
Mobile phone giant Nokia has launched a new version =
of its=20
e-mail client for business customers using Microsoft's Exchange mail =
server.=20
01-Oct-2007
Enter your trial subscription and get 2 =
Risk-Free=20
Issues plus Bonus CD-ROM. If you like PC=20
WORLD, pay just $19.97 for 10 more issues (12 in all). Otherwise, =
write=20
"cancel" on the bill, return it, and owe nothing. Added Bonus! =
You will=20
also get PC World's Weekly =
Brief, a=20
free e-mail newsletter.
------=_NextPart_001_0021_01C80466.34A8C470
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adi/pcw_news/industrynews/article;c=1557;c=1577;c=1592;aid=137878;pos=leader;tile=1;sz=728x90;ord=14112217;
=EF=BB=BF
Click here to find out more!
------=_NextPart_001_0021_01C80466.34A8C470--
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://cache.directorym.com/pcworld/v8/217modF_header.gif
R0lGODlhnAAyAMQAAMXFxZaWlmhoaK2trUZGRufn59zc3F1dXdDQ0KKiooCAgFFRUYuLi7m5uXR0
dDo6OkRERPPz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAA
AAAALAAAAACcADIAAAX/YCSOZGmeaKqubOu+cCzPdG3fOCw8PE8ohpwQFujxFgrAcAkjGHsLphTl
ePYGU5EhcciKfADAwPlQerO7x0B88BWyPm+BJxilEZGwuRAORrYBAVgiYXh8AAYDgWYiBQmBA29a
j4IkioF+JW0PIwULPFgIYQWHBltmCIEBjH+qeBGiPAcArwWXCZmFiQMGkCOBCSQAsmEJsl8PdRHG
D8HMPXUGdMs+RoMIZLJvRUZ1CJ9GryQ9JAw8ARFpebKgEeZGDCIDT1ibPfHYRgQNyAJOAdIeRFn3
AN2IYVYcvJmTTAQ3REcabCKIjhuBAQqmFXByoEHGZggiTqxSkJvBcQ+6//w6F2Eiwh5ieDiQyMOU
rDE8IgT4KGCVAScX5z0ggKwHuk1v0khyaGUoFoTxInwM4yNBgzARGrB8h4VhHWartCZDSMAq1jQz
r2YiNG3ER3RHCC7wAy7M1Hf8GAhQJtYgVxFTAxJg9A7iAwUluA0iS1GE0o1GFihRnK5mBK+VrQj4
aeQAnnc+ogrjgXhE3QjTuAW73LQMUhOUW/KQVBhhabYFP66VyoNRXdUiJv5hYI/ow8y446XZyxyd
AeI9iEYY4CDb6hFCT4olGrLhcYIEmO/tzgl276J2eCDoW4Kjk9vpy4h4VoBywCiX/oBDQBIPUNzo
qJMHJooEY8B+mLjDEv8JJl2WABnoIITOVLgp80g9s2EWAUlmvMZQFLGNQJJlJaRhRTwWBbBJHSQx
8E4UArYF3EcOBPBfGi4egdABKvLAD4OtlZYdciMAtRNpOsm0ySBpKFCRLD2qkaR8lvQA3whNLTDI
gT2sCEs2KeEBzh8ynsdldEoAAKZnmVVlgoldDjIlP8LJ88QBC9lz2EoawVmWCP2VwBCVJeihx262
BMBPIY1cIo4elzH6xygjNBBIA0slGoA4sECyFAmiGPrppAC8ASkJgGxaQoGcTheIOKkIslSoJiCk
zBm45qorFeft6uuvXgR0K7DEFntDKcYmq+yyzDbr7LPQMgvBtNSKAEH/C9dGkK0M29LQrbXeRkvC
tzCQG4O55ZqArrjphmvDui6QCy+72J6Q7bXTjosvuNpq222+8o5QrcD5ErxtwAX3y6+/B4ObMMP6
/vuwENQmfO+9/BZ8ccbWBqywwg1/jHEJGi88Msgdc6wyygtTbK/JMLMss8chw3uywDiL3PLKJ9+8
8xLm9hyz0DqTPLS9A3s8s8E511wx01AD/XLRNR/9M9FK+0x1zuPy/HPXRkutrtUsV+3v2FurXHLY
S6dtdtshDxF0zAyPHDfAaEMc9dlaP23wwRbTPXDHEs9L79eHJ85E3Io3LsXgjkcu+eSUV275xzgY
juvElzurOQpzv/B5tec5jJ432PECC/ng+DYMeOERT323xpzzDTXkeq9O++s4m77C2xu7TjbRYAP/
9cZph2180SD7/nveQtsNPeJeY35809ifvjLXb8ttsd/Cy/w372jPzjj3ZKPut94ig+9F371vT731
bRc/Ndyyc509/c4/X/2/+8Oa/v63v+IJsHwpS173KPYw1qlvb7oLXd2iVju8EY5g0NvXBRPIPq2R
jn7v+iC7+sc2EoowC7WbAe5OyEIWhgAAOw==
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://cache.directorym.com/pcworld/v8/217modF_message.gif
R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://cache.directorym.com/pcworld/v8/217modF_poweredby.gif
R0lGODlhkAALAJEDAPlpEoGBgf///////yH5BAEAAAMALAAAAACQAAsAAAKqnI+py+0Po5y02ouz
3gb4/3HiSJYJiBrBGiDs0Q7xzNIrXKuvkqswv5PpbkOibFeLHZU9oa8jiAKkgKeT+ZxZf1ke1/Vt
KcFd59W7GGPN2PHUI4BXl+uzvYkP1nHGLfmup8egxtXk94YY58dWppWwNmYVyfj1WCi5OLkFWRmZ
KLe45CLG1ANpGjTaZ/YoSJnER6ga9gcl92aSq7sbgQLCCxzM6xsibHzMWwAAOw==
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://cache.directorym.com/creative/module/TypeG/script.aspx?affiliate=1214&b=True&bp=18&source=49
var pu =3D 'http://pcworld.directorym.com//s.asp?source=3D49';
var lbnbreak =3D 'True';
var column =3D 'False';
var mycat =3D 0;
function Category( name, id ) {
this.name =3D name;
this.id =3D id;
}
var categories =3D new Array();
categories[0] =3D new Category("region9577", 9577);
categories[1] =3D new Category("region2111", 2111);
categories[2] =3D new Category("region3988", 3988);
categories[3] =3D new Category("region9196", 9196);
categories[4] =3D new Category("region9524", 9524);
categories[5] =3D new Category("region9464", 9464);
categories[6] =3D new Category("region9601", 9601);
categories[7] =3D new Category("region9443", 9443);
categories[8] =3D new Category("region9515", 9515);
categories[9] =3D new Category("region9631", 9631);
categories[10] =3D new Category("region9626", 9626);
categories[11] =3D new Category("region2411", 2411);
categories[12] =3D new Category("region9624", 9624);
categories[13] =3D new Category("region9632", 9632);
categories[14] =3D new Category("region2114", 2114);
categories[15] =3D new Category("region9234", 9234);
categories[16] =3D new Category("region3905", 3905);
categories[17] =3D new Category("region9541", 9541);
categories[18] =3D new Category("region2640", 2640);
categories[19] =3D new Category("region9232", 9232);
categories[20] =3D new Category("region9557", 9557);
categories[21] =3D new Category("region9591", 9591);
categories[22] =3D new Category("region1707", 1707);
categories[23] =3D new Category("region9581", 9581);
categories[24] =3D new Category("region9203", 9203);
categories[25] =3D new Category("region9606", 9606);
categories[26] =3D new Category("region9220", 9220);
categories[27] =3D new Category("region9633", 9633);
categories[28] =3D new Category("region9268", 9268);
categories[29] =3D new Category("region9611", 9611);
categories[30] =3D new Category("region9438", 9438);
categories[31] =3D new Category("region9510", 9510);
categories[32] =3D new Category("region9561", 9561);
categories[33] =3D new Category("region1933", 1933);
categories[34] =3D new Category("region9450", 9450);
categories[35] =3D new Category("region9187", 9187);
categories[36] =3D new Category("region9560", 9560);
categories[37] =3D new Category("region9523", 9523);
categories[38] =3D new Category("region9445", 9445);
categories[39] =3D new Category("region9531", 9531);
categories[40] =3D new Category("region9526", 9526);
categories[41] =3D new Category("region9584", 9584);
categories[42] =3D new Category("region1985", 1985);
categories[43] =3D new Category("region9628", 9628);
categories[44] =3D new Category("region1782", 1782);
categories[45] =3D new Category("region9574", 9574);
categories[46] =3D new Category("region1672", 1672);
categories[47] =3D new Category("region9503", 9503);
categories[48] =3D new Category("region2993", 2993);
categories[49] =3D new Category("region9634", 9634);
categories[50] =3D new Category("region1889", 1889);
categories[51] =3D new Category("region9648", 9648);
categories[52] =3D new Category("region1978", 1978);
categories[53] =3D new Category("region1953", 1953);
categories[54] =3D new Category("region9486", 9486);
categories[55] =3D new Category("region3913", 3913);
categories[56] =3D new Category("region9607", 9607);
categories[57] =3D new Category("region9635", 9635);
categories[58] =3D new Category("region1922", 1922);
categories[59] =3D new Category("region9518", 9518);
categories[60] =3D new Category("region9535", 9535);
categories[61] =3D new Category("region2200", 2200);
categories[62] =3D new Category("region9237", 9237);
categories[63] =3D new Category("region2389", 2389);
categories[64] =3D new Category("region9247", 9247);
categories[65] =3D new Category("region1639", 1639);
categories[66] =3D new Category("region9511", 9511);
categories[67] =3D new Category("region9528", 9528);
categories[68] =3D new Category("region9651", 9651);
categories[69] =3D new Category("region1558", 1558);
categories[70] =3D new Category("region9184", 9184);
categories[71] =3D new Category("region4092", 4092);
categories[72] =3D new Category("region7914", 7914);
categories[73] =3D new Category("region9252", 9252);
categories[74] =3D new Category("region9587", 9587);
categories[75] =3D new Category("region9131", 9131);
categories[76] =3D new Category("region9238", 9238);
categories[77] =3D new Category("region9269", 9269);
categories[78] =3D new Category("region9230", 9230);
categories[79] =3D new Category("region3195", 3195);
categories[80] =3D new Category("region9472", 9472);
categories[81] =3D new Category("region2495", 2495);
categories[82] =3D new Category("region9473", 9473);
categories[83] =3D new Category("region2317", 2317);
categories[84] =3D new Category("region9653", 9653);
categories[85] =3D new Category("region2688", 2688);
categories[86] =3D new Category("region9578", 9578);
categories[87] =3D new Category("region9215", 9215);
categories[88] =3D new Category("region9214", 9214);
categories[89] =3D new Category("region9619", 9619);
categories[90] =3D new Category("region9501", 9501);
categories[91] =3D new Category("region9500", 9500);
categories[92] =3D new Category("region9435", 9435);
categories[93] =3D new Category("region9592", 9592);
categories[94] =3D new Category("region9451", 9451);
categories[95] =3D new Category("region2882", 2882);
categories[96] =3D new Category("region9636", 9636);
categories[97] =3D new Category("region9223", 9223);
categories[98] =3D new Category("region9554", 9554);
categories[99] =3D new Category("region9608", 9608);
categories[100] =3D new Category("region2588", 2588);
categories[101] =3D new Category("region9649", 9649);
categories[102] =3D new Category("region2721", 2721);
categories[103] =3D new Category("region9488", 9488);
categories[104] =3D new Category("region9637", 9637);
categories[105] =3D new Category("region9558", 9558);
categories[106] =3D new Category("region9505", 9505);
categories[107] =3D new Category("region9589", 9589);
categories[108] =3D new Category("region9262", 9262);
categories[109] =3D new Category("region9504", 9504);
categories[110] =3D new Category("region3662", 3662);
categories[111] =3D new Category("region9630", 9630);
categories[112] =3D new Category("region9638", 9638);
categories[113] =3D new Category("region9493", 9493);
categories[114] =3D new Category("region4237", 4237);
categories[115] =3D new Category("region9570", 9570);
categories[116] =3D new Category("region3187", 3187);
categories[117] =3D new Category("region3536", 3536);
categories[118] =3D new Category("region9616", 9616);
categories[119] =3D new Category("region9479", 9479);
categories[120] =3D new Category("region3130", 3130);
categories[121] =3D new Category("region4159", 4159);
categories[122] =3D new Category("region4070", 4070);
categories[123] =3D new Category("region9613", 9613);
categories[124] =3D new Category("region3490", 3490);
categories[125] =3D new Category("region3204", 3204);
categories[126] =3D new Category("region9231", 9231);
categories[127] =3D new Category("region9241", 9241);
categories[128] =3D new Category("region2126", 2126);
categories[129] =3D new Category("region3512", 3512);
categories[130] =3D new Category("region9652", 9652);
categories[131] =3D new Category("region3850", 3850);
categories[132] =3D new Category("region9623", 9623);
categories[133] =3D new Category("region9476", 9476);
categories[134] =3D new Category("region9620", 9620);
categories[135] =3D new Category("region9222", 9222);
categories[136] =3D new Category("region9537", 9537);
categories[137] =3D new Category("region9481", 9481);
categories[138] =3D new Category("region1891", 1891);
categories[139] =3D new Category("region1636", 1636);
categories[140] =3D new Category("region9208", 9208);
categories[141] =3D new Category("region2631", 2631);
categories[142] =3D new Category("region1830", 1830);
categories[143] =3D new Category("region9544", 9544);
categories[144] =3D new Category("region9542", 9542);
categories[145] =3D new Category("region9546", 9546);
categories[146] =3D new Category("region9530", 9530);
categories[147] =3D new Category("region3061", 3061);
categories[148] =3D new Category("region9484", 9484);
categories[149] =3D new Category("region2352", 2352);
categories[150] =3D new Category("region9228", 9228);
categories[151] =3D new Category("region9538", 9538);
categories[152] =3D new Category("region3620", 3620);
categories[153] =3D new Category("region9551", 9551);
categories[154] =3D new Category("region9485", 9485);
categories[155] =3D new Category("region9573", 9573);
categories[156] =3D new Category("region9467", 9467);
categories[157] =3D new Category("region9489", 9489);
categories[158] =3D new Category("region3799", 3799);
categories[159] =3D new Category("region9582", 9582);
categories[160] =3D new Category("region9655", 9655);
categories[161] =3D new Category("region9615", 9615);
categories[162] =3D new Category("region1936", 1936);
categories[163] =3D new Category("region9647", 9647);
categories[164] =3D new Category("region9434", 9434);
categories[165] =3D new Category("region3261", 3261);
categories[166] =3D new Category("region3300", 3300);
categories[167] =3D new Category("region1816", 1816);
categories[168] =3D new Category("region2134", 2134);
categories[169] =3D new Category("region1666", 1666);
categories[170] =3D new Category("region9625", 9625);
categories[171] =3D new Category("region9474", 9474);
categories[172] =3D new Category("region3663", 3663);
categories[173] =3D new Category("region9471", 9471);
categories[174] =3D new Category("region2136", 2136);
categories[175] =3D new Category("region9567", 9567);
categories[176] =3D new Category("region9571", 9571);
categories[177] =3D new Category("region9572", 9572);
categories[178] =3D new Category("region9568", 9568);
categories[179] =3D new Category("region4198", 4198);
categories[180] =3D new Category("region9458", 9458);
categories[181] =3D new Category("region9454", 9454);
categories[182] =3D new Category("region9459", 9459);
categories[183] =3D new Category("region9455", 9455);
categories[184] =3D new Category("region4068", 4068);
categories[185] =3D new Category("region9456", 9456);
categories[186] =3D new Category("region9457", 9457);
categories[187] =3D new Category("region2633", 2633);
categories[188] =3D new Category("region1694", 1694);
categories[189] =3D new Category("region9639", 9639);
categories[190] =3D new Category("region9605", 9605);
categories[191] =3D new Category("region9462", 9462);
categories[192] =3D new Category("region9575", 9575);
categories[193] =3D new Category("region9506", 9506);
categories[194] =3D new Category("region9621", 9621);
categories[195] =3D new Category("region3078", 3078);
categories[196] =3D new Category("region2138", 2138);
categories[197] =3D new Category("region2139", 2139);
categories[198] =3D new Category("region3301", 3301);
categories[199] =3D new Category("region1878", 1878);
categories[200] =3D new Category("region9437", 9437);
categories[201] =3D new Category("region9539", 9539);
categories[202] =3D new Category("region9614", 9614);
categories[203] =3D new Category("region9263", 9263);
categories[204] =3D new Category("region3004", 3004);
categories[205] =3D new Category("region3183", 3183);
categories[206] =3D new Category("region9543", 9543);
categories[207] =3D new Category("region2945", 2945);
categories[208] =3D new Category("region1894", 1894);
categories[209] =3D new Category("region9475", 9475);
categories[210] =3D new Category("region8355", 8355);
categories[211] =3D new Category("region9440", 9440);
categories[212] =3D new Category("region2086", 2086);
categories[213] =3D new Category("region9436", 9436);
categories[214] =3D new Category("region9656", 9656);
categories[215] =3D new Category("region3148", 3148);
categories[216] =3D new Category("region9650", 9650);
categories[217] =3D new Category("region3537", 3537);
categories[218] =3D new Category("region4056", 4056);
categories[219] =3D new Category("region2381", 2381);
categories[220] =3D new Category("region1802", 1802);
categories[221] =3D new Category("region2149", 2149);
categories[222] =3D new Category("region1856", 1856);
categories[223] =3D new Category("region9654", 9654);
categories[224] =3D new Category("region9507", 9507);
categories[225] =3D new Category("region8613", 8613);
categories[226] =3D new Category("region9494", 9494);
categories[227] =3D new Category("region3749", 3749);
categories[228] =3D new Category("region2722", 2722);
categories[229] =3D new Category("region2153", 2153);
categories[230] =3D new Category("region9618", 9618);
categories[231] =3D new Category("region9586", 9586);
categories[232] =3D new Category("region9540", 9540);
categories[233] =3D new Category("region2443", 2443);
categories[234] =3D new Category("region9629", 9629);
categories[235] =3D new Category("region9545", 9545);
categories[236] =3D new Category("region9226", 9226);
categories[237] =3D new Category("region2198", 2198);
categories[238] =3D new Category("region9514", 9514);
categories[239] =3D new Category("region9517", 9517);
categories[240] =3D new Category("region9181", 9181);
categories[241] =3D new Category("region9198", 9198);
categories[242] =3D new Category("region9612", 9612);
categories[243] =3D new Category("region1861", 1861);
categories[244] =3D new Category("region1812", 1812);
categories[245] =3D new Category("region9562", 9562);
categories[246] =3D new Category("region9610", 9610);
categories[247] =3D new Category("region9444", 9444);
categories[248] =3D new Category("region9519", 9519);
categories[249] =3D new Category("region9152", 9152);
categories[250] =3D new Category("region2159", 2159);
categories[251] =3D new Category("region9492", 9492);
categories[252] =3D new Category("region9603", 9603);
categories[253] =3D new Category("region9236", 9236);
categories[254] =3D new Category("region9091", 9091);
categories[255] =3D new Category("region9627", 9627);
categories[256] =3D new Category("region9254", 9254);
categories[257] =3D new Category("region1619", 1619);
categories[258] =3D new Category("region2360", 2360);
categories[259] =3D new Category("region9468", 9468);
categories[260] =3D new Category("region9640", 9640);
categories[261] =3D new Category("region2219", 2219);
categories[262] =3D new Category("region9527", 9527);
categories[263] =3D new Category("region3297", 3297);
categories[264] =3D new Category("region9555", 9555);
categories[265] =3D new Category("region9597", 9597);
categories[266] =3D new Category("region9536", 9536);
categories[267] =3D new Category("region9585", 9585);
categories[268] =3D new Category("region9529", 9529);
categories[269] =3D new Category("region9556", 9556);
categories[270] =3D new Category("region9641", 9641);
categories[271] =3D new Category("region2361", 2361);
categories[272] =3D new Category("region4053", 4053);
categories[273] =3D new Category("region2170", 2170);
categories[274] =3D new Category("region9512", 9512);
categories[275] =3D new Category("region9200", 9200);
categories[276] =3D new Category("region9452", 9452);
categories[277] =3D new Category("region9642", 9642);
categories[278] =3D new Category("region9643", 9643);
categories[279] =3D new Category("region9644", 9644);
categories[280] =3D new Category("region9520", 9520);
categories[281] =3D new Category("region9482", 9482);
categories[282] =3D new Category("region9470", 9470);
categories[283] =3D new Category("region9646", 9646);
categories[284] =3D new Category("region2365", 2365);
categories[285] =3D new Category("region1948", 1948);
categories[286] =3D new Category("region2172", 2172);
categories[287] =3D new Category("region9609", 9609);
categories[288] =3D new Category("region9194", 9194);
categories[289] =3D new Category("region9599", 9599);
categories[290] =3D new Category("region4112", 4112);
categories[291] =3D new Category("region9491", 9491);
categories[292] =3D new Category("region9199", 9199);
categories[293] =3D new Category("region9141", 9141);
categories[294] =3D new Category("region3711", 3711);
categories[295] =3D new Category("region2691", 2691);
categories[296] =3D new Category("region9645", 9645);
categories[297] =3D new Category("region9159", 9159);
categories[298] =3D new Category("region2110", 2110);
categories[299] =3D new Category("region9161", 9161);
categories[300] =3D new Category("region9622", 9622);
categories[301] =3D new Category("region9617", 9617);
categories[302] =3D new Category("region9521", 9521);
categories[303] =3D new Category("region9201", 9201);
categories[304] =3D new Category("region1906", 1906);
var cateregmap =3D new Array();
cateregmap[0] =3D new Option("401K Plans", "region9577");
cateregmap[1] =3D new Option("Accounting", "region2111");
cateregmap[2] =3D new Option("Advertising &", "region3988");
cateregmap[3] =3D new Option(" Marketing", "region3988");
cateregmap[4] =3D new Option("Air Charter", "region9196");
cateregmap[5] =3D new Option("Air Travel", "region9524");
cateregmap[6] =3D new Option("Annuities", "region9464");
cateregmap[7] =3D new Option("Answering Services", "region9601");
cateregmap[8] =3D new Option("Antivirus / Antispam", "region9443");
cateregmap[9] =3D new Option(" Solutions", "region9443");
cateregmap[10] =3D new Option("Apartment Loans", "region9515");
cateregmap[11] =3D new Option("Apartment Rentals", "region9631");
cateregmap[12] =3D new Option("Apartments", "region9626");
cateregmap[13] =3D new Option("Appliances", "region2411");
cateregmap[14] =3D new Option("Apply for Jobs", "region9624");
cateregmap[15] =3D new Option("Aquariums", "region9632");
cateregmap[16] =3D new Option("Architects", "region2114");
cateregmap[17] =3D new Option("Asset-Based", "region9234");
cateregmap[18] =3D new Option(" Finance", "region9234");
cateregmap[19] =3D new Option("Audio Conferencing", "region3905");
cateregmap[20] =3D new Option("Auto Financing", "region9541");
cateregmap[21] =3D new Option("Auto Insurance", "region2640");
cateregmap[22] =3D new Option("Auto Leasing", "region9232");
cateregmap[23] =3D new Option("Auto Mini Lease", "region9557");
cateregmap[24] =3D new Option("Auto Rental", "region9591");
cateregmap[25] =3D new Option("Auto Repair /", "region1707");
cateregmap[26] =3D new Option(" Mechanics", "region1707");
cateregmap[27] =3D new Option("Auto Transport", "region9581");
cateregmap[28] =3D new Option("Autos", "region9203");
cateregmap[29] =3D new Option("Background", "region9606");
cateregmap[30] =3D new Option(" Screening", "region9606");
cateregmap[31] =3D new Option("Bankruptcy / Debt", "region9220");
cateregmap[32] =3D new Option(" Settlement", "region9220");
cateregmap[33] =3D new Option("Bars and Pubs", "region9633");
cateregmap[34] =3D new Option("Benefits / HR", "region9268");
cateregmap[35] =3D new Option(" Outsourcing", "region9268");
cateregmap[36] =3D new Option("Branding", "region9611");
cateregmap[37] =3D new Option("Business", "region9438");
cateregmap[38] =3D new Option(" Continuity", "region9438");
cateregmap[39] =3D new Option("Business Credit", "region9510");
cateregmap[40] =3D new Option(" Cards", "region9510");
cateregmap[41] =3D new Option("Business Debt", "region9561");
cateregmap[42] =3D new Option(" Settlement", "region9561");
cateregmap[43] =3D new Option("Business Insurance", "region1933");
cateregmap[44] =3D new Option("Business", "region9450");
cateregmap[45] =3D new Option(" Intelligence", "region9450");
cateregmap[46] =3D new Option("Business Loans", "region9187");
cateregmap[47] =3D new Option("Business", "region9560");
cateregmap[48] =3D new Option(" Loans/Lines", "region9560");
cateregmap[49] =3D new Option("Business Performance", "region9523");
cateregmap[50] =3D new Option(" Management", "region9523");
cateregmap[51] =3D new Option("Business Process", "region9445");
cateregmap[52] =3D new Option(" Management", "region9445");
cateregmap[53] =3D new Option("Business Security", "region9531");
cateregmap[54] =3D new Option(" Systems", "region9531");
cateregmap[55] =3D new Option("Business Succession", "region9526");
cateregmap[56] =3D new Option(" Planning", "region9526");
cateregmap[57] =3D new Option("Business Tax", "region9584");
cateregmap[58] =3D new Option(" Preparation", "region9584");
cateregmap[59] =3D new Option("Business Travel", "region1985");
cateregmap[60] =3D new Option("Businesses For", "region9628");
cateregmap[61] =3D new Option(" Sale", "region9628");
cateregmap[62] =3D new Option("Call Centers", "region1782");
cateregmap[63] =3D new Option("Call Centers -", "region9574");
cateregmap[64] =3D new Option(" Inbound", "region9574");
cateregmap[65] =3D new Option("Car Accessories", "region1672");
cateregmap[66] =3D new Option("Car Insurance", "region9503");
cateregmap[67] =3D new Option("Carpet Cleaners", "region2993");
cateregmap[68] =3D new Option("Carpet", "region9634");
cateregmap[69] =3D new Option(" Installation", "region9634");
cateregmap[70] =3D new Option("Catering", "region1889");
cateregmap[71] =3D new Option("Cell Phone Equipment &", "region9648");
cateregmap[72] =3D new Option(" Supplies", "region9648");
cateregmap[73] =3D new Option("Child Care", "region1978");
cateregmap[74] =3D new Option("Coffee and Tea", "region1953");
cateregmap[75] =3D new Option("Collaboration", "region9486");
cateregmap[76] =3D new Option(" Solutions", "region9486");
cateregmap[77] =3D new Option("Collection", "region3913");
cateregmap[78] =3D new Option(" Agencies", "region3913");
cateregmap[79] =3D new Option("Colleges &", "region9607");
cateregmap[80] =3D new Option(" Universities", "region9607");
cateregmap[81] =3D new Option("Comedy Clubs", "region9635");
cateregmap[82] =3D new Option("Commercial Banking", "region1922");
cateregmap[83] =3D new Option("Commercial Development", "region9518");
cateregmap[84] =3D new Option(" Loans", "region9518");
cateregmap[85] =3D new Option("Commercial Lending", "region9535");
cateregmap[86] =3D new Option("Commercial Real", "region2200");
cateregmap[87] =3D new Option(" Estate", "region2200");
cateregmap[88] =3D new Option("Commodities", "region9237");
cateregmap[89] =3D new Option(" Brokers", "region9237");
cateregmap[90] =3D new Option("Computer & Equipment", "region2389");
cateregmap[91] =3D new Option(" Vendors", "region2389");
cateregmap[92] =3D new Option("Computer Dealers", "region9247");
cateregmap[93] =3D new Option("Computer Hardware", "region1639");
cateregmap[94] =3D new Option("Computer Leasing", "region9511");
cateregmap[95] =3D new Option("Concert Tickets", "region9528");
cateregmap[96] =3D new Option("Conference Tables", "region9651");
cateregmap[97] =3D new Option("Construction", "region1558");
cateregmap[98] =3D new Option("Construction Loans", "region9184");
cateregmap[99] =3D new Option("Content Management", "region4092");
cateregmap[100] =3D new Option(" Solutions", "region4092");
cateregmap[101] =3D new Option("Continuing", "region7914");
cateregmap[102] =3D new Option(" Education", "region7914");
cateregmap[103] =3D new Option("Copiers / Printers /", "region9252");
cateregmap[104] =3D new Option(" Scanners", "region9252");
cateregmap[105] =3D new Option("Copy", "region9587");
cateregmap[106] =3D new Option(" Writing/Editing", "region9587");
cateregmap[107] =3D new Option("Corporate Branding", "region9131");
cateregmap[108] =3D new Option("Corporate Gifts", "region9238");
cateregmap[109] =3D new Option("Corporate", "region9269");
cateregmap[110] =3D new Option(" Recycling", "region9269");
cateregmap[111] =3D new Option("Corporate", "region9230");
cateregmap[112] =3D new Option(" Relocation", "region9230");
cateregmap[113] =3D new Option("Corporate Training", "region3195");
cateregmap[114] =3D new Option("Cosmetic Surgery", "region9472");
cateregmap[115] =3D new Option("Costumes", "region2495");
cateregmap[116] =3D new Option("Counseling", "region9473");
cateregmap[117] =3D new Option(" Services", "region9473");
cateregmap[118] =3D new Option("Courier Services", "region2317");
cateregmap[119] =3D new Option("Credit Card", "region9653");
cateregmap[120] =3D new Option(" Processing", "region9653");
cateregmap[121] =3D new Option("CRM Solutions", "region2688");
cateregmap[122] =3D new Option("Cubicles", "region9578");
cateregmap[123] =3D new Option("Currency Trading", "region9215");
cateregmap[124] =3D new Option("Data Backup", "region9214");
cateregmap[125] =3D new Option("Data Center Design", "region9619");
cateregmap[126] =3D new Option("Data Management", "region9501");
cateregmap[127] =3D new Option("Data Protection", "region9500");
cateregmap[128] =3D new Option("Data Protection -", "region9435");
cateregmap[129] =3D new Option(" Continuous", "region9435");
cateregmap[130] =3D new Option("Data Quality", "region9592");
cateregmap[131] =3D new Option("Data Recovery", "region9451");
cateregmap[132] =3D new Option("Data Storage", "region2882");
cateregmap[133] =3D new Option(" Solutions", "region2882");
cateregmap[134] =3D new Option("Dating Services", "region9636");
cateregmap[135] =3D new Option("Debt Consolidation", "region9223");
cateregmap[136] =3D new Option("Debt Negotiation", "region9554");
cateregmap[137] =3D new Option("Degrees & Diplomas", "region9608");
cateregmap[138] =3D new Option("Dentists", "region2588");
cateregmap[139] =3D new Option("Digital Cameras", "region9649");
cateregmap[140] =3D new Option("Direct Marketing", "region2721");
cateregmap[141] =3D new Option("Disability", "region9488");
cateregmap[142] =3D new Option(" Insurance", "region9488");
cateregmap[143] =3D new Option("Doctors", "region9637");
cateregmap[144] =3D new Option("Document Scanning and", "region9558");
cateregmap[145] =3D new Option(" Imaging", "region9558");
cateregmap[146] =3D new Option("Domain Names", "region9505");
cateregmap[147] =3D new Option("DVD Duplication", "region9589");
cateregmap[148] =3D new Option("eCommerce", "region9262");
cateregmap[149] =3D new Option(" Solutions", "region9262");
cateregmap[150] =3D new Option("Education &", "region9504");
cateregmap[151] =3D new Option(" Training", "region9504");
cateregmap[152] =3D new Option("Electrician", "region3662");
cateregmap[153] =3D new Option("Electronic Check", "region9630");
cateregmap[154] =3D new Option(" Processing", "region9630");
cateregmap[155] =3D new Option("Electronic", "region9638");
cateregmap[156] =3D new Option(" Equipment", "region9638");
cateregmap[157] =3D new Option("Email Archiving", "region9493");
cateregmap[158] =3D new Option("Email Marketing", "region4237");
cateregmap[159] =3D new Option("Email Solutions", "region9570");
cateregmap[160] =3D new Option("Employee Benefits", "region3187");
cateregmap[161] =3D new Option("Engineering", "region3536");
cateregmap[162] =3D new Option("Equipment Finance &", "region9616");
cateregmap[163] =3D new Option(" Leasing", "region9616");
cateregmap[164] =3D new Option("Equity Investments", "region9479");
cateregmap[165] =3D new Option("ERP / Accounting", "region3130");
cateregmap[166] =3D new Option(" Software", "region3130");
cateregmap[167] =3D new Option("Event Facilities", "region4159");
cateregmap[168] =3D new Option("Event Planning", "region4070");
cateregmap[169] =3D new Option("Exchange Hosting", "region9613");
cateregmap[170] =3D new Option("Executive Coaching", "region3490");
cateregmap[171] =3D new Option("Executive Search", "region3204");
cateregmap[172] =3D new Option("Executive Suites", "region9231");
cateregmap[173] =3D new Option("Extended Stay", "region9241");
cateregmap[174] =3D new Option(" Housing", "region9241");
cateregmap[175] =3D new Option("Exterminators", "region2126");
cateregmap[176] =3D new Option("Factoring", "region3512");
cateregmap[177] =3D new Option("Filing Cabinets", "region9652");
cateregmap[178] =3D new Option("Financial Services", "region3850");
cateregmap[179] =3D new Option("Find Jobs", "region9623");
cateregmap[180] =3D new Option("Fixed-Income", "region9476");
cateregmap[181] =3D new Option(" Investments", "region9476");
cateregmap[182] =3D new Option("Flowers", "region9620");
cateregmap[183] =3D new Option("Franchising", "region9222");
cateregmap[184] =3D new Option("Fulfillment", "region9537");
cateregmap[185] =3D new Option(" Services", "region9537");
cateregmap[186] =3D new Option("Full Service", "region9481");
cateregmap[187] =3D new Option(" Agencies", "region9481");
cateregmap[188] =3D new Option("Golf Courses", "region1891");
cateregmap[189] =3D new Option("Graphic Design", "region1636");
cateregmap[190] =3D new Option("Health & Fitness", "region9208");
cateregmap[191] =3D new Option(" Clubs", "region9208");
cateregmap[192] =3D new Option("Health Insurance", "region2631");
cateregmap[193] =3D new Option("Home Building", "region1830");
cateregmap[194] =3D new Option("Home Improvement", "region9544");
cateregmap[195] =3D new Option("Home Refinancing", "region9542");
cateregmap[196] =3D new Option("Home Remodeling", "region9546");
cateregmap[197] =3D new Option("Home Security", "region9530");
cateregmap[198] =3D new Option(" Systems", "region9530");
cateregmap[199] =3D new Option("Home Theaters", "region3061");
cateregmap[200] =3D new Option("Homeowners Insurance", "region9484");
cateregmap[201] =3D new Option(" Quotes", "region9484");
cateregmap[202] =3D new Option("Hotels", "region2352");
cateregmap[203] =3D new Option("HR Consulting", "region9228");
cateregmap[204] =3D new Option("HR Outsourcing", "region9538");
cateregmap[205] =3D new Option("HVAC", "region3620");
cateregmap[206] =3D new Option("Identity Theft", "region9551");
cateregmap[207] =3D new Option(" Prevention", "region9551");
cateregmap[208] =3D new Option("Incorporation", "region9485");
cateregmap[209] =3D new Option(" Services", "region9485");
cateregmap[210] =3D new Option("Ink Cartridges", "region9573");
cateregmap[211] =3D new Option("Insurance", "region9467");
cateregmap[212] =3D new Option(" Adjusters", "region9467");
cateregmap[213] =3D new Option("Interim Management", "region9489");
cateregmap[214] =3D new Option("Interior Design", "region3799");
cateregmap[215] =3D new Option("International Moving", "region9582");
cateregmap[216] =3D new Option(" Services", "region9582");
cateregmap[217] =3D new Option("Internet Marketing", "region9655");
cateregmap[218] =3D new Option(" Services", "region9655");
cateregmap[219] =3D new Option("Investigators", "region9615");
cateregmap[220] =3D new Option("Investment Banking", "region1936");
cateregmap[221] =3D new Option("Investment", "region9647");
cateregmap[222] =3D new Option(" Properties", "region9647");
cateregmap[223] =3D new Option("ISPs", "region9434");
cateregmap[224] =3D new Option("IT Security", "region3261");
cateregmap[225] =3D new Option("IT Solutions", "region3300");
cateregmap[226] =3D new Option("IT Support", "region1816");
cateregmap[227] =3D new Option("Janitorial", "region2134");
cateregmap[228] =3D new Option(" Services", "region2134");
cateregmap[229] =3D new Option("Jewelers", "region1666");
cateregmap[230] =3D new Option("Job Search", "region9625");
cateregmap[231] =3D new Option("Landscape", "region9474");
cateregmap[232] =3D new Option(" Architects/Design", "region9474");
cateregmap[233] =3D new Option("Landscaping", "region3663");
cateregmap[234] =3D new Option("Laser Eye Surgery", "region9471");
cateregmap[235] =3D new Option("Law: Directory", "region2136");
cateregmap[236] =3D new Option("Law: Find a Lawyer", "region9567");
cateregmap[237] =3D new Option("Law: Lawyer", "region9571");
cateregmap[238] =3D new Option(" Articles", "region9571");
cateregmap[239] =3D new Option("Law: Legal Topics", "region9572");
cateregmap[240] =3D new Option("Law: Martindale", "region9568");
cateregmap[241] =3D new Option("Legal - Company", "region4198");
cateregmap[242] =3D new Option(" Formation", "region4198");
cateregmap[243] =3D new Option("Legal - Corporate /", "region9458");
cateregmap[244] =3D new Option(" Finance", "region9458");
cateregmap[245] =3D new Option("Legal - Intellectual", "region9454");
cateregmap[246] =3D new Option(" Property", "region9454");
cateregmap[247] =3D new Option("Legal - Labor &", "region9459");
cateregmap[248] =3D new Option(" Employment", "region9459");
cateregmap[249] =3D new Option("Legal - Litigation", "region9455");
cateregmap[250] =3D new Option("Legal - Personal", "region4068");
cateregmap[251] =3D new Option(" Injury", "region4068");
cateregmap[252] =3D new Option("Legal - Real", "region9456");
cateregmap[253] =3D new Option(" Estate", "region9456");
cateregmap[254] =3D new Option("Legal - Real", "region9457");
cateregmap[255] =3D new Option(" Estate", "region9457");
cateregmap[256] =3D new Option("Life Insurance", "region2633");
cateregmap[257] =3D new Option("Limousines", "region1694");
cateregmap[258] =3D new Option("Locksmiths", "region9639");
cateregmap[259] =3D new Option("Logo Design", "region9605");
cateregmap[260] =3D new Option(" Services", "region9605");
cateregmap[261] =3D new Option("Long-term Care", "region9462");
cateregmap[262] =3D new Option(" Insurance", "region9462");
cateregmap[263] =3D new Option("Maid Services", "region9575");
cateregmap[264] =3D new Option("Mailing Lists", "region9506");
cateregmap[265] =3D new Option("Maintenance", "region9621");
cateregmap[266] =3D new Option(" Consultants", "region9621");
cateregmap[267] =3D new Option("Malpractice", "region3078");
cateregmap[268] =3D new Option(" Insurance", "region3078");
cateregmap[269] =3D new Option("Management", "region2138");
cateregmap[270] =3D new Option(" Consultants", "region2138");
cateregmap[271] =3D new Option("Market Research", "region2139");
cateregmap[272] =3D new Option("Marketing", "region3301");
cateregmap[273] =3D new Option(" Consultants", "region3301");
cateregmap[274] =3D new Option("MBA Degrees", "region1878");
cateregmap[275] =3D new Option("MBA Degrees -", "region9437");
cateregmap[276] =3D new Option(" Online", "region9437");
cateregmap[277] =3D new Option("Medical Billing", "region9539");
cateregmap[278] =3D new Option(" Services", "region9539");
cateregmap[279] =3D new Option("Merchant Cash", "region9614");
cateregmap[280] =3D new Option(" Advance", "region9614");
cateregmap[281] =3D new Option("Merchant Services", "region9263");
cateregmap[282] =3D new Option("Mergers &", "region3004");
cateregmap[283] =3D new Option(" Acquisitions", "region3004");
cateregmap[284] =3D new Option("Mortgages", "region3183");
cateregmap[285] =3D new Option("Motorcycle", "region9543");
cateregmap[286] =3D new Option(" Insurance", "region9543");
cateregmap[287] =3D new Option("Moving Services", "region2945");
cateregmap[288] =3D new Option("Museums", "region1894");
cateregmap[289] =3D new Option("Mutual Funds", "region9475");
cateregmap[290] =3D new Option("Network Security", "region8355");
cateregmap[291] =3D new Option("Networking", "region9440");
cateregmap[292] =3D new Option(" Services", "region9440");
cateregmap[293] =3D new Option("Office Furniture", "region2086");
cateregmap[294] =3D new Option("Office Supplies", "region9436");
cateregmap[295] =3D new Option("On Hold Messaging", "region9656");
cateregmap[296] =3D new Option("Online Trading", "region3148");
cateregmap[297] =3D new Option("Outdoor Lighting", "region9650");
cateregmap[298] =3D new Option("Outsourced", "region3537");
cateregmap[299] =3D new Option(" Accountancy", "region3537");
cateregmap[300] =3D new Option("Painters", "region4056");
cateregmap[301] =3D new Option("Payroll Services", "region2381");
cateregmap[302] =3D new Option("Phone Systems &", "region1802");
cateregmap[303] =3D new Option(" Services", "region1802");
cateregmap[304] =3D new Option("Photography", "region2149");
cateregmap[305] =3D new Option("Plumbers & Heating", "region1856");
cateregmap[306] =3D new Option("Point of sale", "region9654");
cateregmap[307] =3D new Option(" (POS)", "region9654");
cateregmap[308] =3D new Option("Practice", "region9507");
cateregmap[309] =3D new Option(" Development", "region9507");
cateregmap[310] =3D new Option("Printing Services", "region8613");
cateregmap[311] =3D new Option("Private Client Investment", =
"region9494");
cateregmap[312] =3D new Option(" Services", "region9494");
cateregmap[313] =3D new Option("Project Management", "region3749");
cateregmap[314] =3D new Option("Promotional Items", "region2722");
cateregmap[315] =3D new Option("Public Relations", "region2153");
cateregmap[316] =3D new Option("Quality Monitoring", "region9618");
cateregmap[317] =3D new Option("Radio Advertising", "region9586");
cateregmap[318] =3D new Option("Records Management", "region9540");
cateregmap[319] =3D new Option("Recruitment", "region2443");
cateregmap[320] =3D new Option(" Agencies", "region2443");
cateregmap[321] =3D new Option("Recurring Billing", "region9629");
cateregmap[322] =3D new Option(" Services", "region9629");
cateregmap[323] =3D new Option("Remodeling", "region9545");
cateregmap[324] =3D new Option(" Contractors", "region9545");
cateregmap[325] =3D new Option("Remote Access/VPN", "region9226");
cateregmap[326] =3D new Option("Residential Real", "region2198");
cateregmap[327] =3D new Option(" Estate", "region2198");
cateregmap[328] =3D new Option("Restaurant Equipment", "region9514");
cateregmap[329] =3D new Option(" Leasing", "region9514");
cateregmap[330] =3D new Option("Restaurant Property", "region9517");
cateregmap[331] =3D new Option(" Loans", "region9517");
cateregmap[332] =3D new Option("Restaurants", "region9181");
cateregmap[333] =3D new Option("Retail Marketing", "region9198");
cateregmap[334] =3D new Option("Retirement", "region9612");
cateregmap[335] =3D new Option(" Planning", "region9612");
cateregmap[336] =3D new Option("Roofing, Siding, Sheet", "region1861");
cateregmap[337] =3D new Option(" Metal", "region1861");
cateregmap[338] =3D new Option("Sales Force", "region1812");
cateregmap[339] =3D new Option(" Automation", "region1812");
cateregmap[340] =3D new Option("Sales Leads", "region9562");
cateregmap[341] =3D new Option("Sales Training", "region9610");
cateregmap[342] =3D new Option("Sarbanes Oxley", "region9444");
cateregmap[343] =3D new Option(" Compliance", "region9444");
cateregmap[344] =3D new Option("SBA Loans", "region9519");
cateregmap[345] =3D new Option("Search Engine", "region9152");
cateregmap[346] =3D new Option(" Marketing", "region9152");
cateregmap[347] =3D new Option("Security Services", "region2159");
cateregmap[348] =3D new Option("Service-Oriented", "region9492");
cateregmap[349] =3D new Option(" Architecture", "region9492");
cateregmap[350] =3D new Option("Short Term Office", "region9603");
cateregmap[351] =3D new Option(" Space", "region9603");
cateregmap[352] =3D new Option("Short-Term", "region9236");
cateregmap[353] =3D new Option(" Financing", "region9236");
cateregmap[354] =3D new Option("Signs & Graphics", "region9091");
cateregmap[355] =3D new Option("Small Business", "region9627");
cateregmap[356] =3D new Option(" Coaching", "region9627");
cateregmap[357] =3D new Option("Small Business", "region9254");
cateregmap[358] =3D new Option(" Loans", "region9254");
cateregmap[359] =3D new Option("Software Solutions", "region1619");
cateregmap[360] =3D new Option("Spas", "region2360");
cateregmap[361] =3D new Option("Speakers - Keynote", "region9468");
cateregmap[362] =3D new Option("Sports / Entertainment", "region9640");
cateregmap[363] =3D new Option(" Centers", "region9640");
cateregmap[364] =3D new Option("Sports Equipment", "region2219");
cateregmap[365] =3D new Option("Sports Tickets", "region9527");
cateregmap[366] =3D new Option("Staffing", "region3297");
cateregmap[367] =3D new Option("Student Loans", "region9555");
cateregmap[368] =3D new Option("Supply Chain", "region9597");
cateregmap[369] =3D new Option(" Services", "region9597");
cateregmap[370] =3D new Option("Telemarketing", "region9536");
cateregmap[371] =3D new Option(" Services", "region9536");
cateregmap[372] =3D new Option("Television", "region9585");
cateregmap[373] =3D new Option(" Advertising", "region9585");
cateregmap[374] =3D new Option("Theater Tickets", "region9529");
cateregmap[375] =3D new Option("Tickets", "region9556");
cateregmap[376] =3D new Option("Timeshares", "region9641");
cateregmap[377] =3D new Option("Tours / Excursions", "region2361");
cateregmap[378] =3D new Option("Trade Show", "region4053");
cateregmap[379] =3D new Option(" Displays", "region4053");
cateregmap[380] =3D new Option("Translation", "region2170");
cateregmap[381] =3D new Option(" Services", "region2170");
cateregmap[382] =3D new Option("Transportation", "region9512");
cateregmap[383] =3D new Option(" Leasing", "region9512");
cateregmap[384] =3D new Option("Travel", "region9200");
cateregmap[385] =3D new Option("Travel Parking", "region9452");
cateregmap[386] =3D new Option("Truck Rental", "region9642");
cateregmap[387] =3D new Option("Tuxedos Sales /", "region9643");
cateregmap[388] =3D new Option(" Rental", "region9643");
cateregmap[389] =3D new Option("TVs", "region9644");
cateregmap[390] =3D new Option("Unsecured Business", "region9520");
cateregmap[391] =3D new Option(" Loans", "region9520");
cateregmap[392] =3D new Option("Usability &", "region9482");
cateregmap[393] =3D new Option(" Accessibility", "region9482");
cateregmap[394] =3D new Option("Vacation Packages", "region9470");
cateregmap[395] =3D new Option("Vacation", "region9646");
cateregmap[396] =3D new Option(" Properties", "region9646");
cateregmap[397] =3D new Option("Vacation Rentals", "region2365");
cateregmap[398] =3D new Option("Venture Capital", "region1948");
cateregmap[399] =3D new Option("Veterinary", "region2172");
cateregmap[400] =3D new Option("Vocational", "region9609");
cateregmap[401] =3D new Option(" Training", "region9609");
cateregmap[402] =3D new Option("VoIP", "region9194");
cateregmap[403] =3D new Option("Warehousing", "region9599");
cateregmap[404] =3D new Option(" Services", "region9599");
cateregmap[405] =3D new Option("Wealth Management", "region4112");
cateregmap[406] =3D new Option("Web Analytics", "region9491");
cateregmap[407] =3D new Option("Web Conferencing", "region9199");
cateregmap[408] =3D new Option("Web Design", "region9141");
cateregmap[409] =3D new Option("Web Hosting", "region3711");
cateregmap[410] =3D new Option("Web Marketing", "region2691");
cateregmap[411] =3D new Option("Wedding Dresses", "region9645");
cateregmap[412] =3D new Option("Wedding", "region9159");
cateregmap[413] =3D new Option(" Photographers", "region9159");
cateregmap[414] =3D new Option("Wedding Planners", "region2110");
cateregmap[415] =3D new Option("Wedding", "region9161");
cateregmap[416] =3D new Option(" Videographers", "region9161");
cateregmap[417] =3D new Option("Window Replacement", "region9622");
cateregmap[418] =3D new Option("Work Force", "region9617");
cateregmap[419] =3D new Option(" Scheduling", "region9617");
cateregmap[420] =3D new Option("Working Capital", "region9521");
cateregmap[421] =3D new Option(" Loans", "region9521");
cateregmap[422] =3D new Option("Yachts", "region9201");
cateregmap[423] =3D new Option("Zoos & Gardens", "region1906");
var allregions =3D new Array();
allregions[0] =3D new Option("Akron", pu + "&r=3DAKR");
allregions[1] =3D new Option("Albany", pu + "&r=3DALY");
allregions[2] =3D new Option("Albuquerque", pu + "&r=3DALB");
allregions[3] =3D new Option("Alexandria", pu + "&r=3DALE");
allregions[4] =3D new Option("Amarillo", pu + "&r=3DAMA");
allregions[5] =3D new Option("Anaheim", pu + "&r=3DANA");
allregions[6] =3D new Option("Anchorage", pu + "&r=3DANC");
allregions[7] =3D new Option("Arlington, TX", pu + "&r=3DATX");
allregions[8] =3D new Option("Arlington, VA", pu + "&r=3DAVA");
allregions[9] =3D new Option("Atlanta", pu + "&r=3DATL");
allregions[10] =3D new Option("Augusta", pu + "&r=3DAUG");
allregions[11] =3D new Option("Aurora, CO", pu + "&r=3DACO");
allregions[12] =3D new Option("Aurora, IL", pu + "&r=3DAIL");
allregions[13] =3D new Option("Austin", pu + "&r=3DAUS");
allregions[14] =3D new Option("Bakersfield", pu + "&r=3DBAK");
allregions[15] =3D new Option("Baltimore", pu + "&r=3DBAL");
allregions[16] =3D new Option("Baton Rouge", pu + "&r=3DBAT");
allregions[17] =3D new Option("Billings", pu + "&r=3DBLL");
allregions[18] =3D new Option("Birmingham", pu + "&r=3DBIR");
allregions[19] =3D new Option("Boise", pu + "&r=3DBOI");
allregions[20] =3D new Option("Boston", pu + "&r=3DBOS");
allregions[21] =3D new Option("Bridgeport", pu + "&r=3DBRI");
allregions[22] =3D new Option("Brownsville", pu + "&r=3DBRO");
allregions[23] =3D new Option("Buffalo", pu + "&r=3DBUF");
allregions[24] =3D new Option("Cape Coral", pu + "&r=3DCAP");
allregions[25] =3D new Option("Carrollton", pu + "&r=3DCAR");
allregions[26] =3D new Option("Cedar Rapids", pu + "&r=3DCED");
allregions[27] =3D new Option("Chandler", pu + "&r=3DCDL");
allregions[28] =3D new Option("Charleston", pu + "&r=3DCTN");
allregions[29] =3D new Option("Charlotte", pu + "&r=3DCHA");
allregions[30] =3D new Option("Chattanooga", pu + "&r=3DCHT");
allregions[31] =3D new Option("Chesapeake", pu + "&r=3DCHE");
allregions[32] =3D new Option("Cheyenne", pu + "&r=3DCHY");
allregions[33] =3D new Option("Chicago", pu + "&r=3DCHI");
allregions[34] =3D new Option("Chula Vista", pu + "&r=3DCHU");
allregions[35] =3D new Option("Cincinnati", pu + "&r=3DCIN");
allregions[36] =3D new Option("Cleveland", pu + "&r=3DCLV");
allregions[37] =3D new Option("Colorado Springs", pu + "&r=3DCSP");
allregions[38] =3D new Option("Columbia", pu + "&r=3DCLM");
allregions[39] =3D new Option("Columbus, GA", pu + "&r=3DCGA");
allregions[40] =3D new Option("Columbus, OH", pu + "&r=3DCMB");
allregions[41] =3D new Option("Concord", pu + "&r=3DCON");
allregions[42] =3D new Option("Coral Springs", pu + "&r=3DCOL");
allregions[43] =3D new Option("Corona", pu + "&r=3DCOR");
allregions[44] =3D new Option("Corpus Christi", pu + "&r=3DCOC");
allregions[45] =3D new Option("Dallas", pu + "&r=3DDAL");
allregions[46] =3D new Option("Dayton", pu + "&r=3DDAY");
allregions[47] =3D new Option("Denver", pu + "&r=3DDEN");
allregions[48] =3D new Option("Des Moines", pu + "&r=3DDMOI");
allregions[49] =3D new Option("Detroit", pu + "&r=3DDET");
allregions[50] =3D new Option("East Bay", pu + "&r=3DEBY");
allregions[51] =3D new Option("El Monte", pu + "&r=3DELM");
allregions[52] =3D new Option("El Paso", pu + "&r=3DEPO");
allregions[53] =3D new Option("Elizabeth", pu + "&r=3DELI");
allregions[54] =3D new Option("Escondido", pu + "&r=3DESC");
allregions[55] =3D new Option("Eugene", pu + "&r=3DEUG");
allregions[56] =3D new Option("Fairway, KS", pu + "&r=3DFRW");
allregions[57] =3D new Option("Fargo", pu + "&r=3DFRG");
allregions[58] =3D new Option("Fayetteville", pu + "&r=3DFAY");
allregions[59] =3D new Option("Flint", pu + "&r=3DFLI");
allregions[60] =3D new Option("Fontana", pu + "&r=3DFON");
allregions[61] =3D new Option("Fort Collins", pu + "&r=3DFTC");
allregions[62] =3D new Option("Fort Lauderdale", pu + "&r=3DFTL");
allregions[63] =3D new Option("Fort Wayne", pu + "&r=3DFWA");
allregions[64] =3D new Option("Fort Worth", pu + "&r=3DFTW");
allregions[65] =3D new Option("Fremont", pu + "&r=3DFMT");
allregions[66] =3D new Option("Fresno", pu + "&r=3DFSN");
allregions[67] =3D new Option("Fullerton", pu + "&r=3DFUL");
allregions[68] =3D new Option("Garden Grove", pu + "&r=3DGAG");
allregions[69] =3D new Option("Garland", pu + "&r=3DGAR");
allregions[70] =3D new Option("Gilbert", pu + "&r=3DGIL");
allregions[71] =3D new Option("Glendale, AZ", pu + "&r=3DGAZ");
allregions[72] =3D new Option("Glendale, CA", pu + "&r=3DGCA");
allregions[73] =3D new Option("Grand Prairie", pu + "&r=3DGRA");
allregions[74] =3D new Option("Grand Rapids", pu + "&r=3DGRP");
allregions[75] =3D new Option("Greensboro/Triad", pu + "&r=3DTRI");
allregions[76] =3D new Option("Greenville / Spartanburg", pu + =
"&r=3DGRNV");
allregions[77] =3D new Option("Hampton", pu + "&r=3DHAM");
allregions[78] =3D new Option("Harrisburg", pu + "&r=3DHRB");
allregions[79] =3D new Option("Hartford", pu + "&r=3DHFD");
allregions[80] =3D new Option("Hayward", pu + "&r=3DHAY");
allregions[81] =3D new Option("Henderson", pu + "&r=3DHEN");
allregions[82] =3D new Option("Hialeah", pu + "&r=3DHIA");
allregions[83] =3D new Option("Hollywood", pu + "&r=3DHOL");
allregions[84] =3D new Option("Honolulu", pu + "&r=3DHON");
allregions[85] =3D new Option("Houston", pu + "&r=3DHOU");
allregions[86] =3D new Option("Huntington Beach", pu + "&r=3DHBE");
allregions[87] =3D new Option("Huntsville", pu + "&r=3DHUN");
allregions[88] =3D new Option("Indianapolis", pu + "&r=3DIND");
allregions[89] =3D new Option("Irvine, CA", pu + "&r=3DICA");
allregions[90] =3D new Option("Irving, TX", pu + "&r=3DITX");
allregions[91] =3D new Option("Jackson", pu + "&r=3DJMN");
allregions[92] =3D new Option("Jacksonville", pu + "&r=3DJAC");
allregions[93] =3D new Option("Jersey City", pu + "&r=3DJER");
allregions[94] =3D new Option("Joliet", pu + "&r=3DJOL");
allregions[95] =3D new Option("Kansas City", pu + "&r=3DKAC");
allregions[96] =3D new Option("Knoxville", pu + "&r=3DKNO");
allregions[97] =3D new Option("Lakewood", pu + "&r=3DLAK");
allregions[98] =3D new Option("Lancaster", pu + "&r=3DLAN");
allregions[99] =3D new Option("Laredo", pu + "&r=3DLAR");
allregions[100] =3D new Option("Las Vegas", pu + "&r=3DLV");
allregions[101] =3D new Option("Lexington", pu + "&r=3DLEX");
allregions[102] =3D new Option("Lincoln", pu + "&r=3DLIN");
allregions[103] =3D new Option("Little Rock", pu + "&r=3DLRK");
allregions[104] =3D new Option("Long Beach", pu + "&r=3DLON");
allregions[105] =3D new Option("Los Angeles", pu + "&r=3DLA");
allregions[106] =3D new Option("Louisville", pu + "&r=3DLVL");
allregions[107] =3D new Option("Lubbock", pu + "&r=3DLUB");
allregions[108] =3D new Option("Madison", pu + "&r=3DMAD");
allregions[109] =3D new Option("McAllen", pu + "&r=3DMCA");
allregions[110] =3D new Option("Memphis", pu + "&r=3DMEM");
allregions[111] =3D new Option("Mesa", pu + "&r=3DMES");
allregions[112] =3D new Option("Mesquite", pu + "&r=3DMQT");
allregions[113] =3D new Option("Miami", pu + "&r=3DMIA");
allregions[114] =3D new Option("Milwaukee", pu + "&r=3DMIL");
allregions[115] =3D new Option("Minneapolis/St. Paul", pu + =
"&r=3DTWCT");
allregions[116] =3D new Option("Mobile", pu + "&r=3DMOB");
allregions[117] =3D new Option("Modesto", pu + "&r=3DMOD");
allregions[118] =3D new Option("Montgomery", pu + "&r=3DMON");
allregions[119] =3D new Option("Moreno Valley", pu + "&r=3DMOR");
allregions[120] =3D new Option("Naperville", pu + "&r=3DNAP");
allregions[121] =3D new Option("Nashville", pu + "&r=3DNSH");
allregions[122] =3D new Option("New Haven", pu + "&r=3DNHV");
allregions[123] =3D new Option("New Jersey", pu + "&r=3DNJ");
allregions[124] =3D new Option("New Orleans", pu + "&r=3DNOR");
allregions[125] =3D new Option("New York Metro", pu + "&r=3DTRIS");
allregions[126] =3D new Option("Newark", pu + "&r=3DNWK");
allregions[127] =3D new Option("Newport News", pu + "&r=3DNNS");
allregions[128] =3D new Option("Norfolk", pu + "&r=3DNFK");
allregions[129] =3D new Option("North Las Vegas", pu + "&r=3DNLV");
allregions[130] =3D new Option("Oakland", pu + "&r=3DOAK");
allregions[131] =3D new Option("Oceanside", pu + "&r=3DOCE");
allregions[132] =3D new Option("Oklahoma City", pu + "&r=3DOKC");
allregions[133] =3D new Option("Omaha", pu + "&r=3DOMH");
allregions[134] =3D new Option("Ontario", pu + "&r=3DONT");
allregions[135] =3D new Option("Orange", pu + "&r=3DORA");
allregions[136] =3D new Option("Orlando", pu + "&r=3DORL");
allregions[137] =3D new Option("Overland Park", pu + "&r=3DOVE");
allregions[138] =3D new Option("Oxnard", pu + "&r=3DOXN");
allregions[139] =3D new Option("Palmdale", pu + "&r=3DPAL");
allregions[140] =3D new Option("Pasadena, CA", pu + "&r=3DPCA");
allregions[141] =3D new Option("Pasadena, TX", pu + "&r=3DPTX");
allregions[142] =3D new Option("Paterson", pu + "&r=3DPAT");
allregions[143] =3D new Option("Pembroke Pines", pu + "&r=3DPEM");
allregions[144] =3D new Option("Peoria", pu + "&r=3DPEO");
allregions[145] =3D new Option("Philadelphia", pu + "&r=3DPHI");
allregions[146] =3D new Option("Phoenix", pu + "&r=3DPHO");
allregions[147] =3D new Option("Pittsburgh", pu + "&r=3DPIT");
allregions[148] =3D new Option("Plano", pu + "&r=3DPLA");
allregions[149] =3D new Option("Pomona", pu + "&r=3DPOM");
allregions[150] =3D new Option("Port St. Lucie", pu + "&r=3DPSL");
allregions[151] =3D new Option("Portland", pu + "&r=3DPOR");
allregions[152] =3D new Option("Providence", pu + "&r=3DPRO");
allregions[153] =3D new Option("Puerto Rico", pu + "&r=3DPTR");
allregions[154] =3D new Option("Raleigh/Durham", pu + "&r=3DRAL");
allregions[155] =3D new Option("Rancho Cucamonga", pu + "&r=3DRAN");
allregions[156] =3D new Option("Reno", pu + "&r=3DREN");
allregions[157] =3D new Option("Richmond", pu + "&r=3DRCH");
allregions[158] =3D new Option("Riverside", pu + "&r=3DRIV");
allregions[159] =3D new Option("Rochester", pu + "&r=3DRST");
allregions[160] =3D new Option("Rockford", pu + "&r=3DROC");
allregions[161] =3D new Option("Sacramento", pu + "&r=3DSAC");
allregions[162] =3D new Option("Salem, OR", pu + "&r=3DSLM");
allregions[163] =3D new Option("Salinas", pu + "&r=3DSAL");
allregions[164] =3D new Option("Salt Lake City", pu + "&r=3DSLC");
allregions[165] =3D new Option("San Antonio", pu + "&r=3DSANT");
allregions[166] =3D new Option("San Bernardino", pu + "&r=3DSBR");
allregions[167] =3D new Option("San Diego", pu + "&r=3DSND");
allregions[168] =3D new Option("San Francisco", pu + "&r=3DSNF");
allregions[169] =3D new Option("San Jose", pu + "&r=3DSNJO");
allregions[170] =3D new Option("Santa Ana", pu + "&r=3DSAN");
allregions[171] =3D new Option("Santa Clarita", pu + "&r=3DSCL");
allregions[172] =3D new Option("Santa Rosa", pu + "&r=3DSRS");
allregions[173] =3D new Option("Savannah", pu + "&r=3DSAV");
allregions[174] =3D new Option("Scottsdale", pu + "&r=3DSCD");
allregions[175] =3D new Option("Seattle", pu + "&r=3DSEA");
allregions[176] =3D new Option("Shreveport", pu + "&r=3DSHR");
allregions[177] =3D new Option("Simi Valley", pu + "&r=3DSIM");
allregions[178] =3D new Option("Sioux Falls", pu + "&r=3DSIO");
allregions[179] =3D new Option("South Florida", pu + "&r=3DSTFL");
allregions[180] =3D new Option("Spokane", pu + "&r=3DSPO");
allregions[181] =3D new Option("Springfield, MA", pu + "&r=3DSMA");
allregions[182] =3D new Option("Springfield, MS", pu + "&r=3DSMS");
allregions[183] =3D new Option("St. Louis", pu + "&r=3DSTLO");
allregions[184] =3D new Option("St. Petersburg", pu + "&r=3DSTP");
allregions[185] =3D new Option("Stamford", pu + "&r=3DSTM");
allregions[186] =3D new Option("Sterling Heights", pu + "&r=3DSTE");
allregions[187] =3D new Option("Stockton", pu + "&r=3DSTO");
allregions[188] =3D new Option("Sunnyvale", pu + "&r=3DSUN");
allregions[189] =3D new Option("Syracuse", pu + "&r=3DSYR");
allregions[190] =3D new Option("Tacoma", pu + "&r=3DTAC");
allregions[191] =3D new Option("Tallahassee", pu + "&r=3DTAL");
allregions[192] =3D new Option("Tampa Bay", pu + "&r=3DTAM");
allregions[193] =3D new Option("Tempe", pu + "&r=3DTEM");
allregions[194] =3D new Option("Thousand Oaks", pu + "&r=3DTHO");
allregions[195] =3D new Option("Toledo", pu + "&r=3DTOL");
allregions[196] =3D new Option("Topeka", pu + "&r=3DTOP");
allregions[197] =3D new Option("Torrance", pu + "&r=3DTOR");
allregions[198] =3D new Option("Tucson", pu + "&r=3DTUC");
allregions[199] =3D new Option("Tulsa", pu + "&r=3DTUL");
allregions[200] =3D new Option("Vancouver", pu + "&r=3DVAN");
allregions[201] =3D new Option("Virginia Beach", pu + "&r=3DVIB");
allregions[202] =3D new Option("Waco", pu + "&r=3DWAC");
allregions[203] =3D new Option("Warren", pu + "&r=3DWAR");
allregions[204] =3D new Option("Washington, DC", pu + "&r=3DWDC");
allregions[205] =3D new Option("West Palm Beach", pu + "&r=3DWPB");
allregions[206] =3D new Option("West Valley City", pu + "&r=3DWES");
allregions[207] =3D new Option("Wichita", pu + "&r=3DWIC");
allregions[208] =3D new Option("Worcester", pu + "&r=3DWOR");
allregions[209] =3D new Option("Yonkers", pu + "&r=3DYON");
allregions[210] =3D new Option("<-- Back", this.document.URL);
var region9577 =3D allregions;
var region2111 =3D allregions;
var region3988 =3D allregions;
var region9196 =3D allregions;
var region9524 =3D allregions;
var region9464 =3D allregions;
var region9601 =3D allregions;
var region9443 =3D allregions;
var region9515 =3D allregions;
var region9631 =3D allregions;
var region9626 =3D allregions;
var region2411 =3D allregions;
var region9624 =3D allregions;
var region9632 =3D allregions;
var region2114 =3D allregions;
var region9234 =3D allregions;
var region3905 =3D allregions;
var region9541 =3D allregions;
var region2640 =3D allregions;
var region9232 =3D allregions;
var region9557 =3D allregions;
var region9591 =3D allregions;
var region1707 =3D allregions;
var region9581 =3D allregions;
var region9203 =3D allregions;
var region9606 =3D allregions;
var region9220 =3D allregions;
var region9633 =3D allregions;
var region9268 =3D allregions;
var region9611 =3D allregions;
var region9438 =3D allregions;
var region9510 =3D allregions;
var region9561 =3D allregions;
var region1933 =3D allregions;
var region9450 =3D allregions;
var region9187 =3D allregions;
var region9560 =3D allregions;
var region9523 =3D allregions;
var region9445 =3D allregions;
var region9531 =3D allregions;
var region9526 =3D allregions;
var region9584 =3D allregions;
var region1985 =3D allregions;
var region9628 =3D allregions;
var region1782 =3D allregions;
var region9574 =3D allregions;
var region1672 =3D allregions;
var region9503 =3D allregions;
var region2993 =3D allregions;
var region9634 =3D allregions;
var region1889 =3D allregions;
var region9648 =3D allregions;
var region1978 =3D allregions;
var region1953 =3D allregions;
var region9486 =3D allregions;
var region3913 =3D allregions;
var region9607 =3D allregions;
var region9635 =3D allregions;
var region1922 =3D allregions;
var region9518 =3D allregions;
var region9535 =3D allregions;
var region2200 =3D allregions;
var region9237 =3D allregions;
var region2389 =3D allregions;
var region9247 =3D allregions;
var region1639 =3D allregions;
var region9511 =3D allregions;
var region9528 =3D allregions;
var region9651 =3D allregions;
var region1558 =3D allregions;
var region9184 =3D allregions;
var region4092 =3D allregions;
var region7914 =3D allregions;
var region9252 =3D allregions;
var region9587 =3D allregions;
var region9131 =3D allregions;
var region9238 =3D allregions;
var region9269 =3D allregions;
var region9230 =3D allregions;
var region3195 =3D allregions;
var region9472 =3D allregions;
var region2495 =3D allregions;
var region9473 =3D allregions;
var region2317 =3D allregions;
var region9653 =3D allregions;
var region2688 =3D allregions;
var region9578 =3D allregions;
var region9215 =3D allregions;
var region9214 =3D allregions;
var region9619 =3D allregions;
var region9501 =3D allregions;
var region9500 =3D allregions;
var region9435 =3D allregions;
var region9592 =3D allregions;
var region9451 =3D allregions;
var region2882 =3D allregions;
var region9636 =3D allregions;
var region9223 =3D allregions;
var region9554 =3D allregions;
var region9608 =3D allregions;
var region2588 =3D allregions;
var region9649 =3D allregions;
var region2721 =3D allregions;
var region9488 =3D allregions;
var region9637 =3D allregions;
var region9558 =3D allregions;
var region9505 =3D allregions;
var region9589 =3D allregions;
var region9262 =3D allregions;
var region9504 =3D allregions;
var region3662 =3D allregions;
var region9630 =3D allregions;
var region9638 =3D allregions;
var region9493 =3D allregions;
var region4237 =3D allregions;
var region9570 =3D allregions;
var region3187 =3D allregions;
var region3536 =3D allregions;
var region9616 =3D allregions;
var region9479 =3D allregions;
var region3130 =3D allregions;
var region4159 =3D allregions;
var region4070 =3D allregions;
var region9613 =3D allregions;
var region3490 =3D allregions;
var region3204 =3D allregions;
var region9231 =3D allregions;
var region9241 =3D allregions;
var region2126 =3D allregions;
var region3512 =3D allregions;
var region9652 =3D allregions;
var region3850 =3D allregions;
var region9623 =3D allregions;
var region9476 =3D allregions;
var region9620 =3D allregions;
var region9222 =3D allregions;
var region9537 =3D allregions;
var region9481 =3D allregions;
var region1891 =3D allregions;
var region1636 =3D allregions;
var region9208 =3D allregions;
var region2631 =3D allregions;
var region1830 =3D allregions;
var region9544 =3D allregions;
var region9542 =3D allregions;
var region9546 =3D allregions;
var region9530 =3D allregions;
var region3061 =3D allregions;
var region9484 =3D allregions;
var region2352 =3D allregions;
var region9228 =3D allregions;
var region9538 =3D allregions;
var region3620 =3D allregions;
var region9551 =3D allregions;
var region9485 =3D allregions;
var region9573 =3D allregions;
var region9467 =3D allregions;
var region9489 =3D allregions;
var region3799 =3D allregions;
var region9582 =3D allregions;
var region9655 =3D allregions;
var region9615 =3D allregions;
var region1936 =3D allregions;
var region9647 =3D allregions;
var region9434 =3D allregions;
var region3261 =3D allregions;
var region3300 =3D allregions;
var region1816 =3D allregions;
var region2134 =3D allregions;
var region1666 =3D allregions;
var region9625 =3D allregions;
var region9474 =3D allregions;
var region3663 =3D allregions;
var region9471 =3D allregions;
var region2136 =3D allregions;
var region9567 =3D allregions;
var region9571 =3D allregions;
var region9572 =3D allregions;
var region9568 =3D allregions;
var region4198 =3D allregions;
var region9458 =3D allregions;
var region9454 =3D allregions;
var region9459 =3D allregions;
var region9455 =3D allregions;
var region4068 =3D allregions;
var region9456 =3D allregions;
var region9457 =3D allregions;
var region2633 =3D allregions;
var region1694 =3D allregions;
var region9639 =3D allregions;
var region9605 =3D allregions;
var region9462 =3D allregions;
var region9575 =3D allregions;
var region9506 =3D allregions;
var region9621 =3D allregions;
var region3078 =3D allregions;
var region2138 =3D allregions;
var region2139 =3D allregions;
var region3301 =3D allregions;
var region1878 =3D allregions;
var region9437 =3D allregions;
var region9539 =3D allregions;
var region9614 =3D allregions;
var region9263 =3D allregions;
var region3004 =3D allregions;
var region3183 =3D allregions;
var region9543 =3D allregions;
var region2945 =3D allregions;
var region1894 =3D allregions;
var region9475 =3D allregions;
var region8355 =3D allregions;
var region9440 =3D allregions;
var region2086 =3D allregions;
var region9436 =3D allregions;
var region9656 =3D allregions;
var region3148 =3D allregions;
var region9650 =3D allregions;
var region3537 =3D allregions;
var region4056 =3D allregions;
var region2381 =3D allregions;
var region1802 =3D allregions;
var region2149 =3D allregions;
var region1856 =3D allregions;
var region9654 =3D allregions;
var region9507 =3D allregions;
var region8613 =3D allregions;
var region9494 =3D allregions;
var region3749 =3D allregions;
var region2722 =3D allregions;
var region2153 =3D allregions;
var region9618 =3D allregions;
var region9586 =3D allregions;
var region9540 =3D allregions;
var region2443 =3D allregions;
var region9629 =3D allregions;
var region9545 =3D allregions;
var region9226 =3D allregions;
var region2198 =3D allregions;
var region9514 =3D allregions;
var region9517 =3D allregions;
var region9181 =3D allregions;
var region9198 =3D allregions;
var region9612 =3D allregions;
var region1861 =3D allregions;
var region1812 =3D allregions;
var region9562 =3D allregions;
var region9610 =3D allregions;
var region9444 =3D allregions;
var region9519 =3D allregions;
var region9152 =3D allregions;
var region2159 =3D allregions;
var region9492 =3D allregions;
var region9603 =3D allregions;
var region9236 =3D allregions;
var region9091 =3D allregions;
var region9627 =3D allregions;
var region9254 =3D allregions;
var region1619 =3D allregions;
var region2360 =3D allregions;
var region9468 =3D allregions;
var region9640 =3D allregions;
var region2219 =3D allregions;
var region9527 =3D allregions;
var region3297 =3D allregions;
var region9555 =3D allregions;
var region9597 =3D allregions;
var region9536 =3D allregions;
var region9585 =3D allregions;
var region9529 =3D allregions;
var region9556 =3D allregions;
var region9641 =3D allregions;
var region2361 =3D allregions;
var region4053 =3D allregions;
var region2170 =3D allregions;
var region9512 =3D allregions;
var region9200 =3D allregions;
var region9452 =3D allregions;
var region9642 =3D allregions;
var region9643 =3D allregions;
var region9644 =3D allregions;
var region9520 =3D allregions;
var region9482 =3D allregions;
var region9470 =3D allregions;
var region9646 =3D allregions;
var region2365 =3D allregions;
var region1948 =3D allregions;
var region2172 =3D allregions;
var region9609 =3D allregions;
var region9194 =3D allregions;
var region9599 =3D allregions;
var region4112 =3D allregions;
var region9491 =3D allregions;
var region9199 =3D allregions;
var region9141 =3D allregions;
var region3711 =3D allregions;
var region2691 =3D allregions;
var region9645 =3D allregions;
var region9159 =3D allregions;
var region2110 =3D allregions;
var region9161 =3D allregions;
var region9622 =3D allregions;
var region9617 =3D allregions;
var region9521 =3D allregions;
var region9201 =3D allregions;
var region1906 =3D allregions;
var lintcurr=3D1;
var lobjOptionset=3Ddocument.littlebox.frmServices;
fillOptions(cateregmap, 'false');
function fillOptions(x, doset) {
larrCurrent =3D eval(x);
var p =3D 0;
larrLast =3D '';
=09
main_loop: for (i=3D0; i<(larrCurrent.length); i++) {
if (larrCurrent[i].text=3D=3D'National' || larrCurrent[i].text =3D=3D =
'National - UK') {
top.location =3D larrCurrent[i].value;
break main_loop;
}=20
else { =09
if (i =3D=3D 0) {
for (m =3D lobjOptionset.options.length - 1; m > 0; m--)
lobjOptionset.options[m] =3D null;
}
lobjOptionset.options[i] =3D new Option(larrCurrent[i].text, =
larrCurrent[i].value);
// start new break
if (lbnbreak =3D=3D 'True') {
if (larrCurrent[i].value !=3D larrLast && isEven(p)) {
lobjOptionset.options[i].style.backgroundColor =3D '#eeeeee';
}
if (larrCurrent[i].value =3D=3D larrLast && isEven(p - 1) && i > 0){
lobjOptionset.options[i].style.backgroundColor =3D '#eeeeee';
lobjOptionset.options[i-1].style.backgroundColor =3D '#eeeeee';
}
}
// end new break
if (larrCurrent[i].value !=3D larrLast){
p =3D p + 1
}
=09
lobjOptionset.options[0].selected =3D false;
larrLast =3D larrCurrent[i].value;
}
}
=09
if (doset =3D=3D 'true' && i !=3D 0 ) {
lintcurr =3D 2;
}
}
function changeOptions() {
if (lintcurr=3D=3D1) {
var selected =3D =
lobjOptionset.options[lobjOptionset.selectedIndex].value;
mycat =3D findCategory(selected);
fillOptions(lobjOptionset.options[lobjOptionset.selectedIndex].value, =
'true');
}
else {
getUrl();
}
}
function getUrl() {
if =
(lobjOptionset.options[lobjOptionset.selectedIndex].value=3D=3Dthis.docum=
ent.URL) {
=
self.location=3DlobjOptionset.options[lobjOptionset.selectedIndex].value;=
}=20
else {=20
=
top.location=3DlobjOptionset.options[lobjOptionset.selectedIndex].value =
+ "&c=3D" + mycat;
}
}
function isEven(value) {
var binary =3D value.toString(2);
if (binary.charAt(binary.length - 1) =3D=3D "0") {
return false;
}
else {
return true;
}
}
function findCategory(value) {
var cat =3D 0;
if (value !=3D -1 && value !=3D '' && value !=3D null) {
for (i=3D0; i<(categories.length); i++) {
if (categories[i].name=3D=3Dvalue) {
cat =3D categories[i].id;
}
}
return cat;
}
}
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://cache.directorym.com/creative/module/TypeG/module.aspx?af=1214&cs=217&io=217&ss=17&b=true&source=49
=EF=BB=BF
=20
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://m1.2mdn.net/1236743/pcw_showcase_2_JH.gif
R0lGODlhUAEYAfcAAE5ISEA+Pm9raszCwbuvrV5aWi4rKy8vL+3m5dzV1BAODq2npsu+vX57e21l
ZK6rqn55eE9PT15ZWD45OE5LS9ZwbJ6bmy4tLY2EhF9fX+3BvtVtaR8fH3Btba6trQ8PDyAfH2Be
XtrMy83Ew42IiMs2Il9dXX14dzAvL8s2I8s1Ivrr6f78/P77+/z29fvu7fz08/7+/f339/no5vnn
5vnp57+/v/vw70BAQPvx8ICAgPnp6Pvw7n1zcv7+/so1IqQ/O7usq5uamvzx8D46OWloaP329Vs4
N83Nze/v74A8OfHQzuOgnt/f3xAQEP77+s/Pz5+fn+nY1j8/P6+vryAgIH9/fzAwMGBgYMq7uXBw
cI+Pj9rJx5I9Ol5XVoKBgZuPjubm5lBQUB8dHfPy8r9BPdZxbryxsKuenF1bW61APKinp7ZAPHY7
OdRrZ1I3N722tYyBgLSzs9rZ2e29uuCUkJs+O2Q5OG06OL67u29vb3Z0dD87O4k8OsHAwH56eU1C
Qn99fVZDQz89PVlPT1BOTo+NjeKal0k3Nn52duvd3Ozk4z46Os3FxL24uO7p6d7a2szAvz8+Pqyi
oV1WVb6+vn11dGxkY+Odm+nZ2Hxzcj88PJ2Tk+/Hxc7Kyk1HR723tp2Yl39+fn98fLy0s310c312
db69vbyysu7s7J6dnT88Ox8eHX53d768vKufnjc1Nbuwr0A2Nt7c3NVva765uT8+PdzOzpuRj+7r
65uRkI6MjD87Ouna2V5XV+7Dwc3Ix+7u7V9bW+GXlPXb2vDLyk5KSY2Hhe7Fw721tG5oZ29sbKyj
o6yhoM7MzI6NjbutrD48PM3JyeKcmuzi4eCVkeOfnF9EQ+eopeiwrlpaWmdnZ09MS+vh393Y1319
fZ2Wlurc2sq8uy8rK768u3Bwb87OzURCQuvi4U5JSGBgX0BAP+vf3u3o6NrKydvOzOGWk1BQT25n
Zm1mZW1nZq6urp6enl9eXeGZlv75+fzz8vvs68hCPQAAAPnm5P///yH5BAAAAAAALAAAAABQARgB
AAj/AFWUKJFi4MAUCFMIFPjjh8ASP0qomGjQoIqICCkSjCjxYMeCEn8kJAhyIMWRDyWmiLiwo0GF
CAeKBKkCpsqaBC16/JhxpUKHGgsqrGlzYs2JGS8O5UiUJU2OMJPGXEjzoVSCAlfe7En1pcaDQrMK
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
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adi/pcw_news/industrynews/article;c=1557;c=1577;c=1592;aid=137878;pos=showcase-lg;tile=2;sz=336x280;ord=14112217;
=EF=BB=BF
Click here to find out more!
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://s.pcworld.com/script/prototype.js
/* Prototype JavaScript framework, version 1.3.1=0A=
* (c) 2005 Sam Stephenson =0A=
*=0A=
* THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please =
diff=0A=
* against the source tree, available from the Prototype darcs =
repository. =0A=
*=0A=
* Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
*=0A=
* For details, see the Prototype web site: http://prototype.conio.net/=0A=
*=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
Version: '1.3.1',=0A=
emptyFunction: function() {}=0A=
}=0A=
=0A=
var Class =3D {=0A=
create: function() {=0A=
return function() { =0A=
this.initialize.apply(this, arguments);=0A=
}=0A=
}=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
for (property in source) {=0A=
destination[property] =3D source[property];=0A=
}=0A=
return destination;=0A=
}=0A=
=0A=
Object.prototype.extend =3D function(object) {=0A=
return Object.extend.apply(this, [this, object]);=0A=
}=0A=
=0A=
Function.prototype.bind =3D function(object) {=0A=
var __method =3D this;=0A=
return function() {=0A=
__method.apply(object, arguments);=0A=
return false; // Edited JL - 10/1/05. Needed to disable =
context menu in Firefox Mac OSX when using for mousedown events=0A=
}=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
var __method =3D this;=0A=
return function(event) {=0A=
__method.call(object, event || window.event);=0A=
}=0A=
}=0A=
=0A=
Number.prototype.toColorPart =3D function() {=0A=
var digits =3D this.toString(16);=0A=
if (this < 16) return '0' + digits;=0A=
return digits;=0A=
}=0A=
=0A=
var Try =3D {=0A=
these: function() {=0A=
var returnValue;=0A=
=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var lambda =3D arguments[i];=0A=
try {=0A=
returnValue =3D lambda();=0A=
break;=0A=
} catch (e) {}=0A=
}=0A=
=0A=
return returnValue;=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
initialize: function(callback, frequency) {=0A=
this.callback =3D callback;=0A=
this.frequency =3D frequency;=0A=
this.currentlyExecuting =3D false;=0A=
=0A=
this.registerCallback();=0A=
},=0A=
=0A=
registerCallback: function() {=0A=
setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
},=0A=
=0A=
onTimerEvent: function() {=0A=
if (!this.currentlyExecuting) {=0A=
try { =0A=
this.currentlyExecuting =3D true;=0A=
this.callback(); =0A=
} finally { =0A=
this.currentlyExecuting =3D false;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
function $() {=0A=
var elements =3D new Array();=0A=
=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var element =3D arguments[i];=0A=
if (typeof element =3D=3D 'string')=0A=
element =3D document.getElementById(element);=0A=
=0A=
if (arguments.length =3D=3D 1) =0A=
return element;=0A=
=0A=
elements.push(element);=0A=
}=0A=
=0A=
return elements;=0A=
}=0A=
=0A=
if (!Array.prototype.push) {=0A=
Array.prototype.push =3D function() {=0A=
var startLength =3D this.length;=0A=
for (var i =3D 0; i < arguments.length; i++)=0A=
this[startLength + i] =3D arguments[i];=0A=
return this.length;=0A=
}=0A=
}=0A=
=0A=
if (!Function.prototype.apply) {=0A=
// Based on code from http://www.youngpup.net/=0A=
Function.prototype.apply =3D function(object, parameters) {=0A=
var parameterStrings =3D new Array();=0A=
if (!object) object =3D window;=0A=
if (!parameters) parameters =3D new Array();=0A=
=0A=
for (var i =3D 0; i < parameters.length; i++)=0A=
parameterStrings[i] =3D 'parameters[' + i + ']';=0A=
=0A=
object.__apply__ =3D this;=0A=
var result =3D eval('object.__apply__(' + =0A=
parameterStrings.join(', ') + ')');=0A=
object.__apply__ =3D null;=0A=
=0A=
return result;=0A=
}=0A=
}=0A=
=0A=
String.prototype.extend({=0A=
stripTags: function() {=0A=
return this.replace(/<\/?[^>]+>/gi, '');=0A=
},=0A=
=0A=
escapeHTML: function() {=0A=
var div =3D document.createElement('div');=0A=
var text =3D document.createTextNode(this);=0A=
div.appendChild(text);=0A=
return div.innerHTML;=0A=
},=0A=
=0A=
unescapeHTML: function() {=0A=
var div =3D document.createElement('div');=0A=
div.innerHTML =3D this.stripTags();=0A=
return div.childNodes[0].nodeValue;=0A=
}=0A=
});=0A=
=0A=
var Ajax =3D {=0A=
getTransport: function() {=0A=
return Try.these(=0A=
function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
function() {return new ActiveXObject('Microsoft.XMLHTTP')},=0A=
function() {return new XMLHttpRequest()}=0A=
) || false;=0A=
}=0A=
}=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
setOptions: function(options) {=0A=
this.options =3D {=0A=
method: 'post',=0A=
asynchronous: true,=0A=
parameters: ''=0A=
}.extend(options || {});=0A=
},=0A=
=0A=
responseIsSuccess: function() {=0A=
return this.transport.status =3D=3D undefined=0A=
|| this.transport.status =3D=3D 0 =0A=
|| (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
},=0A=
=0A=
responseIsFailure: function() {=0A=
return !this.responseIsSuccess();=0A=
}=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D =0A=
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D (new Ajax.Base()).extend({=0A=
initialize: function(url, options) {=0A=
this.transport =3D Ajax.getTransport();=0A=
this.setOptions(options);=0A=
this.request(url);=0A=
},=0A=
=0A=
request: function(url) {=0A=
var parameters =3D this.options.parameters || '';=0A=
if (parameters.length > 0) parameters +=3D '&_=3D';=0A=
=0A=
try {=0A=
if (this.options.method =3D=3D 'get')=0A=
url +=3D '?' + parameters;=0A=
=0A=
this.transport.open(this.options.method, url,=0A=
this.options.asynchronous);=0A=
=0A=
if (this.options.asynchronous) {=0A=
this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
setTimeout((function() =
{this.respondToReadyState(1)}).bind(this), 10);=0A=
}=0A=
=0A=
this.setRequestHeaders();=0A=
=0A=
var body =3D this.options.postBody ? this.options.postBody : =
parameters;=0A=
this.transport.send(this.options.method =3D=3D 'post' ? body : =
null);=0A=
=0A=
} catch (e) {=0A=
}=0A=
},=0A=
=0A=
setRequestHeaders: function() {=0A=
var requestHeaders =3D =0A=
['X-Requested-With', 'XMLHttpRequest',=0A=
'X-Prototype-Version', Prototype.Version];=0A=
=0A=
if (this.options.method =3D=3D 'post') {=0A=
requestHeaders.push('Content-type', =0A=
'application/x-www-form-urlencoded');=0A=
=0A=
/* Force "Connection: close" for Mozilla browsers to work around=0A=
* a bug where XMLHttpReqeuest sends an incorrect Content-length=0A=
* header. See Mozilla Bugzilla #246651. =0A=
*/=0A=
if (this.transport.overrideMimeType)=0A=
requestHeaders.push('Connection', 'close');=0A=
}=0A=
=0A=
if (this.options.requestHeaders)=0A=
requestHeaders.push.apply(requestHeaders, =
this.options.requestHeaders);=0A=
=0A=
for (var i =3D 0; i < requestHeaders.length; i +=3D 2)=0A=
this.transport.setRequestHeader(requestHeaders[i], =
requestHeaders[i+1]);=0A=
},=0A=
=0A=
onStateChange: function() {=0A=
var readyState =3D this.transport.readyState;=0A=
if (readyState !=3D 1)=0A=
this.respondToReadyState(this.transport.readyState);=0A=
},=0A=
=0A=
respondToReadyState: function(readyState) {=0A=
var event =3D Ajax.Request.Events[readyState];=0A=
=0A=
if (event =3D=3D 'Complete')=0A=
(this.options['on' + this.transport.status]=0A=
|| this.options['on' + (this.responseIsSuccess() ? 'Success' : =
'Failure')]=0A=
|| Prototype.emptyFunction)(this.transport);=0A=
=0A=
(this.options['on' + event] || =
Prototype.emptyFunction)(this.transport);=0A=
=0A=
/* Avoid memory leak in MSIE: clean up the oncomplete event handler =
*/=0A=
if (event =3D=3D 'Complete')=0A=
this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
}=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
Ajax.Updater.ScriptFragment =3D =
'(?:)((\n|.)*?)(?:<\/script>)';=0A=
=0A=
Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({=0A=
initialize: function(container, url, options) {=0A=
this.containers =3D {=0A=
success: container.success ? $(container.success) : $(container),=0A=
failure: container.failure ? $(container.failure) :=0A=
(container.success ? null : $(container))=0A=
}=0A=
=0A=
this.transport =3D Ajax.getTransport();=0A=
this.setOptions(options);=0A=
=0A=
var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
this.options.onComplete =3D (function() {=0A=
this.updateContent();=0A=
onComplete(this.transport);=0A=
}).bind(this);=0A=
=0A=
this.request(url);=0A=
},=0A=
=0A=
updateContent: function() {=0A=
var receiver =3D this.responseIsSuccess() ?=0A=
this.containers.success : this.containers.failure;=0A=
=0A=
var match =3D new RegExp(Ajax.Updater.ScriptFragment, 'img');=0A=
var response =3D this.transport.responseText.replace(match, '');=0A=
var scripts =3D this.transport.responseText.match(match);=0A=
=0A=
if (receiver) {=0A=
if (this.options.insertion) {=0A=
new this.options.insertion(receiver, response);=0A=
} else {=0A=
receiver.innerHTML =3D response;=0A=
}=0A=
}=0A=
=0A=
if (this.responseIsSuccess()) {=0A=
if (this.onComplete)=0A=
setTimeout((function() {this.onComplete(=0A=
this.transport)}).bind(this), 10);=0A=
}=0A=
=0A=
if (this.options.evalScripts && scripts) {=0A=
match =3D new RegExp(Ajax.Updater.ScriptFragment, 'im');=0A=
setTimeout((function() {=0A=
for (var i =3D 0; i < scripts.length; i++)=0A=
eval(scripts[i].match(match)[1]);=0A=
}).bind(this), 10);=0A=
}=0A=
}=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D (new Ajax.Base()).extend({=0A=
initialize: function(container, url, options) {=0A=
this.setOptions(options);=0A=
this.onComplete =3D this.options.onComplete;=0A=
=0A=
this.frequency =3D (this.options.frequency || 2);=0A=
this.decay =3D 1;=0A=
=0A=
this.updater =3D {};=0A=
this.container =3D container;=0A=
this.url =3D url;=0A=
=0A=
this.start();=0A=
},=0A=
=0A=
start: function() {=0A=
this.options.onComplete =3D this.updateComplete.bind(this);=0A=
this.onTimerEvent();=0A=
},=0A=
=0A=
stop: function() {=0A=
this.updater.onComplete =3D undefined;=0A=
clearTimeout(this.timer);=0A=
(this.onComplete || Ajax.emptyFunction).apply(this, arguments);=0A=
},=0A=
=0A=
updateComplete: function(request) {=0A=
if (this.options.decay) {=0A=
this.decay =3D (request.responseText =3D=3D this.lastText ? =0A=
this.decay * this.options.decay : 1);=0A=
=0A=
this.lastText =3D request.responseText;=0A=
}=0A=
this.timer =3D setTimeout(this.onTimerEvent.bind(this), =0A=
this.decay * this.frequency * 1000);=0A=
},=0A=
=0A=
onTimerEvent: function() {=0A=
this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
}=0A=
});=0A=
=0A=
document.getElementsByClassName =3D function(className) {=0A=
var children =3D document.getElementsByTagName('*') || document.all;=0A=
var elements =3D new Array();=0A=
=0A=
for (var i =3D 0; i < children.length; i++) {=0A=
var child =3D children[i];=0A=
var classNames =3D child.className.split(' ');=0A=
for (var j =3D 0; j < classNames.length; j++) {=0A=
if (classNames[j] =3D=3D className) {=0A=
elements.push(child);=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
=0A=
return elements;=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element) {=0A=
var Element =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Element, {=0A=
toggle: function() {=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var element =3D $(arguments[i]);=0A=
element.style.display =3D =0A=
(element.style.display =3D=3D 'none' ? '' : 'none');=0A=
}=0A=
},=0A=
=0A=
hide: function() {=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var element =3D $(arguments[i]);=0A=
element.style.display =3D 'none';=0A=
}=0A=
},=0A=
=0A=
show: function() {=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var element =3D $(arguments[i]);=0A=
element.style.display =3D '';=0A=
}=0A=
},=0A=
=0A=
remove: function(element) {=0A=
element =3D $(element);=0A=
element.parentNode.removeChild(element);=0A=
},=0A=
=0A=
getHeight: function(element) {=0A=
element =3D $(element);=0A=
return element.offsetHeight; =0A=
},=0A=
=0A=
hasClassName: function(element, className) {=0A=
element =3D $(element);=0A=
if (!element)=0A=
return;=0A=
var a =3D element.className.split(' ');=0A=
for (var i =3D 0; i < a.length; i++) {=0A=
if (a[i] =3D=3D className)=0A=
return true;=0A=
}=0A=
return false;=0A=
},=0A=
=0A=
addClassName: function(element, className) {=0A=
element =3D $(element);=0A=
Element.removeClassName(element, className);=0A=
element.className +=3D ' ' + className;=0A=
},=0A=
=0A=
removeClassName: function(element, className) {=0A=
element =3D $(element);=0A=
if (!element)=0A=
return;=0A=
var newClassName =3D '';=0A=
var a =3D element.className.split(' ');=0A=
for (var i =3D 0; i < a.length; i++) {=0A=
if (a[i] !=3D className) {=0A=
if (i > 0)=0A=
newClassName +=3D ' ';=0A=
newClassName +=3D a[i];=0A=
}=0A=
}=0A=
element.className =3D newClassName;=0A=
},=0A=
=0A=
// removes whitespace-only text node children=0A=
cleanWhitespace: function(element) {=0A=
var element =3D $(element);=0A=
for (var i =3D 0; i < element.childNodes.length; i++) {=0A=
var node =3D element.childNodes[i];=0A=
if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue)) =0A=
Element.remove(node);=0A=
}=0A=
}=0A=
});=0A=
=0A=
var Toggle =3D new Object();=0A=
Toggle.display =3D Element.toggle;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
initialize: function(element, content) {=0A=
this.element =3D $(element);=0A=
this.content =3D content;=0A=
=0A=
if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
} else {=0A=
this.range =3D this.element.ownerDocument.createRange();=0A=
if (this.initializeRange) this.initializeRange();=0A=
this.fragment =3D =
this.range.createContextualFragment(this.content);=0A=
this.insertContent();=0A=
}=0A=
}=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D (new =
Abstract.Insertion('beforeBegin')).extend({=0A=
initializeRange: function() {=0A=
this.range.setStartBefore(this.element);=0A=
},=0A=
=0A=
insertContent: function() {=0A=
this.element.parentNode.insertBefore(this.fragment, this.element);=0A=
}=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D (new =
Abstract.Insertion('afterBegin')).extend({=0A=
initializeRange: function() {=0A=
this.range.selectNodeContents(this.element);=0A=
this.range.collapse(true);=0A=
},=0A=
=0A=
insertContent: function() { =0A=
this.element.insertBefore(this.fragment, this.element.firstChild);=0A=
}=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D (new =
Abstract.Insertion('beforeEnd')).extend({=0A=
initializeRange: function() {=0A=
this.range.selectNodeContents(this.element);=0A=
this.range.collapse(this.element);=0A=
},=0A=
=0A=
insertContent: function() {=0A=
this.element.appendChild(this.fragment);=0A=
}=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D (new =
Abstract.Insertion('afterEnd')).extend({=0A=
initializeRange: function() {=0A=
this.range.setStartAfter(this.element);=0A=
},=0A=
=0A=
insertContent: function() {=0A=
this.element.parentNode.insertBefore(this.fragment, =0A=
this.element.nextSibling);=0A=
}=0A=
});=0A=
=0A=
var Field =3D {=0A=
clear: function() {=0A=
for (var i =3D 0; i < arguments.length; i++)=0A=
$(arguments[i]).value =3D '';=0A=
},=0A=
=0A=
focus: function(element) {=0A=
$(element).focus();=0A=
},=0A=
=0A=
present: function() {=0A=
for (var i =3D 0; i < arguments.length; i++)=0A=
if ($(arguments[i]).value =3D=3D '') return false;=0A=
return true;=0A=
},=0A=
=0A=
select: function(element) {=0A=
$(element).select();=0A=
},=0A=
=0A=
activate: function(element) {=0A=
$(element).focus();=0A=
$(element).select();=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Form =3D {=0A=
serialize: function(form) {=0A=
var elements =3D Form.getElements($(form));=0A=
var queryComponents =3D new Array();=0A=
=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var queryComponent =3D Form.Element.serialize(elements[i]);=0A=
if (queryComponent)=0A=
queryComponents.push(queryComponent);=0A=
}=0A=
=0A=
return queryComponents.join('&');=0A=
},=0A=
=0A=
getElements: function(form) {=0A=
var form =3D $(form);=0A=
var elements =3D new Array();=0A=
=0A=
for (tagName in Form.Element.Serializers) {=0A=
var tagElements =3D form.getElementsByTagName(tagName);=0A=
for (var j =3D 0; j < tagElements.length; j++)=0A=
elements.push(tagElements[j]);=0A=
}=0A=
return elements;=0A=
},=0A=
=0A=
getInputs: function(form, typeName, name) {=0A=
var form =3D $(form);=0A=
var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
if (!typeName && !name)=0A=
return inputs;=0A=
=0A=
var matchingInputs =3D new Array();=0A=
for (var i =3D 0; i < inputs.length; i++) {=0A=
var input =3D inputs[i];=0A=
if ((typeName && input.type !=3D typeName) ||=0A=
(name && input.name !=3D name)) =0A=
continue;=0A=
matchingInputs.push(input);=0A=
}=0A=
=0A=
return matchingInputs;=0A=
},=0A=
=0A=
disable: function(form) {=0A=
var elements =3D Form.getElements(form);=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var element =3D elements[i];=0A=
element.blur();=0A=
element.disabled =3D 'true';=0A=
}=0A=
},=0A=
=0A=
enable: function(form) {=0A=
var elements =3D Form.getElements(form);=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var element =3D elements[i];=0A=
element.disabled =3D '';=0A=
}=0A=
},=0A=
=0A=
focusFirstElement: function(form) {=0A=
var form =3D $(form);=0A=
var elements =3D Form.getElements(form);=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var element =3D elements[i];=0A=
if (element.type !=3D 'hidden' && !element.disabled) {=0A=
Field.activate(element);=0A=
break;=0A=
}=0A=
}=0A=
},=0A=
=0A=
reset: function(form) {=0A=
$(form).reset();=0A=
}=0A=
}=0A=
=0A=
Form.Element =3D {=0A=
serialize: function(element) {=0A=
var element =3D $(element);=0A=
var method =3D element.tagName.toLowerCase();=0A=
var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
if (parameter)=0A=
return encodeURIComponent(parameter[0]) + '=3D' + =0A=
encodeURIComponent(parameter[1]); =0A=
},=0A=
=0A=
getValue: function(element) {=0A=
var element =3D $(element);=0A=
var method =3D element.tagName.toLowerCase();=0A=
var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
if (parameter) =0A=
return parameter[1];=0A=
}=0A=
}=0A=
=0A=
Form.Element.Serializers =3D {=0A=
input: function(element) {=0A=
switch (element.type.toLowerCase()) {=0A=
case 'submit':=0A=
case 'hidden':=0A=
case 'password':=0A=
case 'text':=0A=
return Form.Element.Serializers.textarea(element);=0A=
case 'checkbox': =0A=
case 'radio':=0A=
return Form.Element.Serializers.inputSelector(element);=0A=
}=0A=
return false;=0A=
},=0A=
=0A=
inputSelector: function(element) {=0A=
if (element.checked)=0A=
return [element.name, element.value];=0A=
},=0A=
=0A=
textarea: function(element) {=0A=
return [element.name, element.value];=0A=
},=0A=
=0A=
select: function(element) {=0A=
var value =3D '';=0A=
if (element.type =3D=3D 'select-one') {=0A=
var index =3D element.selectedIndex;=0A=
if (index >=3D 0)=0A=
value =3D element.options[index].value || =
element.options[index].text;=0A=
} else {=0A=
value =3D new Array();=0A=
for (var i =3D 0; i < element.length; i++) {=0A=
var opt =3D element.options[i];=0A=
if (opt.selected)=0A=
value.push(opt.value || opt.text);=0A=
}=0A=
}=0A=
return [element.name, value];=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var $F =3D Form.Element.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
initialize: function(element, frequency, callback) {=0A=
this.frequency =3D frequency;=0A=
this.element =3D $(element);=0A=
this.callback =3D callback;=0A=
=0A=
this.lastValue =3D this.getValue();=0A=
this.registerCallback();=0A=
},=0A=
=0A=
registerCallback: function() {=0A=
setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
},=0A=
=0A=
onTimerEvent: function() {=0A=
var value =3D this.getValue();=0A=
if (this.lastValue !=3D value) {=0A=
this.callback(this.element, value);=0A=
this.lastValue =3D value;=0A=
}=0A=
}=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D (new =
Abstract.TimedObserver()).extend({=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D (new Abstract.TimedObserver()).extend({=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
initialize: function(element, callback) {=0A=
this.element =3D $(element);=0A=
this.callback =3D callback;=0A=
=0A=
this.lastValue =3D this.getValue();=0A=
if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
this.registerFormCallbacks();=0A=
else=0A=
this.registerCallback(this.element);=0A=
},=0A=
=0A=
onElementEvent: function() {=0A=
var value =3D this.getValue();=0A=
if (this.lastValue !=3D value) {=0A=
this.callback(this.element, value);=0A=
this.lastValue =3D value;=0A=
}=0A=
},=0A=
=0A=
registerFormCallbacks: function() {=0A=
var elements =3D Form.getElements(this.element);=0A=
for (var i =3D 0; i < elements.length; i++)=0A=
this.registerCallback(elements[i]);=0A=
},=0A=
=0A=
registerCallback: function(element) {=0A=
if (element.type) {=0A=
switch (element.type.toLowerCase()) {=0A=
case 'checkbox': =0A=
case 'radio':=0A=
element.target =3D this;=0A=
element.prev_onclick =3D element.onclick || =
Prototype.emptyFunction;=0A=
element.onclick =3D function() {=0A=
this.prev_onclick(); =0A=
this.target.onElementEvent();=0A=
}=0A=
break;=0A=
case 'password':=0A=
case 'text':=0A=
case 'textarea':=0A=
case 'select-one':=0A=
case 'select-multiple':=0A=
element.target =3D this;=0A=
element.prev_onchange =3D element.onchange || =
Prototype.emptyFunction;=0A=
element.onchange =3D function() {=0A=
this.prev_onchange(); =0A=
this.target.onElementEvent();=0A=
}=0A=
break;=0A=
}=0A=
} =0A=
}=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D (new =
Abstract.EventObserver()).extend({=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D (new Abstract.EventObserver()).extend({=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
=0A=
=0A=
if (!window.Event) {=0A=
var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
KEY_BACKSPACE: 8,=0A=
KEY_TAB: 9,=0A=
KEY_RETURN: 13,=0A=
KEY_ESC: 27,=0A=
KEY_LEFT: 37,=0A=
KEY_UP: 38,=0A=
KEY_RIGHT: 39,=0A=
KEY_DOWN: 40,=0A=
KEY_DELETE: 46,=0A=
=0A=
element: function(event) {=0A=
return event.target || event.srcElement;=0A=
},=0A=
=0A=
isLeftClick: function(event) {=0A=
return (((event.which) && (event.which =3D=3D 1)) ||=0A=
((event.button) && (event.button =3D=3D 1)));=0A=
},=0A=
=0A=
pointerX: function(event) {=0A=
return event.pageX || (event.clientX + =0A=
(document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
},=0A=
=0A=
pointerY: function(event) {=0A=
return event.pageY || (event.clientY + =0A=
(document.documentElement.scrollTop || document.body.scrollTop));=0A=
},=0A=
=0A=
stop: function(event) {=0A=
if (event.preventDefault) { =0A=
event.preventDefault(); =0A=
event.stopPropagation(); =0A=
} else {=0A=
event.returnValue =3D false;=0A=
}=0A=
},=0A=
=0A=
// find the first node with the given tagName, starting from the=0A=
// node the event was triggered on; traverses the DOM upwards=0A=
findElement: function(event, tagName) {=0A=
var element =3D Event.element(event);=0A=
while (element.parentNode && (!element.tagName ||=0A=
(element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
element =3D element.parentNode;=0A=
return element;=0A=
},=0A=
=0A=
observers: false,=0A=
=0A=
_observeAndCache: function(element, name, observer, useCapture) {=0A=
if (!this.observers) this.observers =3D [];=0A=
if (element.addEventListener) {=0A=
this.observers.push([element, name, observer, useCapture]);=0A=
element.addEventListener(name, observer, useCapture);=0A=
} else if (element.attachEvent) {=0A=
this.observers.push([element, name, observer, useCapture]);=0A=
element.attachEvent('on' + name, observer);=0A=
}=0A=
},=0A=
=0A=
unloadCache: function() {=0A=
if (!Event.observers) return;=0A=
for (var i =3D 0; i < Event.observers.length; i++) {=0A=
Event.stopObserving.apply(this, Event.observers[i]);=0A=
Event.observers[i][0] =3D null;=0A=
}=0A=
Event.observers =3D false;=0A=
},=0A=
=0A=
observe: function(element, name, observer, useCapture) {=0A=
var element =3D $(element);=0A=
useCapture =3D useCapture || false;=0A=
=0A=
if (name =3D=3D 'keypress' &&=0A=
((navigator.appVersion.indexOf('AppleWebKit') > 0) =0A=
|| element.attachEvent))=0A=
name =3D 'keydown';=0A=
=0A=
this._observeAndCache(element, name, observer, useCapture);=0A=
},=0A=
=0A=
stopObserving: function(element, name, observer, useCapture) {=0A=
var element =3D $(element);=0A=
useCapture =3D useCapture || false;=0A=
=0A=
if (name =3D=3D 'keypress' &&=0A=
((navigator.appVersion.indexOf('AppleWebKit') > 0) =0A=
|| element.detachEvent))=0A=
name =3D 'keydown';=0A=
=0A=
if (element.removeEventListener) {=0A=
element.removeEventListener(name, observer, useCapture);=0A=
} else if (element.detachEvent) {=0A=
element.detachEvent('on' + name, observer);=0A=
}=0A=
}=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
Event.observe(window, 'unload', Event.unloadCache, false);=0A=
=0A=
var Position =3D {=0A=
=0A=
// set to true if needed, warning: firefox performance problems=0A=
// NOT neeeded for page scrolling, only if draggable contained in=0A=
// scrollable elements=0A=
includeScrollOffsets: false, =0A=
=0A=
// must be called before calling withinIncludingScrolloffset, every =
time the=0A=
// page is scrolled=0A=
prepare: function() {=0A=
this.deltaX =3D window.pageXOffset =0A=
|| document.documentElement.scrollLeft =0A=
|| document.body.scrollLeft =0A=
|| 0;=0A=
this.deltaY =3D window.pageYOffset =0A=
|| document.documentElement.scrollTop =0A=
|| document.body.scrollTop =0A=
|| 0;=0A=
},=0A=
=0A=
realOffset: function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.scrollTop || 0;=0A=
valueL +=3D element.scrollLeft || 0; =0A=
element =3D element.parentNode;=0A=
} while (element);=0A=
return [valueL, valueT];=0A=
},=0A=
=0A=
cumulativeOffset: function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.offsetTop || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
element =3D element.offsetParent;=0A=
} while (element);=0A=
return [valueL, valueT];=0A=
},=0A=
=0A=
// caches x/y coordinate pair to use with overlap=0A=
within: function(element, x, y) {=0A=
if (this.includeScrollOffsets)=0A=
return this.withinIncludingScrolloffsets(element, x, y);=0A=
this.xcomp =3D x;=0A=
this.ycomp =3D y;=0A=
this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
return (y >=3D this.offset[1] &&=0A=
y < this.offset[1] + element.offsetHeight &&=0A=
x >=3D this.offset[0] && =0A=
x < this.offset[0] + element.offsetWidth);=0A=
},=0A=
=0A=
withinIncludingScrolloffsets: function(element, x, y) {=0A=
var offsetcache =3D this.realOffset(element);=0A=
=0A=
this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
return (this.ycomp >=3D this.offset[1] &&=0A=
this.ycomp < this.offset[1] + element.offsetHeight &&=0A=
this.xcomp >=3D this.offset[0] && =0A=
this.xcomp < this.offset[0] + element.offsetWidth);=0A=
},=0A=
=0A=
// within must be called directly before=0A=
overlap: function(mode, element) { =0A=
if (!mode) return 0; =0A=
if (mode =3D=3D 'vertical') =0A=
return ((this.offset[1] + element.offsetHeight) - this.ycomp) / =0A=
element.offsetHeight;=0A=
if (mode =3D=3D 'horizontal')=0A=
return ((this.offset[0] + element.offsetWidth) - this.xcomp) / =0A=
element.offsetWidth;=0A=
},=0A=
=0A=
clone: function(source, target) {=0A=
source =3D $(source);=0A=
target =3D $(target);=0A=
target.style.position =3D 'absolute';=0A=
var offsets =3D this.cumulativeOffset(source);=0A=
target.style.top =3D offsets[1] + 'px';=0A=
target.style.left =3D offsets[0] + 'px';=0A=
target.style.width =3D source.offsetWidth + 'px';=0A=
target.style.height =3D source.offsetHeight + 'px';=0A=
}=0A=
}=0A=
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.pcworld.com/script/main.js
/*********************************************************=0A=
* File: main.js=0A=
* Author: MetaDesign=0A=
* Created: December 6, 2005=0A=
*=0A=
* Description:=0A=
* Javascript file for all functions and classes provided=0A=
* in the following order:=0A=
* =0A=
* Utility Functions=0A=
* -----------------=0A=
* getObject=0A=
* filterByClassName=0A=
* getObjectsByClassName=0A=
* getChildrenByClassName=0A=
* getDescendantsByClassName=0A=
* compareById=0A=
* createElement=0A=
* getWindowWidth=0A=
* getWindowHeight=0A=
* getScrollX=0A=
* getScrollY=0A=
* tmpAlert=0A=
* clearFld=0A=
* changeclass=0A=
* =0A=
* Utility Exceptions=0A=
* ------------------=0A=
* ObjectNotFoundException=0A=
* InvalidObjectRefException=0A=
* =0A=
* Application Specific Functions=0A=
* ------------------------------=0A=
* addToMyPages=0A=
* addToMyPagesToolbar=0A=
* showImage=0A=
* toggleCommentsDisplay=0A=
* checkAllChecks=0A=
* charCounter=0A=
* selProdCat=0A=
* chgToolbar=0A=
*=0A=
* FeatureViewer=0A=
* -------------=0A=
* Constants:=0A=
* Feature Viewer=0A=
* FEATURE_CLASS=0A=
* FEATURE_NAMES=0A=
*=0A=
* Browser Detection:=0A=
* userAgent=0A=
* isPCIE=0A=
*=0A=
* getFeatureCount=0A=
* getFeatureContent=0A=
* getFeatures=0A=
* encodeSpecial=0A=
* getFlashMovieObject=0A=
* setFlashVariables=0A=
*=0A=
* Base Classes=0A=
* ------------=0A=
* DOMDecorator=0A=
* OpacityControl=0A=
* Timer=0A=
* TimeObserver=0A=
* Move=0A=
*=0A=
* Generic UI Control Classes=0A=
* --------------------------=0A=
* Drawer=0A=
* WindowShade=0A=
* AlertMessage=0A=
* ListControl=0A=
*=0A=
* Module Specific Classes=0A=
* -----------------------=0A=
* ReviewFinder=0A=
* MyPages=0A=
*=0A=
********************************************************/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Utility Functions=0A=
*------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getObject=0A=
* =0A=
* Description:=0A=
* Accepts an object reference or a string, returns an=0A=
* object reference=0A=
* =0A=
* Parameters:=0A=
* pRef string or object ID of HTML DOM entity, or=0A=
* reference to an object=0A=
* Exceptions:=0A=
* ObjectNotFoundException=0A=
* InvalidObjectRefException=0A=
* =0A=
* Return:=0A=
* object Reference to named or passed DOM object.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getObject(pRef) {=0A=
var obj;=0A=
=0A=
if (typeof(pRef) =3D=3D "object") {=0A=
obj =3D pRef;=0A=
} else if (typeof(pRef) =3D=3D "string") {=0A=
obj =3D document.getElementById(pRef);=0A=
if (!obj) {=0A=
throw new ObjectNotFoundException(pRef);=0A=
}=0A=
} else {=0A=
throw new InvalidObjectRefException(pRef);=0A=
}=0A=
=0A=
return obj;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: filterByClassName=0A=
* =0A=
* Description:=0A=
* Filters an array of DOM elements, returning only=0A=
* elements that match a particular class name.=0A=
* =0A=
* Parameters:=0A=
* pObjects array Array of DOM elements to filter=0A=
* pClassName string The class name to match=0A=
* =0A=
* Return:=0A=
* array An array of DOM objects with the matching=0A=
* class name.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function filterByClassName(pObjects, pClassName) {=0A=
var elements =3D new Array();=0A=
=0A=
for (var i =3D 0; i < pObjects.length; i++) {=0A=
var obj =3D pObjects[i];=0A=
if (obj.className) {=0A=
var classNames =3D obj.className.split(' ');=0A=
for (var j =3D 0; j < classNames.length; j++) {=0A=
if (classNames[j] =3D=3D pClassName) {=0A=
elements[elements.length] =3D obj;=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
=0A=
return elements;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getObjectsByClassName=0A=
* =0A=
* Description:=0A=
* Returns an array of DOM objects that match a particular=0A=
* class name.=0A=
* =0A=
* Parameters:=0A=
* pClassName string The class name to match=0A=
* =0A=
* Return:=0A=
* array An array of DOM objects with the matching=0A=
* class name.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getObjectsByClassName(pClassName) {=0A=
var all =3D document.getElementsByTagName('*') || document.all;=0A=
=0A=
return filterByClassName(all, pClassName);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getObjectsByClassName=0A=
* =0A=
* Description:=0A=
* Returns an array of DOM objects that match a particular=0A=
* class name that are a descendent of pParentId=0A=
* =0A=
* Parameters:=0A=
* pParentId string The id of a parent node to start search=0A=
* pClassName string The class name to match=0A=
* =0A=
* Return:=0A=
* array An array of DOM objects with the matching=0A=
* class name.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getChildObjectsByClassName(pParentId,pClassName) {=0A=
var parent =3D document.getElementById(pParentId);=0A=
var all =3D parent.getElementsByTagName('*');=0A=
return filterByClassName(all,pClassName);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getChildrenByClassName=0A=
* =0A=
* Description:=0A=
* Accepts a reference to a DOM object and returns an array=0A=
* of child elements that match a particular class name.=0A=
* =0A=
* Parameters:=0A=
* pRef string or object The parent DOM element=0A=
* to search=0A=
* pClassName string The class name to match=0A=
* =0A=
* Return:=0A=
* array An array of DOM objects with the matching=0A=
* class name.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getChildrenByClassName(pRef, pClassName) {=0A=
var children =3D getObject(pRef).childNodes;=0A=
=0A=
return filterByClassName(children, pClassName);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getDescendantsByClassName=0A=
* =0A=
* Description:=0A=
* Accepts a reference to a DOM object and returns an array=0A=
* of all descendant elements that match a particular class=0A=
* name.=0A=
* =0A=
* Parameters:=0A=
* pRef string or object The parent DOM element=0A=
* to search=0A=
* pClassName string The class name to match=0A=
* =0A=
* Return:=0A=
* array An array of DOM objects with the matching=0A=
* class name.=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getDescendantsByClassName(pRef, pClassName) {=0A=
var descendants =3D getObject(pRef).getElementsByTagName('*');=0A=
=0A=
return filterByClassName(descendants, pClassName);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: compareById=0A=
* =0A=
* Description:=0A=
* Compares two DOM elements by ID. Uses standard string=0A=
* comparison against language character set numeric codes.=0A=
* =0A=
* Parameters:=0A=
* pObjectA object The first DOM element to compare=0A=
* pObjectB object The second DOM element to compare=0A=
* =0A=
* Return:=0A=
* integer -1 if pObjectB is greater than pObjectA,=0A=
* 0 if equal, +1 if pObjectA is greater=0A=
*-------------------------------------------------------*/=0A=
=0A=
function compareById(pObjectA, pObjectB) {=0A=
if (pObjectA.id > pObjectB.id) {=0A=
return 1;=0A=
} else if (pObjectA.id < pObjectB.id) {=0A=
return -1;=0A=
} else {=0A=
return 0;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: createElement=0A=
* =0A=
* Description:=0A=
* Utility function for dynamic generation of DOM=0A=
* elements. Sets attributes on the element based on a=0A=
* hash of attribute names and values.=0A=
*=0A=
* Example:=0A=
* var newElement =3D createElement('a',=0A=
* {=0A=
* 'class': 'myClass',=0A=
* 'href': 'http://www.mydomain.com',=0A=
* 'onmouseover': 'jsFunction();'=0A=
* });=0A=
* =0A=
* Parameters:=0A=
* pElement string DOM element to create=0A=
* (e.g. 'div', 'a', 'h1')=0A=
* pAttributes hash Hash of attributes and their=0A=
* values.=0A=
* =0A=
* Return:=0A=
* object The newly created element=0A=
*-------------------------------------------------------*/=0A=
=0A=
function createElement(pElement, pAttributes) {=0A=
// Make the element=0A=
var newElement =3D document.createElement(pElement);=0A=
=0A=
// Set the attributes=0A=
for (var attr in pAttributes) {=0A=
switch (attr) {=0A=
/*=0A=
IE uses 'className' for setAttribute and getAttribute.=0A=
All other browsers use 'class'.=0A=
Setting the className property is cross-browser=0A=
*/=0A=
case 'class':=0A=
case 'className':=0A=
newElement.className =3D pAttributes[attr];=0A=
break;=0A=
/*=0A=
setAttribute works for event handlers on Firefox, but not=0A=
on IE. Explicitly set the event handlers as functions=0A=
using new Function constructor.=0A=
*/=0A=
case 'onblur':=0A=
newElement.onblur =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onclick':=0A=
newElement.onclick =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'ondblclick':=0A=
newElement.ondblclick =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onfocus':=0A=
newElement.onfocus =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onkeydown':=0A=
newElement.onkeydown =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onkeypress':=0A=
newElement.onkeypress =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onkeyup':=0A=
newElement.onkeyup =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onmousedown':=0A=
newElement.onmousedown =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onmousemove':=0A=
newElement.onmousemove =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onmouseout':=0A=
newElement.onmouseout =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onmouseover':=0A=
newElement.onmouseover =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onmouseup':=0A=
newelement.onmouseup =3D new Function(pAttributes[attr]);=0A=
break;=0A=
case 'onresize':=0A=
newElement.onresize =3D new Function(pAttributes[attr]);=0A=
break;=0A=
=0A=
/* Default action is to set the attribute */=0A=
default:=0A=
newElement.setAttribute(attr, pAttributes[attr]);=0A=
break;=0A=
}=0A=
}=0A=
return newElement;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getWindowWidth=0A=
* =0A=
* Description:=0A=
* Cross browser method for determining total width of=0A=
* browser window (inside chrome)=0A=
* =0A=
* Parameters:=0A=
* None=0A=
* =0A=
* Return:=0A=
* integer Width of browser window in pixels=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getWindowWidth() {=0A=
if (isNaN(window.innerWidth)) {=0A=
return document.body.parentElement.clientWidth;=0A=
} else {=0A=
return window.innerWidth;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getWindowHeight=0A=
* =0A=
* Description:=0A=
* Cross browser method for determining total height of=0A=
* browser window (inside chrome)=0A=
* =0A=
* Parameters:=0A=
* None=0A=
* =0A=
* Return:=0A=
* integer Height of browser window in pixels=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getWindowHeight() {=0A=
if (isNaN(window.innerHeight)) {=0A=
return document.body.parentElement.clientHeight;=0A=
} else {=0A=
return window.innerHeight;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getScrollX=0A=
* =0A=
* Description:=0A=
* Cross browser method for determining horizontal scroll of=0A=
* browser window=0A=
* =0A=
* Parameters:=0A=
* None=0A=
* =0A=
* Return:=0A=
* integer Number of pixels scrolled horizontally=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getScrollX() {=0A=
if (isNaN(window.scrollX)) {=0A=
// IE compatibility mode=0A=
return document.body.parentElement.scrollLeft;=0A=
} else {=0A=
return window.scrollX;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getScrollY=0A=
* =0A=
* Description:=0A=
* Cross browser method for determining vertical scroll of=0A=
* browser window=0A=
* =0A=
* Parameters:=0A=
* None=0A=
* =0A=
* Return:=0A=
* integer Number of pixels scrolled vertically=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getScrollY() {=0A=
if (isNaN(window.scrollY)) {=0A=
// IE compatibility mode=0A=
return document.body.parentElement.scrollTop;=0A=
} else {=0A=
return window.scrollY;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: tmpAlert=0A=
* =0A=
* Description:=0A=
* Temporary function for alert of server side functionality=0A=
*=0A=
* Paramaters:=0A=
* pType string Verbiage for alert box=0A=
*=0A=
* Return:=0A=
* none=0A=
*------------------------------------------------------*/=0A=
=0A=
function tmpAlert(pType) {=0A=
alert('This will perform a ' + pType + '.');=0A=
return false;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: clearFld=0A=
* =0A=
* Description:=0A=
* Clears default text in form field on focus=0A=
*=0A=
* Paramaters:=0A=
* pFld string or object Reference to the field to clear.=0A=
*=0A=
* Return:=0A=
* none=0A=
*------------------------------------------------------*/=0A=
=0A=
function clearFld(pFld) {=0A=
getObject(pFld).value =3D "";=0A=
return false;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: changeClass=0A=
* =0A=
* Description:=0A=
* Changes the class of an element. Replaces pOldClass=0A=
* with pNewClass. If pOldClass does not exist, pNewClass=0A=
* is still added.=0A=
*=0A=
* Parameters:=0A=
* pRef string or object Reference to element that=0A=
* changes class=0A=
* pOldClass string Old class to replace=0A=
* pNewClass string New class to add=0A=
*=0A=
* Return:=0A=
* none=0A=
*------------------------------------------------------*/=0A=
=0A=
function changeClass(pRef, pOldClass, pNewClass) {=0A=
var obj =3D getObject(pRef);=0A=
=0A=
var newClassStr =3D pNewClass;=0A=
=0A=
if (obj.className) {=0A=
var classNames =3D obj.className.split(' ');=0A=
for (var i =3D 0; i < classNames.length; i++) {=0A=
if (classNames[i] !=3D pOldClass) {=0A=
newClassStr +=3D ' ' + classNames[i];=0A=
}=0A=
}=0A=
}=0A=
=0A=
obj.className =3D newClassStr;=0A=
}=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: popWin=0A=
*------------------------------------------------------*/=0A=
=0A=
function popWin(width,height,path) {=0A=
var features =3D "height=3D"+height+",width=3D"+width;=0A=
features =3D =
features+",menubar=3Dno,location=3Dno,scrollbars=3Dno,status=3Dno,titleba=
r=3Dno,toolbar=3Dno,resizeable=3Dyes";=0A=
var w =3D window.open(path,"popWin",features,false);=0A=
return false;=0A=
}=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* Utility Exceptions=0A=
*------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Exception: ObjectNotFoundException=0A=
* =0A=
* Description:=0A=
* Runtime exception. Indicates that an object reference=0A=
* was not found.=0A=
*=0A=
* Parameters:=0A=
* pRef string Erroneous reference to object=0A=
*------------------------------------------------------*/=0A=
=0A=
function ObjectNotFoundException(pRef) {=0A=
this.ref =3D pRef;=0A=
=0A=
this.toString =3D function() {=0A=
return "Object not found: " + pRef;=0A=
};=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Exception: InvalidObjectRefException=0A=
* =0A=
* Description:=0A=
* Runtime exception. Indicates an invalid reference=0A=
* to an object (not a string or object reference) was used.=0A=
*=0A=
* Parameters:=0A=
* pRef not string or object Erroneous reference to object=0A=
*------------------------------------------------------*/=0A=
=0A=
function InvalidObjectRefException(pRef) {=0A=
this.ref =3D pRef;=0A=
=0A=
this.toString =3D function() {=0A=
return "Invalid object reference: " + pRef;=0A=
};=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Application Specific Functions=0A=
*------------------------------------------------------*/=0A=
=0A=
var MYPAGES_ACTIVE =3D 'myPagesUnSaved';=0A=
var MYPAGES_DISABLED =3D 'myPagesSaved';=0A=
var MYPAGES_TOOLBAR_ACTIVE =3D 'toolbarMyPagesUnsaved';=0A=
var MYPAGES_TOOLBAR_DISABLED =3D 'toolbarMyPagesSaved';=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: addToMyPages=0A=
* =0A=
* Description:=0A=
* Utility function for adding to My Pages.=0A=
* =0A=
* Parameters:=0A=
* pObj string or object Reference to My Pages icon=0A=
* pId string Unique ID of page to add=0A=
* pLabel string The label to display in the My Pages=0A=
* panel=0A=
* pURL string The URL of the page to add=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function addToMyPages(pObj, pId, pLabel, pURL) {=0A=
var obj =3D getObject(pObj);=0A=
=0A=
// If the page is added successfully, switch to the saved (disabled)=0A=
// version of the My Pages icon=0A=
if (MyPages.prototype.addPage(pId, pLabel, pURL, true)) {=0A=
changeClass(obj, MYPAGES_ACTIVE, MYPAGES_DISABLED);=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: addToMyPagesToolbar=0A=
* =0A=
* Description:=0A=
* Toolbar version of utility function for adding to My Pages.=0A=
* =0A=
* Parameters:=0A=
* pObj string or object Reference to My Pages icon=0A=
* pId string Unique ID of page to add=0A=
* pLabel string The label to display in the My Pages=0A=
* panel=0A=
* pURL string The URL of the page to add=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function addToMyPagesToolbar(pObj, pId, pLabel, pURL) {=0A=
var obj =3D getObject(pObj);=0A=
=0A=
// If the page is added successfully, switch to the saved (disabled)=0A=
// version of the My Pages icon=0A=
if (MyPages.prototype.addPage(pId, pLabel, pURL, true)) {=0A=
var objs =3D document.getElementsByName("toolbarAddToMyPagesLink");=0A=
for(var i =3D 0; i < objs.length; i++){=0A=
changeClass(objs[i], MYPAGES_TOOLBAR_ACTIVE, =
MYPAGES_TOOLBAR_DISABLED);=0A=
}=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: showImage=0A=
* =0A=
* Description:=0A=
* Changes the src and alt for an image object.=0A=
* =0A=
* Parameters:=0A=
* pImg string or object Reference to the image object.=0A=
* pSrc string The new src for the image.=0A=
* pAlt string The new alt for the image.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function showImage(pImg, pSrc, pAlt) {=0A=
var imageObj =3D getObject(pImg);=0A=
imageObj.src =3D pSrc;=0A=
imageObj.alt =3D pAlt;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: toggleCommentsDisplay=0A=
* =0A=
* Description:=0A=
* Changes the display of ancillary article elements=0A=
* (comments and post a comment)=0A=
*=0A=
* Paramaters:=0A=
* pArea string or object Reference to area being toggled=0A=
*=0A=
* Return:=0A=
* none=0A=
*------------------------------------------------------*/=0A=
=0A=
function toggleCommentsDisplay(pArea) {=0A=
// Check current display=0A=
var display =3D getObject(pArea).style.display;=0A=
=0A=
// Not showing. Display it.=0A=
if (display =3D=3D 'none') {=0A=
getObject(pArea).style.display =3D 'block';=0A=
=0A=
// Toggle controls=0A=
getObject(pArea + 'LinkOn').style.display =3D 'none';=0A=
getObject(pArea + 'LinkOff').style.display =3D 'inline';=0A=
if ('post' =3D=3D pArea) {=0A=
getObject("forum_comment").focus();=0A=
}=0A=
=0A=
// Showing. Hide it.=0A=
} else {=0A=
getObject(pArea).style.display =3D 'none';=0A=
=0A=
// Toggle controls=0A=
getObject(pArea + 'LinkOff').style.display =3D 'none';=0A=
getObject(pArea + 'LinkOn').style.display =3D 'inline';=0A=
}=0A=
}=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: checkAllChecks=0A=
* =0A=
* Description:=0A=
* Manages checked status of a series of checkboxes=0A=
* including a "check all" control.=0A=
* =0A=
* Parameters:=0A=
* pRef string or object Reference to checkbox that changes.=0A=
* pAll string or object Reference to the "check all" checkbox.=0A=
* pChecks array Array of references to checkbox series.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function checkAllChecks(pRef, pAll, pChecks) {=0A=
var changed =3D getObject(pRef);=0A=
var all =3D getObject(pAll);=0A=
=0A=
// User changed the all checkbox=0A=
if (changed =3D=3D all) {=0A=
// Set all of the checkboxes accordingly=0A=
for (var i =3D 0; i < pChecks.length; i++) {=0A=
getObject(pChecks[i]).checked =3D changed.checked;=0A=
}=0A=
} else {=0A=
var allChecked =3D true;=0A=
// Check to see if all checks are checked=0A=
for (var i =3D 0; i < pChecks.length; i++) {=0A=
if (!getObject(pChecks[i]).checked) {=0A=
allChecked =3D false;=0A=
break;=0A=
}=0A=
}=0A=
// Only check the all checkbox if all checkboxes haved been checked=0A=
all.checked =3D allChecked;=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: charCounter=0A=
* =0A=
* Description:=0A=
* Counts the number of characters entered in input field=0A=
* and updates display of that number.=0A=
*=0A=
* pText contains the string to display the number.=0A=
* It should contain the string "{CHAR}" indicating=0A=
* where the character count should be displayed.=0A=
* =0A=
* Parameters:=0A=
* pInput string or object Reference to input field=0A=
* pOutput string or object Reference to output display=0A=
* pText string Message text for display=0A=
* pMax integer Maximum number of characters allowed=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function charCounter(pInput, pOutput, pText, pMax) {=0A=
var inputObj =3D getObject(pInput);=0A=
var outputObj =3D getObject(pOutput);=0A=
var length =3D inputObj.value.length;=0A=
=0A=
// Ensure we are not over the max=0A=
if (length >=3D pMax) {=0A=
length =3D pMax;=0A=
inputObj.value =3D inputObj.value.substr(0, pMax);=0A=
}=0A=
=0A=
// Display the character count=0A=
outputObj.innerHTML =3D pText.replace('{CHAR}', length);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: selProdCat=0A=
* =0A=
* Description:=0A=
* Step 1 of Review Finder pane process.=0A=
* Selects product category from dropdown, displays=0A=
* conditional dropdowns based on choice. This is only =0A=
* a simulation.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function selProdCat(bHide) {=0A=
// reveal conditional dropdowns and buttons=0A=
// these items would likely be determined with an AJAX=0A=
// call to the database. Potentially, the values=0A=
// of the dropdowns would also be determined via AJAX.=0A=
arrReveal =3D new Array('blockStep2', 'btnGetReviews');=0A=
for (var i =3D 0; i < arrReveal.length; i++) {=0A=
getObject(arrReveal[i]).style.display =3D 'block';=0A=
}=0A=
=0A=
// Reveal standard dropdowns.=0A=
// These get displayed regardless of choice.=0A=
arrRFElement =3D getObjectsByClassName('reviewFinderElement');=0A=
for (var i =3D 0; i < arrRFElement.length; i++) {=0A=
getObject(arrRFElement[i]).style.display =3D 'block';=0A=
}=0A=
=0A=
if(bHide){=0A=
// move the drawer closed to hide whole form=0A=
ReviewFinder.prototype.close();=0A=
}else{=0A=
// move the drawer open to reveal whole form=0A=
ReviewFinder.prototype.open();=0A=
}=0A=
}=0A=
=0A=
//review finder functions=0A=
function prodCatSelChange(typid, bHide, searchCriteria){=0A=
g_selectedProdCat =3D typid;=0A=
var url =3D '/product/rffilters.html' + (searchCriteria ? =
searchCriteria : '?id=3D'+typid);=0A=
var myAjax =3D new Ajax.Request(=0A=
url,=0A=
{method: 'GET', parameters: null, onComplete: (bHide ? =
hiddenProdCatResponse : prodCatResponse)}=0A=
);=0A=
}=0A=
function prodCatResponse(originalRequest) {=0A=
$('reviewFinder').innerHTML =3D originalRequest.responseText;=0A=
selProdCat();=0A=
$('id').value =3D g_selectedProdCat;=0A=
}=0A=
=0A=
function prodArtCatSelChange(catid, bHide){=0A=
g_selectedProdCat =3D catid;=0A=
var myAjax =3D new Ajax.Request(=0A=
'/product/rffilters.html?catid=3D'+catid,=0A=
{method: 'GET', parameters: null, onComplete: (bHide ? =
hiddenProdCatResponse : prodCatResponse)}=0A=
);=0A=
}=0A=
function hiddenProdCatResponse(originalRequest) {=0A=
$('reviewFinder').innerHTML =3D originalRequest.responseText;=0A=
selProdCat(true);=0A=
$('id').value =3D g_selectedProdCat;=0A=
}=0A=
=0A=
function rfCatSelect(typid) {=0A=
var myAjax =3D new Ajax.Request(=0A=
'/product/rffilters.html?id=3D'+typid+'&style=3Dsmb',=0A=
{method: 'GET', parameters: null, onComplete: rfCatDisplay}=0A=
);=0A=
}=0A=
function rfCatDisplay(req) {=0A=
var displayNode =3D $("rfFields");=0A=
displayNode.innerHTML =3D req.responseText;=0A=
displayNode.style.display =3D "block";=0A=
}=0A=
function rfCatClose() {=0A=
$("rfFields").style.display =3D "none";=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: chgToolbar=0A=
* =0A=
* Description:=0A=
* Changes the display of the toolbar.=0A=
* Calls getObjectsByClassName.=0A=
*=0A=
* Paramaters:=0A=
* pState Integer Which of 4 toolbar states to set=0A=
*=0A=
* Toolbar states are as follows:=0A=
* 1: default=0A=
* 2: enter find.pcworld.com code=0A=
* 3: sign in=0A=
* 4: signed in=0A=
* =0A=
* Return:=0A=
* none=0A=
*------------------------------------------------------*/=0A=
=0A=
function chgToolbar(pState) {=0A=
// turn display off for conditional elements=0A=
var els =3D getObjectsByClassName('conditional');=0A=
for (i =3D 0; i < els.length; i++) {=0A=
els[i].style.display =3D 'none';=0A=
}=0A=
=0A=
// selective turn on display of elements according to state=0A=
switch (pState) {=0A=
case '2':=0A=
$('hdCodeOn').style.display=3D'block';=0A=
$('hdSignin1').className=3D'hdToolbarCodeonFill conditional';=0A=
$('hdSignin1').style.display=3D'block';=0A=
$('hdRegister').style.display=3D'block';=0A=
break;=0A=
case '3':=0A=
$('hdCodeOff').style.display=3D'block';=0A=
$('hdSignin1').className=3D'hdToolbarCodeoffFill conditional';=0A=
$('hdSignin1').style.display=3D'block';=0A=
$('hdRegister').style.display=3D'block';=0A=
break;=0A=
case '4':=0A=
$('hdCodeOff').style.display=3D'block';=0A=
$('hdSignin1').className=3D'hdToolbarCodeoffFill conditional';=0A=
$('hdSignin1').style.display=3D'block';=0A=
$('hdSignout').style.display=3D'block';=0A=
break;=0A=
case '1':=0A=
default:=0A=
$('hdCodeOff').style.display=3D'block';=0A=
$('hdSignin1').className=3D'hdToolbarCodeoffFill conditional';=0A=
$('hdSignin1').style.display=3D'block';=0A=
$('hdRegister').style.display=3D'block';=0A=
break;=0A=
}=0A=
return false;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Feature Viewer=0A=
*------------------------------------------------------*/=0A=
=0A=
var hasFeature =3D false;=0A=
=0A=
function showTimers() {=0A=
var strOut =3D "";=0A=
var lastTime =3D aFlashCounters[0].split(":")[0];=0A=
=0A=
for (var i=3D0;i_=3D=0A=
*=0A=
* where=0A=
* # is the order number of the feature (starting at 0)=0A=
* name is the name of the content (e.g. head, deck, etc)=0A=
* content is the value of the content=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* string All feature content in url delimited format=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getFeatures() {=0A=
//aFlashCounters.push("getFeatures():" + new Date().valueOf());=0A=
var featureCount =3D getFeatureCount();=0A=
var returnStr =3D '';=0A=
var delim =3D '';=0A=
=0A=
for (var i =3D 0; i < featureCount; i++) {=0A=
for (var name in FEATURE_NAMES) {=0A=
returnStr +=3D delim + i + '_' + name + '=3D' + =
encodeSpecial(getFeatureContent(i, name));=0A=
delim =3D '&';=0A=
}=0A=
}=0A=
=0A=
setFlashVariables(FEATURE_VIEWER_MOVIE, returnStr);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: encodeSpecial=0A=
* =0A=
* Description:=0A=
* Encodes characters that might obscure a string in URL=0A=
* delimited format (i.e. name1=3Dvalue1&name2=3Dvalue2). Uses=0A=
* a proprietary encoding format to allow for further=0A=
* encoding with escape().=0A=
*=0A=
* Parameters:=0A=
* pStr string The string to encode=0A=
* =0A=
* Return:=0A=
* string The encoded string=0A=
*-------------------------------------------------------*/=0A=
=0A=
function encodeSpecial(pStr) {=0A=
//aFlashCounters.push("encodeSpecial():" + new Date().valueOf());=0A=
var returnStr =3D pStr;=0A=
returnStr =3D returnStr.split('&').join('zzzampzzz');=0A=
returnStr =3D returnStr.split('=3D').join('zzzequzzz');=0A=
returnStr =3D returnStr.split('%').join('zzzperzzz');=0A=
=0A=
return returnStr;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: getFlashMovieObject=0A=
* =0A=
* Description:=0A=
* Retrieves a handle to the Flash movie identified by=0A=
* pMovieId.=0A=
*=0A=
* Parameters:=0A=
* pMovieId string The ID of the Flash movie=0A=
* =0A=
* Return:=0A=
* object Reference to the Flash movie=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getFlashMovieObject(pMovieId) {=0A=
//aFlashCounters.push("getFlashMovieObject():" + new Date().valueOf());=0A=
if (window.document[pMovieId]) {=0A=
return window.document[pMovieId];=0A=
}=0A=
=0A=
if (navigator.appName.indexOf('Microsoft Internet') =3D=3D -1) {=0A=
if (document.embeds && document.embeds[pMovieId]) {=0A=
return document.embeds[pMovieId];=0A=
}=0A=
}=0A=
=0A=
return getObject(pMovieId);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: setFlashVariables=0A=
* =0A=
* Description:=0A=
* Sends information to a Flash movie in string format.=0A=
*=0A=
* Information should be provided in url format:=0A=
* var1=3Dfoo&var2=3Dbar=0A=
*=0A=
* Parameters:=0A=
* pMovieId string The ID of the Flash movie=0A=
* pFlashInfo string The information to send to the Flash=0A=
* movie.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function setFlashVariables(pMovieId, pFlashInfo){=0A=
//aFlashCounters.push("setFlashVariables():" + new Date().valueOf());=0A=
=0A=
if (isPCIE || hasFlash8 =3D=3D true) {=0A=
var movie =3D getFlashMovieObject(pMovieId);=0A=
movie.SetVariable(IE_VAR, escape(pFlashInfo));=0A=
} else {=0A=
// Otherwise, we need to use gateway.swf to handle our javascript to =
Flash communication.=0A=
=0A=
var divId =3D 'flash_setvariables_' + pMovieId;=0A=
var divElement =3D document.getElementById(divId);=0A=
=0A=
// Embed gateway.swf if it's not already there.=0A=
if (!divElement) {=0A=
divElement =3D createElement('div', {});=0A=
divElement.id =3D divId;=0A=
document.body.appendChild(divElement);=0A=
}=0A=
=0A=
divElement.innerHTML =3D '';=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Function: WriteFeatureViewer=0A=
* =0A=
* Description:=0A=
* Writes feature viewer object to page=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
function WriteFeatureViewer() {=0A=
//aFlashCounters.push("WriteFeatureViewer():" + new Date().valueOf());=0A=
if (hasFeature) {=0A=
var strOut =3D "";=0A=
=0A=
strOut =3D strOut + '';=0A=
=0A=
$("FeatureViewer").innerHTML =3D strOut;=0A=
}=0A=
return false;=0A=
}=0A=
=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* Miscellaneous Functions=0A=
*------------------------------------------------------*/=0A=
=0A=
/* SEARCH */=0A=
function search_onsubmit(){=0A=
preSearchSubmit();=0A=
return true;=0A=
}=0A=
=0A=
function submitSearch(frm){=0A=
preSearchSubmit(frm);=0A=
frm.submit();=0A=
}=0A=
=0A=
function preSearchSubmit(frm){=0A=
if(frm.sw && frm.sw.checked=3D=3Dfalse) frm.old_qt.value=3D"";=0A=
}=0A=
=0A=
/* COOKIES */=0A=
function pcw_setCookie(name, value, expires, domain){=0A=
if(navigator.cookieEnabled){=0A=
document.cookie =3D =
name+"=3D"+escape(value)+";expires=3D"+expires.toGMTString()+";domain=3D"=
+domain+";path=3D/";=0A=
}=0A=
}=0A=
=0A=
function pcw_readCookie(name){=0A=
if(navigator.cookieEnabled&&document.cookie!=3D''){=0A=
var strAll =3D document.cookie;=0A=
var i1 =3D strAll.indexOf(name);=0A=
if(i1!=3D-1){=0A=
// skip name and '=3D'=0A=
i1 =3D i1+name.length+1;=0A=
i2 =3D strAll.indexOf(';', i1);=0A=
if(i2=3D=3D-1) i2 =3D strAll.length;=0A=
return unescape(strAll.substring(i1, i2));=0A=
}=0A=
}=0A=
return "";=0A=
}=0A=
=0A=
function pcw_removeCookie(name, domain){=0A=
if(navigator.cookieEnabled){=0A=
var d =3D new Date();=0A=
d.setDate(d.getDate()-30);=0A=
=
document.cookie=3Dname+"=3D;expires=3D"+d.toGMTString()+";domain=3D"+doma=
in+";path=3D/";=0A=
}=0A=
}=0A=
=0A=
/* SAVED PAGES */=0A=
=0A=
/*=0A=
returns an array of saved pages read from cookie=0A=
*/=0A=
function getSavedPages(){=0A=
=0A=
var rv =3D new Array();=0A=
cookie =3D pcw_readCookie("savedPages");=0A=
if(cookie!=3D""){=0A=
var pages =3D cookie.split("\n");=0A=
for(var i =3D 0; i < pages.length; i++){=0A=
var page =3D pages[i].split("\t");=0A=
rv.push({id:page[0], title: page[1], url: page[2]});=0A=
}=0A=
}=0A=
return rv;=0A=
}=0A=
=0A=
/* DART ADS */=0A=
function pcw_AdInit () {=0A=
//set global defaults=0A=
pcw_ad_site =3D "pcw_general";=0A=
pcw_ad_zone =3D "";=0A=
pcw_ad_pos =3D "";=0A=
pcw_ad_sec =3D "";=0A=
pcw_ad_aid =3D "";=0A=
pcw_ad_channels =3D "";=0A=
pcw_ad_pcat =3D "";=0A=
pcw_ad_cats =3D "";=0A=
pcw_ad_sz =3D "";=0A=
pcw_ad_tile =3D "";=0A=
pcw_ad_tags =3D "";=0A=
pcw_ad_ord =3D "";=0A=
pcw_ad_custom =3D "";=0A=
pcw_ad_width =3D "";=0A=
pcw_ad_height =3D "";=0A=
ad_debug =3D false;=0A=
=0A=
pcw_ad_ord =3D pcw_GetOrd(8);=0A=
=0A=
}=0A=
=0A=
//generates random number of length integers=0A=
function pcw_GetOrd (length) {=0A=
var ord =3D "";=0A=
for(var o=3D0;o';=0A=
ad =3D ad + pcw_AdDartUrl(adtype);=0A=
ad =3D ad + '';=0A=
} else {=0A=
switch (adtype) {=0A=
case "script":=0A=
ad =3D '';=0A=
ad =3D ad + '';=0A=
break;=0A=
case "iframe":=0A=
ad =3D '';=0A=
break;=0A=
}=0A=
}=0A=
=0A=
return ad;=0A=
=0A=
}=0A=
=0A=
/*=0A=
unit: specifies named unit (banner|tower|showcase|halfpage|button)=0A=
type: specifies type of tag (iframe|js)=0A=
*/=0A=
=0A=
function pcw_AdDartUrl(type) {=0A=
=0A=
//override for 2nd showcase or leader=0A=
var myadsite =3D pcw_ad_site;=0A=
if (pcw_ad_pos.substring(pcw_ad_pos.length-1) =3D=3D "2") {=0A=
myadsite +=3D "2";=0A=
}=0A=
=0A=
//what kind uf url to build?=0A=
switch (type) {=0A=
case "iframe":=0A=
type=3D"adi";=0A=
break;=0A=
case "click":=0A=
type=3D"jump";=0A=
break;=0A=
case "image":=0A=
type=3D"ad";=0A=
break;=0A=
case "script":=0A=
type=3D"adj";=0A=
break;=0A=
}=0A=
=0A=
//base url=0A=
url =3D =
'http://ad.doubleclick.net/'+type+'/'+myadsite+'/'+pcw_ad_zone+";";=0A=
=0A=
//custom attributes=0A=
url +=3D pcw_ad_custom=0A=
=0A=
//content attributes=0A=
url +=3D pcw_AdKey("sec",pcw_ad_sec) + pcw_AdCats(pcw_ad_cats) + =
pcw_AdKey("aid",pcw_ad_aid);=0A=
=0A=
if (pcw_ad_channels !=3D "") {=0A=
url +=3D pcw_AdKeys("ch",pcw_ad_channels.split(","));=0A=
}=0A=
=0A=
//size attributes=0A=
url +=3D pcw_AdKey("pos",pcw_ad_pos) + pcw_AdKey("tile",pcw_ad_tile) + =
pcw_AdKey("sz",pcw_ad_sz);=0A=
=0A=
//cache breaker =0A=
url +=3D pcw_AdKey("ord",pcw_ad_ord);=0A=
=0A=
return url;=0A=
=0A=
}=0A=
=0A=
/*=0A=
constructs the key tags in their proper form=0A=
*/=0A=
=0A=
function pcw_AdKey (key, val) {=0A=
var strOut =3D "";=0A=
if (ad_debug) {strOut +=3D " "}=0A=
if (val) {=0A=
strOut+=3Dkey+"=3D"+val+";";=0A=
}=0A=
=0A=
return strOut;=0A=
}=0A=
=0A=
/*=0A=
wrapper for handling arrays of key pairs with same name=0A=
*/=0A=
function pcw_AdKeys (key, aVal) {=0A=
var strOut =3D "";=0A=
for (var i=3D0;i -1) {nv =3D false;}=0A=
=0A=
if (hbx.mlc.indexOf("downloads") > -1 && nv =3D=3D true) =
{sgs.push(sg.dlBrowsers);}=0A=
if (hbx.mlc.indexOf("news") > -1 && nv =3D=3D true) =
{sgs.push(sg.newsUsers);}=0A=
if (hbx.mlc.indexOf("review") > -1 && nv =3D=3D true) =
{sgs.push(sg.reviewsUsers);}=0A=
if (hbx.mlc.indexOf("blog") > -1 && nv =3D=3D true) =
{sgs.push(sg.blogUsers);}=0A=
if (hbx.mlc.indexOf("idgns") > -1 && nv =3D=3D true) =
{sgs.push(sg.idgnsUsers);}=0A=
if (hbx.mlc.indexOf("duo") > -1 && nv =3D=3D true) =
{sgs.push(sg.ddUsers);}=0A=
if (hbx.mlc.indexOf("guide") > -1 && nv =3D=3D true) =
{sgs.push(sg.bgUsers);}=0A=
if (hbx.mlc.indexOf("/ic/") > -1 && nv =3D=3D true) =
{sgs.push(sg.icUsers);}=0A=
if (hbx.mlc.indexOf("forum") > -1 && nv =3D=3D true) =
{sgs.push(sg.forumUsers);}=0A=
if (hbx.mlc.indexOf("prices") > -1 && nv =3D=3D true) =
{sgs.push(sg.pgUsers);}=0A=
=0A=
//members=0A=
if (pcw_readCookie('userEmail') !=3D '') {sgs.push(sg.members);}=0A=
=0A=
//tk vals=0A=
var tk =3D getQsVal("tk");=0A=
if (tk !=3D "") {=0A=
hbx.hc1 =3D tk+hcDim;=0A=
if (tk.indexOf("nl_") > -1) {sgs.push(sg.nlSubscribers);}=0A=
if (tk.indexOf("pcw_") > -1) {sgs.push(sg.sem);}=0A=
if (tk.indexOf("rss_") > -1) {sgs.push(sg.rssUsers);}=0A=
}=0A=
=0A=
//set appropriate hbx vals=0A=
hbx.seg =3D sgs.join(",");=0A=
=0A=
}=0A=
=0A=
function getQsVal (name) {=0A=
if (window.location.search !=3D "") {=0A=
var qs =3D window.location.search.substring(1);=0A=
var pairs =3D qs.split("&");=0A=
for (var i=3D0;i=3D this.duration) {=0A=
this.finishAction();=0A=
this.stop();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: updateAction=0A=
* =0A=
* Description:=0A=
* The action to take with each heartbeat. It is expected=0A=
* that each object will override this method.=0A=
*=0A=
* Parameters:=0A=
* pCounter integer The current value of the counter=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
updateAction: function(pCounter) {}, // We expect this to be overriden=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: finishAction=0A=
* =0A=
* Description:=0A=
* The action to take following the last heartbeat. It is=0A=
* expected that each object will override this method.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
finishAction: function() {}, // We expect this to be overriden=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: stop=0A=
* =0A=
* Description:=0A=
* Stops the object from observing the Timer. Removes the=0A=
* object from the Timer's list of observers and resets=0A=
* the counter to 0.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
stop: function() {=0A=
this.timer.removeObserver(this);=0A=
this.counter =3D 0;=0A=
}=0A=
}=0A=
/*--------------------------------------------------------=0A=
* END TimeObserver class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Object: Move=0A=
* =0A=
* Description:=0A=
* Utility object. Provides methods for movement.=0A=
*=0A=
* Adapted from Robert Penner's easing formulas.=0A=
*=0A=
* Methods:=0A=
* - easeOutCubic: Formula for cubic ease out.=0A=
* - easeInOutCubic: Formula for cubic ease in and out.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var Move =3D {=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: easeOutCubic=0A=
* =0A=
* Description:=0A=
* Formula for cubic ease out (slows down). Returns a position=0A=
* given a particular start position, distance to travel and=0A=
* duration for travel.=0A=
*=0A=
* Parameters:=0A=
* pTime integer The current time count=0A=
* pStart integer The start position=0A=
* pDistance integer The total distance to travel=0A=
* pDuration integer The total time count to complete=0A=
* movement=0A=
* =0A=
* Return:=0A=
* integer The current position at the current time count=0A=
*-------------------------------------------------------*/=0A=
=0A=
easeOutCubic: function(pTime, pStart, pDistance, pDuration) {=0A=
return pStart + pDistance*((pTime =3D pTime/pDuration - 1)*pTime*pTime =
+ 1);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: easeInOutCubic=0A=
* =0A=
* Description:=0A=
* Formula for cubic ease in and out (speeds up and slows down).=0A=
* Returns a position given a particular start position,=0A=
* distance to travel and duration for travel.=0A=
*=0A=
* Parameters:=0A=
* pTime integer The current time count=0A=
* pStart integer The start position=0A=
* pDistance integer The total distance to travel=0A=
* pDuration integer The total time count to complete=0A=
* movement=0A=
* =0A=
* Return:=0A=
* integer The current position at the current time count=0A=
*-------------------------------------------------------*/=0A=
=0A=
easeInOutCubic: function(pTime, pStart, pDistance, pDuration) {=0A=
if ((pTime*=3D2/pDuration) < 1) {=0A=
return pStart + pDistance/2*(pTime * pTime * pTime);=0A=
} else {=0A=
return pStart + pDistance/2*((pTime -=3D 2) * pTime * pTime + 2);=0A=
}=0A=
}=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Generic UI Control Classes=0A=
*------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: Drawer=0A=
* =0A=
* Description:=0A=
* Establishes a scrolling drawer element. The Drawer element=0A=
* takes up space when opened and pushes other elements down on=0A=
* the page.=0A=
*=0A=
* Requires a div with class drawerContainer containing a div=0A=
* with class drawer.=0A=
*=0A=
* Extends DOMDecorator and TimeObserver classes.=0A=
*=0A=
* ObjectNotFoundException runtime exception is thrown if=0A=
* a proper DOM element is not provided to the constructor or=0A=
* if the Drawer child div is not found.=0A=
* InvalidObjectRefException is thrown if an invalid object=0A=
* reference is provided to the constructor.=0A=
*=0A=
* Properties:=0A=
* - obj: Reference to DOM element representing the=0A=
* Drawer container=0A=
* - id: Unique ID of the Drawer for TimeObserver purposes=0A=
* - drawer: Reference to the child Drawer object=0A=
* - start: Start position for Drawer movement=0A=
* - distance: Distance to travel for Drawer movement=0A=
* - duration: Duration for opening or closing Drawer=0A=
* - isOpen: True if the Drawer is open=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Sets references to the Drawer container=0A=
* DOM element and its child Drawer. Initializes the start,=0A=
* distance and duration properties for Drawer movement.=0A=
* - open: Opens the Drawer.=0A=
* - close: Closes the Drawer.=0A=
* - toggle: Toggles the Drawer between opened and closed.=0A=
* - updateAction: Overrides TimeObserver's updateAction method.=0A=
* Initiates movement for closing or opening the Drawer.=0A=
* - move: Calculates the movement of the Drawer using a=0A=
* cubic ease out formula.=0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Left uncaught if a valid DOM=0A=
* object is not provided to the constructor or if the=0A=
* child Drawer element is not found.=0A=
* - InvalidObjectRefException: Left uncaught if an invalid=0A=
* object reference is provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var Drawer =3D Class.create();=0A=
Drawer.prototype.extend(DOMDecorator.prototype).extend(TimeObserver.proto=
type).extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Sets references to the Drawer container=0A=
* DOM element and its child Drawer. Initializes the start,=0A=
* distance and duration properties for Drawer movement.=0A=
*=0A=
* Parameters:=0A=
* pObj string or object Reference to the Drawer=0A=
* container=0A=
* pDuration integer Optional duration for Drawer=0A=
* movement. Overrides the default=0A=
* of TimeObserver.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function(pObj, pDuration) {=0A=
DOMDecorator.prototype.initialize.apply(this, arguments);=0A=
TimeObserver.prototype.initialize.apply(this, arguments);=0A=
=0A=
this.drawer =3D this.getChildrenByClassName('drawer')[0];=0A=
if (!this.drawer) {=0A=
throw new ObjectNotFoundException('drawer in ' + pObj);=0A=
}=0A=
this.id =3D this.obj.id;=0A=
=0A=
// set times=0A=
if (pDuration) {=0A=
this.duration =3D pDuration;=0A=
}=0A=
=0A=
// track open/close state=0A=
this.isOpen =3D false;=0A=
=0A=
this.obj.style.height =3D '0px';=0A=
=0A=
// set default distances=0A=
this.start =3D 0; // coord of beginning location=0A=
this.distance =3D this.drawer.clientHeight; // total distance =
tweened=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: open=0A=
* =0A=
* Description:=0A=
* Opens the Drawer. Uses Timer to coordinate movement.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
open: function() {=0A=
/* If we're already moving, reset it so we can change direction */=0A=
this.stop();=0A=
=0A=
/* Start the movement */=0A=
this.start =3D 0; // coord of beginning location=0A=
this.distance =3D this.drawer.clientHeight; // total distance =
tweened=0A=
=0A=
this.registerObserver(); // Subscribe to the timer so we can =
move in sync with the other objects=0A=
this.isOpen =3D true;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: close=0A=
* =0A=
* Description:=0A=
* Closes the Drawer. Uses the Timer to coordinate movement.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
close: function() {=0A=
/* If we're already moving, reset it so we can change direction */=0A=
this.stop();=0A=
=0A=
var paneDimension =3D this.drawer.clientHeight;=0A=
=0A=
/* Start the movement */=0A=
this.start =3D paneDimension; // coord of beginning location=0A=
this.distance =3D -paneDimension; // total distance tweened=0A=
=0A=
this.registerObserver(); // Subscribe to the timer so we can move in =
sync with the other objects=0A=
this.isOpen =3D false;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: toggle=0A=
* =0A=
* Description:=0A=
* Toggles the Drawer between opened and closed.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
toggle: function() {=0A=
if (this.isOpen) {=0A=
this.close();=0A=
} else {=0A=
this.open();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: updateAction=0A=
* =0A=
* Description:=0A=
* Overrides TimeObserver's updateAction method.=0A=
* Initiates movement for closing or opening the Drawer.=0A=
*=0A=
* Parameters:=0A=
* pCounter integer The current value of the counter=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
updateAction: function(pCounter) { // Override the =
TimeObserver.updateAction=0A=
this.move(pCounter);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: move=0A=
* =0A=
* Description:=0A=
* Calculates the movement of the Drawer using a cubic =0A=
* ease out formula.=0A=
*=0A=
* Parameters:=0A=
* pCounter integer The current value of the counter=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
move: function(pCounter) {=0A=
this.obj.style.height =3D Move.easeOutCubic(pCounter, this.start, =
this.distance, this.duration) + 'px';=0A=
}=0A=
=0A=
});=0A=
/*--------------------------------------------------------=0A=
* END Drawer class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: WindowShade=0A=
* =0A=
* Description:=0A=
* Establishes a scrolling WindowShade element. The=0A=
* WindowShade element does not take up space when opened.=0A=
* Instead, it displays over other elements on the page.=0A=
*=0A=
* Requires a div with class windowShadeContainer containing a div=0A=
* with class windowShade.=0A=
*=0A=
* Extends DOMDecorator and TimeObserver classes.=0A=
*=0A=
* ObjectNotFoundException runtime exception is thrown if=0A=
* a proper DOM element is not provided to the constructor or=0A=
* if the WindowShade child div is not found.=0A=
* InvalidObjectRefException is thrown if an invalid object=0A=
* reference is provided to the constructor.=0A=
*=0A=
* Properties:=0A=
* - obj: Reference to DOM element representing the=0A=
* WindowShade container=0A=
* - id: Unique ID of the WindowShade for TimeObserver purposes=0A=
* - windowShade: Reference to the child WindowShade object=0A=
* - start: Start position for WindowShade movement=0A=
* - distance: Distance to travel for WindowShade movement=0A=
* - duration: Duration for opening or closing WindowShade=0A=
* - isOpen: True if the WindowShade is open=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Sets references to the WindowShade=0A=
* container DOM element and its child WindowShade.=0A=
* Initializes the start, distance and duration properties=0A=
* for WindowShade movement.=0A=
* - open: Opens the WindowShade.=0A=
* - close: Closes the WindowShade.=0A=
* - toggle: Toggles the WindowShade between opened and closed.=0A=
* - updateAction: Overrides TimeObserver's updateAction method.=0A=
* Initiates movement for closing or opening the WindowShade.=0A=
* - finishAction: Overrides TimeObserver's finishAction method.=0A=
* Hides the WindowShade when closed.=0A=
* - move: Calculates the movement of the WindowShade using a=0A=
* cubic ease out formula.=0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Left uncaught if a valid DOM=0A=
* object is not provided to the constructor or if the=0A=
* child WindowShade element is not found.=0A=
* - InvalidObjectRefException: Left uncaught if an invalid=0A=
* object reference is provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var WindowShade =3D Class.create();=0A=
WindowShade.prototype.extend(DOMDecorator.prototype).extend(TimeObserver.=
prototype).extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Sets references to the WindowShade container=0A=
* DOM element and its child WindowShade. Initializes the start,=0A=
* distance and duration properties for WindowShade movement.=0A=
*=0A=
* Parameters:=0A=
* pObj string or object Reference to the WindowShade=0A=
* container.=0A=
* pDuration integer Optional duration for WindowShade=0A=
* movement. Overrides the default=0A=
* of TimeObserver.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function(pObj, pDuration) {=0A=
DOMDecorator.prototype.initialize.apply(this, arguments);=0A=
TimeObserver.prototype.initialize.apply(this, arguments);=0A=
=0A=
this.windowShade =3D this.getChildrenByClassName('windowShade')[0];=0A=
if (!this.windowShade) {=0A=
throw new ObjectNotFoundException('windowShade in ' + pObj);=0A=
}=0A=
=0A=
this.id =3D this.obj.id;=0A=
=0A=
if (pDuration) {=0A=
this.duration =3D pDuration;=0A=
}=0A=
=0A=
this.isOpen =3D false;=0A=
=0A=
var windowShadeHeight =3D this.windowShade.clientHeight;=0A=
=0A=
this.windowShade.style.top =3D -windowShadeHeight + 'px';=0A=
this.windowShade.style.visibility =3D 'hidden';=0A=
this.obj.style.height =3D '0px';=0A=
=0A=
this.start =3D -windowShadeHeight;=0A=
this.distance =3D windowShadeHeight;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: open=0A=
* =0A=
* Description:=0A=
* Opens the WindowShade. Uses Timer to coordinate movement.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
open: function() {=0A=
/* If we're already moving, reset it so we can change direction */=0A=
this.stop();=0A=
=0A=
var windowShadeHeight =3D this.windowShade.clientHeight;=0A=
this.windowShade.style.top =3D -windowShadeHeight + 'px';=0A=
this.windowShade.style.visibility =3D 'visible';=0A=
this.obj.style.height =3D 'auto';=0A=
=0A=
this.start =3D -windowShadeHeight;=0A=
this.distance =3D windowShadeHeight;=0A=
=0A=
this.registerObserver();=0A=
this.isOpen =3D true;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: close=0A=
* =0A=
* Description:=0A=
* Closes the WindowShade. Uses the Timer to coordinate movement.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
close: function() {=0A=
/* If we're already moving, reset it so we can change direction */=0A=
this.stop();=0A=
=0A=
this.start =3D 0;=0A=
this.distance =3D -this.windowShade.clientHeight;=0A=
=0A=
this.registerObserver();=0A=
this.isOpen =3D false;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: toggle=0A=
* =0A=
* Description:=0A=
* Toggles the WindowShade between opened and closed.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
toggle: function() {=0A=
if (this.isOpen) {=0A=
this.close();=0A=
} else {=0A=
this.open();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: updateAction=0A=
* =0A=
* Description:=0A=
* Overrides TimeObserver's updateAction method.=0A=
* Initiates movement for closing or opening the WindowShade.=0A=
*=0A=
* Parameters:=0A=
* pCounter integer The current value of the counter=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
updateAction: function(pCounter) { // Override the =
TimeObserver.updateAction=0A=
this.move(pCounter);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: finishAction=0A=
* =0A=
* Description:=0A=
* Overrides TimeObserver's finishAction method.=0A=
* Hides the WindowShade after closing.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
finishAction: function() {=0A=
if (!this.isOpen) {=0A=
this.windowShade.style.visibility =3D 'hidden';=0A=
this.obj.style.height =3D '0px';=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: move=0A=
* =0A=
* Description:=0A=
* Calculates the movement of the WindowShade using a cubic =0A=
* ease out formula.=0A=
*=0A=
* Parameters:=0A=
* pCounter integer The current value of the counter=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
move: function(pCounter) {=0A=
this.windowShade.style.top =3D Move.easeOutCubic(pCounter, this.start, =
this.distance, this.duration) + 'px';=0A=
}=0A=
=0A=
});=0A=
/*--------------------------------------------------------=0A=
* END WindowShade class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: AlertMessage=0A=
* =0A=
* Description:=0A=
* Provides a message alert mechanism. Displays text=0A=
* in a styled DOM element.=0A=
*=0A=
* Inherits from OpacityControl and TimeObserver classes.=0A=
*=0A=
* ObjectNotFoundException runtime exception is thrown if=0A=
* a proper DOM element is not provided to the constructor=0A=
* or the message text area is not found within the element=0A=
* structure.=0A=
* InvalidObjectRefException is thrown if an invalid object=0A=
* reference is provided to the constructor.=0A=
*=0A=
* Properties:=0A=
* - obj: Reference to DOM element representing the=0A=
* AlertMessage=0A=
* - id: Unique ID of the AlertMessage for TimeObserver purposes=0A=
* - textArea: Reference to the DOM element for displaying the=0A=
* message=0A=
* - start: Start position for the fade effect=0A=
* - distance: Distance to travel for the fade effect=0A=
* - duration: Duration for the fade effect=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Sets references to the AlertMessage=0A=
* DOM element and its text area=0A=
* - display: Displays the AlertMessage=0A=
* - updateAction: Overrides TimeObserver method to execute fade=0A=
* - finishAction: Hides AlertMessage at end of fade=0A=
* - fade: Executes fade effect=0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Left uncaught if a valid DOM=0A=
* object is not provided to the constructor or if text=0A=
* area for displaying message is not found=0A=
* - InvalidObjectRefException: Left uncaught if an invalid=0A=
* object reference is provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var AlertMessage =3D Class.create();=0A=
AlertMessage.prototype.extend(OpacityControl.prototype).extend(TimeObserv=
er.prototype).extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Calls super constructor of OpacityControl=0A=
* and TimeObserver. Establishes reference to alertText=0A=
* DOM element. Throws ObjectNotFoundException=0A=
* if proper DOM structure is not found in page.=0A=
*=0A=
* Parameters:=0A=
* pObj string or object Reference to DOM element representing=0A=
* AlertMessage=0A=
* pDuration integer The count or duration for the fade=0A=
* effect.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function(pObj, pDuration) {=0A=
OpacityControl.prototype.initialize.apply(this, arguments);=0A=
TimeObserver.prototype.initialize.apply(this, arguments);=0A=
=0A=
// Establish unique ID for TimeObserver behavior=0A=
this.id =3D this.obj.id;=0A=
=0A=
// Retrieve the text display area for the message=0A=
this.textArea =3D this.getDescendantsByClassName('alertText')[0];=0A=
if (!this.textArea) {=0A=
throw new ObjectNotFoundException('alertText in ' + pObj);=0A=
}=0A=
=0A=
// Make sure the AlertMessage is hidden=0A=
this.setOpacity(0);=0A=
this.obj.style.display =3D 'none';=0A=
=0A=
// We only go to 99.99 opacity because 100 causes an odd "flash" effect=0A=
this.start =3D 99.99;=0A=
this.distance =3D -99.99;=0A=
=0A=
// Set the duration if provided. Otherwise take the default=0A=
// established by TimeObserver=0A=
if (pDuration) {=0A=
this.duration =3D pDuration;=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: display=0A=
* =0A=
* Description:=0A=
* Initiates display of the AlertMessage. AlertMessage=0A=
* fades from displayed to hidden.=0A=
* =0A=
* Parameters:=0A=
* pMsg string The message to display in the AlertMessage=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
display: function(pMsg) {=0A=
/* If we're already fading, reset it so we can redisplay */=0A=
this.stop();=0A=
=0A=
// Set the message=0A=
this.textArea.innerHTML =3D pMsg;=0A=
=0A=
// Display the message=0A=
this.obj.style.display =3D 'block';=0A=
=0A=
// Calculate the message position on the page.=0A=
// Centered vertically=0A=
this.obj.style.top =3D Math.floor((getWindowHeight() - =
this.obj.clientHeight)/2 + getScrollY()) + 'px';=0A=
=0A=
// Over the left nav=0A=
this.obj.style.left =3D '22px'; // bug ID 411 - adjusted left =
position to center over left nav=0A=
=0A=
// Start the fade out=0A=
this.registerObserver();=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: updateAction=0A=
* =0A=
* Description:=0A=
* Overrides updateAction of TimeObserver. Executes fade.=0A=
* =0A=
* Parameters:=0A=
* pCounter integer Counter for the update=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
updateAction: function(pCounter) {=0A=
this.fade(pCounter);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: finishAction=0A=
* =0A=
* Description:=0A=
* Overrides finishAction of TimeObserver. Used to perform=0A=
* cleanup activities after the AlertMessage completes its=0A=
* fade.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
finishAction: function() {=0A=
// Hide the AlertMessage=0A=
this.obj.style.display =3D 'none';=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: fade=0A=
* =0A=
* Description:=0A=
* Fades out the AlertMessage using an easeInOut formula=0A=
* =0A=
* Parameters:=0A=
* pCounter integer Counter for the fade steps=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
fade: function(pCounter) {=0A=
this.setOpacity(Move.easeInOutCubic(pCounter, this.start, =
this.distance, this.duration));=0A=
}=0A=
});=0A=
/*--------------------------------------------------------=0A=
* END AlertMessage class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: ListControl=0A=
* =0A=
* Description:=0A=
* Manages a list of "items". Manages items both as an=0A=
* array and as a physical set of DOM elements appended=0A=
* within a container.=0A=
*=0A=
* Inherits from DOMDecorator class.=0A=
*=0A=
* ObjectNotFoundException runtime exception is thrown if=0A=
* a proper DOM element is not provided to the constructor.=0A=
*=0A=
* Properties:=0A=
* - obj: Reference to DOM element representing the=0A=
* ListControl=0A=
* - listItems: array for tracking the items=0A=
* - count: integer count of the number of items=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Establishes an empty ListControl=0A=
* - addItem: Adds an item to the ListControl=0A=
* - removeItem: Removes an item by ID=0A=
* - removeAll: Removes all items=0A=
* - hasItem: Checks to see if an item is already being=0A=
* managed by ID=0A=
* - getCount: Returns the count of items in the ListControl=0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Left uncaught if a valid DOM=0A=
* object is not provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var ListControl =3D Class.create();=0A=
ListControl.prototype.extend(DOMDecorator.prototype).extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Calls super constructor of DOMDecorator.=0A=
* Creates an empty list and sets count to 0=0A=
* =0A=
* Parameters:=0A=
* pObj string or object Reference to DOM element representing list=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function(pObj) {=0A=
DOMDecorator.prototype.initialize.apply(this,arguments);=0A=
this.listItems =3D new Array;=0A=
this.count =3D 0;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: addItem=0A=
* =0A=
* Description:=0A=
* Adds an item to the ListControl. Will not add an item=0A=
* if it already exists. Tracks the item in listItems=0A=
* array and updates the count.=0A=
* =0A=
* Parameters:=0A=
* pId string Unique ID of the item=0A=
* pNode obj Any DOM element to include inside the=0A=
* item=0A=
* pAttributes hash A hash of attributes to set for the item=0A=
* pItem obj The item. Can be any object or data structure=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
addItem: function(pId, pNode, pAttributes, pItem) {=0A=
// Check if we already have the item by ID=0A=
if (!this.listItems[pId]) {=0A=
// Add the item and track our count=0A=
this.listItems[pId] =3D pItem;=0A=
this.count++;=0A=
=0A=
// Create the item, set the attributes and append=0A=
// the node.=0A=
var newItem =3D createElement('div', pAttributes);=0A=
newItem.appendChild(pNode);=0A=
=0A=
// Add out listItem class=0A=
newItem.className +=3D ' listItem';=0A=
=0A=
// Set the item ID=0A=
newItem.id =3D pId;=0A=
=0A=
// Add the item to our DOM obj=0A=
this.obj.appendChild(newItem);=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: removeItem=0A=
* =0A=
* Description:=0A=
* Removes an item from the ListControl by ID=0A=
* =0A=
* Parameters:=0A=
* pId string Unique ID of the item=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
removeItem: function(pId) {=0A=
// Get all our items=0A=
var itemDivs =3D this.getChildrenByClassName('listItem');=0A=
=0A=
// Search all of our items until we find what we=0A=
// want to remove=0A=
for (var i =3D 0; i < itemDivs.length; i++) {=0A=
var currItemDiv =3D itemDivs[i];=0A=
=0A=
if (currItemDiv.id =3D=3D pId) {=0A=
// Remove from the DOM=0A=
this.obj.removeChild(currItemDiv);=0A=
=0A=
// Remove from the listItems array=0A=
delete(this.listItems[pId]);=0A=
=0A=
// Update our running count=0A=
this.count--;=0A=
=0A=
break;=0A=
}=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: removeAll=0A=
* =0A=
* Description:=0A=
* Removes all items from the ListControl.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
removeAll: function() {=0A=
// Get all our items=0A=
var itemDivs =3D this.getChildrenByClassName('listItem');=0A=
=0A=
for (var i =3D 0; i < itemDivs.length; i++) {=0A=
var currItemDiv =3D itemDivs[i];=0A=
=0A=
// Remove from the DOM=0A=
this.obj.removeChild(currItemDiv);=0A=
=0A=
// Remove from the listItems array=0A=
delete(this.listItems[currItemDiv.id]);=0A=
}=0A=
// Update our running count=0A=
this.count =3D 0;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: hasItem=0A=
* =0A=
* Description:=0A=
* Determines if an item is already in our ListControl by=0A=
* ID=0A=
* =0A=
* Parameters:=0A=
* pId string Unique ID of the item=0A=
* =0A=
* Return:=0A=
* boolean True if the item is already in the ListControl=0A=
*-------------------------------------------------------*/=0A=
=0A=
hasItem: function(pId) {=0A=
return (this.listItems[pId] ? true: false);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: getCount=0A=
* =0A=
* Description:=0A=
* Getter method for retrieving the count of items=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
getCount: function() {=0A=
return this.count;=0A=
}=0A=
});=0A=
/*--------------------------------------------------------=0A=
* END ListControl class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Module Specific Controls =0A=
*------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* - Review Finder module =0A=
*------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: ReviewFinder=0A=
* =0A=
* Description:=0A=
* Class for handling business logic for Review Finder=0A=
* functionality. Composes and manages a Drawer and=0A=
* anchor element (button).=0A=
*=0A=
* Assumes a specific DOM structure is available on the page:=0A=
* - Anchor with id 'reviewFinderBtn'=0A=
* - Div with id 'reviewFinderDrawer' and following=0A=
* Drawer structure=0A=
*=0A=
* ObjectNotFoundException runtime exceptions are thrown if=0A=
* proper DOM structure is not available.=0A=
* InvalidObjectRefException is thrown if an invalid object=0A=
* reference is provided to the constructor.=0A=
*=0A=
* Uses singleton pattern to ensure that there is only one=0A=
* ReviewFinder object. Provides methods as class methods=0A=
* operating on singleton object.=0A=
*=0A=
* Properties:=0A=
* - button: reference to button link element=0A=
* - finderDrawer: reference to Drawer component=0A=
* - reviewFinder: singleton instance of ReviewFinder object=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Creates handles to components.=0A=
* - getInstance: Retrieves singleton instance of ReviewFinder.=0A=
* - open: Opens the finderDrawer Drawer.=0A=
* - close: Closes finderDrawer Drawer.=0A=
* - toggle: Toggles finderDrawer Drawer between open=0A=
* and closed.=0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Left uncaught if document=0A=
* structure does not match expectations.=0A=
* - InvalidObjectRefException: Left uncaught if an invalid=0A=
* object reference is provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var ReviewFinder =3D Class.create();=0A=
ReviewFinder.prototype.extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Establishes references to DOM elements=0A=
* composing ReviewFinder. Creates Drawer. Throws=0A=
* ObjectNotFoundException if proper DOM structure is not=0A=
* found in page. Attempts to find button, but ignores=0A=
* exceptions if button is not found.=0A=
*=0A=
* WARNING: This constructor should not be called directly=0A=
* using 'new'. Use 'ReviewFinder.prototype.getInstance()',=0A=
* instead. This constructor should be treated as=0A=
* private.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function() {=0A=
this.finderDrawer =3D new Drawer('reviewFinderDrawer', 1);=0A=
=0A=
try {=0A=
this.button =3D getObject('reviewFinderBtn');=0A=
} catch (e) {=0A=
this.button =3D false;=0A=
// We're catching the ObjectNotFoundException for the button.=0A=
// We're okay with the button not existing.=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: getInstance=0A=
* =0A=
* Description:=0A=
* Retrieves singleton instance of ReviewFinder object.=0A=
* Generates the object if necessary. This method should=0A=
* be used to get a ReviewFinder object instead of using=0A=
* 'new ReviewFinder()'.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* object Singleton instance of ReviewFinder object=0A=
*-------------------------------------------------------*/=0A=
=0A=
getInstance: function() {=0A=
if (!this.reviewFinder) {=0A=
this.reviewFinder =3D new ReviewFinder();=0A=
}=0A=
=0A=
return this.reviewFinder;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: open=0A=
* =0A=
* Description:=0A=
* Opens finderDrawer Drawer. Sets opened style for button=0A=
* link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
open: function() {=0A=
with (ReviewFinder.prototype.getInstance()) {=0A=
if (button) {=0A=
changeClass(button, 'reviewFinderBtnOff', 'reviewFinderBtnOn');=0A=
}=0A=
finderDrawer.open();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: close=0A=
* =0A=
* Description:=0A=
* Closes finderDrawer Drawer. Sets closed style for button=0A=
* link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
close: function() {=0A=
with (ReviewFinder.prototype.getInstance()) {=0A=
if (button) {=0A=
changeClass(button, 'reviewFinderBtnOn', 'reviewFinderBtnOff');=0A=
}=0A=
finderDrawer.close();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: toggle=0A=
* =0A=
* Description:=0A=
* Toggles finderDrawer Drawer between opened and closed.=0A=
* Coordinates opened and closed styles for button link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
toggle: function() {=0A=
with (ReviewFinder.prototype.getInstance()) {=0A=
if (button) {=0A=
if (finderDrawer.isOpen) {=0A=
changeClass(button, 'reviewFinderBtnOn', 'reviewFinderBtnOff');=0A=
} else {=0A=
changeClass(button, 'reviewFinderBtnOff', 'reviewFinderBtnOn');=0A=
}=0A=
}=0A=
finderDrawer.toggle();=0A=
}=0A=
}=0A=
});=0A=
=0A=
/*--------------------------------------------------------=0A=
* - Custom module utils=0A=
*------------------------------------------------------*/=0A=
var PcwCustomModules =3D new Object();=0A=
PcwCustomModules.slotNumber =3D 0;=0A=
PcwCustomModules.defaultSet =3D =
['news','downloads','revhard','blogs','howto','revsoft'];=0A=
PcwCustomModules.getModuleSet =3D function() {=0A=
var labelName =3D 'custom.modules';=0A=
var data =3D null;=0A=
var labelLen =3D labelName.length;=0A=
/* read cookie property only once for speed */=0A=
var cookieData =3D document.cookie;=0A=
var cLen =3D cookieData.length;=0A=
var i =3D 0;=0A=
var cEnd;=0A=
while (i < cLen) {=0A=
var j =3D i + labelLen;=0A=
if (cookieData.substring(i,j) =3D=3D labelName) {=0A=
cEnd =3D cookieData.indexOf(';',j);=0A=
if (cEnd =3D=3D -1) {=0A=
cEnd =3D cookieData.length;=0A=
}=0A=
data =3D unescape(cookieData.substring(j+2, cEnd-1));=0A=
}=0A=
i++;=0A=
}=0A=
if (data) {=0A=
data =3D data.split(',');=0A=
}=0A=
return data;=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* - My Pages module =0A=
*------------------------------------------------------*/=0A=
=0A=
/* CONSTANTS */=0A=
var TOO_MANY_PAGES =3D 'Your list is full. Please remove a page.';=0A=
var ALREADY_ADDED =3D 'Already added…';=0A=
var ADDING =3D 'Adding to My Pages...';=0A=
var REMOVE_TITLE =3D 'Remove from My Pages';=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: MyPages=0A=
* =0A=
* Description:=0A=
* Class for handling business logic for My Pages=0A=
* functionality. Composes and manages a WindowShade,=0A=
* ListControl, anchor element (button), and AlertMessage.=0A=
*=0A=
* Assumes a specific DOM structure is available on the page:=0A=
* - Anchor with id 'myPagesBtn'=0A=
* - Div with id 'myPagesAlert' and following=0A=
* AlertMessage structure=0A=
* - Div with id 'myPagesList' and following=0A=
* WindowShade structure=0A=
* - Div within 'myPagesList' WindowShade structure and=0A=
* with class ''myPagesList'=0A=
*=0A=
* ObjectNotFoundException runtime exceptions are thrown if=0A=
* proper DOM structure is not available.=0A=
* InvalidObjectRefException is thrown if an invalid object=0A=
* reference is provided to the constructor.=0A=
*=0A=
* Uses singleton pattern to ensure that there is only one=0A=
* MyPages object. Provides methods as class methods=0A=
* operating on singleton object.=0A=
*=0A=
* Business rules:=0A=
* - Enforces a maximum number of pages (10)=0A=
* =0A=
* Properties:=0A=
* - MAX_PAGES: maximum number of pages allowed=0A=
* - button: reference to button link element=0A=
* - alertMessage: reference to AlertMessage component=0A=
* - listWindowShade: reference to WindowShade component=0A=
* - pageList: reference to ListControl component=0A=
* - myPages: singleton instance of MyPages object=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Creates handles to components.=0A=
* Preloads any saved My Pages from server.=0A=
* - getInstance: Retrieves singleton instance of MyPages.=0A=
* - preloadPages: Preloads any saved My Pages from server.=0A=
* - addPage: Adds a page to singleton instance of MyPages=0A=
* - removePage: Removes a page to singleton instance of=0A=
* MyPages.=0A=
* - removeAll: Removes all pages.=0A=
* - openList: Opens listWindowShade WindowShade.=0A=
* - closeList: Closes listWindowShade WindowShade.=0A=
* - toggleList: Toggles listWindowShade WindowShade between open=0A=
* and closed.=0A=
* - updateCount: Updates button link element with the=0A=
* number of pages saved. =0A=
* =0A=
* Exceptions:=0A=
* - ObjectNotFoundException: Thrown or left uncaught if=0A=
* document structure does not match expectations.=0A=
* - InvalidObjectRefException: Left uncaught if an invalid=0A=
* object reference is provided to the constructor.=0A=
*-------------------------------------------------------*/=0A=
=0A=
var MyPages =3D Class.create();=0A=
MyPages.prototype.extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Establishes references to DOM elements=0A=
* composing MyPages. Creates WindowShade, AlertMessage and=0A=
* ListControl member objects. Preloads any existing=0A=
* saved pages from server. Throws ObjectNotFoundException=0A=
* if proper DOM structure is not found in page.=0A=
*=0A=
* WARNING: This constructor should not be called directly=0A=
* using 'new'. Use 'MyPages.prototype.getInstance()',=0A=
* instead. This constructor should be treated as=0A=
* private.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function() {=0A=
this.MAX_PAGES =3D 10;=0A=
=0A=
try {=0A=
this.button =3D getObject('myPagesBtn');=0A=
=0A=
this.alertMessage =3D new AlertMessage('myPagesAlertMessage', 35);=0A=
this.listWindowShade =3D new WindowShade('myPagesWindowShade');=0A=
=0A=
var listObj =3D =
this.listWindowShade.getDescendantsByClassName('myPagesList')[0];=0A=
if (!listObj) {=0A=
throw new ObjectNotFoundException('myPagesList');=0A=
} else {=0A=
this.pageList =3D new ListControl(listObj);=0A=
}=0A=
} catch (e) {=0A=
throw 'Could not create MyPages object. ' + e.toString();=0A=
}=0A=
=0A=
this.preloadPages();=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: getInstance=0A=
* =0A=
* Description:=0A=
* Retrieves singleton instance of MyPages object.=0A=
* Generates the object if necessary. This method should=0A=
* be used to get a MyPages object instead of using=0A=
* 'new MyPages()'.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* object Singleton instance of MyPages object=0A=
*-------------------------------------------------------*/=0A=
=0A=
getInstance: function() {=0A=
if (!this.myPages) {=0A=
this.myPages =3D new MyPages();=0A=
}=0A=
=0A=
return this.myPages;=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: preloadPages=0A=
* =0A=
* Description:=0A=
* Preloads existing saved pages from the server.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
preloadPages: function() {=0A=
/*=0A=
Placeholder method for preloading saved pages from DB.=0A=
Presumably, this is an AJAX call to the server that retrieves=0A=
the user's saved pages based on cookied authentication and loads=0A=
them into pageList using addItem().=0A=
*/=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: addPage=0A=
* =0A=
* Description:=0A=
* Adds a page to the pageList ListControl. Verifies that=0A=
* MAX_PAGES limit has not been reached. Verifies if page=0A=
* has already been saved. Generates DOM structure to=0A=
* represent page in pageList. Notifies server if page=0A=
* was added.=0A=
* =0A=
* Parameters:=0A=
* pId string Unique reference to page being added=0A=
* pLabel string User-friendly label to identify page=0A=
* pURL string The url of the page being saved=0A=
* pSetCookie boolean Pages added by user call this method with this =
parameter set to true=0A=
* pages added on page load have this method set to false=0A=
* =0A=
* Return:=0A=
* boolean True if the page is added or already added=0A=
*-------------------------------------------------------*/=0A=
=0A=
addPage: function(pId, pLabel, pURL, pSetCookie) {=0A=
with (MyPages.prototype.getInstance()) {=0A=
=0A=
// Check if we've already saved the page=0A=
if (pageList.hasItem(pId)) {=0A=
alertMessage.display(ALREADY_ADDED);=0A=
return true;=0A=
=0A=
// Check if we're over our limit on pages=0A=
} else if (pageList.getCount() >=3D MAX_PAGES) {=0A=
alertMessage.display(TOO_MANY_PAGES);=0A=
return false;=0A=
=0A=
// Otherwise, add the page.=0A=
} else {=0A=
if(pURL.substr(0,1) =3D=3D "/"){=0A=
pURL =3D "http://www.pcworld.com"+pURL;=0A=
}=0A=
=0A=
// Generate DOM structure for the page in pageList=0A=
// This could be a separate method or a unique class=0A=
// But we only need to call it here, so far=0A=
=0A=
// Create overall div. Establish rollovers for the listing=0A=
// Rollovers change the class of the div=0A=
var newElement =3D createElement('div', {=0A=
'class': 'myPageOff',=0A=
'onmouseover': "changeClass(this, 'myPageOff', 'myPageOn');",=0A=
'onmouseout': "changeClass(this, 'myPageOn', 'myPageOff')"=0A=
});=0A=
=0A=
// Add a link to remove the page from the list=0A=
// Clicking link calls removePage()=0A=
var removeLink =3D createElement('a', {=0A=
'href': "javascript:MyPages.prototype.removePage('" + pId + "')",=0A=
'class': 'removeBtn',=0A=
'title': REMOVE_TITLE=0A=
});=0A=
newElement.appendChild(removeLink);=0A=
=0A=
// Create actual link to page. Use pLabel to identify the page=0A=
var pageLink =3D createElement('a', {=0A=
'href': pURL,=0A=
'class': 'myPageLink'=0A=
});=0A=
pageLink.innerHTML =3D pLabel;=0A=
newElement.appendChild(pageLink);=0A=
=0A=
// We need a clear div to clear out side-by-side display=0A=
// of remove link and page link=0A=
var clearDiv =3D createElement('div', {'class': 'clear'});=0A=
newElement.appendChild(clearDiv);=0A=
=0A=
// Finally, a divider to visually separate from the next link=0A=
var divider =3D createElement('div', {'class': 'myPagesDivider'});=0A=
newElement.appendChild(divider);=0A=
=0A=
// Let the user know we're adding=0A=
// if pSetCookie =3D false then don't display this message=0A=
// this means that the saved pages list is getting preloaded at =0A=
// page load from cookie=0A=
if(pSetCookie){=0A=
alertMessage.display(ADDING);=0A=
}=0A=
=0A=
// Add the page and update the count display=0A=
pageList.addItem(pId, newElement, {'class': 'myPageItem'}, pURL);=0A=
updateCount();=0A=
=0A=
// AJAX call to save page to DB goes here=0A=
=0A=
// set cookie to expire in 60 days=0A=
var count =3D pageList.getCount();=0A=
if(pSetCookie){=0A=
var d =3D new Date();=0A=
d.setDate(d.getDate()+60);=0A=
var savedPage =3D pId+"\t"+pLabel+"\t"+pURL;=0A=
var cookie =3D pcw_readCookie("savedPages");=0A=
if(cookie!=3D""){=0A=
cookie=3Dcookie+"\n";=0A=
}=0A=
cookie=3Dcookie+savedPage;=0A=
pcw_setCookie("savedPages", cookie, d, "pcworld.com");=0A=
}=0A=
return true;=0A=
}=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: removePage=0A=
* =0A=
* Description:=0A=
* Removes a page from pageList ListControl, identified by=0A=
* unique id. Updates button link with proper count of=0A=
* pages. Notifies server of change.=0A=
* =0A=
* Parameters:=0A=
* pId string Unique reference to page being removed=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
removePage: function(pId) {=0A=
with (MyPages.prototype.getInstance()) {=0A=
pageList.removeItem(pId);=0A=
updateCount();=0A=
=0A=
// AJAX call to remove page from DB goes here=0A=
=0A=
// remove from cookie too=0A=
var savedPages =3D getSavedPages();=0A=
// find the page with mathing pId;=0A=
for(var i =3D 0; i < savedPages.length; i++){=0A=
if(savedPages[i].id=3D=3DpId){=0A=
savedPages =3D savedPages.slice(0,i).concat(savedPages.slice(i+1));=0A=
break;=0A=
}=0A=
}=0A=
=0A=
// now set the cookie again =0A=
var cookie=3D"";=0A=
for(var i =3D 0; i < savedPages.length; i++){=0A=
=
cookie=3Dcookie+savedPages[i].id+"\t"+savedPages[i].title+"\t"+savedPages=
[i].url+"\n";=0A=
}=0A=
cookie =3D cookie.substr(0, cookie.length-1);=0A=
var d =3D new Date();=0A=
d.setDate(d.getDate()+60);=0A=
pcw_setCookie("savedPages", cookie, d, "pcworld.com");=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: removeAll=0A=
* =0A=
* Description:=0A=
* Removes all pages from pageList ListControl. Updates=0A=
* button link with proper count of pages. Notifies server=0A=
* of change.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
removeAll: function() {=0A=
with (MyPages.prototype.getInstance()) {=0A=
pageList.removeAll();=0A=
updateCount();=0A=
=0A=
// AJAX call to remove all pages from DB goes here=0A=
=0A=
// remove pages from cookie=0A=
pcw_removeCookie("savedPages", "pcworld.com");=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: openList=0A=
* =0A=
* Description:=0A=
* Opens listWindowShade WindowShade. Sets opened style for button=0A=
* link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
openList: function() {=0A=
with (MyPages.prototype.getInstance()) {=0A=
changeClass(button, 'myPagesBtnOff', 'myPagesBtnOn');=0A=
listWindowShade.open();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: closeList=0A=
* =0A=
* Description:=0A=
* Closes listWindowShade WindowShade. Sets closed style for button=0A=
* link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
closeList: function() {=0A=
with (MyPages.prototype.getInstance()) {=0A=
changeClass(button, 'myPagesBtnOn', 'myPagesBtnOff');=0A=
listWindowShade.close();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: toggleList=0A=
* =0A=
* Description:=0A=
* Toggles listWindowShade WindowShade between opened and closed.=0A=
* Coordinates opened and closed styles for button link.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
toggleList: function() {=0A=
with (MyPages.prototype.getInstance()) {=0A=
if (listWindowShade.isOpen) {=0A=
changeClass(button, 'myPagesBtnOn', 'myPagesBtnOff');=0A=
} else {=0A=
changeClass(button, 'myPagesBtnOff', 'myPagesBtnOn');=0A=
}=0A=
listWindowShade.toggle();=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: updateCount=0A=
* =0A=
* Description:=0A=
* Updates button with a count of the pages saved. Also=0A=
* sets a proper title for the link element.=0A=
* =0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
updateCount: function() {=0A=
with (MyPages.prototype.getInstance()) {=0A=
button.innerHTML =3D 'My Pages (' + pageList.getCount() + ')';=0A=
button.setAttribute('title', button.innerHTML);=0A=
}=0A=
}=0A=
});=0A=
/*--------------------------------------------------------=0A=
* END MyPages class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* BEGIN Page preloader class=0A=
*-------------------------------------------------------*/=0A=
=0A=
/*--------------------------------------------------------=0A=
* Class: Preloader=0A=
* =0A=
* Description:=0A=
* Class for preloading page assets. Currently supports=0A=
* preloading of images only.=0A=
*=0A=
* Properties:=0A=
* - images: array of images to preload.=0A=
*=0A=
* Methods:=0A=
* - intialize: Constructor. Preloads any image sources=0A=
* passed in as an array of strings.=0A=
* - preload: Preloads an image source.=0A=
* - onloadHandler: Event handler for image onload events =0A=
* - onerrorHandler: Event handler for image onerror events =0A=
* - onabortHandler: Event handler for image onabort events =0A=
* =0A=
* Exceptions:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
var Preloader =3D Class.create();=0A=
Preloader.prototype.extend({=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: initialize=0A=
* =0A=
* Description:=0A=
* Constructor. Preloads an array of image sources.=0A=
* Establishes images array for tracking preloaded images.=0A=
*=0A=
* Parameters:=0A=
* pImgArray Array An array string of image sources.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
initialize: function(pImgArray) {=0A=
this.images =3D new Array;=0A=
for (var i =3D 0; i < pImgArray.length; i++) {=0A=
this.preload(pImgArray[i]);=0A=
}=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: preload=0A=
* =0A=
* Description:=0A=
* Preloads an image. Adds the preloaded image to the =0A=
* images member array. Assigns event handlers for=0A=
* onerror, onload, and onabort.=0A=
*=0A=
* Parameters:=0A=
* pImg String String indicating the source URI for=0A=
* the image to preload.=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
preload: function(pImg) {=0A=
var img =3D new Image;=0A=
img.onload =3D this.onloadHandler;=0A=
img.onerror =3D this.onerrorHandler;=0A=
img.onabort =3D this.onabortHandler;=0A=
=0A=
img.src =3D pImg;=0A=
this.images.push(img);=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: onloadHandler=0A=
* =0A=
* Description:=0A=
* Placeholder event handler for image onload event.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
onloadHandler: function() {=0A=
// alert(this.src + ' loaded!');=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: onerrorHandler=0A=
* =0A=
* Description:=0A=
* Placeholder event handler for image onerror event.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
onerrorHandler: function() {=0A=
// alert(this.src + ' failed in error.');=0A=
},=0A=
=0A=
/*--------------------------------------------------------=0A=
* Method: onabortHandler=0A=
* =0A=
* Description:=0A=
* Placeholder event handler for image onabort event.=0A=
*=0A=
* Parameters:=0A=
* none=0A=
* =0A=
* Return:=0A=
* none=0A=
*-------------------------------------------------------*/=0A=
=0A=
onabortHandler: function() {=0A=
// alert(this.src + ' aborted.');=0A=
}=0A=
});=0A=
=0A=
/*--------------------------------------------------------=0A=
* END Page preloader class=0A=
*-------------------------------------------------------*/=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* Begin FeatureViewer class=0A=
*-------------------------------------------------------*/=0A=
=0A=
//alert("Note: the feature viewer is in mid-development, so if it looks =
weird it's because i'm in the middle of something");=0A=
=0A=
/*--------------------------------------------------------=0A=
* BEGIN FeatureViewer class=0A=
*-------------------------------------------------------*/=0A=
=0A=
var FeatureViewer =3D Class.create();=0A=
FeatureViewer.prototype.extend({=0A=
=0A=
initialize: function() {=0A=
=0A=
//get and cache dom references=0A=
this.containerNode =3D document.getElementById("FVContainer");=0A=
this.contentNode =3D document.getElementById("FVContent");=0A=
this.navNode =3D document.getElementById("FVNav");=0A=
//this.readBtn =3D document.getElementById("FVReadBtn");=0A=
this.arrNavs =3D this.navNode.getElementsByTagName("a");=0A=
=0A=
//build shadow node=0A=
this.shadowNode =3D this.contentNode.cloneNode(1);=0A=
this.shadowNode.id =3D "FVContentShadow";=0A=
this.containerNode.appendChild(this.shadowNode);=0A=
=0A=
this.arrContent =3D this.contentNode.childNodes;=0A=
this.arrContentShadow =3D this.shadowNode.childNodes;=0A=
=0A=
//set input arrays=0A=
this.arrImages =3D new Array();=0A=
this.arrLinks =3D new Array();=0A=
=0A=
//cache these values so we don't have to calculate later=0A=
this.contentLength =3D 0;=0A=
this.selectedItem =3D 0;=0A=
=0A=
//set timer durations =0A=
this.rotateDuration =3D 4000;=0A=
this.idleDuration =3D 5000;=0A=
this.navCloseDuration =3D 10000;=0A=
=0A=
},=0A=
=0A=
start: function() {=0A=
=0A=
this.contentLength =3D this.arrLinks.length;=0A=
=0A=
//preload images=0A=
for (var i=3D0;i end) {=0A=
setTimeout("fv.resizeNav("+newStart+","+end+")",interval);=0A=
}=0A=
},=0A=
=0A=
contentLink: function() {=0A=
document.location.href =3D fv.arrLinks[fv.selectedItem-1];=0A=
},=0A=
=0A=
renderContent: function(index) {=0A=
=0A=
//clear content=0A=
for (var i=3D0;i start) {=0A=
out +=3D "
";=0A=
}=0A=
for (var i=3Dstart;i i) {=0A=
out +=3D renderYsmAd(i);=0A=
} else {=0A=
break;=0A=
}=0A=
skip++;=0A=
}=0A=
if (YsmAds.length > start) {=0A=
out +=3D "
";=0A=
}=0A=
//cycle back to beginning of loop=0A=
if (skip =3D YsmAds.length) {=0A=
skip =3D 0;=0A=
}=0A=
document.write(out);=0A=
}=0A=
=0A=
function renderYsmAd (index) {=0A=
var Ad =3D YsmAds[index];=0A=
var out =3D "
";=0A=
return out;=0A=
}=0A=
=0A=
/* am lazy. copying above rather than extending it. should merge =
eventually - aj */=0A=
=0A=
function renderYSMBigBoxAds (id,sequence) {=0A=
var out =3D "";=0A=
for (var i=3D0;i";=0A=
out +=3D ""+Ad.title+" ";=0A=
out +=3D Ad.description+" ";=0A=
out +=3D ""+Ad.displayUrl+"";=0A=
out +=3D "
";=0A=
return out;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* getPricingUrl=0A=
*=0A=
* dynamically generates pricing urls to shopping=0A=
* prodid - pricegrabber masterid=0A=
*-------------------------------------------------------*/=0A=
=0A=
function getPricingUrl(prodid,sortby,filename) {=0A=
if (filename =3D=3D null) {=0A=
filename =3D "pricing.html";=0A=
}=0A=
var zip =3D pcw_readCookie("pricingZip");=0A=
var url =3D "/product/pricing/prtprdid,"+prodid;=0A=
if (sortby !=3D null && sortby !=3D "") {=0A=
if (zip !=3D "" && sortby =3D=3D "price") {=0A=
sortby =3D "blprice";=0A=
}=0A=
url +=3D "-sortby," + sortby;=0A=
}=0A=
if (zip !=3D "") {=0A=
url +=3D "-zip," + zip;=0A=
}=0A=
url +=3D "/" + filename;=0A=
window.location.href =3D url;=0A=
}=0A=
=0A=
=0A=
/*--------------------------------------------------------=0A=
* article Voting=0A=
*-------------------------------------------------------*/=0A=
=0A=
function voteForArticle(aid) {=0A=
voteArticlePCW(aid,"yes");=0A=
}=0A=
=0A=
function voteAgainstArticle(aid) {=0A=
voteArticlePCW(aid,"no");=0A=
}=0A=
=0A=
function voteArticlePCW(aid,vote) {=0A=
=0A=
var elts =3D document.getElementsByClassName('articleVoteButtons');=0A=
for(var i =3D 0; i < elts.length; i++) elts[i].style.display=3D"none";=0A=
=0A=
var elts =3D document.getElementsByClassName('recPrompt');=0A=
for(var i =3D 0; i < elts.length; i++) elts[i].style.display=3D"inline";=0A=
=0A=
submitArticleVote(aid, vote, articleVoteComplete);=0A=
=0A=
}=0A=
=0A=
function articleVoteComplete(transport) {=0A=
var id =3D =
transport.responseXML.getElementsByTagName("id")[0].childNodes[0].nodeVal=
ue;=0A=
window.location=3D"/article/vote/id,"+id+"/thanks.html";=0A=
}=0A=
=0A=
function getMyArticleVote(aid) {=0A=
var str =3D String(aid);=0A=
var cookie =3D pcw_readCookie('articleVotes');=0A=
var idx =3D cookie.indexOf(str);=0A=
if(idx =3D=3D -1) return null;=0A=
var end =3D cookie.indexOf('\n',idx);=0A=
if(end =3D=3D -1) end =3D cookie.length;=0A=
var vote =3D cookie.substring(idx+str.length+1,end);=0A=
return vote;=0A=
}=0A=
=0A=
function submitArticleVote(aid, vote, onCompleteFunction) {=0A=
var ajax =3D new Ajax.Request(=0A=
'/article/ajax/submitVote',=0A=
{=0A=
method:'post',=0A=
parameters:'id=3D'+aid+'&recommend=3D'+vote+'&nocache=3D' + =
Math.round((Math.random() * 90000) + 1),=0A=
onSuccess:onCompleteFunction=0A=
});=0A=
=0A=
var thumbToken =3D "up";=0A=
if (vote =3D=3D "no") {=0A=
thumbToken =3D "down";=0A=
}=0A=
=0A=
var d =3D new Date();=0A=
d.setHours(d.getHours()+4);=0A=
var cookie =3D pcw_readCookie('articleVotes');=0A=
cookie =3D cookie + '\n'+aid+'\t'+thumbToken;=0A=
pcw_setCookie('articleVotes', cookie, d, 'pcworld.com');=0A=
=0A=
}=0A=
=0A=
function getArticleVoteTotals(aid, onCompleteFunction) {=0A=
var ajax =3D new Ajax.Request(=0A=
'/article/ajax/getVotes/votes.html',=0A=
{=0A=
method:'get',=0A=
parameters:'id=3D'+aid+'&nocache=3D' + Math.round((Math.random() * =
90000) + 1),=0A=
onSuccess:onCompleteFunction=0A=
});=0A=
}=0A=
=0A=
function processVoteXml (httpResult) {=0A=
var xml =3D httpResult.responseXML;=0A=
var ret =3D new Object();=0A=
ret.id =3D xml.getElementsByTagName("id")[0].childNodes[0].nodeValue;=0A=
ret.votesFor =3D =
xml.getElementsByTagName("votesFor")[0].childNodes[0].nodeValue;=0A=
ret.votesAgainst =3D =
xml.getElementsByTagName("votesAgainst")[0].childNodes[0].nodeValue;=0A=
return ret;=0A=
}=0A=
=0A=
var AV =3D new Object();=0A=
function setArticleVotes (httpResult) {=0A=
AV =3D processVoteXml(httpResult);=0A=
$("votePicTop").innerHTML =3D AV.votesFor;=0A=
$("votePicBot").innerHTML =3D AV.votesFor;=0A=
$("votePanBot").innerHTML =3D AV.votesAgainst;=0A=
}=0A=
=0A=
function recArticle(aid,vote) {=0A=
submitArticleVote(aid, vote, recArticleComplete);=0A=
}=0A=
=0A=
function recArticleComplete(httpResult) {=0A=
window.location.reload();=0A=
}=0A=
=0A=
function showVoteResults(aid) {=0A=
if (pcw_readCookie('articleVotes').indexOf(aid) > -1) {=0A=
$("voteThanks").style.display =3D "block";=0A=
}=0A=
}=0A=
=0A=
function showVoteThumbs(aid) {=0A=
if (pcw_readCookie('articleVotes').indexOf(aid) > -1) {=0A=
$("voteYes").innerHTML =3D "";=0A=
$("voteNo").innerHTML =3D "";=0A=
}=0A=
}=0A=
=0A=
function updateArticleVotesWithLinks(transport) {=0A=
var results =3D processVoteXml(transport);=0A=
var elts =3D document.getElementsByClassName('recUp');=0A=
for(var i =3D 0; i < elts.length; i++) {=0A=
elts[i].innerHTML =3D ''+=0A=
'Yes'+results.votesFor+' Votes';=0A=
}=0A=
elts =3D document.getElementsByClassName('recDown');=0A=
for(var i =3D 0; i < elts.length; i++) {=0A=
elts[i].innerHTML =3D ''+=0A=
'No'+results.votesAgainst+' Votes';=0A=
}=0A=
}=0A=
=0A=
function updateArticleVotesNoLinks(transport) {=0A=
var results =3D processVoteXml(transport);=0A=
=0A=
var elts =3D document.getElementsByClassName('recUp');=0A=
for(var i =3D 0; i < elts.length; i++) {=0A=
elts[i].innerHTML =3D 'Yes'+results.votesFor+' Votes';=0A=
}=0A=
elts =3D document.getElementsByClassName('recDown');=0A=
for(var i =3D 0; i < elts.length; i++) {=0A=
elts[i].innerHTML =3D 'No'+results.votesAgainst+' Votes';=0A=
}=0A=
}=0A=
=0A=
function updateArticleVotes(id) {=0A=
var myArticleVote =3D getMyArticleVote(id);=0A=
if(myArticleVote){=0A=
getArticleVoteTotals(id,updateArticleVotesNoLinks);=0A=
var newMsg =3D "";=0A=
if(myArticleVote=3D=3D"up")=0A=
newMsg =3D 'You recommended this story';=0A=
else=0A=
newMsg=3D'You did not recommend this story';=0A=
=0A=
var elts =3D document.getElementsByClassName('recPrompt');=0A=
for(var i =3D 0; i < elts.length; i++) {=0A=
elts[i].style.fontSize=3D"x-small";=0A=
elts[i].innerHTML =3D newMsg;=0A=
}=0A=
} else {=0A=
getArticleVoteTotals(id, updateArticleVotesWithLinks);=0A=
}=0A=
}=0A=
=0A=
function updateArticleVotes2(id) {=0A=
var myArticleVote =3D getMyArticleVote(id);=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* Inform helper=0A=
*-------------------------------------------------------*/=0A=
=0A=
function doInformUrl(path) {=0A=
var p =3D path;=0A=
p =3D p.replace(/^\/tags\//,"");=0A=
p =3D p.replace(/\.html$/,"");=0A=
p =3D p.replace(/\./g,"%2E");=0A=
window.location.href =3D "/tags/" + p + ".html";=0A=
}=0A=
=0A=
/*--------------------------------------------------------=0A=
* SMB Product Finder Nav=0A=
*-------------------------------------------------------*/=0A=
=0A=
var filterSelected =3D false;=0A=
function toggleFilter (index) {=0A=
if (filterSelected) {=0A=
showAllFilters();=0A=
} else {=0A=
showSelectedFilter(index);=0A=
}=0A=
return false;=0A=
}=0A=
=0A=
function showSelectedFilter (index) {=0A=
var kids =3D $("sidebar").childNodes;=0A=
var counter =3D 0;=0A=
for (var i=3D0;i';=0A=
}=0A=
return paramTags;=0A=
}=0A=
com.deconcept.FlashObject.prototype.getVariablePairs =3D function(){=0A=
var variablePairs =3D new Array();=0A=
var key;=0A=
var variables =3D this.getVariables();=0A=
for(key in variables){=0A=
variablePairs.push(key +"=3D"+ variables[key]);=0A=
}=0A=
return variablePairs;=0A=
}=0A=
com.deconcept.FlashObject.prototype.getHTML =3D function() {=0A=
var flashHTML =3D "";=0A=
if (navigator.plugins && navigator.mimeTypes && =
navigator.mimeTypes.length) { // netscape plugin architecture=0A=
if (this.getAttribute("doExpressInstall")) { =
this.addVariable("MMplayerType", "PlugIn"); }=0A=
flashHTML +=3D '';=0A=
} else { // PC IE=0A=
if (this.getAttribute("doExpressInstall")) { =
this.addVariable("MMplayerType", "ActiveX"); }=0A=
flashHTML +=3D '';=0A=
}=0A=
return flashHTML;=0A=
}=0A=
com.deconcept.FlashObject.prototype.write =3D function(elementId){=0A=
if(this.skipDetect || this.getAttribute('doExpressInstall') || =
com.deconcept.FlashObjectUtil.getPlayerVersion().versionIsValid(this.getA=
ttribute('version'))){=0A=
var targetElement =3D null;=0A=
if(document.getElementById){=0A=
targetElement =3D document.getElementById(elementId);=0A=
}=0A=
if (null !=3D targetElement) {=0A=
if (this.getAttribute('doExpressInstall')) {=0A=
this.addVariable("MMredirectURL", escape(window.location));=0A=
document.title =3D document.title.slice(0, 47) + " - Flash =
Player Installation";=0A=
this.addVariable("MMdoctitle", document.title);=0A=
}=0A=
targetElement.innerHTML =3D this.getHTML();=0A=
} else {=0A=
document.write('
'+this.getHTML()+'
');=0A=
}=0A=
}else{=0A=
if(this.getAttribute('redirectUrl') !=3D "") {=0A=
document.location.replace(this.getAttribute('redirectUrl'));=0A=
}=0A=
}=0A=
}=0A=
/* ---- detection functions ---- */=0A=
com.deconcept.FlashObjectUtil.getPlayerVersion =3D function(){=0A=
var PlayerVersion =3D new com.deconcept.PlayerVersion(0,0,0);=0A=
if(navigator.plugins && navigator.mimeTypes.length){=0A=
var x =3D navigator.plugins["Shockwave Flash"];=0A=
if(x && x.description) {=0A=
PlayerVersion =3D new =
com.deconcept.PlayerVersion(x.description.replace(/([a-z]|[A-Z]|\s)+/, =
"").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));=0A=
}=0A=
}else if (window.ActiveXObject){=0A=
try {=0A=
var axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A=
PlayerVersion =3D new =
com.deconcept.PlayerVersion(axo.GetVariable("$version").split(" =
")[1].split(","));=0A=
} catch (e) {}=0A=
}=0A=
return PlayerVersion;=0A=
}=0A=
com.deconcept.PlayerVersion =3D function(arrVersion){=0A=
this.major =3D parseInt(arrVersion[0]) || 0;=0A=
this.minor =3D parseInt(arrVersion[1]) || 0;=0A=
this.rev =3D parseInt(arrVersion[2]) || 0;=0A=
}=0A=
com.deconcept.PlayerVersion.prototype.versionIsValid =3D function(fv){=0A=
if(this.major < fv.major) return false;=0A=
if(this.major > fv.major) return true;=0A=
if(this.minor < fv.minor) return false;=0A=
if(this.minor > fv.minor) return true;=0A=
if(this.rev < fv.rev) return false;=0A=
return true;=0A=
}=0A=
/* ---- get value of query string param ---- */=0A=
com.deconcept.util.getRequestParameter =3D function(param){=0A=
var q =3D document.location.search || document.location.href.hash;=0A=
if(q){=0A=
var startIndex =3D q.indexOf(param +"=3D");=0A=
var endIndex =3D (q.indexOf("&", startIndex) > -1) ? q.indexOf("&", =
startIndex) : q.length;=0A=
if (q.length > 1 && startIndex > -1) {=0A=
return q.substring(q.indexOf("=3D", startIndex)+1, endIndex);=0A=
}=0A=
}=0A=
return "";=0A=
}=0A=
=0A=
/* add Array.push if needed (ie5) */=0A=
if (Array.prototype.push =3D=3D null) { Array.prototype.push =3D =
function(item) { this[this.length] =3D item; return this.length; }}=0A=
=0A=
/* add some aliases for ease of use / backwards compatibility */=0A=
var getQueryParamValue =3D com.deconcept.util.getRequestParameter;=0A=
var FlashObject =3D com.deconcept.FlashObject;=0A=
=0A=
/* fix for video streaming bug */=0A=
com.deconcept.FlashObjectUtil.cleanupSWFs =3D function() {=0A=
var objects =3D document.getElementsByTagName("OBJECT");=0A=
for (var i=3D0; i < objects.length; i++) {=0A=
for (var x in objects[i]) {=0A=
if (typeof objects[i][x] =3D=3D 'function') {=0A=
try {=0A=
objects[i][x] =3D null;=0A=
} catch(e) {=0A=
/* Ignore exception */=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
=0A=
if (typeof window.onunload =3D=3D 'function') {=0A=
var oldunload =3D window.onunload;=0A=
window.onunload =3D function() {=0A=
com.deconcept.FlashObjectUtil.cleanupSWFs();=0A=
oldunload();=0A=
}=0A=
} else {=0A=
window.onunload =3D com.deconcept.FlashObjectUtil.cleanupSWFs;=0A=
}
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.google-analytics.com/urchin.js
//-- Google Analytics Urchin Module=0A=
//-- Copyright 2007 Google, All Rights Reserved.=0A=
=0A=
//-- Urchin On Demand Settings ONLY=0A=
var _uacct=3D""; // set up the Urchin Account=0A=
var _userv=3D1; // service mode (0=3Dlocal,1=3Dremote,2=3Dboth)=0A=
=0A=
//-- UTM User Settings=0A=
var _ufsc=3D1; // set client info flag (1=3Don|0=3Doff)=0A=
var _udn=3D"auto"; // (auto|none|domain) set the domain name for cookies=0A=
var _uhash=3D"on"; // (on|off) unique domain hash for cookies=0A=
var _utimeout=3D"1800"; // set the inactive session timeout in seconds=0A=
var _ugifpath=3D"/__utm.gif"; // set the web path to the __utm.gif file=0A=
var _utsp=3D"|"; // transaction field separator=0A=
var _uflash=3D1; // set flash version detect option (1=3Don|0=3Doff)=0A=
var _utitle=3D1; // set the document title detect option =
(1=3Don|0=3Doff)=0A=
var _ulink=3D0; // enable linker functionality (1=3Don|0=3Doff)=0A=
var _uanchor=3D0; // enable use of anchors for campaign =
(1=3Don|0=3Doff)=0A=
var _utcp=3D"/"; // the cookie path for tracking=0A=
var _usample=3D100; // The sampling % of visitors to track (1-100).=0A=
=0A=
//-- UTM Campaign Tracking Settings=0A=
var _uctm=3D1; // set campaign tracking module (1=3Don|0=3Doff)=0A=
var _ucto=3D"15768000"; // set timeout in seconds (6 month default)=0A=
var _uccn=3D"utm_campaign"; // name=0A=
var _ucmd=3D"utm_medium"; // medium (cpc|cpm|link|email|organic)=0A=
var _ucsr=3D"utm_source"; // source=0A=
var _uctr=3D"utm_term"; // term/keyword=0A=
var _ucct=3D"utm_content"; // content=0A=
var _ucid=3D"utm_id"; // id number=0A=
var _ucno=3D"utm_nooverride"; // don't override=0A=
=0A=
//-- Auto/Organic Sources and Keywords=0A=
var _uOsr=3Dnew Array();=0A=
var _uOkw=3Dnew Array();=0A=
_uOsr[0]=3D"google"; _uOkw[0]=3D"q";=0A=
_uOsr[1]=3D"yahoo"; _uOkw[1]=3D"p";=0A=
_uOsr[2]=3D"msn"; _uOkw[2]=3D"q";=0A=
_uOsr[3]=3D"aol"; _uOkw[3]=3D"query";=0A=
_uOsr[4]=3D"aol"; _uOkw[4]=3D"encquery";=0A=
_uOsr[5]=3D"lycos"; _uOkw[5]=3D"query";=0A=
_uOsr[6]=3D"ask"; _uOkw[6]=3D"q";=0A=
_uOsr[7]=3D"altavista"; _uOkw[7]=3D"q";=0A=
_uOsr[8]=3D"netscape"; _uOkw[8]=3D"query";=0A=
_uOsr[9]=3D"cnn"; _uOkw[9]=3D"query";=0A=
_uOsr[10]=3D"looksmart"; _uOkw[10]=3D"qt";=0A=
_uOsr[11]=3D"about"; _uOkw[11]=3D"terms";=0A=
_uOsr[12]=3D"mamma"; _uOkw[12]=3D"query";=0A=
_uOsr[13]=3D"alltheweb"; _uOkw[13]=3D"q";=0A=
_uOsr[14]=3D"gigablast"; _uOkw[14]=3D"q";=0A=
_uOsr[15]=3D"voila"; _uOkw[15]=3D"rdata";=0A=
_uOsr[16]=3D"virgilio"; _uOkw[16]=3D"qs";=0A=
_uOsr[17]=3D"live"; _uOkw[17]=3D"q";=0A=
_uOsr[18]=3D"baidu"; _uOkw[18]=3D"wd";=0A=
_uOsr[19]=3D"alice"; _uOkw[19]=3D"qs";=0A=
_uOsr[20]=3D"yandex"; _uOkw[20]=3D"text";=0A=
_uOsr[21]=3D"najdi"; _uOkw[21]=3D"q";=0A=
_uOsr[22]=3D"aol"; _uOkw[22]=3D"q";=0A=
_uOsr[23]=3D"club-internet"; _uOkw[23]=3D"q";=0A=
_uOsr[24]=3D"mama"; _uOkw[24]=3D"query";=0A=
_uOsr[25]=3D"seznam"; _uOkw[25]=3D"q";=0A=
_uOsr[26]=3D"search"; _uOkw[26]=3D"q";=0A=
_uOsr[27]=3D"szukaj"; _uOkw[27]=3D"szukaj";=0A=
_uOsr[28]=3D"szukaj"; _uOkw[28]=3D"qt";=0A=
_uOsr[29]=3D"netsprint"; _uOkw[29]=3D"q";=0A=
_uOsr[30]=3D"google.interia"; _uOkw[30]=3D"q";=0A=
_uOsr[31]=3D"szukacz"; _uOkw[31]=3D"q";=0A=
_uOsr[32]=3D"yam"; _uOkw[32]=3D"k";=0A=
_uOsr[33]=3D"pchome"; _uOkw[33]=3D"q";=0A=
=0A=
=0A=
//-- Auto/Organic Keywords to Ignore=0A=
var _uOno=3Dnew Array();=0A=
//_uOno[0]=3D"urchin";=0A=
//_uOno[1]=3D"urchin.com";=0A=
//_uOno[2]=3D"www.urchin.com";=0A=
=0A=
//-- Referral domains to Ignore=0A=
var _uRno=3Dnew Array();=0A=
//_uRno[0]=3D".urchin.com";=0A=
=0A=
//-- **** Don't modify below this point ***=0A=
var =
_uff,_udh,_udt,_ubl=3D0,_udo=3D"",_uu,_ufns=3D0,_uns=3D0,_ur=3D"-",_ufno=3D=
0,_ust=3D0,_ubd=3Ddocument,_udl=3D_ubd.location,_udlh=3D"",_uwv=3D"1";=0A=
var _ugifpath2=3D"http://www.google-analytics.com/__utm.gif";=0A=
if (_udl.hash) _udlh=3D_udl.href.substring(_udl.href.indexOf('#'));=0A=
if (_udl.protocol=3D=3D"https:") =
_ugifpath2=3D"https://ssl.google-analytics.com/__utm.gif";=0A=
if (!_utcp || _utcp=3D=3D"") _utcp=3D"/";=0A=
function urchinTracker(page) {=0A=
if (_udl.protocol=3D=3D"file:") return;=0A=
if (_uff && (!page || page=3D=3D"")) return;=0A=
var a,b,c,xx,v,z,k,x=3D"",s=3D"",f=3D0;=0A=
var nx=3D" expires=3D"+_uNx()+";";=0A=
var dc=3D_ubd.cookie;=0A=
_udh=3D_uDomain();=0A=
if (!_uVG()) return;=0A=
_uu=3DMath.round(Math.random()*2147483647);=0A=
_udt=3Dnew Date();=0A=
_ust=3DMath.round(_udt.getTime()/1000);=0A=
a=3Ddc.indexOf("__utma=3D"+_udh);=0A=
b=3Ddc.indexOf("__utmb=3D"+_udh);=0A=
c=3Ddc.indexOf("__utmc=3D"+_udh);=0A=
if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
if (_utimeout && _utimeout!=3D"") {=0A=
x=3Dnew Date(_udt.getTime()+(_utimeout*1000));=0A=
x=3D" expires=3D"+x.toGMTString()+";";=0A=
}=0A=
if (_ulink) {=0A=
if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
s+=3D_udl.search;=0A=
if(s && s!=3D"" && s.indexOf("__utma=3D")>=3D0) {=0A=
if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A=
if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A=
if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A=
v=3D_uGC(s,"__utmv=3D","&");=0A=
z=3D_uGC(s,"__utmz=3D","&");=0A=
k=3D_uGC(s,"__utmk=3D","&");=0A=
xx=3D_uGC(s,"__utmx=3D","&");=0A=
if ((k*1) !=3D ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) =
{_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A=
if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A=
else if(a!=3D"-") f=3D2;=0A=
}=0A=
}=0A=
if(f=3D=3D1) {=0A=
_ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
_ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A=
_ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A=
} else if (f=3D=3D2) {=0A=
a=3D_uFixA(s,"&",_ust);=0A=
_ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
_ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
_ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
_ufns=3D1;=0A=
} else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A=
_ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
} else {=0A=
if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A=
else a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A=
_ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
_ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
_ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
_ufns=3D1;=0A=
}=0A=
if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A=
xx=3D_uUES(xx);=0A=
if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
}=0A=
if (_ulink && v && v!=3D"" && v!=3D"-") {=0A=
v=3D_uUES(v);=0A=
if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
}=0A=
_uInfo(page);=0A=
_ufns=3D0;=0A=
_ufno=3D0;=0A=
if (!page || page=3D=3D"") _uff=3D1;=0A=
}=0A=
function _uInfo(page) {=0A=
var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A=
if (page && page!=3D"") pg=3D_uES(page,1);=0A=
_ur=3D_ubd.referrer;=0A=
if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A=
else {=0A=
dm=3D_ubd.domain;=0A=
if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A=
p=3D_ur.indexOf(dm);=0A=
if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A=
if (_ur.indexOf("[")=3D=3D0 && =
_ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A=
}=0A=
s+=3D"&utmn=3D"+_uu;=0A=
if (_ufsc) s+=3D_uBInfo();=0A=
if (_uctm) s+=3D_uCInfo();=0A=
if (_utitle && _ubd.title && _ubd.title!=3D"") =
s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A=
if (_udl.hostname && _udl.hostname!=3D"") =
s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A=
s+=3D"&utmr=3D"+_ur;=0A=
s+=3D"&utmp=3D"+pg;=0A=
if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
var i=3Dnew Image(1,1);=0A=
i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
i.onload=3Dfunction() {_uVoid();}=0A=
}=0A=
if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
var i2=3Dnew Image(1,1);=0A=
=
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
i2.onload=3Dfunction() { _uVoid(); }=0A=
}=0A=
return;=0A=
}=0A=
function _uVoid() { return; }=0A=
function _uCInfo() {=0A=
if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A=
if (!_uVG()) return;=0A=
var =
c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""=
;=0A=
if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
s+=3D_udl.search;=0A=
var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A=
var dc=3D_ubd.cookie;=0A=
x=3D" expires=3D"+x.toGMTString()+";";=0A=
if (_ulink && !_ubl) {=0A=
z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A=
if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { =
_ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A=
}=0A=
z=3Ddc.indexOf("__utmz=3D"+_udh);=0A=
if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh,";"); }=0A=
else { z=3D"-"; }=0A=
t=3D_uGC(s,_ucid+"=3D","&");=0A=
t2=3D_uGC(s,_ucsr+"=3D","&");=0A=
t3=3D_uGC(s,"gclid=3D","&");=0A=
if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && =
t3!=3D"")) {=0A=
if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A=
if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmcsr=3D"+_uEC(t2); }=0A=
if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmgclid=3D"+_uEC(t3); }=0A=
t=3D_uGC(s,_uccn+"=3D","&");=0A=
if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A=
else c+=3D"|utmccn=3D(not+set)";=0A=
t=3D_uGC(s,_ucmd+"=3D","&");=0A=
if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A=
else c+=3D"|utmcmd=3D(not+set)";=0A=
t=3D_uGC(s,_uctr+"=3D","&");=0A=
if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A=
else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") =
c+=3D"|utmctr=3D"+_uEC(t); }=0A=
t=3D_uGC(s,_ucct+"=3D","&");=0A=
if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A=
t=3D_uGC(s,_ucno+"=3D","&");=0A=
if (t=3D=3D"1") o=3D1;=0A=
if (z!=3D"-" && o=3D=3D1) return "";=0A=
}=0A=
if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && =
_ufno=3D=3D1) return ""; }=0A=
if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1) c=3D_uRef(); if =
(z!=3D"-" && _ufno=3D=3D1) return ""; }=0A=
if (c=3D=3D"-" || c=3D=3D"") {=0A=
if (z=3D=3D"-" && _ufns=3D=3D1) { =
c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A=
if (c=3D=3D"-" || c=3D=3D"") return "";=0A=
}=0A=
if (z!=3D"-") {=0A=
i=3Dz.indexOf(".");=0A=
if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
t=3Dz.substring(i+1,z.length);=0A=
if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A=
t=3Dz.substring(0,i);=0A=
if ((i=3Dt.lastIndexOf(".")) > -1) {=0A=
t=3Dt.substring(i+1,t.length);=0A=
cn=3D(t*1);=0A=
}=0A=
}=0A=
if (cs=3D=3D0 || _ufns=3D=3D1) {=0A=
t=3D_uGC(dc,"__utma=3D"+_udh,";");=0A=
if ((i=3Dt.lastIndexOf(".")) > 9) {=0A=
_uns=3Dt.substring(i+1,t.length);=0A=
_uns=3D(_uns*1);=0A=
}=0A=
cn++;=0A=
if (_uns=3D=3D0) _uns=3D1;=0A=
_ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; =
path=3D"+_utcp+"; "+x+_udo;=0A=
}=0A=
if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A=
else return "&utmcr=3D1";=0A=
}=0A=
function _uRef() {=0A=
if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
var i=3D0,h,k,n;=0A=
if ((i=3D_ur.indexOf("://"))<0) return "";=0A=
h=3D_ur.substring(i+3,_ur.length);=0A=
if (h.indexOf("/") > -1) {=0A=
k=3Dh.substring(h.indexOf("/"),h.length);=0A=
if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A=
h=3Dh.substring(0,h.indexOf("/"));=0A=
}=0A=
h=3Dh.toLowerCase();=0A=
n=3Dh;=0A=
if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A=
for (var ii=3D0;ii<_uRno.length;ii++) {=0A=
if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && =
n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A=
}=0A=
if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A=
return =
"utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D=
referral";=0A=
}=0A=
function _uOrg(t) {=0A=
if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
var i=3D0,h,k;=0A=
if ((i=3D_ur.indexOf("://")) < 0) return "";=0A=
h=3D_ur.substring(i+3,_ur.length);=0A=
if (h.indexOf("/") > -1) {=0A=
h=3Dh.substring(0,h.indexOf("/"));=0A=
}=0A=
for (var ii=3D0;ii<_uOsr.length;ii++) {=0A=
if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A=
if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || =
(i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A=
k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A=
if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A=
for (var yy=3D0;yy<_uOno.length;yy++) {=0A=
if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; =
break; }=0A=
}=0A=
if (t) return _uEC(k);=0A=
else return =
"utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|=
utmcmd=3Dorganic";=0A=
}=0A=
}=0A=
}=0A=
return "";=0A=
}=0A=
function _uBInfo() {=0A=
var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A=
var n=3Dnavigator;=0A=
if (self.screen) {=0A=
sr=3Dscreen.width+"x"+screen.height;=0A=
sc=3Dscreen.colorDepth+"-bit";=0A=
} else if (self.java) {=0A=
var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A=
var s=3Dj.getScreenSize();=0A=
sr=3Ds.width+"x"+s.height;=0A=
}=0A=
if (n.language) { ul=3Dn.language.toLowerCase(); }=0A=
else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A=
je=3Dn.javaEnabled()?1:0;=0A=
if (_uflash) fl=3D_uFlash();=0A=
if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A=
else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A=
return =
"&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j=
e+"&utmfl=3D"+fl;=0A=
}=0A=
function __utmSetTrans() {=0A=
var e;=0A=
if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A=
else if (_ubd.utmform && _ubd.utmform.utmtrans) =
e=3D_ubd.utmform.utmtrans;=0A=
if (!e) return;=0A=
var l=3De.value.split("UTM:");=0A=
var i,i2,c;=0A=
if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A=
if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A=
=0A=
for (var ii=3D0;ii=3D2;ii--) {=0A=
try {=0A=
var fl=3Deval("new =
ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");=0A=
if (fl) { f=3Dii + '.0'; break; }=0A=
}=0A=
catch(e) {}=0A=
}=0A=
}=0A=
return f;=0A=
}=0A=
function __utmLinker(l,h) {=0A=
if (!_ulink) return;=0A=
var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
var dc=3D_ubd.cookie;=0A=
if (!l || l=3D=3D"") return;=0A=
var iq =3D l.indexOf("?"); =0A=
var ih =3D l.indexOf("#"); =0A=
if (dc) {=0A=
a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
=
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
}=0A=
if (p) {=0A=
if (h && ih>-1) return;=0A=
if (h) { _udl.href=3Dl+"#"+p; }=0A=
else {=0A=
if (iq=3D=3D-1 && ih=3D=3D-1) _udl.href=3Dl+"?"+p;=0A=
else if (ih=3D=3D-1) _udl.href=3Dl+"&"+p;=0A=
else if (iq=3D=3D-1) =
_udl.href=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A=
else _udl.href=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A=
}=0A=
} else { _udl.href=3Dl; }=0A=
}=0A=
function __utmLinkPost(f,h) {=0A=
if (!_ulink) return;=0A=
var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
var dc=3D_ubd.cookie;=0A=
if (!f || !f.action) return;=0A=
var iq =3D f.action.indexOf("?"); =0A=
var ih =3D f.action.indexOf("#"); =0A=
if (dc) {=0A=
a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
=
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
}=0A=
if (p) {=0A=
if (h && ih>-1) return;=0A=
if (h) { f.action+=3D"#"+p; }=0A=
else {=0A=
if (iq=3D=3D-1 && ih=3D=3D-1) f.action+=3D"?"+p;=0A=
else if (ih=3D=3D-1) f.action+=3D"&"+p;=0A=
else if (iq=3D=3D-1) =
f.action=3Df.action.substring(0,ih-1)+"?"+p+f.action.substring(ih);=0A=
else =
f.action=3Df.action.substring(0,ih-1)+"&"+p+f.action.substring(ih);=0A=
}=0A=
}=0A=
return;=0A=
}=0A=
function __utmSetVar(v) {=0A=
if (!v || v=3D=3D"") return;=0A=
if (!_udo || _udo =3D=3D "") {=0A=
_udh=3D_uDomain();=0A=
if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
}=0A=
if (!_uVG()) return;=0A=
var r=3DMath.round(Math.random() * 2147483647);=0A=
_ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; =
expires=3D"+_uNx()+";"+_udo;=0A=
var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A=
if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
var i=3Dnew Image(1,1);=0A=
i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
i.onload=3Dfunction() { _uVoid(); }=0A=
}=0A=
if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
var i2=3Dnew Image(1,1);=0A=
=
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
i2.onload=3Dfunction() { _uVoid(); }=0A=
}=0A=
}=0A=
function _uGCS() {=0A=
var t,c=3D"",dc=3D_ubd.cookie;=0A=
if ((t=3D_uGC(dc,"__utma=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utma=3D"+t+";+");=0A=
if ((t=3D_uGC(dc,"__utmb=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmb=3D"+t+";+");=0A=
if ((t=3D_uGC(dc,"__utmc=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmc=3D"+t+";+");=0A=
if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmx=3D"+t+";+");=0A=
if ((t=3D_uGC(dc,"__utmz=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmz=3D"+t+";+");=0A=
if ((t=3D_uGC(dc,"__utmv=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmv=3D"+t+";");=0A=
if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A=
return c;=0A=
}=0A=
function _uGC(l,n,s) {=0A=
if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A=
var i,i2,i3,c=3D"-";=0A=
i=3Dl.indexOf(n);=0A=
i3=3Dn.indexOf("=3D")+1;=0A=
if (i > -1) {=0A=
i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A=
c=3Dl.substring((i+i3),i2);=0A=
}=0A=
return c;=0A=
}=0A=
function _uDomain() {=0A=
if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A=
if (_udn=3D=3D"auto") {=0A=
var d=3D_ubd.domain;=0A=
if (d.substring(0,4)=3D=3D"www.") {=0A=
d=3Dd.substring(4,d.length);=0A=
}=0A=
_udn=3Dd;=0A=
}=0A=
_udn =3D _udn.toLowerCase(); =0A=
if (_uhash=3D=3D"off") return 1;=0A=
return _uHash(_udn);=0A=
}=0A=
function _uHash(d) {=0A=
if (!d || d=3D=3D"") return 1;=0A=
var h=3D0,g=3D0;=0A=
for (var i=3Dd.length-1;i>=3D0;i--) {=0A=
var c=3DparseInt(d.charCodeAt(i));=0A=
h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A=
if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A=
}=0A=
return h;=0A=
}=0A=
function _uFixA(c,s,t) {=0A=
if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A=
var a=3D_uGC(c,"__utma=3D"+_udh,s);=0A=
var lt=3D0,i=3D0;=0A=
if ((i=3Da.lastIndexOf(".")) > 9) {=0A=
_uns=3Da.substring(i+1,a.length);=0A=
_uns=3D(_uns*1)+1;=0A=
a=3Da.substring(0,i);=0A=
if ((i=3Da.lastIndexOf(".")) > 7) {=0A=
lt=3Da.substring(i+1,a.length);=0A=
a=3Da.substring(0,i);=0A=
}=0A=
if ((i=3Da.lastIndexOf(".")) > 5) {=0A=
a=3Da.substring(0,i);=0A=
}=0A=
a+=3D"."+lt+"."+t+"."+_uns;=0A=
}=0A=
return a;=0A=
}=0A=
function _uTrim(s) {=0A=
if (!s || s=3D=3D"") return "";=0A=
while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || =
(s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A=
while ((s.charAt(s.length-1)=3D=3D' ') || =
(s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) =
s=3Ds.substring(0,s.length-1);=0A=
return s;=0A=
}=0A=
function _uEC(s) {=0A=
var n=3D"";=0A=
if (!s || s=3D=3D"") return "";=0A=
for (var i=3D0;i0) r=3Da.substring(i+1,i2); else return =
""; =0A=
if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return =
""; =0A=
if (f) {=0A=
return r;=0A=
} else {=0A=
var c=3Dnew =
Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'=
,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A=
return =
c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r=
&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5=
&m]+c[t&m];=0A=
}=0A=
}=0A=
function _uIN(n) {=0A=
if (!n) return false;=0A=
for (var i=3D0;i"9") && (c!=3D".")) return false;=0A=
}=0A=
return true;=0A=
}=0A=
function _uES(s,u) {=0A=
if (typeof(encodeURIComponent) =3D=3D 'function') {=0A=
if (u) return encodeURI(s);=0A=
else return encodeURIComponent(s);=0A=
} else {=0A=
return escape(s);=0A=
}=0A=
}=0A=
function _uUES(s) {=0A=
if (typeof(decodeURIComponent) =3D=3D 'function') {=0A=
return decodeURIComponent(s);=0A=
} else {=0A=
return unescape(s);=0A=
}=0A=
}=0A=
function _uVG() {=0A=
if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") =
=3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/' && =
_udn.indexOf("google.org")=3D=3D-1) {=0A=
return false;=0A=
}=0A=
return true;=0A=
}=0A=
function _uSP() {=0A=
var s=3D100;=0A=
if (_usample) s=3D_usample;=0A=
if(s>=3D100 || s<=3D0) return true;=0A=
return ((__utmVisitorCode(1)%10000)<(s*100));=0A=
}=0A=
function urchinPathCopy(p){=0A=
var d=3Ddocument,nx,tx,sx,i,c,cs,t,h,o;=0A=
cs=3Dnew Array("a","b","c","v","x","z");=0A=
h=3D_uDomain(); if (_udn && _udn!=3D"") o=3D" domain=3D"+_udn+";";=0A=
nx=3D_uNx()+";";=0A=
tx=3Dnew Date(); tx.setTime(tx.getTime()+(_utimeout*1000));=0A=
tx=3Dtx.toGMTString()+";";=0A=
sx=3Dnew Date(); sx.setTime(sx.getTime()+(_ucto*1000));=0A=
sx=3Dsx.toGMTString()+";";=0A=
for (i=3D0;i<6;i++){=0A=
t=3D" expires=3D";=0A=
if (i=3D=3D1) t+=3Dtx; else if (i=3D=3D2) t=3D""; else if (i=3D=3D5) =
t+=3Dsx; else t+=3Dnx;=0A=
c=3D_uGC(d.cookie,"__utm"+cs[i]+"=3D"+h,";");=0A=
if (c!=3D"-") d.cookie=3D"__utm"+cs[i]+"=3D"+c+"; path=3D"+p+";"+t+o;=0A=
}=0A=
}=0A=
function _uCO() {=0A=
if (!_utk || _utk=3D=3D"" || _utk.length<10) return;=0A=
var d=3D'www.google.com';=0A=
if (_utk.charAt(0)=3D=3D'!') d=3D'analytics.corp.google.com';=0A=
_ubd.cookie=3D"GASO=3D"+_utk+"; path=3D"+_utcp+";"+_udo;=0A=
var sc=3Ddocument.createElement('script');=0A=
sc.type=3D'text/javascript';=0A=
sc.id=3D"_gasojs";=0A=
=
sc.src=3D'https://'+d+'/analytics/reporting/overlay_js?gaso=3D'+_utk+'&'+=
Math.random();=0A=
document.getElementsByTagName('head')[0].appendChild(sc); =0A=
}=0A=
function _uGT() {=0A=
var h=3Dlocation.hash, a;=0A=
if (h && h!=3D"" && h.indexOf("#gaso=3D")=3D=3D0) {=0A=
a=3D_uGC(h,"gaso=3D","&");=0A=
} else {=0A=
a=3D_uGC(_ubd.cookie,"GASO=3D",";");=0A=
}=0A=
return a;=0A=
}=0A=
var _utk=3D_uGT();=0A=
if (_utk && _utk!=3D"" && _utk.length>10) {=0A=
if (window.addEventListener) {=0A=
window.addEventListener('load', _uCO, false); =0A=
} else if (window.attachEvent) { =0A=
window.attachEvent('onload', _uCO);=0A=
}=0A=
}=0A=
=0A=
function _uNx() {=0A=
return (new Date((new Date()).getTime()+63072000000)).toGMTString();=0A=
}=0A=
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://edge.quantserve.com/quant.js
function _qcdst(){if(_qctzoff(0)!=3D_qctzoff(6))return 1;return 0;}=0A=
function _qctzoff(m){=0A=
var d1=3Dnew Date(2000,m,1,0,0,0,0);=0A=
var t=3Dd1.toGMTString();=0A=
var d3=3Dnew Date(t.substring(0,t.lastIndexOf(" ")-1));=0A=
return d1-d3;=0A=
}=0A=
function _qceuc(s){=0A=
if(typeof(encodeURIComponent)=3D=3D'function'){return =
encodeURIComponent(s);}=0A=
else{return escape(s);}=0A=
}=0A=
function _qcrnd(){return Math.round(Math.random()*2147483647);}=0A=
function _qvoid(){return;}=0A=
function _qcgc(n){=0A=
var v=3D'';=0A=
var c=3Ddocument.cookie;if(!c)return v;=0A=
var i=3Dc.indexOf(n+"=3D");=0A=
var len=3Di+n.length+1;=0A=
if(i>-1){=0A=
var end=3Dc.indexOf(";", len);=0A=
if(end<0)end=3Dc.length;=0A=
v=3Dc.substring(len,end);=0A=
}=0A=
return v;=0A=
}=0A=
function _qcdomain(){=0A=
var d=3Ddocument.domain;=0A=
if(d.substring(0,4)=3D=3D"www.")d=3Dd.substring(4,d.length);=0A=
var a=3Dd.split(".");var len=3Da.length;=0A=
if(len<3)return d;=0A=
var e=3Da[len-1];=0A=
if(e.length<3)return d;=0A=
d=3Da[len-2]+"."+a[len-1];=0A=
return d;=0A=
}=0A=
function _qcsc(dc){=0A=
var s=3D"",u=3Ddocument;var d=3D_qcdomain();var a=3D_qcgc("__qca");=0A=
if(a.length>0){s+=3D";fpan=3D0;fpa=3D"+a;}=0A=
else{=0A=
u.cookie=3D"__qca=3D"+dc+"; expires=3DSun, 18 Jan 2038 00:00:00 GMT; =
path=3D/; domain=3D"+d;=0A=
a=3D_qcgc("__qca");=0A=
if(a.length>0){s+=3D";fpan=3D1;fpa=3D"+dc;}=0A=
else{s+=3D";fpan=3Du;fpa=3D";}=0A=
}=0A=
var b=3D_qcgc("__qcb");=0A=
if(b.length>0){s+=3D";fpbn=3D0;fpb=3D"+b;}=0A=
else{b=3D_qcrnd();=0A=
u.cookie=3D"__qcb=3D"+b+"; path=3D/; domain=3D"+d;=0A=
b=3D_qcgc("__qcb");=0A=
if(b.length>0){s+=3D";fpbn=3D1;fpb=3D"+b;}=0A=
else{s+=3D";fpbn=3Du;fpb=3D";}=0A=
}=0A=
return s;=0A=
}=0A=
function quantserve(){=0A=
if((typeof _qacct =3D=3D"undefined")||(_qacct.length=3D=3D0))return;=0A=
if((typeof _qpixelsent =
!=3D"undefined")&&(_qpixelsent=3D=3D_qacct))return;=0A=
_qpixelsent=3D_qacct;=0A=
var r=3D_qcrnd();=0A=
var ce=3D(navigator.cookieEnabled)?"1":"0";=0A=
var sr=3D'',qo=3D'',qm=3D'',url=3D'',ref=3D'',je=3D'u',ns=3D'1';=0A=
if(typeof navigator.javaEnabled =
!=3D'undefined')je=3D(navigator.javaEnabled())?"1":"0";=0A=
if(typeof _qoptions !=3D"undefined"){for(var k in =
_qoptions){qo+=3D';'+k+'=3D'+_qceuc(_qoptions[k]);}}=0A=
if(typeof _qmeta !=3D"undefined"){qm=3D';m=3D'+_qceuc(_qmeta);}=0A=
=
if(self.screen){sr=3Dscreen.width+"x"+screen.height+"x"+screen.colorDepth=
;}=0A=
var d=3Dnew Date();=0A=
var dst=3D_qcdst();=0A=
=0A=
=0A=
=0A=
=0A=
var dc=3D"1189105368-58730717-49709439";=0A=
var qs=3D"http://pixel.quantserve.com";=0A=
var fp=3D_qcsc(dc);=0A=
if(window.location && =
window.location.href)url=3D_qceuc(window.location.href);=0A=
if(window.document && =
window.document.referrer)ref=3D_qceuc(window.document.referrer);=0A=
if(self=3D=3Dtop)ns=3D'0';=0A=
var img=3Dnew Image(1,1);=0A=
img.alt=3D"";=0A=
=
img.src=3Dqs+'/pixel'+';r=3D'+r+fp+';ns=3D'+ns+';url=3D'+url+';ref=3D'+re=
f+';ce=3D'+ce+';je=3D'+je+';sr=3D'+sr+';dc=3D'+dc+';dst=3D'+dst+';et=3D'+=
d.getTime()+';tzo=3D'+d.getTimezoneOffset()+';a=3D'+_qacct+qo+qm;=0A=
img.onload=3Dfunction() {_qvoid();}=0A=
}=0A=
quantserve();=0A=
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://s.pcworld.com/script/hbx.js
//hbx.js,HBX2.0,COPYRIGHT 1997-2006 WEBSIDESTORY,INC. ALL RIGHTS =
RESERVED. U.S.PATENT No.6,393,479B1 & 6,766,370. =
INFO:http://websidestory.com/privacy=0A=
/* INSERT CUSTOM EVENT CODE HERE */=0A=
// custom code for 2.0 release to send linkviews on page view until the =
backend is ready=0A=
// remove this code block if we want to send linkViews as a separate =
request=0A=
function _hbOnPrePV(req){=0A=
for(var a=3D0;a<_IL(document.links);a++){=0A=
if(_lvid.length+_lvpos.length<_lvm)=0A=
_LV(document.links[a]);=0A=
else break;=0A=
}=0A=
_ar +=3D "&lv.id=3D"+_lvid+"&lv.pos=3D"+_lvpos;=0A=
_lvl=3D-1; =0A=
}=0A=
=0A=
/* DO NOT CHANGE BELOW THIS LINE */=0A=
var _vjs=3D"HBX0201.03u";=0A=
var =
_dl=3D".exe,.zip,.wav,.wmv,.mp3,.mov,.mpg,.avi,.doc,.pdf,.xls,.ppt,.gz,.b=
in,.hqx,.dmg";=0A=
function _NA(a){return new Array(a?a:0)}=0A=
var =
_mn=3D_hbq=3D"",_hbA=3D_NA(),_hud=3D"undefined",_huf=3D"function",_ec=3D_=
if=3D_ll=3D_hec=3D_hfs=3D_hfc=3D_hfa=3D_ic=3D_pC=3D_fc=3D_pv=3D0,_hbi=3D_=
hbs=3Dnew Image(),_hbin=3D_NA(),_pA=3D_NA();=0A=
_lvid=3D_lvpos=3D_lvl=3D"";_hbE=3D_D("hbE")?_hbE:"";_hbEC=3D_D("hbEC")?_h=
bEC:0;var _ex=3D"expires=3DWed, 1 Jan 2020 00:00:00 =
GMT",_lvm=3D300,_lidt=3D"lid",_lpost=3D"lpos",=0A=
_pum=3D_erf=3D_hif=3D0;=0A=
function _D(v){return(typeof =
eval("window._"+v)!=3D_hud)?eval("window._"+v):""}function =
_DD(v){return(typeof v!=3D_hud)?1:0}=0A=
function _A(v,c){return escape((_D("lc")=3D=3D"y"&&_DD(c))?_TL(v):v)}=0A=
function _B(){return 0}function _GP(){return =
(_IL(_D("protocol"))>0)?_protocol+"://":(location.protocol=3D=3D"https:"?=
"https://":"http://")}=0A=
function _IC(a,b,c){return a.charAt(b)=3D=3Dc?1:0}function =
_II(a,b,c){return a.indexOf(b,c?c:0)}function _IL(a){return =
a!=3D_hud?a.length:0}=0A=
function _IF(a,b,c){return a.lastIndexOf(b,c?c:_IL(a))}function =
_IP(a,b){return a.split(b)}=0A=
function _IS(a,b,c){return b>_IL(a)?"":a.substring(b,c!=3Dnull?c:_IL(a))}=0A=
function =
_RP(a,b,c,d){d=3D_II(a,b);if(d>-1){a=3D_RP(_IS(a,0,d)+","+_IS(a,d+_IL(b),=
_IL(a)),b,c)}return a}=0A=
function _TL(a){return a.toLowerCase()}function _TS(a){return =
a.toString()}function _TV(){_hbSend()}function _SV(a,b,c){_hbSet(a,b,c)}=0A=
function =
_VS(a,b,c,d){c=3D['C','P','R'];for(d=3D0;d<_IL(c);d++){if(_II(""+b,"_"+c[=
d]+"::")=3D=3D0)b=3Deval("_R"+c[d]+"V(_IS(b,4,_IL(b)))")}eval("_"+a+"=3D'=
"+b+"'")}=0A=
function =
_VC(a,b,c,d){b=3D_IP(a,",");for(c=3D0;c<_IL(b);c++){d=3D_IP(b[c],"|");_VS=
(d[0],(_D(d[0]))?_D(d[0]):d[1]?d[1]:"")}}=0A=
function =
_VL(a,b){for(a=3D0;a<_hbEC;a++){_pv=3D_hbE[a];if(_pv._N=3D=3D"pv"){for(b =
in _pv){if(_EE(b)&&typeof _pv[b]!=3D_huf){_VS(b,_pv[b])}}}}=0A=
_VC("pn|PUT+PAGE+NAME+HERE,mlc|CONTENT+CATEGORY,elf|n,dlf|n,dft|n,pndef|t=
itle,ctdef|full,cp|null,hcn|")}_VL();=0A=
function =
_ER(a,b,c){if(_erf++=3D=3D0)_hbi.src=3D_GP()+_gn+"/HG?hc=3D"+_mn+"&hb=3D"=
+_A(_acct)+"&hec=3D1&vjs=3D"+_vjs+"&vpc=3DERR&ec=3D1&err=3D"+=0A=
((typeof a=3D=3D"string")?_A(a+"-"+c):"Unknown");_XT("Error",a);}=0A=
function _EE(a){return(a!=3D"_N"&&a!=3D"_C")?1:0}_EV(window,"error",_ER);=0A=
function _hbSend(c,a,i){a=3D"";_hec++;for(i in _hbA)if(typeof =
_hbA[i]!=3D_huf)a+=3D"&"+i+"=3D"+_hbA[i];_Q(_hbq+"&hec=3D"+_hec+a+_hbSend=
EV());_hbA=3D_NA()}=0A=
function =
_hbSet(a,b,c,d,e){d=3D_II(_hbq,"&"+a+"=3D");if(d>-1){e=3D_II(_hbq,"&",d+1=
);e=3De>d?e:_IL(_hbq);if(a=3D=3D"n"||a=3D=3D"vcon"){_hbq=3D_IS(_hbq,0,d)+=
"&"+a+"=3D"+b+=0A=
_IS(_hbq,e);_hec=3D-1;if(a=3D=3D"n"){_pn=3Db}else{_mlc=3Db}}else{_hbq=3D_=
IS(_hbq,0,d)+_IS(_hbq,e)}}if((a!=3D"n")&&(a!=3D"vcon"))_hbA[a]=3D(c=3D=3D=
0)?b:_A(b)}=0A=
function =
_hbRedirect(a,b,c,d,e,f,g){_SV("n",a);_SV("vcon",b);if(_DD(d)&&_IL(d)>0){=
d=3D_IC(d,0,"&")?_IS(d,1,_IL(d)):d;e=3D_IP(d,"&");for(f=3D0;f<_IL(e);=0A=
f++){g=3D_IP(e[f],"=3D");_SV(g[0],g[1])}}_TV();if(c!=3D""){_SV("hec",0);s=
etTimeout("location.href=3D'"+c+"'",500)}}=0A=
function =
_hbSendEV(a,b,c,d,e,f,x,i){a=3D'',c=3D'',e=3D_IL(_hbE);for(b=3D0;bc._C)c._C=3D_IL(x)}}for(d in =
c){if(_EE(d)&&c[d].match){x=3Dc[d].match(/\[\]/g);x=3D(x=3D=3Dnull)?0:_IL=
(x);for(i=3Dx;i0)_SV(c,d);_TV()}=0A=
function _hbPageView(p,m){_hec=3D-1;_hbM(p,m,"")}function =
_hbExitLink(n){_hbM(_pn,_mlc,"el",n)}function =
_hbDownload(n){_hbM(_pn,_mlc,"fn",n)}=0A=
function =
_hbVisitorSeg(n,p,m){_SV("n",p);_SV("vcon",m);_SV("seg",n,1);_TV()}functi=
on _hbCampaign(n,p,m){_hbM(p,m,"cmp",n)}=0A=
function _hbFunnel(n,p,m){_hbM(p,m,"fnl",n)}function =
_hbGoalPage(n,p,m){_hbM(p,m,"gp",n)}=0A=
function =
_hbLink(a,b,c){_SV("lid",a);if(_DD(b))_SV("lpos",b);_XT("Link","");_TV()}=0A=
function =
_hbForm(a,b,c,d,e,f){if(_DD(c))_hlf=3Dc;_hfs=3D0,_fa=3D1,f=3D'Complete',_=
hfa=3D0;if(a=3D=3D0){f=3D'Abandon';_hfa=3D1}_XT("Form"+f,b)}=0A=
function =
_hbCookie(a,b,c){document.cookie=3Da+"=3D"+b+";path=3D/;"+((_DD(c)=3D=3D1=
)?"expires=3D"+c:"")}=0A=
function =
_LE(a,b,c,d,e,f,g,h,i,j,k,l){b=3D"([0-9A-Za-z\\-]*\\.)",c=3Dlocation.host=
name,d=3Da.href,h=3D'',i=3D'';eval("__f=3D/"+b+"*"+b+"/");if(_DD(__f)){__=
f.exec(c);=0A=
j=3D(_DD(_elf))?_elf:"";if(j!=3D"n"){if(_II(j,"!")>-1){h=3D_IS(j,0,_II(j,=
"!"));i=3D_IS(j,_II(j,"!")+1,_IL(j))}else{h=3Dj}}k=3D0;if(_DD(_elf)&&_elf=
!=3D"n"){=0A=
if(_IL(i)){l=3D_IP(i,",");for(g=3D0;g<_IL(l);g++)if(_II(d,l[g])>-1)return=
}if(_IL(h)){l=3D_IP(h,",");for(g=3D0;g<_IL(h);g++)if(_II(d,l[g])>-1)k=3D1=
}}=0A=
if(_II(a.hostname,RegExp.$2)<0||k){ e=3D_IL(d)-1;return =
_IC(d,e,'/')?_IS(d,0,e):d}}}=0A=
function =
_LD(a,b,c,d,e,f){b=3Da.pathname,d=3D'',e=3D'';b=3D_IS(b,_IF(b,"/")+1,_IL(=
b));c=3D(_DD(_dlf))?_dlf:"";if(c!=3D"n"){if(_II(c,"!")>-1){d=3D","+=0A=
_IS(c,0,_II(c,"!"));e=3D","+_IS(c,_II(c,"!")+1,_IL(c))}else{d=3D","+c}}f=3D=
_II(b,"?");b=3D(f>-1)?_IS(b,0,f):b;if(_IF(b,".")>-1){f=3D_IS(b,_IF(b,".")=
,_IL(b));=0A=
if(_II(_dl+d,f)>-1&&_II(e,f)<0){var =
dl=3Db;if(_DD(_dft)){if(_dft=3D=3D"y"&&a.name){dl=3Da.name}else =
if(_dft=3D=3D"full"){dl=3Da.pathname;if(!_IC(dl,0,'/'))dl=3D'/'+dl=0A=
}}return dl}}}=0A=
function =
_LP(a,b){for(b=3D0;b<_IL(a);b++){if(_IL(_lvl)<_lvm)_LV(a[b]);_EV(a[b],'mo=
usedown',_LT)}}=0A=
function =
_LV(a,b,c){b=3D_LN(a);c=3Db[0]+b[1];if(_IL(b[0])){_lvid+=3D_A(b[0])+",";_=
lvpos+=3D_A(b[1])+",";_lvl+=3Dc}}=0A=
function =
_LN(a,b,c,d){b=3Da.href;b+=3Da.name?a.name:"";c=3D_LVP(b,_lidt);d=3D_LVP(=
b,_lpost);return[c,d]}=0A=
function =
_LT(e){if((e.which&&e.which=3D=3D1)||(e.button&&e.button=3D=3D1)){var =
a=3Ddocument.all?window.event.srcElement:this;for(var =
i=3D0;i<4;i++){if(a.tagName&&=0A=
_TL(a.tagName)!=3D"a"&&_TL(a.tagName)!=3D"area"){a=3Da.parentElement}}var=
=
b=3D_LN(a),c=3D'',d=3D'';a.lid=3Db[0];a.lpos=3Db[1];if(_D("lt")&&_lt!=3D"=
manual"){if((a.tagName&&=0A=
_TL(a.tagName)=3D=3D"area")){if(!_IL(a.lid)){if(a.parentNode){if(a.parent=
Node.name)a.lid=3Da.parentNode.name;else =
a.lid=3Da.parentNode.id}}if(!_IL(a.lpos))=0A=
a.lpos=3Da.coords}else{if(_IL(a.lid)<1)a.lid=3D_LS(a.text?a.text:a.innerT=
ext?a.innerText:"");if(!_IL(a.lid)||_II(_TL(a.lid),"-1)a.lid=3D_LI=
(a)}}=0A=
if(!_IL(a.lpos)&&_D("lt")=3D=3D"auto_pos"&&a.tagName&&_TL(a.tagName)!=3D"=
area"){c=3Ddocument.links;for(d=3D0;d<_IL(c);d++){if(a=3D=3Dc[d]){a.lpos=3D=
d+1;break}}}=0A=
var _f=3D0,j=3D'',k=3D'',l=3D(a.protocol)?_TL(a.protocol):"";=0A=
if(l&&l!=3D"mailto:"&&l!=3D"javascript:"){j=3D_LE(a),k=3D_LD(a);if(_DD(k)=
)a.fn=3Dk;else if(_DD(j))a.el=3Dj}=0A=
if(_D("lt")&&_IC(_lt,0,"n")!=3D1&&_DD(a.lid)&&_IL(a.lid)>0){_SV("lid",a.l=
id);if(_DD(a.lpos))_SV("lpos",a.lpos);_f=3D1}if(_DD(a.fn)){_SV("fn",a.fn)=
;_XT("Download",a);_f=3D2}=0A=
else =
if(_DD(a.el)){_SV("el",a.el);_XT("ExitLink",a);_f=3D1}if(_f>0){_XT("Link"=
,a);_TV()}}}=0A=
function =
_LVP(a,b,c,d,e){c=3D_II(a,"&"+b+"=3D");c=3Dc<0?_II(a,"?"+b+"=3D"):c;if(c>=
-1){d=3D_II(a,'&',c+_IL(b)+2);e=3D_IS(a,c+_IL(b)+2,d>-1?d:_IL(a));=0A=
if(!_ec){if(!(_II(e,"//")=3D=3D0))return e}else return e}return ""}=0A=
function _LI(a){var =
b=3D""+a.innerHTML,bu=3D_TL(b),i=3D_II(bu,"-1){eval("__f=3D=
/ src\s*=3D\s*['\"]?([^'\" ]+)['\"]?/i");__f.exec(b);=0A=
if(RegExp.$1)b=3DRegExp.$1}return b}=0A=
function _LSP(a,b,c,d){d=3D_IP(a,b);return d.join(c)}=0A=
function =
_LS(a,b,c,d,e,f,g){c=3D_D("lim")?_lim:100;b=3D(_IL(a)>c)?_A(_IS(a,0,c)):_=
A(a);b=3D_LSP(b,"%0A","%20");b=3D_LSP(b,"%0D","%20");b=3D_LSP(b,"%09","%2=
0");=0A=
c=3D_IP(b,"%20");d=3D_NA();e=3D0;for(f=3D0;f<_IL(c);f++){g=3D_RP(c[f],"%2=
0","");if(_IL(g)>0){d[e++]=3Dg}}b=3Dd.join("%20");return unescape(b)}=0A=
function =
_EM(a,b,c,d){a=3D_D("fv");b=3D_II(a,";"),c=3DparseInt(a);d=3D3;if(_TL(a)=3D=
=3D"n"){d=3D999;_fv=3D""}else =
if(b>-1){d=3D_IS(a,0,b);_fv=3D_IS(a,b+1,_IL(a))}=0A=
else if(c>0){d=3Dc;_fv=3D""}return d}=0A=
function _FF(e){var a=3D(_bnN)?this:_EVO(e);_hlf=3D(a.lf)?a.lf:""}=0A=
function =
_FU(e){if(_hfs=3D=3D0&&_IL(_hlf)>0&&_fa=3D=3D1){_hfs=3D1;if(_hfc&&!_hfa){=
_SV("sf","1");_XT("FormComplete",_hfc)}else =
if(_IL(_hlf)>0){_SV("lf",_hlf);_XT("FormAbandon",_hlf)}=0A=
_TV();_hlf=3D"",_hfs=3D0,_hfc=3D0}}=0A=
function _FO(e){var =
a=3Dtrue;if(_DD(this._FS))eval("try{a=3Dthis._FS()}catch(e){}");if(a!=3Df=
alse)_hfc=3D1;return a}=0A=
function _FA(a,b,c,d,e,f,g,h,i,ff,fv,s){b=3Da.forms;ff=3Dnew =
Object();f=3D_EM();for(c=3D0;c<_IL(b);c++){ff=3Db[c],d=3D0,s=3D0,e=3Dff.e=
lements;=0A=
g=3Dff.name?ff.name:"forms["+c+"]";for(h=3D0;h<_IL(e);h++){if(e[h].type&&=
"hiddenbuttonsubmitimagereset".indexOf(e[h].type)<0&&d++>=3Df)break}if(d>=
=3Df){_fa=3D1;=0A=
for(h=3D0;h<_IL(e);h++){i=3De[h];if(i.type&&"hiddenbuttonsubmitimagereset=
".indexOf(i.type)<0){i.lf=3Dg+".";i.lf+=3D(i.name&&i.name!=3D"")?i.name:"=
elements["+h+"]";=0A=
_EV(i,"focus",_FF)}}ff._FS=3Dnull;ff._FS=3Dff.onsubmit;if(_DD(ff._FS)&&ff=
._FS!=3Dnull){ff.onsubmit=3D_FO}else =
if(!(_bnN&&_bv<5)&&_hM&&!(_bnI&&!_I5)){if((!_bnI)||=0A=
(_II(navigator.userAgent,"Opera")>-1)){ff.onsubmit=3D_FO}else{_EV(ff,"sub=
mit",_FO);=0A=
eval("try{document.forms["+c+"]._FS=3Ddocument.forms["+c+"].submit;docume=
nt.forms["+c+"].submit=3D_FO;throw ''}catch(E){}")}}}}}=0A=
function _GR(a,b,c,d){if(!_D("hrf"))return =
a;if(_II(_hrf,"http",0)>-1)return =
_hrf;b=3Dwindow.location.search;b=3D_IL(b)>1?_IS(b,1,_IL(b)):"";=0A=
c=3D_II(b,_hrf+"=3D");if(c>-1){ =
d=3D_II(b,"&",c+1);d=3Dd>c?d:_IL(b);b=3D_IS(b,c+_IL(_hrf)+1,d)}return(b!=3D=
_hud&&_IL(b)>0)?b:a}=0A=
function =
_PO(a,b,c,d,e,f,g){d=3Dlocation,e=3Dd.pathname,f=3D_IS(e,_IF(e,"/")+1),g=3D=
document.title;if(a&&b=3D=3Dc){return(_pndef=3D=3D"title"&&g!=3D""&&g!=3D=
d&&=0A=
!(_bnN&&_II(g,"http")>0))?g:f?f:_pndef}else{return =
b=3D=3Dc?(e=3D=3D""||e=3D=3D"/")?"/":_IS(e,(_ctdef!=3D"full")?_IF(e,"/",_=
IF(e,"/")-2):_II(e,"/"),_IF(e,"/"))=0A=
:(b=3D=3D"/")?b:((_II(b,"/")?"/":"")+(_IF(b,"/")=3D=3D_IL(b)-1?_IS(b,0,_I=
L(b)-1):b))}}=0A=
function _PP(a,b,c,d){return =
""+(c>-1?_PO(b,_IS(a,0,c),d)+";"+_PP(_IS(a,c+1),b,_II(_IS(a,c+1),";")):_P=
O(b,a,d))}=0A=
_mlc=3D_PP(_mlc,0,_II( =
_mlc,";"),"CONTENT+CATEGORY");_pn=3D_PP(_pn,1,_II(_pn,";"),"PUT+PAGE+NAME=
+HERE");=0A=
function _NN(a){return _D(a)!=3D"none"}=0A=
function _E(a){var b=3D"";var d=3D_IP(a,",");for(var =
c=3D0;c<_IL(d);c++)b+=3D"&"+d[c]+"=3D"+_A(_D(d[c]));return b}=0A=
function =
_F(a,b){return(!_II(a,"?"+b+"=3D"))?0:_II(a,"&"+b+"=3D")}function =
_G(a,b,c,d){var =
e=3D_F(a,b);if(d&&e<0&&top&&window!=3Dtop){e=3D_F(_tls,b);=0A=
if(e>-1)a=3D_tls};return(e>-1)?_IS(a,e+2+_IL(b),(_II(a,"&",e+1)>-1)?_II(a=
,"&",e+1):_IL(a)):c}=0A=
function =
_H(a,b,c){if(!a)a=3Dc;if(_I5||_N6){eval("try{_vv=3D_G(location.search,'"+=
a+"','"+b+"',1)}"+__c+"{}")}else{_vv=3D_G(location.search,a,b,1)}return =
unescape(_vv)}=0A=
function =
_I(a,b,c,d){__f=3D_IS(a,_II(a,"?"));if(b){if(_I5||_N6){eval("try{_hra=3D_=
G(__f,_hqsr,_hra,0)}"+__c+"{}")}else{_hra=3D_G(__f,_hqsr,_hra,0)}};=0A=
if(c&&!_hra){if(_I5||_N6){eval("try{_hra=3D_G(location.search,_hqsp,_hra,=
1)}"+__c+"{}")}else{_hra=3D_G(location.search,_hqsp,_hra,1)}};=0A=
if(d&&!_hra)_hra=3Dd;return _hra}function =
_J(a,b,c,d){c=3D_II(a,"CP=3D");d=3D_II(a,b,c+3);return(c<0)?"null":_IS(a,=
c+3,(d<0)?_IL(a):d)}=0A=
var =
__r=3D".referrer",_rf=3D_A(eval("document"+__r)),_et=3D0,_oe=3D0,_we=3D0,=
_ar=3D"",_hM=3D(!(_II(navigator.userAgent,"Mac")>-1)),_tls=3D"";=0A=
_bv=3DparseInt(navigator.appVersion);_bv=3D(_bv>99)?(_bv/100):_bv;var =
__f,_hrat=3D_D("hra"),_hra=3D"",__c=3D"catch(_e)",_fa=3D0,_hlfs=3D0,_hoc=3D=
0,=0A=
_hlf=3D'',_ce=3D'',_ln=3D'',_pl=3D'',_bn=3Dnavigator.appName,_bn=3D(_II(_=
bn,"Microsoft")?_bn:"MSIE"),_bnN=3D(_bn=3D=3D"Netscape"),_bnI=3D(_bn=3D=3D=
"MSIE"),=0A=
_hck=3D"*; path=3D/; "+(_D("cpd")&&_D("cpd")!=3D""?(" =
domain=3D."+_D("cpd")+"; =
"):"")+_ex,_N6=3D(_bnN&&_bv>4),_I5=3Dfalse,_ss=3D"na",_sc=3D"na",_sv=3D11=
,_cy=3D"u",_hp=3D"u",=0A=
_tp=3D_D("ptc");if(_bn=3D=3D"MSIE"){var =
_nua=3Dnavigator.userAgent,_is=3D_II(_nua,_bn),_if=3D_II(_nua,".",_is);if=
(_if>_is)_I5=3D_nua.substring(_is+5,_if)>=3D5}=0A=
if(_N6||_I5)eval("try{_tls=3Dtop.location.search}catch(_e){}")=0A=
function =
_PV(){_dcmpe=3D_H(_D("dcmpe"),_D("dcmpe"),"DCMPE");_dcmpre=3D_H(_D("dcmpr=
e"),_D("dcmpre"),"DCMPRE");_vv=3D"";_cmp=3D_H(_D("cmpn"),_D("cmp"),"CMP")=
;=0A=
_gp=3D_H(_D("gpn"),_D("gp"),"GP");_dcmp=3D_H(_D("dcmpn"),_D("dcmp"),"DCMP=
");if(_II(_cmp,"SFS-")>-1){document.cookie=3D"HBCMP=3D"+_cmp+"; =
path=3D/;"+=0A=
(_D("cpd")&&_D("cpd")!=3D""?(" domain=3D."+_D("cpd")+"; =
"):"")+_ex}if(_bnI&&_bv>3)_ln=3Dnavigator.userLanguage;=0A=
if(_bnN){if(_bv>3)_ln=3Dnavigator.language;if(_bv>2)for(var =
i=3D0;i<_IL(navigator.plugins);i++)_pl+=3Dnavigator.plugins[i].name+":"};=
_cp=3D_D("cp");=0A=
if(location.search&&_TL(_cp)=3D=3D"null")_cp=3D_J(location.search,"&");if=
(_II(document.cookie,"CP=3D")>-1){=0A=
_ce=3D"y";_hd=3D_J(document.cookie,"*");if(_TL(_hd)!=3D"null"&&_cp=3D=3D"=
null"){_cp=3D_hd}else{document.cookie=3D"CP=3D"+_cp+_hck}}else{document.c=
ookie=3D"CP=3D"+_cp+_hck;=0A=
_ce=3D(_II(document.cookie,"CP=3D")>-1)?"y":"n"};if(window.screen){_sv=3D=
12;_ss=3Dscreen.width+"*"+screen.height;_sc=3D_bnI?screen.colorDepth:scre=
en.pixelDepth;=0A=
if(_sc=3D=3D_hud)_sc=3D"na"};_ra=3D_NA();if(_ra.toSource||(_bnI&&_ra.shif=
t))_sv=3D13;if(!(_bnN&&_bv<5)&&!_bnI&&_hM)eval("try{throw =
_sv=3D14}catch(e){}");=0A=
if((new =
Date()).toDateString)_sv=3D15;if(_hbA.every)_sv=3D16;if(_I5&&_hM){if(_II(=
""+navigator.appMinorVersion,"Privacy")>-1)_ce=3D"p";=0A=
if(document.body&&document.body.addBehavior){document.body.addBehavior("#=
default#homePage");_hp=3Ddocument.body.isHomePage(location.href)?"y":"n";=0A=
document.body.addBehavior("#default#clientCaps");_cy=3Ddocument.body.conn=
ectionType}};var =
_hcc=3D(_DD(_hcn))?_D("hcv"):"";if(!_D("gn"))_gn=3D"ehg.hitbox.com";=0A=
if(_D("ct")&&!_D("mlc"))_mlc=3D_ct;_XT("PrePVR","");_ar=3D_GP()+_gn+"/HG?=
hc=3D"+_mn+"&hb=3D"+_A(_acct)+"&cd=3D1&hv=3D6&n=3D"+_A(_pn,1)+"&con=3D&vc=
on=3D"+_A(_mlc,1)+"&tt=3D"=0A=
+_D("lt")+"&ja=3D"+(navigator.javaEnabled()?"y":"n")+"&dt=3D"+(new =
Date()).getHours()+"&zo=3D"+(new Date()).getTimezoneOffset()+"&lm=3D"+=0A=
Date.parse(document.lastModified)+(_tp?("&pt=3D"+_tp):"")+_E((_bnN?"bn,":=
"")+"ce,ss,sc,sv,cy,hp,ln,vpc,vjs,hec,pec,cmp,gp,dcmp,dcmpe,dcmpre,cp,fnl=
")=0A=
+"&seg=3D"+_D("seg")+"&epg=3D"+_D("epg")+"&cv=3D"+_A(_hcc)+"&gn=3D"+_A(_D=
("hcn"))+"&ld=3D"+_A(_D("hlt"))+"&la=3D"+_A(_D("hla"))+"&c1=3D"+_A(_D("hc=
1"))+"&c2=3D"+=0A=
_A(_D("hc2"))+"&c3=3D"+_A(_D("hc3"))+"&c4=3D"+_A(_D("hc4"))+"&customerid=3D=
"+_A(_D("ci")?_ci:_D("cid"))+"&ttt=3D"+_lidt+","+_lpost;=0A=
if(_I5||_N6){eval("try{_rf=3D_A(top.document"+__r+")+''}"+__c+"{_rf=3D_A(=
document"+__r+")+''}")}=0A=
else{if(top.document&&_IL(parent.frames)>1){_rf=3D_A(eval("document"+__r)=
)+""}else =
if(top.document){_rf=3D_A(eval("top.document"+__r))+""}}if((_rf=3D=3D_hud=
)||=0A=
(_rf=3D=3D""))_rf=3D"bookmark";_rf=3Dunescape(_rf);_rf=3D_GR(_rf);_hra=3D=
_I(_rf,_D("hqsr"),_D("hqsp"),_hrat);_ar+=3D"&ra=3D"+_A(_hra)+"&pu=3D"+_A(=
_IS(eval("document.URL")=0A=
+"",0,_pum))+_hbSendEV()+"&rf=3D";_ar+=3D(_IL(_ar)+_IL(_rf)<2048)?_A(_rf)=
:"bookmark";if(_IL(_ar)+_IL(_pl)<2048)_ar+=3D"&pl=3D"+_A(_pl);=0A=
_XT("PrePV",_ar);if(_D("onlyMedia")!=3D"y")_hbi.src=3D_ar+"&hid=3D"+Math.=
random();_hbq=3D_IS(_ar,0,_II(_ar,"&hec"));_XT("PostPV",_ar);_hbE=3D_NA()=
}_PV();=0A=
function =
_Q(a){a+=3D"&hid=3D"+Math.random();if(_hif=3D=3D0){_hif=3D1;_hbs=3D"";_hb=
s=3Dnew Image();_hbs.src=3Da}else{_hif=3D0;_hbi=3D"";_hbi=3Dnew =
Image();_hbi.src=3Da}}=0A=
function =
__X(a){if(_ec=3D=3D0){_ec=3D1;a=3Ddocument;if(_NN("lt")||_NN("dlf")||_NN(=
"elf"))_LP(a.links);if(_NN("fv"))_FA(a);=0A=
if(_NN("lt")&&_IL(_lvl)>0&&_lvl!=3D-1){_SV('lv.id',_lvid,1);_SV('lv.pos',=
_lvpos,1);_TV()}}}=0A=
function =
_EV(a,b,c,d){if(a.addEventListener){a.addEventListener(b,c,false)}else =
if(a.attachEvent){a.attachEvent(((d=3D=3D1)?"":"on")+b,c)}}=0A=
function _EVO(e){return document.all?window.event.srcElement:this} =0A=
function =
_RCV(a,b,c,d){b=3Ddocument.cookie;c=3D_II(b,a+"=3D");d=3D"";if(c>-1){d=3D=
_II(b,";",c+1);d=3D(d>0)?d:_IL(b);d=3D(d>c)?_IS(b,c+_IL(a)+1,d):""}return=
d}=0A=
function _RRV(a){return(_LVP(document.referrer,a))}function =
_RPV(a){return(_LVP(document.URL,a))}=0A=
function _XT(a,b){if(typeof _D("hbOn"+a)=3D=3D_huf)eval("_hbOn"+a+"(b)")}=0A=
_EV(window,"load",__X);_EV(window,"unload",_FU);eval('setTimeout("__X()",=
3000)');
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://s.pcworld.com/script/hbxmedia.js
//hbxmedia.js,HBX2.0,COPYRIGHT 1997-2006 WEBSIDESTORY,INC. ALL RIGHTS =
RESERVED. U.S.PATENT No.6,393,479B1 & 6,766,370. =
INFO:http://websidestory.com/privacy
/* hbxmedia Usage:
Declare hbx.media as the id of the media object to be tracked
ex: hbx.media =3D "MyMediaObject";
Include hbxmedia.js after the hbx.js is included
The defer directive needs to be on either both JS includes or =
neither of them
*/
var _vjs=3D"HBX0200.10m";
var _mis=3D1000;
var _mo=3Dnew =
Object(),_mt=3D"",_mi=3D"",_ms=3D-1,_ms0=3D"stop",_ms1=3D"play",_ms2=3D"p=
ause",_ms3=3D"playp",_mac=3D0,_ma=3Dnew =
Array(),_mai=3D0,_m=3D'',_mpf=3D0,_mtt=3D"";
var _fl=3D"",_plf=3D0,_pp=3D0,_ppv=3D120;
function =
_MT(){if(hbx.media&&hbx.media!=3D"")_mo=3Deval("document."+hbx.media);if(=
_mo){_mt=3D_mo.classid;
if(!_mt&&_mo.type){for(var =
a=3D0;a<_mac;a++){if(_ma[a].tp.indexOf(_mo.type.toLowerCase())>-1){_mt=3D=
_ma[a].mt;break}}}
if(_mt&&_mt!=3D"")_mi=3D_MTF()}}
function _MTS(){clearInterval(_mi)}
function _MUL(){_MTS();_MPT()}
function =
_MTV(a,b,c,d,e,f,g){if(a!=3D_fl){_fl=3Da;b=3D0}_SV('m.f',a);_SV('m.cp',b)=
;_SV('m.ep',c);_SV('m.s',d);_SV('m.cl',e);_SV('m.cv',f);_SV('m.ar',g);
_SV('m.tt',_mtt);if(typeof =
_XT!=3D"undefined")_XT("Media",d);_TV();_pp=3D0}
function =
_MTF(a){if(_mt&&_mt!=3D""){for(a=3D0;a<_mac;a++){if(_ma[a].mt.indexOf(_mt=
.toLowerCase())>-1){_mai=3Da;break}}_EV(window,"unload",_MUL);
if(_ma[_mai].pt!=3D""){_mtt=3D"e";_EV(_mo,_ma[_mai].pt,_MPT,1);}else{_mtt=
=3D"i";}return setInterval("_MPT(1)",_mis)}} =20
function _MPT(a,b,c,d,e){if(_plf=3D=3D0){_plf=3D1;var =
_t=3D"try{eval(",_c=3D")}catch(e){";c=3D_ma[_mai];if(_mo){a=3Deval(_t+"c.=
ps"+_c+"''}");if(a=3D=3Dc.p){d=3Deval(_t+"c.cp"+_c+"0}");
e=3Deval(_t+"c.ep"+_c+"0}");if((e-d)*c.po<1500&&_pp>3){_pp=3D_ppv}_pp++}i=
f((_ms!=3Da||_pp>_ppv)&&a!=3D"undefined"&&(a=3D=3Dc.p||a=3D=3Dc.w||a=3D=3D=
c.s)){_ms=3Da;
b=3D(a=3D=3Dc.s)?_ms0:(a=3D=3Dc.w)?_ms2:(a=3D=3Dc.p)?_ms1:"u";_mpf|=3D(b=3D=
=3D_ms1);if(b!=3D"u"&&(_mpf||_pp>_ppv)){if(_pp>_ppv&&a=3D=3Dc.p)b=3D_ms3;=
=20
_MTV(eval(_t+"c.mn"+_c+"''}"),eval(_t+"c.cp"+_c+"0}")*c.po,eval(_t+"c.ep"=
+_c+"0}")*c.po,b,c.cl,eval(_t+"c.cv"+_c+"''}"),eval(_t+"c.ar"+_c+"''}"))}=
}}}_plf=3D0}
//Video Configurations
_m=3D_ma[_mac++]=3Dnew Object();
_m.mt=3D"clsid:6bf52a52-394a-11d3-b153-00c04f79faa6";
_m.tp=3D"";
_m.p=3D3;
_m.w=3D2;
_m.s=3D1;
_m.mn=3D"_mo.url";
_m.pt=3D"_mo.playStateChange";
_m.ps=3D"_mo.playState";
_m.cp=3D"_mo.controls.currentPosition";
_m.ep=3D"_mo.currentMedia.duration";
_m.cv=3D"_mo.versionInfo";
_m.ar=3D"";
_m.po=3D1000;
_m.cl=3D"Windows Media Player";
_m=3D_ma[_mac++]=3Dnew Object();
_m.mt=3D"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95";
_m.tp=3D"video/x-ms-wmv,video/x-msvideo,video/x-ms-asf,application/x-oleo=
bject";
_m.p=3D2;
_m.w=3D1;
_m.s=3D0;
_m.mn=3D"_mo.filename";
_m.pt=3D"_mo.PlayStateChange";
_m.ps=3D"_mo.PlayState";
_m.cp=3D"_mo.CurrentPosition";
_m.ep=3D"_mo.SelectionEnd";
_m.cv=3D"_mo.code+'6.4'";
_m.ar=3D"_mo.AutoRewind";
_m.po=3D1000;
_m.cl=3D"Windows Media Player";
_m=3D_ma[_mac++]=3Dnew Object();
_m.mt=3D"clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b";
_m.tp=3D"video/quicktime,video/mpeg";
_m.p=3D1;
_m.w=3D0;
_m.s=3D-10;
_m.mn=3D"_mo.GetURL()";
_m.pt=3D"";
_m.ps=3D"_mo.GetRate()";
_m.cp=3D"_mo.GetTime()/_mo.GetTimeScale()";
_m.ep=3D"_mo.GetDuration()/_mo.GetTimeScale()";
_m.cv=3D"_mo.GetQuickTimeVersion()";
_m.ar=3D"";
_m.po=3D1000;
_m.cl=3D"Quicktime";
_m=3D_ma[_mac++]=3Dnew Object();
_m.mt=3D"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa";
_m.tp=3D"video/realmedia,video/vnd.rn-realvideo,audio/x-pn-realaudio-plug=
in,audio/x-pn-realaudio,audio/x-pn-realvideo";
_m.p=3D3;
_m.w=3D4;
_m.s=3D0;
_m.mn=3D"_mo.GetSource()";
_m.pt=3D"";
_m.ps=3D"_mo.GetPlayState()";
_m.cp=3D"_mo.GetPosition()";
_m.ep=3D"_mo.GetLength()";
_m.cv=3D"_mo.GetVersionInfo()";
_m.ar=3D"";
_m.po=3D1;
_m.cl=3D"RealPlayer";
_MT();
------=_NextPart_000_0000_01C80466.3494EE50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://jlinks.industrybrains.com/jsinsert?sid=30&ct=PCW_HP_ROS&num=7&layt=3
var ibHtml1=3D'