From: Subject: E.P.I.C. Preaching - Squawk Box - Wikiletics Date: Sun, 15 Jul 2007 22:18:26 +0800 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C7C72E.10E4ED90" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://wikiletics.com/display/STAT/E.P.I.C.+Preaching =EF=BB=BF E.P.I.C. Preaching - Squawk Box - Wikiletics

=
&n= bsp;
Dashboard > Squawk Box = > Home > = E.P.I.C.=20 Preaching
=20
E.P.I.C.=20 Preaching
    Log In | Sign Up =  =20
Brows= e=20 Space    
Added by sergio, last=20 edited by David = Mackey on Oct 28, 2006  (view=20 change) show=20 comment hide=20 comment=20
Comment:=20 Corrected some spelling errors and grammar.
View=20 page history
Labels: 
(None)

Add=20 Labels
 
Enter labels to add to this=20 page:
=20
Tip: Looking for = a label?=20 Just start typing.

E.P.I.C.=20 Preaching

By Leonard Sweet
 
Judy Garland believed = that she owed=20 it to her audiences to gives them everything she had. Just = before=20 walking out on stage, the superstitious Garland refused to = utter the=20 standard entertainment slogan, "It's time to break a leg." = Instead,=20 she'd say, "It's time to give blood." I can't think of = a better=20 definition of preaching than "giving blood." Of the three=20 traditional ways of making a living - mud, blood, and grease = -=20 preaching involves all three: the mud pies of creativity, = the blood=20 bank of living in the Word, and the grease pit of hard work = and=20 dirty hands. But of the three, giving blood is the defining=20 metaphor. The blood of Christ is the prime bearer of the = gospel's=20 message and meaning. Red is the primary color of = Christianity. To=20 appropriate what sportswriter Red Smith used to say about = writing:=20 "Preaching is easy; I just open a vein and bleed." Blood is = liquid=20 life. Preachers are homiletic hemophiliacs, hereditary = bleeders of=20 liq­uid life. If you've never bled, you have no material = for=20 preaching. The real questions for the 21st-century preacher = are:

  • Will the blood you give be ink or EPIC?=20
  • Will the blood you give be your blood or royal blood? =

C.S. Lewis once said that Christian writers should have = blood in=20 their veins, not ink. The same is true of the 21st-century = preacher.=20 Preachers should preach from the blood in the veins, not = from the=20 ink of words on a manuscript. Preaching has become too inky, = too=20 watery, and too bloodless. And the Christian preacher should = bleed=20 the shed blood of Christ, as preaching is ultimately God's = act=20 through the power of the Holy Spirit. A preacher sets a = table before=20 the people in which there is laid out the body and blood of = Christ=20 in bread and wine and in word and flesh. If, when you're = finished=20 preaching, you're not finished, spent, wiped out-if you = haven't died=20 a little-you haven't really preached. I once heard = Presbyterian=20 preacher Howard Edington say that if you're truly preaching, = you=20 will shorten your life a little, because every time you = preach you=20 die a little.

E.P.I.C.

A DEATH-KNELL AND A DOORBELL

The word "epic" carries a double meaning of both timeless = and=20 timely. The gospel is both. But even more, EPIC is my = acronym for=20 preaching that sounds the death-knell for pulpitcentric = Christianity=20 and rings the doorbell for preaching that is:

  • experiential,=20
  • participatory,=20
  • image-rich, and=20
  • connective.

In the once-dominant culture of the printing press, = preaching was=20 uniformly accepted as pulpit presentations that were = rational,=20 representative, word-based, and individualistic. However, = that=20 pulp-and-ink approach is rapidly losing whatever = effectiveness it=20 had. For postmodern culture, EPIC preaching leaves the = pulpit behind=20 while taking with it the contributions of modernity to the = preaching=20 enterprise. EPIC preaching is less a repudiation than an = expansion=20 of modernity: rationality expanded to embrace experience,=20 performance expanded to embrace participation, exegesis of = the Word=20 expanded to embrace exegesis of the image, and the joining = of the=20 "me" and the "we" that's the essence of connectivity. EPIC = preaching=20 is a communal experience of the Word created by = participation in an=20 image-rich narrative or sequence of stories.

EXPERIENTIAL

Modern preaching prided itself on lucid reasoning, = coherent=20 message, excellent delivery, focused structure, and = stylistic=20 elegance. No more. The days of the "pulpit prince" with = "golden=20 tonsils" and oratorical excellence are over. EPIC preaching = is=20 helping people experience God.

The postmodern consciousness involves a sea change in = human=20 cognition. "Points" no longer make points. People are = beginning to=20 think in brand new ways that are creating whole new = experiences.=20 People are moving from knowing God with the left brain to = knowing=20 God with the whole brain, from faith formation through = catechism to=20 faith formation through proverbs, metaphors, music, images,=20 imagination, and dance. People today aren't hungry for new=20 information or brilliant logic; people are hungry for fresh=20 experiences of faith and for experiences of a God who loves = them.=20 The German philosopher Hans-Georg Gadamer argues that the = difference=20 between experience and thought is the difference between = dancing and=20 talking about dancing. People today want to dance, not just = talk=20 about dancing.

Ironically, this transition is returning the preaching = craft to=20 Jesus' mode of communication. "Other rabbis want to speak so = that=20 their words can reach the sky," Kotsker Rebbe used to say; = "I want=20 to speak so that my words will reach the stomach." Jesus = spoke so=20 that his words would reach the heart. To do this he used a = method of=20 communication called parables found in many languages and = many=20 religions. A parable was a literary form designed less to = convey=20 concepts than to platform experiences. Jesus was so skilled = at using=20 parables (53 of them, each only about 100-150 words) that he = was=20 known as a "parabolist."

Moderns have been as unnerved and slightly embarrassed by = Jesus'=20 penchant for parables as were the original disciples, who = could not=20 figure out why Jesus used parables in the first place = (Matthew=20 13:10). They complained that the people simply didn't "get = it" with=20 Jesus' teaching style. Why couldn't he make things as clear = as=20 possible? Very often his hearers said, "We don't understand = what he=20 is talking about" (John 16:18). They wanted him to "get = linear," to=20 say exactly what he meant, just as we expect sermons to = layout=20 "truth" in black and white, lay truth "on the line," and to = blow no=20 uncertain trumpet.

But Jesus' goal was not that everyone understand him, but = that=20 everyone experience him. Indeed, it's quite possible Jesus = didn't=20 intend for everyone to get his message (Matthew 13:13-15). = He did=20 invite everyone, however, to hear God's story, become part = of God's=20 story, and to learn about others who joined God's story or = were=20 seeking God's presence. In fact, if a sermon is truly EPIC, = you=20 won't be able to put fully into words what it means.

To be sure, since the early 1980s preaching has witnessed = a=20 resurgence of narrative approaches, which have shifted = homiletics=20 from more discursive, rational, analytic discourses to more=20 inductive, perceptual journeys. But these stories were still = carrying "points" and "principles," and were designed to=20 "principalize" the text through induction (rather than = deduction),=20 where stories and examples reveal the abstract proposition = which has=20 already been asserted as true. Jesus never used stories as = stand-ins=20 and stand ups for propositions and points.

The function of narrative in EPIC preaching is not to = deliver=20 points but to help people see, hear, taste, touch, and smell = the=20 gospel. Some faith traditions (such as Pentecostal, = charismatic,=20 Eastern Orthodox) have been leading us this way, and we = would do=20 well to sit at their feet. W.E.B. DuBois, the author of the = civil=20 rights classic The Souls of Black Folk, was so struck by how = the=20 preacher and the congregation work to create a drama = together that=20 he described the sermon in the black church tradition as "a=20 happening." In the homiletic resource my wife and I provide = called=20 PreachingPlus.com3D"", the first = thing featured=20 after the TextAlive section is not "illustrations" but = "animations."=20 You illustrate points. You animate stories and experiences. = Through=20 his use of parables, Jesus was more an "animator" than an=20 "illustrator."

A preacher's real passion is generating, circulating, and = animating stories. Preaching invites people to make their = home in a=20 text, to write themselves into the biblical narrative, and = to let=20 their new home transform their lives. Preachers are people = with a=20 thousand tales to tell... not tales about themselves, but = tales=20 about what Jesus has done, is doing, and will do in the = church and=20 in the world.

PARTICIPATORY

A parable is, by definition, participatory - an animated = story=20 whose "points" are left open, trusting the listeners to come = to a=20 conclusion on their own. Preaching has always been a = collaborative=20 process involving both preacher and congregation. It isn't a = sermon=20 until it's received. A sermon succeeds or fails not based on = the=20 preacher, but based on the congregation.

Jesus called for active listening with the refrain "let = anyone=20 with ears to hear, listen," and active listening requires=20 participation. So much participation that some homileticians = have=20 even argued that the skills of the hearers are more = important than=20 the skills of the preacher. But the preacher is also called = to be an=20 active listener: A true sermon is written with the ear. = Skilled=20 preachers are always listening to the voice of Christ. In = this way,=20 preaching gives voice to the church. Consecrated lips = require=20 consecrated ears.

But in EPIC preaching the congregation is not a passive = consumer=20 of content, but a participant in the creation and refinement = of the=20 experience. And increasingly the congregation is part of the = act of=20 sermon composition and design. In EPIC preaching it's less = about the=20 dynamics of human absorption than the dynamics of human = interaction=20 that shape the homiletic form. Quality is raised by = increasing the=20 interaction on every front, especially between the preacher = and the=20 congregation. Homiletics professor O. Wesley Allen Jr., = describes=20 the intimacy of flesh speaking to flesh in these terms: = "Sermons=20 must be dialogical in nature. This does not mean that = preachers must=20 invite oral feedback during every worship service...Instead, = offering dialogical sermons means that preachers must not = hand down=20 absolute, authoritatively pronounced truths [but] they must = offer=20 invitations to the hearers to engage the vision of the = sermon=20 intellectually, emotionally, and experientially."

Participatory preaching brings us closer to the way Jesus = communicated with others. In a content analysis of the 125 = incidents=20 of Jesus' encounters with people, Ralph L. Lewis has found = that=20 "roughly 54 percent of those encounters are initiated by his = hearers. Instead of standing up and proclaiming the message = he=20 wanted the people to hear, he responded to his audience's = questions,=20 objections, doubts. He allowed and welcomed their = involvement."

In pulpit-centric preaching, great labor was spent on how = to=20 write better opening sentences. In EPIC preaching, time is = invested=20 on how to create better opening (and closing) interactions. = Once=20 again, preachers have much to learn from others within = Christianity=20 such as the elaborate call-and-response (or = response-and-call) cues=20 and other interactive rhetorical devices that are so well = developed=20 in black preaching traditions.

IMAGE-RICH

Aleksandr Solzhenitsyn concluded his Nobel lecture on = literature=20 by quoting a Russian proverb: "One word of truth outweighs = the whole=20 world." In a postmodern culture, "one image of truth" and = especially=20 "one person of truth" tilts the balance of history. = Postmodern=20 people are like the Israelites in the desert... they'll = follow=20 pillars of fire and clouds, but not abstract commands and=20 disembodied voices.

"Sinners in the Hands of an Angry God" is perhaps the = most famous=20 sermon in American history. If people know about one sermon, = it's=20 this one. Why do we remember it? It's not the content. It's = Jonathan=20 Edward's unforgettable imagery of people as spiders held = over the=20 flames of hell.

EPIC preaching is the art of exegeting images. The power = of the=20 Word isn't in the words; it's in the images, the stories, = the=20 "music" of the text. Before there was any matter, there was = mind:=20 and the mind was made of metaphor. Genesis tells us that God = made=20 "every flower of the field before it was in the earth, and = every=20 herb of the field before it grew." Since the mind is made of = metaphors (when you dream, what do you dream in...words?), = there's=20 no greater power anyone can hold than the power preachers = are given=20 by their people: the power to choose the metaphors. Jesus = was=20 history's greatest master of metaphor. Embedded in his = metaphors is=20 metamorphosis. The metaphors we live in become the reality = we live=20 out.

In pulpit-centric preaching, we learned how to exegete = words.=20 EPIC preaching exegetes images. To be "stewards of the = mystery,"=20 EPIC preachers are first stewards of metaphor. The Bible = "thinks"=20 not in propositions and points, but in images, metaphors,=20 narratives, symbols, and so on. Poetry is more the language = of=20 biblical faith than prose or philosophy. Thus preachers must = take up=20 the poet's tools...image and imagination, metaphor and = story, and=20 metaphor-stories known as parables. Homiletics professor = Barbara=20 Brown Taylor said, "The church's central task is an = imaginative one.=20 By that I do not mean a fanciful or fictional task, but one = in which=20 the human capacity to imagine - to form mental pictures of = the self,=20 the neighbor, the world, the future, to envision new = realities-is=20 both engaged and transformed."

What EPIC preachers look for in a text is less the "main=20 principle" or the "key idea" or the "big point" and more the = "master=20 metaphor," the leading or controlling metaphor that reframes = the=20 conversation or concept. This metaphor can be a character, a = key=20 moment in the story, even a word that functions as an image. = Metaphor is not simply an adornment to critical insight, but = a=20 method of perception in itself. Metaphors are not the = sermon's=20 seasoning; they're the very meat of the sermon itself.

It's not that homileticians haven't appreciated the fact = that we=20 live in a visual culture that prefers images to words. After = all,=20 advertisers spend billions of dollars a year not to bombard = us with=20 words, but to surround us with images. But our solution has = been for=20 preachers to use "charts" and "graphs" and PowerPoint, where = the=20 power is still in the point and not the image. When images = are used,=20 especially by the two groups that have the most problem with = metaphors (fundamentalists and higher-critics), they're used = to get=20 to points and propositions. They break the text down into a = thousand=20 parts and microscope each piece rather than see it whole. = The images=20 are thus "hijacked" as a means to an end, not the end = themselves.=20 However, Christianity begins and ends in an image: Jesus is = the=20 image of God. In Christianity, image is everything.

Metaphor is by definition experiential, interactive, and=20 relational. EPIC preaching is at its best when it turns = images into=20 props, and when those props become interactive icons that = people can=20 take home with them. Jesus was a master at this. In the = story of the=20 trap set for him by the Pharisees, the tribute to Caesar, = Jesus=20 makes the Pharisees produce a coin with Caesar's image = stamped on=20 it. By producing the coin, Jesus sprung the trap on them. = They have=20 already proven that they are willing to employ and deploy an = idol, a=20 graven image, which was specifically forbidden by the law. = The=20 both/and answer ("Give to Caesar what's Caesar's, and give = to God=20 what's God's") typifies metaphor's multiple meanings: Both = sides=20 could feel that he was supporting each one of them, while = Jesus was=20 telling them both that they were asking the wrong question = and=20 pointing them in the right direction.

CONNECTIVE

EPIC preaching is not pulpit oratory, it's pew connection = and=20 interaction. The "command-and-control" model of = pulpit-centric=20 preaching is fading, just as "command-and-control" models of = information-sharing are fast disappearing. It's the = connections that=20 count. It's the connected that inherit the kingdom. The = greater the=20 number and quality of the connections, the greater the = caliber and=20 creativity of discipleship. And worship. That's why, in many = ways,=20 you can't write an essay on EPIC preaching. Only on EPIC = worship. I=20 found this out when I invited cutting-edge preachers from = around the=20 globe to address a conference. They wouldn't come without = their=20 worship leaders and other members with whom they = connect.

EPIC preaching restores people's connection to God, to = each=20 other, and to creation. A true worship experience is less an = individual experience than a community experience. In the = modern=20 world worship was sanctuary; in the postmodern world worship = is=20 communion. It's an experience of relationship, of = connectedness, of=20 communion. Liturgy is where the individual and the communal = are=20 reconceived as a connective. The word "liturgy" comes from = Greek=20 leitourgia, which implies an action whereby individuals come = together to become something different than they were as = lone=20 individuals. True EPIC creates a community where the broken = body and=20 blood of Christ pours out to heal our pain, our brokenness, = our=20 estrangement, and where the very concept of community gets=20 reinvented: "And if one member suffers, all the members = suffer with=20 it" (1 Corinthians 12:26). When a small country church = gathers, the=20 whole church is worshiping.

EPIC preaching doesn't make points so much as make = connections,=20 and making connections requires nonlinear more than analytic = skills.=20 This is one of the most important traits of the EPIC = preacher: the=20 ability to connect the dots-the dots between the = congregation and=20 the text, the text and the culture, the culture and God. In = your=20 research and reading, your movie-going and your home-coming, = Gardner=20 Taylor says that "All the roads lead to God, as they said = all the=20 roads lead to Rome."

To help people make these connections, EPIC preachers are = not=20 afraid to use material that connects with the lives of our = people.=20 Hence you will find parts of all three levels of culture, in = EPIC=20 worship (high culture, folk culture, and pop culture), but = the=20 dominant connection to culture is through pop culture: = movies,=20 music, cartoons, ads, sports, reality TV, and so on.

E.P.I.C.=20 PREACHERS, TAKE HEART

Very little has been said about the role of technology in = EPIC=20 worship. That's because technology isn't the issue. You can = have no=20 electronic technology and still do EPIC. Just watch comedian = Chris=20 Rock.

My favorite way of EPIC preaching? I don't always get to = do it=20 (and don't make an issue if I can't), but when I'm invited = to preach=20 somewhere one of my first questions is: "Do you have a live=20 Web-feed?" If the answer is "yes," I then ask the second = question:=20 "Can you find me a dancing partner?"

In this type of EPICtivity, I stand in the middle of the=20 congregation, with my Bible open to a text that is also = featured on=20 one of the two screens up front. Together the congregation = and I=20 exegete the leading image(s) of the text. The second screen, = however, is totally under the creative promptings of my = dancing=20 partner. Preferably, this is a person who's grown up on = Google, and=20 not the word search function. While the people and I are = more and=20 more immersing ourselves in the Word, my dancing partner is = Googling=20 the Web for images that are tossed up by our interactions. = And these=20 images are flashed up on that second screen as contributions = to and=20 animations of our conversation. The energy that flows from = these=20 multilayered connections can only be described as = "divine."

That said, not everyone will "get it." As far as I know, = way back=20 in the mid 1990s I preached what some are calling the first=20 Web-based sermon with a live (but very slow) Web-feed. It = took place=20 at the Kentucky Pastors' School for the United Methodist = Church.=20 When the organizers sent me the "evaluations," I was drawn = to one in=20 particular. The pastor had written: "Sweet was a total waste = of=20 time. Left the pulpit and tried to talk to us while using = the=20 Internet. Got nothing out of it."

But EPIC preachers, take heart. There were many who said = the same=20 of Jesus.

 

 

Comments  (Hide)=20

    I enjoyed your article on EPIC = preaching. I=20 thought you made a number of good points. I think that your=20 statement that technology is not a necessary portion of EPIC = preaching was an important point. I think your mention of = having a=20 "dancing partner" for visiting sermons was interesting, = however its=20 not a technique I would want to use with an audience on a = regular=20 basis. It seems to me that it could become a block or a = distraction=20 to the serenity of a service - not that we are always = looking for=20 serenity.

Posted by David = Mackey at=20 Oct 28, 2006 05:07 | Permalink=20

last night a mundane elders' meeting turned = profound.  an=20 elder spoke up and said that he and his family had been = serving=20 at our sanctuary (e.p.i.c.-style) service for two months and = he was=20 disappointed to be having to go back to our contemporary = service,=20 because it lacked the community that has been developed at = the other=20 service.  he was going to miss the dialogue, the = interaction,=20 the conversation, the community of real friends that = developed in=20 that place.  the discussion then moved to a reflection = on our=20 experiment in church which we call sanctuary.  three = years=20 earlier we debated the e.p.i.c values, and many = believed that=20 there was no way this would work.  three years later = the elders=20 are asking how we can make our traditional campus more=20 e.p.i.c. 

e.p.i.c.  isn't a gimic.  it isn't a passing=20 phase.  it's the future of the north american Christian = church.  at least the only church that will survive = into the=20 next century.

Posted by Chris = James at Mar=20 28, 2007 15:10 | Permalink=20

As a communication maven, EPIC was a wonderful find. I = have been=20 trying to think, speak "epically" but as it is a new trek, = not sure=20 how I am doing. So, in the hope that perhaps there are other = like me=20 out there, I make a proposal. I just posted a chapel I gave = in=20 January in which I tried to consciously incorporate = EPICivities. I=20 think I did okay but would love some feedback, dialogue from = others.=20 The sermon is available as a video stream at http://www.taylor.edu/experience/chapel.shtml and then = choosing the=20 2007/01/24 message. It is 25 minutes. Let me know how you = reacted,=20 what questions were raised, suggestions, etc.

Posted by Dale=20 Keller at Apr 03, 2007 23:10 | Permalink=20

A few years ago, at a pastor's conference, I was = privileged to be=20 a dance partner for Len. I admit that I was rather clumsy at = it,=20 being somewhat over 30-years-old, and not very agile. It was = a=20 memorable experience. From that experience, I can give a bit = of=20 advice. This is very hard to do without some practice. = Coordination=20 between the speaker and tech can be very helpful. The tech = needs to=20 be concentrated on just that one task, and not directing = other=20 aspects of the production. I agree that the constant = changing of=20 images can be a distraction to the audience/congregation, = but I feel=20 it can be done tastefully and unobtrusively. The point is = not to=20 have a constant movie of images, but images that bring an=20 emotional/experiential aspect to the discussion. We are so = "point"=20 oriented that it's difficult not to think of supporting the = point,=20 and instead think of adding a dimension to the interaction. = In fact,=20 the speaker will also interact with the images throughout = the=20 discussion.
It is a lot of work, somewhat stressful, and = very=20 non-linear, which makes it difficult for people beyond = middle age to=20 facilitate and experience. Yet I, too, believe meaningful = worship=20 needs to add these elements of vision, song and = poetry-the=20 emotional elements-to continually engage our = pre-modern=20 culture in the timeless story of salvation.

Posted by R.=20 Bruce Weiman at Apr 13, 2007 12:38 | Permalink=20
=

Site powered by a free Open Source = Project /=20 Non-profit License (more) of Confluence - the = Enterprise=20 wiki.
Learn = more or=20 evaluate Confluence = for your=20 organisation.
Powered by Atlassian = Confluence,=20 the Enterprise = Wiki.=20 (Version: 2.1.3 Build:#408 Jan 23, 2006) - Bug/feature request - = Contact = Administrators=20

------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.epiccenter4d.com/e-semglobal/images/Wikiletics-top-name.gif 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 l3Z5l3iZl3q5l3zZl375l4EAADs= ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.epiccenter4d.com/e-semglobal/images/back-2-esem.gif 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 ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.epiccenter4d.com/e-semglobal/images/help.gif R0lGODlhMgAwAMQAAAArRmZHKv9zAEM8Mv+XQZlMDP+JKAAkOwAzU//n0//Jnf/cvtlnCP+zdgAb La5cFv+pYiU0O8ReCv/SrS4mHexuBf/27/+hVP98EQA4XP///wAVIv+5f31KHAAuS//BjiH5BAAA AAAALAAAAAAyADAAAAX/ICKOZGmeaDpmmee+cCzPdO2KGaDvfO//wCDglhMaj0gPoohsOndK5nNq jFKnkcEgaNUNOh0t+AvuBMjjsjnCGzwqgrhAUmDzug+5fs/vP9h5cQYEBBhxFQF3SwARAgYcHAaP kZCQEASVHJiVEIYPEgIYHxYapRoJF3GJOlYDAgSlH7Aas6ULHKYauLkWho4JubkKAhV2ra+lCbO1 Cx+7CQsNycAaEHHUwaapD6yLrrUQpbVxuxzIGrelqRfBDQu5CQIMB0NLHt+mCuKm5KXms+loCZCW a2AwAwIi0LOHrxQpWrkC+rO1C6G+ggRNWQtAz0OLhrlqods1cWQphO8w/7YT0KHjx3PYahF4VEoB AXYmNaAMZjBXA5YHDni8d47kOAHlzgUk0KenqZ8dHAjN0ZDAQ5mYahIIh+6DP3l8MpaCKtUjgKoT 9uUiiS6btT5iNZBdePbcVrWm2KY0NcEQBkKAnY5lKRUAAkaOLG3ammnxq0oNEMYRqQHDxaeE6TYM yGGvrq9sLUimjE2bgAGFD28ulxJa0l0LSJk7ly0XQgqp6wJkLQ4paH/vZlPONmHOhtyrgfd+rVx4 MK6l+rI8rpl2Xs/M0cmezNNAg8hxCmygPhTk9bW/Q8b5C5ipHgkdxjso+3JWgoudx2bV5XskUwaO LCCggHOAQcF4xxVWnuJSvAmU3WwMBGCdBnEgmKBULhG1m3JyEeCVBjYlFZ95FAog33xBBWVYfRRx aAt6/I04YRzzYZhiPSzmlJ8p2H0VFYk02khPNy14AGBTSO6B2gFH7iEBikNCYQ8joMxRpQRVxpHl HFqiJlUEW86Bm4o9dLFDUDU6IN+JabZ5IwBopkmmIlLoEGebeLo55502+mAmDykGKuigb5456A9/ AkroooUq2iidHgxxxaRl2hMDpay44EQUAXTq6aeghirqqKSCmuSpqKaq6qqsturqq7DGKuusrxZg 66245qrrrrz2mmsIADs= ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/icons/print_16.gif R0lGODlhEAAQANUxACIiIv///5GRkVRUVDs+QAseQ5eXl9DQ0KHK6ezs7NLR0vf393uJlN/f32pq ajpXkJHB5N/e39LS0n+Zy9Hb7bnE2KDL6Z+fn5mt1qDK6XePv8nU6cfGx4aYvqO11zxYkWmDs5rC 46vM6cfFxqHK6sbFxuzs7ff4+KHL6ff3+HijzMbGxpHB5cbGx5nC43mizarL6f///wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAQABAAAAaRwJgw Jigai8MkMcBsCpTCgWBxWqQWC8EAKk2YEuCEliuIRBroxlgplSjeCslauMFIW6NVicPRYjYxFBMM AASGh4YADBMUHoQAkJGSih4aME2YmSIaIC4IFggZCCifoiQPISAdLxAsBa+wrxAQKh0VHw8ABru8 uwAPHxUxDhcAB8fIxwAXDkMOAJlNAM1Jk5NDQQA7 ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/border/spacer.gif R0lGODlhAQABAIAAAP///wAAACH5BAEUAAAALAAAAAABAAEAAAICRAEAOw== ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/icons/browse_space.gif R0lGODlhEAAQAPcAAFBIWUt41FqxLiNQrKe53XxkdYe3gE+sKBREpnm154HMT+T2/5HGmbuMjGCM uFulimym4D9wpa7T909zvLnve3Q8PIK3wmfAXGaT3Fqbc5yx3Et6qp/eZnl9nLXYxaXF+sjU7GuM tShdk5G5+YRhYTZvhIWj4LDO7H21+Wy5mmm8PGOOmMihoV6EqUZ50G6qwW7Gcq95dqzncV2XnmmZ 6p58fJa+7C9fwWNhcFesU15/wo+4knDEU9zQ0FKE3cnc/HKm95jX/He8w47F8HGPzFuBqIOk6JPX XX283n9yXE6DyK2/5MHX/GtUZ/T3/ZvD5l2xRXim8rvN8nGV33ZBQWGrfY/GjWqjnXK+QqPQqbLO +1qUtWaK1FB60ILKxM3f8ZLH+nic5tLi/Mf6hmS2ODBduXGp76PhalOrPYC155m06zNmmVJ5yXO2 ZX+6mneEkoi+qIyq5zhsvo+4+bPsdqq/2Yii2WWdpWOH0f///3ac543RWL2UlHnGSdLe9ou4jp3B +l+si2KTwbPZ/6LQ/fH0+pm91LXH7Gq6P3ewwnur+H2Yz4Cw64LD3nyw5MTQ6XiW03NKSo+q4XTE RUt73b7c+6jkbWuS4kyCzZbYX2u1Ok6Fr8ylpWK3NKK7331rdYe1jVKrNIPKXF2qi67W/r3yfoK1 0HK7XJzeay1fk5O6+YtfX4ay+GKGqZXD8jNjxc/g/IvH+qzB7GW3Q2ute12SvM7e99Xk/Yq45FWH yXe9YnGe63nFT////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUAL0ALAAAAAAQABAA AAj/AHsJ7OXHiA9KCMNIGchQTS0GonjQ4WVIzyUnDOPckXEExoVJWcQwsYixl6wZHGRwUDDmlAdY TOBcmdLLSQBdHCzRoVDKyq0fTNwc2fTlUK4+Ks6cAVVERIs6Wj7Q2mJCEoYDaDL9cfCkEi4HngDN idKFyy5TNqAUeZLni6s0IVRVmfUKDw1WIyykknDCFaFBERJh2XPDjg9FjEK1cgSG0IInG15MasNm iQsgD7DscJCG1BNBON4gygCpUBkzoxBhMbCixAYAMVgkWQOilwZMSEKRQUQmEIoOVBpwKjCQCKZG KQR0EhJryKcKfDjVGLhIDoQcKrwESaCkSYUGqxg+DdIxAIH5CQR6kYjUIyAAOw== ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/icons/wait.gif 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 fySDhGYQdDWGQyUhADs= ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/download/attachments/2917/page-1-72.jpg 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 ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/icons/linkext7.gif R0lGODlhBwAHAMQAAABEAJnMmUDEKkFwQf//zAB3AGjeRoHvVlLPNwF4AU5+Tov2XFzWPUbJL3bn TkXIL////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUU ABAALAAAAAAHAAcAAAUjIFQAJAklBPIIABQUDNIAQ+EYKVAsB1EQAJQvkEicEgqIMgQAOw== ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://wikiletics.com/images/icons/comment_16.gif R0lGODlhEAAQALMAADOMxeTk5Xu75YmJiczMzLu7u3h4eOT//6+vrqjU//b29tzd3P/////x3MbF xf///yH5BAUUAA8ALAAAAAAQABAAAARf8AVkqq1CoCBHaEwoMsIheFsTEGxLCIlJKXRg3wEcCwbt /woBYAjo0RzIJNJX8S2e0CfTqMDhpr6CdqtlbmguV23jAQIDHgnF8qtsHvD4g2pAyO9zWh1/7+35 chR2eBEAOw== ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.epiccenter4d.com/e-semglobal/images/top-bg.jpg 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 R1PvZbktJOV8DFbmqP/Z ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.epiccenter4d.com/e-semglobal/images/tile-wave-bg.jpg /9j/4AAQSkZJRgABAgEASABIAAD/4QPGRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp AAQAAAABAAAAnAAAAMgAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIDcuMAAyMDA2OjAy OjIzIDEyOjE4OjQ4AAAAAAOgAQADAAAAAf//AACgAgAEAAAAAQAAADKgAwAEAAAAAQAAADIAAAAA AAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABFgEbAAUAAAABAAABHgEoAAMAAAABAAIAAAIBAAQA AAABAAABJgICAAQAAAABAAACmAAAAAAAAABIAAAAAQAAAEgAAAAB/9j/4AAQSkZJRgABAgEASABI AAD/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwP FRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQO Dg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEI ADIAMgMBIgACEQEDEQH/3QAEAAT/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEF AQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMi cYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj 80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcG BTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kST VKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/ 2gAMAwEAAhEDEQA/APRdvmlCbVLVTMa8JQm1T6pKVtS2pSUpKSlQklqkkp//0PRtUwSBSHKmY1Jk 5SSUpIJJJKVqkkkkp//R9FTQpSmlTMapS0SlKUlK0STymlJSkk8hJJT/AP/S9ESXzMkpmN+mUl8z JJKfplJfMySSX6ZSXzMkkh//2f/tCGZQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAA AAAAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAA AD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAA AQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA/UAAAAAAEgAL2ZmAAEA bGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAA AAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD///////// ////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////// //////////////////8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAA BAAAAAA4QklNBBoAAAAAA00AAAAGAAAAAAAAAAAAAAAyAAAAMgAAAAwAdABpAGwAZQAtAHcAYQB2 AGUALQBiAGcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAADIAAAAyAAAAAAAAAAAA AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNP YmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAA QnRvbWxvbmcAAAAyAAAAAFJnaHRsb25nAAAAMgAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAA AAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3Jp Z2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApF U2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3Ag bG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAMgAAAABSZ2h0bG9uZwAAADIA AAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZh bHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAA AQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVy dEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVu dW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAAps ZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRs b25nAAAAAAA4QklNBBEAAAAAAAEBADhCSU0EFAAAAAAABAAAAAI4QklNBAwAAAAAArQAAAABAAAA MgAAADIAAACYAAAdsAAAApgAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAv/u AA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwM DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREM DAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIADIAMgMBIgACEQEDEQH/3QAE AAT/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgME BQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRy gtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1 VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMF MoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePz RpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/APRdvmlC bVLVTMa8JQm1T6pKVtS2pSUpKSlQklqkkp//0PRtUwSBSHKmY1Jk5SSUpIJJJKVqkkkkp//R9FTQ pSmlTMapS0SlKUlK0STymlJSkk8hJJT/AP/S9ESXzMkpmN+mUl8zJJKfplJfMySSX6ZSXzMkkh// 2ThCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMA QQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIAA3AC4AMAAAAAEAOEJJTQQGAAAAAAAH//4A AAABAQD/4RJIaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7 vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8P2Fkb2JlLXhhcC1maWx0ZXJzIGVz Yz0iQ1IiPz4KPHg6eGFwbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLycgeDp4YXB0az0nWE1Q IHRvb2xraXQgMi44LjItMzMsIGZyYW1ld29yayAxLjUnPgo8cmRmOlJERiB4bWxuczpyZGY9J2h0 dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIHhtbG5zOmlYPSdodHRw Oi8vbnMuYWRvYmUuY29tL2lYLzEuMC8nPgoKIDxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9J3V1aWQ6 ZWUxN2E0MDEtYTQ4Zi0xMWRhLWIzOTAtZWNkNGY5ODkzNWQ0JwogIHhtbG5zOnhhcE1NPSdodHRw Oi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eGFwTU06RG9jdW1lbnRJRD5hZG9iZTpk b2NpZDpwaG90b3Nob3A6ODBhZTFkNzYtYTQ4YS0xMWRhLWIzOTAtZWNkNGY5ODkzNWQ0PC94YXBN TTpEb2N1bWVudElEPgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpSREY+CjwveDp4YXBtZXRh PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFj a2V0IGVuZD0ndyc/Pv/uAA5BZG9iZQBkgAAAAAH/2wCEABQRERoSGikYGCkzJyAnMyccHBwcJyIX FxcXFyIRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBFRoaIR0hIhgYIhQODg4U FA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIADIA MgMBIgACEQEDEQH/3QAEAAT/xAEbAAADAQEBAQEBAQEBAAAAAAABAAIDBAUGBwgJCgsBAQEBAQEB AQEBAQEBAAAAAAABAgMEBQYHCAkKCxAAAgIBAwIDBAcGAwMGAgE1AQACEQMhEjEEQVEiE2FxMoGR sUKhBdHBFPBSI3IzYuGC8UM0kqKyFdJTJHPCYwaDk+Lyo0RUZCU1RRYmdDZVZbOEw9N14/NGlKSF tJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYRAAICAAUBBgYBAwEDBQMGLwABEQIhAzFBElFhcYGRIhMy 8KGxBMHR4fFCUiNichSSM4JDJKKyNFNEY3PC0oOTo1Ti8gUVJQYWJjVkRVU2dGWzhMPTdePzRpSk hbSVxNTk9KW1xdXl9VZmdob/2gAMAwEAAhEDEQA/APqaShXoZCilVAaWlVANKhUD/9D6pCUPQyKp QgKUKgFUKgf/0fqVSr0MiqqgKEqgBUqgf//S+pV/I1ehk/XFfyNUD9cV/I1QP1xX8jVA/9k= ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://wikiletics.com/styles/main-action.css?spaceKey=STAT BODY { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } P { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } TD { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } TABLE { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } TR { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } .bodytext { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } .stepfield { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: = 16px; FONT-FAMILY: Verdana, arial, sans-serif } #PageContent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 20px; MARGIN: = 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left } BODY { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: center } .monospaceInput { FONT: 12px monospace } .wiki-content P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 16px 0px; PADDING-TOP: 0px } .commentblock P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 16px 0px; PADDING-TOP: 0px } .wiki-content-preview { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; = PADDING-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px } UL { MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: = 0px } OL { MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: = 0px } PRE { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px = 5px 5px 15px; PADDING-TOP: 0px; TEXT-ALIGN: left } .helpheading { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 4px; MARGIN: 10px 0px 0px; PADDING-TOP: 4px; = BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd } .helpcontent { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; = PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1 } .code { BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; = FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; = LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: = Courier } .focusedComment { BACKGROUND: #ffffce } .commentBox { BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px = solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; = BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px = solid } .focusedComment { BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px = solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; = BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px = solid } .codeHeader { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; = PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: = #f0f0f0; TEXT-ALIGN: center } .codeContent { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; = PADDING-TOP: 3px; BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: left } .preformatted { BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; = FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; = LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: = Courier } .preformattedHeader { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; = PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: = #f0f0f0; TEXT-ALIGN: center } .preformattedContent { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; = PADDING-TOP: 3px; BACKGROUND-COLOR: #f0f0f0 } .panel { BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; = MARGIN: 0px 10px 10px; BORDER-LEFT: #3c78b5 1px dashed; BORDER-BOTTOM: = #3c78b5 1px dashed } .panelHeader { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; = PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: = #f0f0f0; TEXT-ALIGN: center } .panelContent { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px; BACKGROUND-COLOR: #f0f0f0 } .anonymousAlert { BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px = dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; = MARGIN: 4px; BORDER-LEFT: red 1px dashed; LINE-HEIGHT: 13px; = PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: = #f0f0f0 } .lockAlert { BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px = dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; = MARGIN: 4px; BORDER-LEFT: red 1px dashed; WIDTH: 50%; LINE-HEIGHT: 13px; = PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: = #f0f0f0 } .code-keyword { COLOR: #000091 } .code-object { COLOR: #910091 } .code-quote { COLOR: #009100 } .code-comment { COLOR: #808080 } .code-xml .code-keyword { FONT-WEIGHT: bold } .code-tag { COLOR: #000091 } .breadcrumbs { BORDER-RIGHT: #3c78b5 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: = #3c78b5 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 3px; BORDER-LEFT: #3c78b5 0px solid; PADDING-TOP: 3px; BORDER-BOTTOM: = #3c78b5 1px solid; BACKGROUND-COLOR: #f0f0f0 } .navmenu { BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: = #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid } .menuheading { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 2px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; = BACKGROUND-COLOR: #f0f0f0 } .menuitems { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; = PADDING-TOP: 4px } .rightpanel { BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid } #helpheading { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: = #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd; TEXT-ALIGN: left } #helpcontent { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; = PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1 } .helptab-unselected { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1 } .helptab-selected { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #d0d9bd } .helptabs { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: = 0px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1 } .infopanel-heading { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 2px; PADDING-TOP: 4px } .pagebody { =09 } .pageheader { PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 1px solid } .pagetitle { FONT-WEIGHT: bold; FONT-SIZE: 22px; COLOR: #003366; FONT-FAMILY: Arial, = sans-serif } .steptitle { FONT-WEIGHT: bold; FONT-SIZE: 18px; MARGIN-BOTTOM: 7px; COLOR: #003366; = FONT-FAMILY: Arial, sans-serif } .substeptitle { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: = 12px; PADDING-BOTTOM: 1px; MARGIN: 2px 4px 4px; COLOR: #003366; = PADDING-TOP: 2px; FONT-FAMILY: Arial, sans-serif } .stepdesc { MARGIN-TOP: 7px; FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN-BOTTOM: = 7px; COLOR: #666666; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, = sans-serif } .steplabel { FONT-WEIGHT: bold; FLOAT: left; WIDTH: 15%; COLOR: black; MARGIN-RIGHT: = 4px; TEXT-ALIGN: right } .stepfield { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #f0f0f0; = PADDING-BOTTOM: 5px; PADDING-TOP: 5px } .submitButtons { MARGIN-TOP: 5px; TEXT-ALIGN: right } .formtitle { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #003366; FONT-FAMILY: Arial, = sans-serif } .sectionbottom { BORDER-BOTTOM: #3c78b5 1px solid } .topRow { BORDER-TOP: #3c78b5 2px solid } .tabletitle { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 14px; PADDING-BOTTOM: 2px; MARGIN: 8px 4px 2px 0px; COLOR: #003366; = PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 2px solid; FONT-FAMILY: Arial, = sans-serif } .pagesubheading { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10px; PADDING-BOTTOM: = 5px; COLOR: #666666; PADDING-TOP: 0px } HR { =09 } A:link { COLOR: #003366 } A:visited { COLOR: #003366 } A:active { COLOR: #003366 } A:hover { COLOR: #003366 } H1 A:link { TEXT-DECORATION: none } H1 A:visited { TEXT-DECORATION: none } H1 A:active { TEXT-DECORATION: none } H1 A:hover { BORDER-BOTTOM: #003366 1px dotted } .wiki-content > :first-child { MARGIN-TOP: 3px } .commentblock > :first-child { MARGIN-TOP: 3px } .logocell { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px } INPUT { FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: verdana, geneva, arial, = sans-serif } TEXTAREA { FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, = sans-serif } TEXTAREA.editor { FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, = sans-serif } .spacenametitle-printable { MARGIN: 0px; FONT: 100 20px/25px Impact, Arial, Helvetica; COLOR: = #999999 } .spacenametitle-printable A { COLOR: #999999; TEXT-DECORATION: none } .spacenametitle-printable A:visited { COLOR: #999999; TEXT-DECORATION: none } .blogHeading { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 20px; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 0px; LINE-HEIGHT: normal; = PADDING-TOP: 10px } H1 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 24px; PADDING-BOTTOM: 2px; MARGIN: 36px 0px 4px; COLOR: #003366; = LINE-HEIGHT: normal; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; = BACKGROUND-COLOR: #f0f0f0 } H2 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 18px; PADDING-BOTTOM: 2px; MARGIN: 27px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: = #f0f0f0 } H3 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 14px; PADDING-BOTTOM: 2px; MARGIN: 21px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 2px; BACKGROUND-COLOR: #f0f0f0 } H4 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 12px; PADDING-BOTTOM: 2px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 2px; BACKGROUND-COLOR: #f0f0f0 } H4.search { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: = 12px; PADDING-BOTTOM: 4px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 4px; BACKGROUND-COLOR: #f0f0f0 } H5 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 10px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 2px; BACKGROUND-COLOR: #f0f0f0 } H6 { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = 8px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; = PADDING-TOP: 2px; BACKGROUND-COLOR: #f0f0f0 } .smallfont { FONT-SIZE: 10px } .descfont { FONT-SIZE: 10px; COLOR: #666666 } .smallerfont { FONT-SIZE: 9px } .smalltext { FONT-SIZE: 10px; COLOR: #666666 } .smalltext A { COLOR: #666666 } .smalltext-blue { FONT-SIZE: 10px; COLOR: #3c78b5 } .surtitle { FONT-SIZE: 14px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 1px; COLOR: #666666 } .navItemOver { FONT-WEIGHT: bold; FONT-SIZE: 10px; CURSOR: pointer; COLOR: #ffffff; = BACKGROUND-COLOR: #003366; voice-family: inherit } .navItemOver A { COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none } .navItemOver A:visited { COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none } .navItemOver A:hover { COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none } .navItem { FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #ffffff; BACKGROUND-COLOR: = #3c78b5 } .navItem A { COLOR: #ffffff; TEXT-DECORATION: none } .navItem A:hover { COLOR: #ffffff; TEXT-DECORATION: none } .navItem A:visited { COLOR: #ffffff; TEXT-DECORATION: none } DIV.padded { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; = PADDING-TOP: 4px } DIV.thickPadded { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px } H3.macrolibrariestitle { MARGIN: 0px } DIV.centered { MARGIN: 10px; TEXT-ALIGN: center } DIV.centered TABLE { MARGIN: 0px auto; TEXT-ALIGN: left } .tableview TABLE { MARGIN: 0px } .tableview TH { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: = 0px; COLOR: #003366; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 2px solid; = TEXT-ALIGN: left } .tableview TD { BORDER-RIGHT: #ccc 0px solid; PADDING-RIGHT: 10px; BORDER-TOP: #ccc 0px = solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 4px; MARGIN: 0px; BORDER-LEFT: = #ccc 0px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px solid; = TEXT-ALIGN: left } .grid { MARGIN: 2px 0px 5px; BORDER-COLLAPSE: collapse } .grid TH { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; BACKGROUND: #f0f0f0; PADDING-BOTTOM: 2px; = BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px = solid; TEXT-ALIGN: center } .grid TD { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px = solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid } .gridHover { BACKGROUND-COLOR: #f9f9f9 } TD.infocell { BACKGROUND-COLOR: #f0f0f0 } .label { FONT-WEIGHT: bold; COLOR: #003366 } .error { BACKGROUND-COLOR: #fcc } .errorBox { BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #c00 1px = solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; BORDER-LEFT: = #c00 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #c00 1px solid; = BACKGROUND-COLOR: #fcc } .errorMessage { COLOR: #c00 } .success { BACKGROUND-COLOR: #dfd } .successBox { BORDER-RIGHT: #090 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #090 1px = solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 5px; = PADDING-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; PADDING-TOP: 5px; = BORDER-BOTTOM: #090 1px solid; BACKGROUND-COLOR: #dfd } BLOCKQUOTE { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MARGIN-LEFT: 5px; BORDER-LEFT: = #3c78b5 1px solid; MARGIN-RIGHT: 0px } TABLE.confluenceTable { MARGIN: 5px; BORDER-COLLAPSE: collapse } TABLE.confluenceTable TD.confluenceTd { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px = solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid } TABLE.confluenceTable TH.confluenceTh { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px = solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; = BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: center } TD.confluenceTd { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px = solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid } TH.confluenceTh { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px = solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; = BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: center } DIV.small { FONT-SIZE: 9px } H1.pagename { MARGIN-TOP: 0px } IMG.inline { =09 } .loginform { BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; MARGIN: 5px; = BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid } .previewnote { FONT-SIZE: 11px; COLOR: red; TEXT-ALIGN: center } .previewcontent { BACKGROUND: #e0e0e0 } .messagecontent { BACKGROUND: #e0e0e0 } .conflictnote { =09 } .createlink { COLOR: maroon } A.createlink { COLOR: maroon } .templateparameter { FONT-SIZE: 9px; COLOR: darkblue } .diffadded { PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ddffdd; = PADDING-BOTTOM: 1px; BORDER-LEFT: darkgreen 4px solid; PADDING-TOP: 1px } .diffdeleted { PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ffdddd; = PADDING-BOTTOM: 1px; BORDER-LEFT: darkred 4px solid; COLOR: #999; = PADDING-TOP: 1px } .diffnochange { PADDING-RIGHT: 1px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; = BORDER-LEFT: lightgrey 4px solid; PADDING-TOP: 1px } .differror { BACKGROUND: brown } .diff { FONT-SIZE: 12px; LINE-HEIGHT: 14px; FONT-FAMILY: lucida console, = courier new, fixed-width } .diffaddedchars { FONT-WEIGHT: bolder; BACKGROUND-COLOR: #99ff99 } .diffremovedchars { FONT-WEIGHT: bolder; BACKGROUND-COLOR: #ff9999; TEXT-DECORATION: = line-through } .greybackground { BACKGROUND: #f0f0f0 } .greybox { BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px = solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; = BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px = solid } .borderedGreyBox { BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: = #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: = #cccccc 1px solid; BACKGROUND-COLOR: #f0f0f0 } .greyboxfilled { BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px = solid; PADDING-LEFT: 5px; BACKGROUND: #f0f0f0; PADDING-BOTTOM: 5px; = MARGIN: 10px 1px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 5px; = BORDER-BOTTOM: #ddd 1px solid } .navBackgroundBox { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: = 22px; BACKGROUND: #3c78b5; PADDING-BOTTOM: 5px; COLOR: white; = PADDING-TOP: 5px; FONT-FAMILY: Arial, sans-serif; TEXT-DECORATION: none } .previewBoxTop { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #3c78b5 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px = 0px 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; = BORDER-BOTTOM: #3c78b5 0px solid; BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: = center } .previewContent { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: = #3c78b5 0px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: = 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: = #3c78b5 0px solid; BACKGROUND-COLOR: #fff } .previewBoxBottom { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #3c78b5 0px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px = 0px 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; = BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: = center } .functionbox { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: = #3c78b5 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px = 1px 10px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 3px; = BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #f0f0f0 } .functionbox-greyborder { BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px = solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; = BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px = solid; BACKGROUND-COLOR: #f0f0f0 } .search-highlight { BACKGROUND-COLOR: #ffffcc } .rowNormal { BACKGROUND-COLOR: #ffffff } .rowAlternate { BACKGROUND-COLOR: #f7f7f7 } .rowAlternateNoBottomColor { BACKGROUND-COLOR: #f7f7f7 } .rowAlternateNoBottomNoColor { =09 } .rowAlternateNoBottomColor TD { BORDER-BOTTOM-WIDTH: 0px } .rowAlternateNoBottomNoColor TD { BORDER-BOTTOM-WIDTH: 0px } .rowHighlight { BACKGROUND-COLOR: #f0f0f0 } TD.greenbar { BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: = #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: = #00df00; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; = PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid } TD.redbar { BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: = #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: = #df0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; = PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid } TD.darkredbar { BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: = #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: = #af0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; = PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid } TR.testpassed { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: = #ddffdd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px } TR.testfailed { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: = #ffdddd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px } .toolbar { MARGIN: 0px; BORDER-COLLAPSE: collapse } .toolbar TD { BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 1px = solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px = solid; COLOR: #ccc; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid } TD.noformatting { BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: = 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; = BORDER-BOTTOM: 0px; TEXT-ALIGN: center } .commentblock { MARGIN: 12px 0px } .license-eval { BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, = Arial, Helvetica, sans-serif; TEXT-ALIGN: center } .license-none { BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, = Arial, Helvetica, sans-serif; TEXT-ALIGN: center } .license-nonprofit { BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, = Arial, Helvetica, sans-serif; TEXT-ALIGN: center } .license-eval { BACKGROUND-COLOR: #ffcccc } .license-none { BACKGROUND-COLOR: #ffcccc } .license-eval B { COLOR: #990000 } .license-none B { COLOR: #990000 } .license-nonprofit { BACKGROUND-COLOR: #ffffff } .bottomshadow { BACKGROUND-IMAGE: url(/images/border/border_bottom.gif); = BACKGROUND-REPEAT: repeat-x; HEIGHT: 12px } .navmenu .operations LI { PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none } .navmenu .operations UL { PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none } .navmenu .operations UL { MARGIN-BOTTOM: 9px } .navmenu .label { =09 } .toolbar DIV { DISPLAY: none } .toolbar .label { DISPLAY: none } .toolbar .operations { DISPLAY: block } .toolbar .operations UL { DISPLAY: inline; PADDING-LEFT: 0px; MARGIN-LEFT: 10px; LIST-STYLE-TYPE: = none } .toolbar .operations LI { DISPLAY: inline; LIST-STYLE-TYPE: none } #foldertab { PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 3px; FONT: bold = 11px Verdana, sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; = BORDER-BOTTOM: #3c78b5 1px solid } #foldertab LI { DISPLAY: inline; MARGIN: 0px; LIST-STYLE-TYPE: none } #foldertab LI A { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: = #3c78b5 1px solid; PADDING-LEFT: 0.5em; BACKGROUND: #3c78b5; = PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; = PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; TEXT-DECORATION: none } #foldertab LI A:link { COLOR: #ffffff } #foldertab LI A:visited { COLOR: #ffffff } #foldertab LI A:hover { BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: = #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: = #003366 } #foldertab LI A.current { BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid } #foldertab LI A.current:link { COLOR: black } #foldertab LI A.current:visited { COLOR: black } #foldertab LI A.current:hover { BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid } UL#squaretab { PADDING-LEFT: 0px; FONT: bold 8px Verdana, sans-serif; MARGIN-LEFT: = 0px; WHITE-SPACE: nowrap } #squaretab LI { DISPLAY: inline; LIST-STYLE-TYPE: none } #squaretab A { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: = #3c78b5 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: = #3c78b5 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid } #squaretab A:link { COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none } #squaretab A:visited { COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none } #squaretab A:hover { BORDER-LEFT-COLOR: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: = #ffffff; BORDER-TOP-COLOR: #003366; BACKGROUND-COLOR: #003366; = TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #003366 } #squaretab LI A#current { BACKGROUND: white; COLOR: black } .blogcalendar * { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: = x-small; PADDING-BOTTOM: 2px; LINE-HEIGHT: 140%; PADDING-TOP: 2px; = FONT-FAMILY: verdana, arial, sans-serif } TABLE.blogcalendar { BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; = BORDER-LEFT: #3c78b5 1px solid; BORDER-BOTTOM: #3c78b5 1px solid } .blogcalendar TH.calendarhead { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; = PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5 } A.calendarhead { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; = PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5 } .calendarhead:visited { COLOR: white } .calendarhead:active { COLOR: white } .calendarhead:hover { COLOR: white } .blogcalendar TH { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: = x-small; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BACKGROUND-COLOR: = #f0f0f0 } .blogcalendar TD { FONT-WEIGHT: normal; FONT-SIZE: x-small } .searchGroup { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #f0f0f0; = PADDING-BOTTOM: 10px; PADDING-TOP: 0px } .searchGroupHeading { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: = 10px; PADDING-BOTTOM: 1px; COLOR: #ffffff; PADDING-TOP: 2px; = BACKGROUND-COLOR: #3c78b5 } .searchItem { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; = PADDING-TOP: 1px } .searchItemSelected { PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; BACKGROUND: = #ddd; PADDING-BOTTOM: 1px; PADDING-TOP: 1px } .permissionHeading { BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 16px; = BORDER-LEFT: 0px solid; BORDER-BOTTOM: #bbb 1px solid; TEXT-ALIGN: left } .permissionTab { BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 10px; = BACKGROUND: #3c78b5; BORDER-LEFT: 1px solid; COLOR: #ffffff; = BORDER-BOTTOM: 0px solid } .permissionSuperTab { BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BACKGROUND: #003366; = BORDER-LEFT: 1px solid; COLOR: #ffffff; BORDER-BOTTOM: 0px solid } .permissionCell { BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: #bbb 1px = solid; BORDER-BOTTOM: 0px solid } .warningPanel { BORDER-RIGHT: #f0c000 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: = #f0c000 1px solid; PADDING-LEFT: 8px; BACKGROUND: #ffffce; = PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #f0c000 1px solid; = PADDING-TOP: 8px; BORDER-BOTTOM: #f0c000 1px solid } .alertPanel { BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #c00 1px = solid; PADDING-LEFT: 8px; BACKGROUND: #ffcccc; PADDING-BOTTOM: 8px; = MARGIN: 10px; BORDER-LEFT: #c00 1px solid; PADDING-TOP: 8px; = BORDER-BOTTOM: #c00 1px solid } .optionPadded { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px } .optionSelected { BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px = solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: -1px; = BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px = solid; BACKGROUND-COLOR: #ffffcc } .optionSelected A { FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none } .noteMacro { BORDER-RIGHT: #f0c000 1px solid; BORDER-TOP: #f0c000 1px solid; = MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #f0c000 1px solid; = BORDER-BOTTOM: #f0c000 1px solid; BACKGROUND-COLOR: #ffffce; TEXT-ALIGN: = left } .warningMacro { BORDER-RIGHT: #c00 1px solid; BORDER-TOP: #c00 1px solid; MARGIN-TOP: = 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #c00 1px solid; BORDER-BOTTOM: = #c00 1px solid; BACKGROUND-COLOR: #fcc; TEXT-ALIGN: left } .infoMacro { BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; = MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; = BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d8e4f1; TEXT-ALIGN: = left } .tipMacro { BORDER-RIGHT: #090 1px solid; BORDER-TOP: #090 1px solid; MARGIN-TOP: = 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; BORDER-BOTTOM: = #090 1px solid; BACKGROUND-COLOR: #dfd; TEXT-ALIGN: left } .informationMacroPadding { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; = PADDING-TOP: 5px } TABLE.infoMacro TD { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } TABLE.warningMacro TD { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } TABLE.tipMacro TD { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } TABLE.noteMacro TD { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } TABLE.sectionMacro TD { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } TABLE.sectionMacroWithBorder TD.columnMacro { BORDER-RIGHT: #cccccc 1px dashed; BORDER-TOP: #cccccc 1px dashed; = BORDER-LEFT: #cccccc 1px dashed; BORDER-BOTTOM: #cccccc 1px dashed } .pagecontent { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px; TEXT-ALIGN: left } .topBarDiv A:link { COLOR: #ffffff } .topBarDiv A:visited { COLOR: #ffffff } .topBarDiv A:active { COLOR: #ffffff } .topBarDiv A:hover { COLOR: #ffffff } .topBarDiv { COLOR: #ffffff } .topBar { BACKGROUND-COLOR: #003366 } .greyLinks A:link { COLOR: #666666; TEXT-DECORATION: underline } .greyLinks A:visited { COLOR: #666666; TEXT-DECORATION: underline } .greyLinks A:active { COLOR: #666666; TEXT-DECORATION: underline } .greyLinks A:hover { COLOR: #666666; TEXT-DECORATION: underline } .greyLinks { PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; = PADDING-BOTTOM: 10px; COLOR: #666666; PADDING-TOP: 10px } .logoSpaceLink { COLOR: #999999; TEXT-DECORATION: none } .logoSpaceLink A:link { COLOR: #999999; TEXT-DECORATION: none } .logoSpaceLink A:visited { COLOR: #999999; TEXT-DECORATION: none } .logoSpaceLink A:active { COLOR: #999999; TEXT-DECORATION: none } .logoSpaceLink A:hover { COLOR: #003366; TEXT-DECORATION: none } .basicPanelContainer { BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; = MARGIN-TOP: 2px; MARGIN-BOTTOM: 8px; BORDER-LEFT: #3c78b5 1px solid; = WIDTH: 100%; BORDER-BOTTOM: #3c78b5 1px solid } .basicPanelTitle { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 5px; MARGIN: 0px; COLOR: black; PADDING-TOP: 5px; = BACKGROUND-COLOR: #f0f0f0 } .basicPanelBody { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: = 0px; PADDING-TOP: 5px } .separatorLinks A:link { COLOR: white } .separatorLinks A:visited { COLOR: white } .separatorLinks A:active { COLOR: white } .greynavbar { BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 2px; BACKGROUND-COLOR: = #f0f0f0 } DIV.headerField { FLOAT: left; WIDTH: auto; HEIGHT: 100% } .headerFloat { MARGIN-LEFT: auto; WIDTH: 50% } .headerFloatLeft { FLOAT: left; MARGIN-BOTTOM: 10px; MARGIN-RIGHT: 20px } #headerRow { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px } DIV.license-personal { COLOR: #ffffff; BACKGROUND-COLOR: #003366 } DIV.license-personal A { COLOR: #ffffff } .greyFormBox { BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #cccccc 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: = #cccccc 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid } .marginlessForm { MARGIN: 0px } .openPageHighlight { BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px = solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px = solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; = BACKGROUND-COLOR: #ffffcc } .editPageInsertLinks { FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666 } .editPageInsertLinks A { FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666 } .top10 A { FONT-WEIGHT: bold; FONT-SIZE: 2em; COLOR: #003366 } .top25 A { FONT-WEIGHT: bold; FONT-SIZE: 1.6em; COLOR: #003366 } .top50 A { FONT-SIZE: 1.4em; COLOR: #003366 } .top100 A { FONT-SIZE: 1.2em; COLOR: #003366 } .heatmap { MARGIN: 0px auto; WIDTH: 95%; LIST-STYLE-TYPE: none } .heatmap A { TEXT-DECORATION: none } .heatmap A:hover { TEXT-DECORATION: underline } .heatmap LI { DISPLAY: inline } .minitab { PADDING-RIGHT: 0px; MARGIN-TOP: 1px; PADDING-LEFT: 8px; FLOAT: none; = MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; FONT: bold 9px Verdana, = sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 = 1px solid; TEXT-DECORATION: none } .selectedminitab { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: = #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: = white; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px = solid; COLOR: #000000; PADDING-TOP: 3px; BORDER-BOTTOM: white 1px solid; = TEXT-DECORATION: none } .unselectedminitab { BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: = #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: = #3c78b5; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px = solid; COLOR: #ffffff; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; = TEXT-DECORATION: none } A.unselectedminitab:hover { BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: = #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: = #003366 } A.unselectedminitab:link { COLOR: white } A.unselectedminitab:visited { COLOR: white } A.selectedminitab:link { COLOR: black } A.selectedminitab:visited { COLOR: black } .linkerror { BACKGROUND-COLOR: #fcc } A.labelOperationLink:link { TEXT-DECORATION: underline } A.labelOperationLink:active { TEXT-DECORATION: underline } A.labelOperationLink:visited { TEXT-DECORATION: underline } A.labelOperationLink:hover { TEXT-DECORATION: underline } A.newLabel:link { BACKGROUND-COLOR: #ddffdd } A.newLabel:active { BACKGROUND-COLOR: #ddffdd } A.newLabel:visited { BACKGROUND-COLOR: #ddffdd } A.newLabel:hover { BACKGROUND-COLOR: #ddffdd } UL.square { LIST-STYLE-TYPE: square } .inline-control-link { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: = #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #666; = PADDING-TOP: 2px; TEXT-DECORATION: none } .inline-control-link A:link { TEXT-DECORATION: none } .inline-control-link A:active { TEXT-DECORATION: none } .inline-control-link A:visited { TEXT-DECORATION: none } .inline-control-link A:hover { TEXT-DECORATION: none } .inline-control-link { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: = #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; CURSOR: pointer; = COLOR: #666; PADDING-TOP: 2px; TEXT-DECORATION: none } DIV.auto_complete { BACKGROUND: #fff; WIDTH: 350px } DIV.auto_complete UL { BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px = solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: = #888 1px solid; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: #888 1px = solid; LIST-STYLE-TYPE: none } DIV.auto_complete UL LI { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: = 0px; PADDING-TOP: 3px } DIV.auto_complete UL LI.selected { BACKGROUND-COLOR: #ffb } DIV.auto_complete UL STRONG.highlight { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; COLOR: #800; PADDING-TOP: 0px } .toogleFormDiv { BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #a7a6aa 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: = 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: = #a7a6aa 1px solid; BACKGROUND-COLOR: white } .toogleInfoDiv { BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #a7a6aa 1px solid; MARGIN-TOP: 10px; DISPLAY: none; PADDING-LEFT: 5px; = PADDING-BOTTOM: 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; = BORDER-BOTTOM: #a7a6aa 1px solid; BACKGROUND-COLOR: white } .inputSection { MARGIN-BOTTOM: 20px } #editBox { BACKGROUND-COLOR: #f0f0f0 } .leftnav LI A { PADDING-RIGHT: 2px; BORDER-TOP: #3c78b5 1px solid; DISPLAY: block; = PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; = PADDING-TOP: 2px; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none } .leftnav LI A:active { COLOR: white } .leftnav LI A:visited { COLOR: white } .leftnav LI A:hover { COLOR: white; BACKGROUND-COLOR: #003366 } ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://wikiletics.com/decorators/effects.js =0A= // Provide hover and click effect to entire table rows.=0A= // (removed click effect - it was annoying - mike 1/10/03)=0A= // Usage:=0A= // =0A= // =0A= // ...=0A= var oFCKeditor;=0A= =0A= function rowHover(row) {=0A= if (!row.href && row.getAttribute) row.href =3D = row.getAttribute("href");=0A= if (!row.href) return;=0A= row.oldClassName =3D row.className;=0A= row.className =3D 'gridHover';=0A= row.onmouseout =3D function() {=0A= this.className =3D this.oldClassName;=0A= }=0A= // row.onclick =3D function() {=0A= // document.location.href =3D this.href;=0A= // }=0A= }=0A= =0A= function placeFocus() {=0A= =0A= // allow ability to customize which textfield the focus goes to (by = specifying "?autofocus=3D")=0A= var autoFocusElementId =3D "";=0A= var queryString =3D window.location.search.substring(1); // = substring to remove the leading "?"=0A= var parameterPairs =3D queryString.split("&");=0A= for (var i =3D 0; i < parameterPairs.length; i++)=0A= {=0A= var key =3D parameterPairs[i].split("=3D")[0];=0A= var value =3D parameterPairs[i].split("=3D")[1];=0A= if (key =3D=3D "autofocus" && (value !=3D null && value.length = >0))=0A= {=0A= autoFocusElementId =3D "'" + value + "'"; // necessary = single quotes as element ids returned by element.id contain them=0A= }=0A= }=0A= =0A= var stopNow=3Dfalse;=0A= for (var i=3D0; i < document.forms.length; i++) {=0A= var currSet=3Ddocument.forms[i].elements;=0A= if (document.forms[i].name!=3D'searchForm' && = document.forms[i].name!=3D'inlinecommentform') {=0A= for (var j =3D 0; j < currSet.length; j++)=0A= {=0A= if (=0A= (currSet[j].type=3D=3D'text' || = currSet[j].type=3D=3D'password' || currSet[j].type=3D=3D'textarea')=0A= && !currSet[j].disabled=0A= && !(currSet[j].style.display =3D=3D 'none')=0A= )=0A= {=0A= try=0A= {=0A= if (autoFocusElementId !=3D null && = autoFocusElementId.length > 0)=0A= {=0A= if (currSet[j].id =3D=3D autoFocusElementId)=0A= {=0A= currSet[j].focus();=0A= stopNow =3D true;=0A= break;=0A= }=0A= }=0A= else=0A= {=0A= currSet[j].focus();=0A= stopNow =3D true;=0A= break;=0A= }=0A= }=0A= catch (e)=0A= {=0A= // ignore=0A= // setting focus to input elements inside hidden = div's causes an exception on IE=0A= }=0A= }=0A= }=0A= }=0A= if (stopNow)=0A= break;=0A= }=0A= }=0A= =0A= function checkAllCheckBoxes(field)=0A= {=0A= for (i =3D 0; i < field.length; i++)=0A= field[i].checked =3D true ;=0A= }=0A= =0A= function clearAllCheckBoxes(field)=0A= {=0A= for (i =3D 0; i < field.length; i++)=0A= field[i].checked =3D false ;=0A= }=0A= =0A= function openUserPickerWindow(formName, element)=0A= {=0A= var vWinUsers =3D = window.open('openuserpicker.action?key=3D$key&formName=3D' + formName + = '&elementName=3D' + element + = '&multiSelect=3Dtrue&startIndex=3D0&usersPerPage=3D10', 'UserPicker2', = 'status=3Dyes,resizable=3Dyes,top=3D100,left=3D200,width=3D580,height=3D5= 50,scrollbars=3Dyes');=0A= vWinUsers.opener =3D self;=0A= vWinUsers.focus();=0A= }=0A= =0A= function getCurrentFormContent(form)=0A= {=0A= var newContent;=0A= if (tinyMCE !=3D null && form.xhtml.value =3D=3D 'true')=0A= {=0A= return tinyMCE.getContentWithoutMovingCursor();=0A= }=0A= if (form.markupTextarea)=0A= {=0A= return form.markupTextarea.value;=0A= }=0A= }=0A= =0A= var contentHasChanged =3D false;=0A= function saveDraftOnPageChange(anchorElement)=0A= {=0A= var gotoNewPage =3D function() {window.location =3D = anchorElement.href};=0A= if (contentHasChanged)=0A= saveDraft(gotoNewPage);=0A= else=0A= gotoNewPage();=0A= }=0A= =0A= function toggleVisibility(elementId)=0A= {=0A= var element =3D document.getElementById(elementId);=0A= if(element.style.display =3D=3D 'none'){=0A= element.style.display =3D 'block';=0A= }=0A= else{=0A= element.style.display =3D 'none';=0A= }=0A= }=0A= ------=_NextPart_000_0000_01C7C72E.10E4ED90 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://wikiletics.com/labels-javascript /* Prototype JavaScript framework, version 1.4.0_pre11=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.4.0_pre11',=0A= =0A= emptyFunction: function() {},=0A= K: function(x) {return x}=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.inspect =3D function(object) {=0A= try {=0A= if (object =3D=3D undefined) return 'undefined';=0A= if (object =3D=3D null) return 'null';=0A= return object.inspect ? object.inspect() : object.toString();=0A= } catch (e) {=0A= if (e instanceof RangeError) return '...';=0A= throw e;=0A= }=0A= }=0A= =0A= Function.prototype.bind =3D function(object) {=0A= var __method =3D this;=0A= return function() {=0A= return __method.apply(object, arguments);=0A= }=0A= }=0A= =0A= Function.prototype.bindAsEventListener =3D function(object) {=0A= var __method =3D this;=0A= return function(event) {=0A= return __method.call(object, event || window.event);=0A= }=0A= }=0A= =0A= Object.extend(Number.prototype, {=0A= toColorPart: function() {=0A= var digits =3D this.toString(16);=0A= if (this < 16) return '0' + digits;=0A= return digits;=0A= },=0A= =0A= succ: function() {=0A= return this + 1;=0A= },=0A= =0A= times: function(iterator) {=0A= $R(0, this, true).each(iterator);=0A= return this;=0A= }=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= Object.extend(String.prototype, {=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] ? div.childNodes[0].nodeValue : '';=0A= },=0A= =0A= toQueryParams: function() {=0A= var pairs =3D this.match(/^\??(.*)$/)[1].split('&');=0A= return pairs.inject({}, function(params, pairString) {=0A= var pair =3D pairString.split('=3D');=0A= params[pair[0]] =3D pair[1];=0A= return params;=0A= });=0A= },=0A= =0A= inspect: function() {=0A= return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";=0A= }=0A= });=0A= =0A= String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A= =0A= =0A= var $break =3D new Object();=0A= var $continue =3D new Object();=0A= =0A= var Enumerable =3D {=0A= each: function(iterator) {=0A= var index =3D 0;=0A= try {=0A= this._each(function(value) {=0A= try {=0A= iterator(value, index++);=0A= } catch (e) {=0A= if (e !=3D $continue) throw e;=0A= }=0A= });=0A= } catch (e) {=0A= if (e !=3D $break) throw e;=0A= }=0A= },=0A= =0A= all: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= if (!(result &=3D (iterator || Prototype.K)(value, index))) =0A= throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= any: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= if (result &=3D (iterator || Prototype.K)(value, index)) =0A= throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= collect: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(iterator(value, index));=0A= });=0A= return results;=0A= },=0A= =0A= detect: function (iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= if (iterator(value, index)) {=0A= result =3D value;=0A= throw $break;=0A= }=0A= });=0A= return result;=0A= },=0A= =0A= findAll: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= grep: function(pattern, iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= var stringValue =3D value.toString();=0A= if (stringValue.match(pattern))=0A= results.push((iterator || Prototype.K)(value, index));=0A= })=0A= return results;=0A= },=0A= =0A= include: function(object) {=0A= var found =3D false;=0A= this.each(function(value) {=0A= if (value =3D=3D object) {=0A= found =3D true;=0A= throw $break;=0A= }=0A= });=0A= return found;=0A= },=0A= =0A= inject: function(memo, iterator) {=0A= this.each(function(value, index) {=0A= memo =3D iterator(memo, value, index);=0A= });=0A= return memo;=0A= },=0A= =0A= invoke: function(method) {=0A= var args =3D $A(arguments).slice(1);=0A= return this.collect(function(value) {=0A= return value[method].apply(value, args);=0A= });=0A= },=0A= =0A= max: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (value >=3D (result || value))=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= min: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (value <=3D (result || value))=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= partition: function(iterator) {=0A= var trues =3D [], falses =3D [];=0A= this.each(function(value, index) {=0A= ((iterator || Prototype.K)(value, index) ? =0A= trues : falses).push(value);=0A= });=0A= return [trues, falses];=0A= },=0A= =0A= pluck: function(property) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(value[property]);=0A= });=0A= return results;=0A= },=0A= =0A= reject: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (!iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= sortBy: function(iterator) {=0A= return this.collect(function(value, index) {=0A= return {value: value, criteria: iterator(value, index)};=0A= }).sort(function(left, right) {=0A= var a =3D left.criteria, b =3D right.criteria;=0A= return a < b ? -1 : a > b ? 1 : 0;=0A= }).pluck('value');=0A= },=0A= =0A= toArray: function() {=0A= return this.collect(Prototype.K);=0A= },=0A= =0A= zip: function() {=0A= var iterator =3D Prototype.K, args =3D $A(arguments);=0A= if (typeof args.last() =3D=3D 'function')=0A= iterator =3D args.pop();=0A= =0A= var collections =3D [this].concat(args).map($A);=0A= return this.map(function(value, index) {=0A= iterator(value =3D collections.pluck(index));=0A= return value;=0A= });=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= Object.extend(Enumerable, {=0A= map: Enumerable.collect,=0A= find: Enumerable.detect,=0A= select: Enumerable.findAll,=0A= member: Enumerable.include,=0A= entries: Enumerable.toArray=0A= });=0A= =0A= var $A =3D Array.from =3D function(iterable) {=0A= if (iterable.toArray) {=0A= return iterable.toArray();=0A= } else {=0A= var results =3D [];=0A= for (var i =3D 0; i < iterable.length; i++)=0A= results.push(iterable[i]);=0A= return results;=0A= }=0A= }=0A= =0A= Object.extend(Array.prototype, Enumerable);=0A= =0A= Object.extend(Array.prototype, {=0A= _each: function(iterator) {=0A= for (var i =3D 0; i < this.length; i++)=0A= iterator(this[i]);=0A= },=0A= =0A= first: function() {=0A= return this[0];=0A= },=0A= =0A= last: function() {=0A= return this[this.length - 1];=0A= },=0A= =0A= compact: function() {=0A= return this.select(function(value) {=0A= return value !=3D undefined || value !=3D null;=0A= });=0A= },=0A= =0A= flatten: function() {=0A= return this.inject([], function(array, value) {=0A= return array.concat(value.constructor =3D=3D Array ?=0A= value.flatten() : [value]);=0A= });=0A= },=0A= =0A= without: function() {=0A= var values =3D $A(arguments);=0A= return this.select(function(value) {=0A= return !values.include(value);=0A= });=0A= },=0A= =0A= inspect: function() {=0A= return '[' + this.map(Object.inspect).join(', ') + ']';=0A= }=0A= });=0A= =0A= var Hash =3D {=0A= _each: function(iterator) {=0A= for (key in this) {=0A= var value =3D this[key];=0A= if (typeof value =3D=3D 'function') continue;=0A= =0A= var pair =3D [key, value];=0A= pair.key =3D key;=0A= pair.value =3D value;=0A= iterator(pair);=0A= }=0A= },=0A= =0A= keys: function() {=0A= return this.pluck('key');=0A= },=0A= =0A= values: function() {=0A= return this.pluck('value');=0A= },=0A= =0A= merge: function(hash) {=0A= return $H(hash).inject($H(this), function(mergedHash, pair) {=0A= mergedHash[pair.key] =3D pair.value;=0A= return mergedHash;=0A= });=0A= },=0A= =0A= toQueryString: function() {=0A= return this.map(function(pair) {=0A= return pair.map(encodeURIComponent).join('=3D');=0A= }).join('&');=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= function $H(object) {=0A= var hash =3D Object.extend({}, object || {});=0A= Object.extend(hash, Enumerable);=0A= Object.extend(hash, Hash);=0A= return hash;=0A= }=0A= =0A= var Range =3D Class.create();=0A= Object.extend(Range.prototype, Enumerable);=0A= Object.extend(Range.prototype, {=0A= initialize: function(start, end, exclusive) {=0A= this.start =3D start;=0A= this.end =3D end;=0A= this.exclusive =3D exclusive;=0A= },=0A= =0A= _each: function(iterator) {=0A= var value =3D this.start;=0A= do {=0A= iterator(value);=0A= value =3D value.succ();=0A= } while (this.include(value));=0A= },=0A= =0A= include: function(value) {=0A= if (value < this.start) =0A= return false;=0A= if (this.exclusive)=0A= return value < this.end;=0A= return value <=3D this.end;=0A= }=0A= });=0A= =0A= var $R =3D function(start, end, exclusive) {=0A= return new Range(start, end, exclusive);=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= activeRequestCount: 0=0A= }=0A= =0A= Ajax.Responders =3D {=0A= responders: [],=0A= =0A= _each: function(iterator) {=0A= this.responders._each(iterator);=0A= },=0A= =0A= register: function(responderToAdd) {=0A= if (!this.include(responderToAdd))=0A= this.responders.push(responderToAdd);=0A= },=0A= =0A= unregister: function(responderToRemove) {=0A= this.responders =3D this.responders.without(responderToRemove);=0A= },=0A= =0A= dispatch: function(callback, request, transport, json) {=0A= this.each(function(responder) {=0A= if (responder[callback] && typeof responder[callback] =3D=3D = 'function') {=0A= try {=0A= responder[callback].apply(responder, [request, transport, = json]);=0A= } catch (e) {=0A= }=0A= }=0A= });=0A= }=0A= };=0A= =0A= Object.extend(Ajax.Responders, Enumerable);=0A= =0A= Ajax.Responders.register({=0A= onCreate: function() {=0A= Ajax.activeRequestCount++;=0A= },=0A= =0A= onComplete: function() {=0A= Ajax.activeRequestCount--;=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= }=0A= Object.extend(this.options, 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 Object.extend(new Ajax.Base(), {=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= this.url =3D url;=0A= if (this.options.method =3D=3D 'get') =0A= this.url +=3D '?' + parameters;=0A= =0A= Ajax.Responders.dispatch('onCreate', this, this.transport);=0A= =0A= this.transport.open(this.options.method, this.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= evalJSON: function() {=0A= try {=0A= var json =3D this.transport.getResponseHeader('X-JSON'), object;=0A= object =3D eval(json);=0A= return object;=0A= } catch (e) {=0A= }=0A= },=0A= =0A= respondToReadyState: function(readyState) {=0A= var event =3D Ajax.Request.Events[readyState];=0A= var transport =3D this.transport, json =3D this.evalJSON();=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)(transport, json);=0A= =0A= (this.options['on' + event] || Prototype.emptyFunction)(transport, = json);=0A= Ajax.Responders.dispatch('on' + event, this, transport, json);=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= Object.extend(Object.extend(Ajax.Updater.prototype, = Ajax.Request.prototype), {=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(transport, object) {=0A= this.updateContent();=0A= onComplete(transport, object);=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(this.onComplete.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 Object.extend(new Ajax.Base(), {=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, parentElement) {=0A= var children =3D (document.body || = $(parentElement)).getElementsByTagName('*');=0A= return $A(children).inject([], function(elements, child) {=0A= if (Element.hasClassName(child, className))=0A= elements.push(child);=0A= return elements;=0A= });=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= if (!window.Element) {=0A= var Element =3D new Object();=0A= }=0A= =0A= Object.extend(Element, {=0A= visible: function(element) {=0A= return $(element).style.display !=3D 'none';=0A= },=0A= =0A= toggle: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= Element[Element.visible(element) ? 'show' : 'hide'](element);=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= classNames: function(element) {=0A= return new Element.ClassNames(element);=0A= },=0A= =0A= hasClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).include(className);=0A= },=0A= =0A= addClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).add(className);=0A= },=0A= =0A= removeClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).remove(className);=0A= },=0A= =0A= // removes whitespace-only text node children=0A= cleanWhitespace: function(element) {=0A= 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= empty: function(element) {=0A= return $(element).innerHTML.match(/^\s*$/);=0A= },=0A= =0A= scrollTo: function(element) {=0A= element =3D $(element);=0A= var x =3D element.x ? element.x : element.offsetLeft,=0A= y =3D element.y ? element.y : element.offsetTop;=0A= window.scrollTo(x, y);=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= try {=0A= this.element.insertAdjacentHTML(this.adjacency, this.content);=0A= } catch (e) {=0A= if (this.element.tagName.toLowerCase() =3D=3D 'tbody') {=0A= this.fragment =3D this.contentFromAnonymousTable();=0A= this.insertContent();=0A= } else {=0A= throw e;=0A= }=0A= }=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= contentFromAnonymousTable: function() {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D '
' + this.content + = '
';=0A= return div.childNodes[0].childNodes[0].childNodes[0];=0A= }=0A= }=0A= =0A= var Insertion =3D new Object();=0A= =0A= Insertion.Before =3D Class.create();=0A= Insertion.Before.prototype =3D Object.extend(new = Abstract.Insertion('beforeBegin'), {=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 Object.extend(new = Abstract.Insertion('afterBegin'), {=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 Object.extend(new = Abstract.Insertion('beforeEnd'), {=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 Object.extend(new = Abstract.Insertion('afterEnd'), {=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= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Element.ClassNames =3D Class.create();=0A= Element.ClassNames.prototype =3D {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= },=0A= =0A= _each: function(iterator) {=0A= this.element.className.split(/\s+/).select(function(name) {=0A= return name.length > 0;=0A= })._each(iterator);=0A= },=0A= =0A= set: function(className) {=0A= this.element.className =3D className;=0A= },=0A= =0A= add: function(classNameToAdd) {=0A= if (this.include(classNameToAdd)) return;=0A= this.set(this.toArray().concat(classNameToAdd).join(' '));=0A= },=0A= =0A= remove: function(classNameToRemove) {=0A= if (!this.include(classNameToRemove)) return;=0A= this.set(this.select(function(className) {=0A= return className !=3D classNameToRemove;=0A= }));=0A= },=0A= =0A= toString: function() {=0A= return this.toArray().join(' ');=0A= }=0A= }=0A= =0A= Object.extend(Element.ClassNames.prototype, Enumerable);=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= return Form.Element.Serializers[element.type =3D=3D 'select-one' ? =0A= 'selectOne' : 'selectMany'](element);=0A= },=0A= =0A= selectOne: function(element) {=0A= var value =3D '', opt, index =3D element.selectedIndex;=0A= if (index >=3D 0) {=0A= opt =3D element.options[index];=0A= value =3D opt.value;=0A= if (!value && !('value' in opt))=0A= value =3D opt.text;=0A= }=0A= return [element.name, value];=0A= },=0A= =0A= selectMany: function(element) {=0A= var 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= var optValue =3D opt.value;=0A= if (!optValue && !('value' in opt))=0A= optValue =3D opt.text;=0A= value.push(optValue);=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 Object.extend(new = Abstract.TimedObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.Observer =3D Class.create();=0A= Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=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 Object.extend(new = Abstract.EventObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.EventObserver =3D Class.create();=0A= Form.EventObserver.prototype =3D Object.extend(new = Abstract.EventObserver(), {=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= event.cancelBubble =3D true;=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.match(/Konqueror|Safari|KHTML/)=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.match(/Konqueror|Safari|KHTML/)=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= // Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, = http://mir.aculo.us)=0A= //=0A= // See scriptaculous.js for full license.=0A= =0A= =0A= Object.debug =3D function(obj) {=0A= var info =3D [];=0A= =0A= if(typeof obj in ["string","number"]) {=0A= return obj;=0A= } else {=0A= for(property in obj)=0A= if(typeof obj[property]!=3D"function")=0A= info.push(property + ' =3D> ' + =0A= (typeof obj[property] =3D=3D "string" ?=0A= '"' + obj[property] + '"' :=0A= obj[property]));=0A= }=0A= =0A= return ("'" + obj + "' #" + typeof obj + =0A= ": {" + info.join(", ") + "}");=0A= }=0A= =0A= =0A= String.prototype.toArray =3D function() {=0A= var results =3D [];=0A= for (var i =3D 0; i < this.length; i++)=0A= results.push(this.charAt(i));=0A= return results;=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Builder =3D {=0A= NODEMAP: {=0A= AREA: 'map',=0A= CAPTION: 'table',=0A= COL: 'table',=0A= COLGROUP: 'table',=0A= LEGEND: 'fieldset',=0A= OPTGROUP: 'select',=0A= OPTION: 'select',=0A= PARAM: 'object',=0A= TBODY: 'table',=0A= TD: 'table',=0A= TFOOT: 'table',=0A= TH: 'table',=0A= THEAD: 'table',=0A= TR: 'table'=0A= },=0A= // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently = broken,=0A= // due to a Firefox bug=0A= node: function(elementName) {=0A= elementName =3D elementName.toUpperCase();=0A= =0A= // try innerHTML approach=0A= var parentTag =3D this.NODEMAP[elementName] || 'div';=0A= var parentElement =3D document.createElement(parentTag);=0A= parentElement.innerHTML =3D "<" + elementName + ">";=0A= var element =3D parentElement.firstChild || null;=0A= =0A= // see if browser added wrapping tags=0A= if(element && (element.tagName !=3D elementName))=0A= element =3D element.getElementsByTagName(elementName)[0];=0A= =0A= // fallback to createElement approach=0A= if(!element) element =3D document.createElement(elementName);=0A= =0A= // abort if nothing could be created=0A= if(!element) return;=0A= =0A= // attributes (or text)=0A= if(arguments[1])=0A= if(this._isStringOrNumber(arguments[1]) ||=0A= (arguments[1] instanceof Array)) {=0A= this._children(element, arguments[1]);=0A= } else {=0A= var attrs =3D this._attributes(arguments[1]);=0A= if(attrs.length) {=0A= parentElement.innerHTML =3D "<" +elementName + " " +=0A= attrs + ">";=0A= element =3D parentElement.firstChild || null;=0A= // workaround firefox 1.0.X bug=0A= if(!element) {=0A= element =3D document.createElement(elementName);=0A= for(attr in arguments[1]) =0A= element[attr =3D=3D 'class' ? 'className' : attr] =3D = arguments[1][attr];=0A= }=0A= if(element.tagName !=3D elementName)=0A= element =3D = parentElement.getElementsByTagName(elementName)[0];=0A= }=0A= } =0A= =0A= // text, or array of children=0A= if(arguments[2])=0A= this._children(element, arguments[2]);=0A= =0A= return element;=0A= },=0A= _text: function(text) {=0A= return document.createTextNode(text);=0A= },=0A= _attributes: function(attributes) {=0A= var attrs =3D [];=0A= for(attribute in attributes)=0A= attrs.push((attribute=3D=3D'className' ? 'class' : attribute) +=0A= '=3D"' + attributes[attribute].toString().escapeHTML() + '"');=0A= return attrs.join(" ");=0A= },=0A= _children: function(element, children) {=0A= if(typeof children=3D=3D'object') { // array can hold nodes and text=0A= children.flatten().each( function(e) {=0A= if(typeof e=3D=3D'object')=0A= element.appendChild(e)=0A= else=0A= if(Builder._isStringOrNumber(e))=0A= element.appendChild(Builder._text(e));=0A= });=0A= } else=0A= if(Builder._isStringOrNumber(children)) =0A= element.appendChild(Builder._text(children));=0A= },=0A= _isStringOrNumber: function(param) {=0A= return(typeof param=3D=3D'string' || typeof param=3D=3D'number');=0A= }=0A= }=0A= =0A= /* ------------- element ext -------------- */=0A= =0A= // adapted from http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp=0A= // note: Safari return null on elements with display:none; see = http://bugzilla.opendarwin.org/show_bug.cgi?id=3D4125=0A= // instead of "auto" values returns null so it's easier to use with || = constructs=0A= =0A= String.prototype.camelize =3D function() {=0A= var oStringList =3D this.split('-');=0A= if(oStringList.length =3D=3D 1) =0A= return oStringList[0];=0A= var ret =3D this.indexOf("-") =3D=3D 0 ? =0A= oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) = : oStringList[0];=0A= for(var i =3D 1, len =3D oStringList.length; i < len; i++){=0A= var s =3D oStringList[i];=0A= ret +=3D s.charAt(0).toUpperCase() + s.substring(1)=0A= }=0A= return ret;=0A= }=0A= =0A= Element.getStyle =3D function(element, style) {=0A= element =3D $(element);=0A= var value =3D element.style[style.camelize()];=0A= if(!value)=0A= if(document.defaultView && document.defaultView.getComputedStyle) {=0A= var css =3D document.defaultView.getComputedStyle(element, null);=0A= value =3D (css!=3Dnull) ? css.getPropertyValue(style) : null;=0A= } else if(element.currentStyle) {=0A= value =3D element.currentStyle[style.camelize()];=0A= }=0A= =0A= // If top, left, bottom, or right values have been queried, return = "auto" for consistency resaons =0A= // if position is "static", as Opera (and others?) returns the pixel = values relative to root element =0A= // (or positioning context?)=0A= if (window.opera && (style =3D=3D "left" || style =3D=3D "top" || = style =3D=3D "right" || style =3D=3D "bottom"))=0A= if (Element.getStyle(element, "position") =3D=3D "static") value =3D = "auto";=0A= =0A= if(value=3D=3D'auto') value =3D null;=0A= return value;=0A= }=0A= =0A= // converts rgb() and #xxx to #xxxxxx format,=0A= // returns self (or first argument) if not convertable=0A= String.prototype.parseColor =3D function() {=0A= color =3D "#";=0A= if(this.slice(0,4) =3D=3D "rgb(") {=0A= var cols =3D this.slice(4,this.length-1).split(',');=0A= var i=3D0; do { color +=3D parseInt(cols[i]).toColorPart() } while = (++i<3);=0A= } else {=0A= if(this.slice(0,1) =3D=3D '#') {=0A= if(this.length=3D=3D4) for(var i=3D1;i<4;i++) color +=3D = (this.charAt(i) + this.charAt(i)).toLowerCase();=0A= if(this.length=3D=3D7) color =3D this.toLowerCase();=0A= }=0A= }=0A= return(color.length=3D=3D7 ? color : (arguments[0] || this));=0A= }=0A= =0A= Element.makePositioned =3D function(element) {=0A= element =3D $(element);=0A= var pos =3D Element.getStyle(element, 'position');=0A= if(pos =3D=3D'static' || !pos) {=0A= element._madePositioned =3D true;=0A= element.style.position =3D "relative";=0A= // Opera returns the offset relative to the positioning context, = when an element is position relative =0A= // but top and left have not been defined=0A= if (window.opera){=0A= element.style.top =3D 0;=0A= element.style.left =3D 0;=0A= } =0A= }=0A= }=0A= =0A= Element.undoPositioned =3D function(element) {=0A= element =3D $(element);=0A= if(typeof element._madePositioned !=3D "undefined"){=0A= element._madePositioned =3D undefined;=0A= element.style.position =3D "";=0A= element.style.top =3D "";=0A= element.style.left =3D "";=0A= element.style.bottom =3D "";=0A= element.style.right =3D ""; =0A= }=0A= }=0A= =0A= Element.makeClipping =3D function(element) {=0A= element =3D $(element);=0A= if (typeof element._overflow !=3D 'undefined') return;=0A= element._overflow =3D element.style.overflow;=0A= if((Element.getStyle(element, 'overflow') || 'visible') !=3D 'hidden') = element.style.overflow =3D 'hidden';=0A= }=0A= =0A= Element.undoClipping =3D function(element) {=0A= element =3D $(element);=0A= if (typeof element._overflow =3D=3D 'undefined') return;=0A= element.style.overflow =3D element._overflow;=0A= element._overflow =3D undefined;=0A= }=0A= =0A= Element.collectTextNodesIgnoreClass =3D function(element, ignoreclass) {=0A= var children =3D $(element).childNodes;=0A= var text =3D "";=0A= var classtest =3D new RegExp("^([^ ]+ )*" + ignoreclass+ "( [^ = ]+)*$","i");=0A= =0A= for (var i =3D 0; i < children.length; i++) {=0A= if(children[i].nodeType=3D=3D3) {=0A= text+=3Dchildren[i].nodeValue;=0A= } else {=0A= if((!children[i].className.match(classtest)) && = children[i].hasChildNodes())=0A= text +=3D Element.collectTextNodesIgnoreClass(children[i], = ignoreclass);=0A= }=0A= }=0A= =0A= return text;=0A= }=0A= =0A= Element.setContentZoom =3D function(element, percent) {=0A= element =3D $(element);=0A= element.style.fontSize =3D (percent/100) + "em"; =0A= if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);=0A= }=0A= =0A= Element.getOpacity =3D function(element){=0A= var opacity;=0A= if (opacity =3D Element.getStyle(element, "opacity"))=0A= return parseFloat(opacity);=0A= if (opacity =3D (Element.getStyle(element, "filter") || = '').match(/alpha\(opacity=3D(.*)\)/))=0A= if(opacity[1]) return parseFloat(opacity[1]) / 100;=0A= return 1.0;=0A= }=0A= =0A= Element.setOpacity =3D function(element, value){=0A= element=3D $(element);=0A= var els =3D element.style;=0A= if (value =3D=3D 1){=0A= els.opacity =3D '0.999999';=0A= if(/MSIE/.test(navigator.userAgent))=0A= els.filter =3D = Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'');=0A= } else {=0A= if(value < 0.00001) value =3D 0;=0A= els.opacity =3D value;=0A= if(/MSIE/.test(navigator.userAgent))=0A= els.filter =3D = Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') + =0A= "alpha(opacity=3D"+value*100+")";=0A= } =0A= }=0A= =0A= Element.getInlineOpacity =3D function(element){=0A= element=3D $(element);=0A= var op;=0A= op =3D element.style.opacity;=0A= if (typeof op !=3D "undefined" && op !=3D "") return op;=0A= return "";=0A= }=0A= =0A= Element.setInlineOpacity =3D function(element, value){=0A= element=3D $(element);=0A= var els =3D element.style;=0A= els.opacity =3D value;=0A= }=0A= =0A= Element.getDimensions =3D function(element){=0A= element =3D $(element);=0A= // All *Width and *Height properties give 0 on elements with display = "none", =0A= // so enable the element temporarily=0A= if (Element.getStyle(element,'display') =3D=3D "none"){=0A= var els =3D element.style;=0A= var originalVisibility =3D els.visibility;=0A= var originalPosition =3D els.position;=0A= els.visibility =3D "hidden";=0A= els.position =3D "absolute";=0A= els.display =3D "";=0A= var originalWidth =3D element.clientWidth;=0A= var originalHeight =3D element.clientHeight;=0A= els.display =3D "none";=0A= els.position =3D originalPosition;=0A= els.visibility =3D originalVisibility;=0A= return {width: originalWidth, height: originalHeight}; =0A= }=0A= =0A= return {width: element.offsetWidth, height: element.offsetHeight};=0A= } =0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Position.positionedOffset =3D 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= if (element) {=0A= p =3D Element.getStyle(element,'position');=0A= if(p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A= }=0A= } while (element);=0A= return [valueL, valueT];=0A= }=0A= =0A= // Safari returns margins on body which is incorrect if the child is = absolutely positioned.=0A= // for performance reasons, we create a specialized version of = Position.cumulativeOffset for=0A= // KHTML/WebKit only=0A= =0A= if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A= Position.cumulativeOffset =3D 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= =0A= if (element.offsetParent=3D=3Ddocument.body) =0A= if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A= =0A= element =3D element.offsetParent;=0A= } while (element);=0A= return [valueL, valueT];=0A= }=0A= }=0A= =0A= Position.page =3D function(forElement) {=0A= var valueT =3D 0, valueL =3D 0;=0A= =0A= var element =3D forElement;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= =0A= // Safari fix=0A= if (element.offsetParent=3D=3Ddocument.body)=0A= if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A= =0A= } while (element =3D element.offsetParent);=0A= =0A= element =3D forElement;=0A= do {=0A= valueT -=3D element.scrollTop || 0;=0A= valueL -=3D element.scrollLeft || 0; =0A= } while (element =3D element.parentNode);=0A= =0A= return [valueL, valueT];=0A= }=0A= =0A= // elements with display:none don't return an offsetParent, =0A= // fall back to manual calculation=0A= Position.offsetParent =3D function(element) {=0A= if(element.offsetParent) return element.offsetParent;=0A= if(element =3D=3D document.body) return element;=0A= =0A= while ((element =3D element.parentNode) && element !=3D document.body)=0A= if (Element.getStyle(element,'position')!=3D'static')=0A= return element;=0A= =0A= return document.body;=0A= }=0A= =0A= Position.clone =3D function(source, target) {=0A= var options =3D Object.extend({=0A= setLeft: true,=0A= setTop: true,=0A= setWidth: true,=0A= setHeight: true,=0A= offsetTop: 0,=0A= offsetLeft: 0=0A= }, arguments[2] || {})=0A= =0A= // find page position of source=0A= source =3D $(source);=0A= var p =3D Position.page(source);=0A= =0A= // find coordinate system to use=0A= target =3D $(target);=0A= var delta =3D [0, 0];=0A= var parent =3D null;=0A= // delta [0,0] will do fine with position: fixed elements, =0A= // position:absolute needs offsetParent deltas=0A= if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A= parent =3D Position.offsetParent(target);=0A= delta =3D Position.page(parent);=0A= }=0A= =0A= // correct by body offsets (fixes Safari)=0A= if (parent=3D=3Ddocument.body) {=0A= delta[0] -=3D document.body.offsetLeft;=0A= delta[1] -=3D document.body.offsetTop; =0A= }=0A= =0A= // set position=0A= if(options.setLeft) target.style.left =3D (p[0] - delta[0] + = options.offsetLeft) + "px";=0A= if(options.setTop) target.style.top =3D (p[1] - delta[1] + = options.offsetTop) + "px";=0A= if(options.setWidth) target.style.width =3D source.offsetWidth + "px";=0A= if(options.setHeight) target.style.height =3D source.offsetHeight + = "px";=0A= }=0A= =0A= Position.absolutize =3D function(element) {=0A= element =3D $(element);=0A= if(element.style.position=3D=3D'absolute') return;=0A= Position.prepare();=0A= =0A= var offsets =3D Position.positionedOffset(element);=0A= var top =3D offsets[1];=0A= var left =3D offsets[0];=0A= var width =3D element.clientWidth;=0A= var height =3D element.clientHeight;=0A= =0A= element._originalLeft =3D left - parseFloat(element.style.left || = 0);=0A= element._originalTop =3D top - parseFloat(element.style.top || 0);=0A= element._originalWidth =3D element.style.width;=0A= element._originalHeight =3D element.style.height;=0A= =0A= element.style.position =3D 'absolute';=0A= element.style.top =3D top + 'px';;=0A= element.style.left =3D left + 'px';;=0A= element.style.width =3D width + 'px';;=0A= element.style.height =3D height + 'px';;=0A= }=0A= =0A= Position.relativize =3D function(element) {=0A= element =3D $(element);=0A= if(element.style.position=3D=3D'relative') return;=0A= Position.prepare();=0A= =0A= element.style.position =3D 'relative';=0A= var top =3D parseFloat(element.style.top || 0) - = (element._originalTop || 0);=0A= var left =3D parseFloat(element.style.left || 0) - = (element._originalLeft || 0);=0A= =0A= element.style.top =3D top + 'px';=0A= element.style.left =3D left + 'px';=0A= element.style.height =3D element._originalHeight;=0A= element.style.width =3D element._originalWidth;=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Element.Class =3D {=0A= // Element.toggleClass(element, className) toggles the class being = on/off=0A= // Element.toggleClass(element, className1, className2) toggles = between both classes,=0A= // defaulting to className1 if neither exist=0A= toggle: function(element, className) {=0A= if(Element.Class.has(element, className)) {=0A= Element.Class.remove(element, className);=0A= if(arguments.length =3D=3D 3) Element.Class.add(element, = arguments[2]);=0A= } else {=0A= Element.Class.add(element, className);=0A= if(arguments.length =3D=3D 3) Element.Class.remove(element, = arguments[2]);=0A= }=0A= },=0A= =0A= // gets space-delimited classnames of an element as an array=0A= get: function(element) {=0A= return $(element).className.split(' ');=0A= },=0A= =0A= // functions adapted from original functions by Gavin Kistner=0A= remove: function(element) {=0A= element =3D $(element);=0A= var removeClasses =3D arguments;=0A= $R(1,arguments.length-1).each( function(index) {=0A= element.className =3D =0A= element.className.split(' ').reject( =0A= function(klass) { return (klass =3D=3D removeClasses[index]) = } ).join(' ');=0A= });=0A= },=0A= =0A= add: function(element) {=0A= element =3D $(element);=0A= for(var i =3D 1; i < arguments.length; i++) {=0A= Element.Class.remove(element, arguments[i]);=0A= element.className +=3D (element.className.length > 0 ? ' ' : '') = + arguments[i];=0A= }=0A= },=0A= =0A= // returns true if all given classes exist in said element=0A= has: function(element) {=0A= element =3D $(element);=0A= if(!element || !element.className) return false;=0A= var regEx;=0A= for(var i =3D 1; i < arguments.length; i++) {=0A= if((typeof arguments[i] =3D=3D 'object') && =0A= (arguments[i].constructor =3D=3D Array)) {=0A= for(var j =3D 0; j < arguments[i].length; j++) {=0A= regEx =3D new RegExp("(^|\\s)" + arguments[i][j] + = "(\\s|$)");=0A= if(!regEx.test(element.className)) return false;=0A= }=0A= } else {=0A= regEx =3D new RegExp("(^|\\s)" + arguments[i] + "(\\s|$)");=0A= if(!regEx.test(element.className)) return false;=0A= }=0A= }=0A= return true;=0A= },=0A= =0A= // expects arrays of strings and/or strings as optional paramters=0A= // Element.Class.has_any(element, ['classA','classB','classC'], = 'classD')=0A= has_any: function(element) {=0A= element =3D $(element);=0A= if(!element || !element.className) return false;=0A= var regEx;=0A= for(var i =3D 1; i < arguments.length; i++) {=0A= if((typeof arguments[i] =3D=3D 'object') && =0A= (arguments[i].constructor =3D=3D Array)) {=0A= for(var j =3D 0; j < arguments[i].length; j++) {=0A= regEx =3D new RegExp("(^|\\s)" + arguments[i][j] + = "(\\s|$)");=0A= if(regEx.test(element.className)) return true;=0A= }=0A= } else {=0A= regEx =3D new RegExp("(^|\\s)" + arguments[i] + "(\\s|$)");=0A= if(regEx.test(element.className)) return true;=0A= }=0A= }=0A= return false;=0A= },=0A= =0A= childrenWith: function(element, className) {=0A= var children =3D $(element).getElementsByTagName('*');=0A= var elements =3D new Array();=0A= =0A= for (var i =3D 0; i < children.length; i++)=0A= if (Element.Class.has(children[i], className))=0A= elements.push(children[i]);=0A= =0A= return elements;=0A= }=0A= }// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, = http://mir.aculo.us)=0A= // Contributors:=0A= // Justin Palmer (http://encytemedia.com/)=0A= // Mark Pilgrim (http://diveintomark.org/)=0A= // Martin Bialasinki=0A= // =0A= // See scriptaculous.js for full license.=0A= =0A= var Effect =3D {=0A= tagifyText: function(element) {=0A= var tagifyStyle =3D "position:relative";=0A= if(/MSIE/.test(navigator.userAgent)) tagifyStyle +=3D ";zoom:1";=0A= element =3D $(element);=0A= $A(element.childNodes).each( function(child) {=0A= if(child.nodeType=3D=3D3) {=0A= child.nodeValue.toArray().each( function(character) {=0A= element.insertBefore(=0A= Builder.node('span',{style: tagifyStyle},=0A= character =3D=3D " " ? String.fromCharCode(160) : = character), =0A= child);=0A= });=0A= Element.remove(child);=0A= }=0A= });=0A= },=0A= multiple: function(element, effect) {=0A= var elements;=0A= if(((typeof element =3D=3D 'object') || =0A= (typeof element =3D=3D 'function')) && =0A= (element.length))=0A= elements =3D element;=0A= else=0A= elements =3D $(element).childNodes;=0A= =0A= var options =3D Object.extend({=0A= speed: 0.1,=0A= delay: 0.0=0A= }, arguments[2] || {});=0A= var speed =3D options.speed;=0A= var delay =3D options.delay;=0A= =0A= $A(elements).each( function(element, index) {=0A= new effect(element, Object.extend(options, { delay: delay + index = * speed }));=0A= });=0A= }=0A= };=0A= =0A= var Effect2 =3D Effect; // deprecated=0A= =0A= /* ------------- transitions ------------- */=0A= =0A= Effect.Transitions =3D {}=0A= =0A= Effect.Transitions.linear =3D function(pos) {=0A= return pos;=0A= }=0A= Effect.Transitions.sinoidal =3D function(pos) {=0A= return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A= }=0A= Effect.Transitions.reverse =3D function(pos) {=0A= return 1-pos;=0A= }=0A= Effect.Transitions.flicker =3D function(pos) {=0A= return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A= }=0A= Effect.Transitions.wobble =3D function(pos) {=0A= return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A= }=0A= Effect.Transitions.pulse =3D function(pos) {=0A= return (Math.floor(pos*10) % 2 =3D=3D 0 ? =0A= (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));=0A= }=0A= Effect.Transitions.none =3D function(pos) {=0A= return 0;=0A= }=0A= Effect.Transitions.full =3D function(pos) {=0A= return 1;=0A= }=0A= =0A= /* ------------- core effects ------------- */=0A= =0A= Effect.Queue =3D {=0A= effects: [],=0A= interval: null,=0A= add: function(effect) {=0A= var timestamp =3D new Date().getTime();=0A= =0A= switch(effect.options.queue) {=0A= case 'front':=0A= // move unstarted effects after this effect =0A= this.effects.findAll(function(e){ return e.state=3D=3D'idle' = }).each( function(e) {=0A= e.startOn +=3D effect.finishOn;=0A= e.finishOn +=3D effect.finishOn;=0A= });=0A= break;=0A= case 'end':=0A= // start effect after last queued effect has finished=0A= timestamp =3D this.effects.pluck('finishOn').max() || timestamp;=0A= break;=0A= }=0A= =0A= effect.startOn +=3D timestamp;=0A= effect.finishOn +=3D timestamp;=0A= this.effects.push(effect);=0A= if(!this.interval) =0A= this.interval =3D setInterval(this.loop.bind(this), 40);=0A= },=0A= remove: function(effect) {=0A= this.effects =3D this.effects.reject(function(e) { return = e=3D=3Deffect });=0A= if(this.effects.length =3D=3D 0) {=0A= clearInterval(this.interval);=0A= this.interval =3D null;=0A= }=0A= },=0A= loop: function() {=0A= var timePos =3D new Date().getTime();=0A= this.effects.invoke('loop', timePos);=0A= }=0A= }=0A= =0A= Effect.Base =3D function() {};=0A= Effect.Base.prototype =3D {=0A= position: null,=0A= setOptions: function(options) {=0A= this.options =3D Object.extend({=0A= transition: Effect.Transitions.sinoidal,=0A= duration: 1.0, // seconds=0A= fps: 25.0, // max. 25fps due to Effect.Queue implementation=0A= sync: false, // true for combining=0A= from: 0.0,=0A= to: 1.0,=0A= delay: 0.0,=0A= queue: 'parallel'=0A= }, options || {});=0A= },=0A= start: function(options) {=0A= this.setOptions(options || {});=0A= this.currentFrame =3D 0;=0A= this.state =3D 'idle';=0A= this.startOn =3D this.options.delay*1000;=0A= this.finishOn =3D this.startOn + (this.options.duration*1000);=0A= this.event('beforeStart');=0A= if(!this.options.sync) Effect.Queue.add(this);=0A= },=0A= loop: function(timePos) {=0A= if(timePos >=3D this.startOn) {=0A= if(timePos >=3D this.finishOn) {=0A= this.render(1.0);=0A= this.cancel();=0A= this.event('beforeFinish');=0A= if(this.finish) this.finish(); =0A= this.event('afterFinish');=0A= return; =0A= }=0A= var pos =3D (timePos - this.startOn) / (this.finishOn - = this.startOn);=0A= var frame =3D Math.round(pos * this.options.fps * = this.options.duration);=0A= if(frame > this.currentFrame) {=0A= this.render(pos);=0A= this.currentFrame =3D frame;=0A= }=0A= }=0A= },=0A= render: function(pos) {=0A= if(this.state =3D=3D 'idle') {=0A= this.state =3D 'running';=0A= this.event('beforeSetup');=0A= if(this.setup) this.setup();=0A= this.event('afterSetup');=0A= }=0A= if(this.options.transition) pos =3D this.options.transition(pos);=0A= pos *=3D (this.options.to-this.options.from);=0A= pos +=3D this.options.from;=0A= this.position =3D pos;=0A= this.event('beforeUpdate');=0A= if(this.update) this.update(pos);=0A= this.event('afterUpdate');=0A= },=0A= cancel: function() {=0A= if(!this.options.sync) Effect.Queue.remove(this);=0A= this.state =3D 'finished';=0A= },=0A= event: function(eventName) {=0A= if(this.options[eventName + 'Internal']) this.options[eventName + = 'Internal'](this);=0A= if(this.options[eventName]) this.options[eventName](this);=0A= }=0A= }=0A= =0A= Effect.Parallel =3D Class.create();=0A= Object.extend(Object.extend(Effect.Parallel.prototype, = Effect.Base.prototype), {=0A= initialize: function(effects) {=0A= this.effects =3D effects || [];=0A= this.start(arguments[1]);=0A= },=0A= update: function(position) {=0A= this.effects.invoke('render', position);=0A= },=0A= finish: function(position) {=0A= this.effects.each( function(effect) {=0A= effect.render(1.0);=0A= effect.cancel();=0A= effect.event('beforeFinish');=0A= if(effect.finish) effect.finish(position);=0A= effect.event('afterFinish');=0A= });=0A= }=0A= });=0A= =0A= Effect.Opacity =3D Class.create();=0A= Object.extend(Object.extend(Effect.Opacity.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= // make this work on IE on elements without 'layout'=0A= if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))=0A= this.element.style.zoom =3D 1;=0A= var options =3D Object.extend({=0A= from: Element.getOpacity(this.element) || 0.0,=0A= to: 1.0=0A= }, arguments[1] || {});=0A= this.start(options);=0A= },=0A= update: function(position) {=0A= Element.setOpacity(this.element, position);=0A= }=0A= });=0A= =0A= Effect.MoveBy =3D Class.create();=0A= Object.extend(Object.extend(Effect.MoveBy.prototype, = Effect.Base.prototype), {=0A= initialize: function(element, toTop, toLeft) {=0A= this.element =3D $(element);=0A= this.toTop =3D toTop;=0A= this.toLeft =3D toLeft;=0A= this.start(arguments[3]);=0A= },=0A= setup: function() {=0A= // Bug in Opera: Opera returns the "real" position of a static = element or=0A= // relative element that does not have top/left explicitly set.=0A= // =3D=3D> Always set top and left for position relative elements in = your stylesheets =0A= // (to 0 if you do not need them)=0A= =0A= Element.makePositioned(this.element);=0A= this.originalTop =3D = parseFloat(Element.getStyle(this.element,'top') || '0');=0A= this.originalLeft =3D = parseFloat(Element.getStyle(this.element,'left') || '0');=0A= },=0A= update: function(position) {=0A= var topd =3D this.toTop * position + this.originalTop;=0A= var leftd =3D this.toLeft * position + this.originalLeft;=0A= this.setPosition(topd, leftd);=0A= },=0A= setPosition: function(topd, leftd) {=0A= this.element.style.top =3D topd + "px";=0A= this.element.style.left =3D leftd + "px";=0A= }=0A= });=0A= =0A= Effect.Scale =3D Class.create();=0A= Object.extend(Object.extend(Effect.Scale.prototype, = Effect.Base.prototype), {=0A= initialize: function(element, percent) {=0A= this.element =3D $(element)=0A= var options =3D Object.extend({=0A= scaleX: true,=0A= scaleY: true,=0A= scaleContent: true,=0A= scaleFromCenter: false,=0A= scaleMode: 'box', // 'box' or 'contents' or {} with = provided values=0A= scaleFrom: 100.0,=0A= scaleTo: percent=0A= }, arguments[2] || {});=0A= this.start(options);=0A= },=0A= setup: function() {=0A= var effect =3D this;=0A= =0A= this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A= this.elementPositioning =3D = Element.getStyle(this.element,'position');=0A= =0A= effect.originalStyle =3D {};=0A= ['top','left','width','height','fontSize'].each( function(k) {=0A= effect.originalStyle[k] =3D effect.element.style[k];=0A= });=0A= =0A= this.originalTop =3D this.element.offsetTop;=0A= this.originalLeft =3D this.element.offsetLeft;=0A= =0A= var fontSize =3D Element.getStyle(this.element,'font-size') || = "100%";=0A= ['em','px','%'].each( function(fontSizeType) {=0A= if(fontSize.indexOf(fontSizeType)>0) {=0A= effect.fontSize =3D parseFloat(fontSize);=0A= effect.fontSizeType =3D fontSizeType;=0A= }=0A= });=0A= =0A= this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A= =0A= this.dims =3D null;=0A= if(this.options.scaleMode=3D=3D'box')=0A= this.dims =3D [this.element.clientHeight, = this.element.clientWidth];=0A= if(this.options.scaleMode=3D=3D'content')=0A= this.dims =3D [this.element.scrollHeight, = this.element.scrollWidth];=0A= if(!this.dims)=0A= this.dims =3D [this.options.scaleMode.originalHeight,=0A= this.options.scaleMode.originalWidth];=0A= },=0A= update: function(position) {=0A= var currentScale =3D (this.options.scaleFrom/100.0) + (this.factor * = position);=0A= if(this.options.scaleContent && this.fontSize)=0A= this.element.style.fontSize =3D this.fontSize*currentScale + = this.fontSizeType;=0A= this.setDimensions(this.dims[0] * currentScale, this.dims[1] * = currentScale);=0A= },=0A= finish: function(position) {=0A= if (this.restoreAfterFinish) {=0A= var effect =3D this;=0A= ['top','left','width','height','fontSize'].each( function(k) {=0A= effect.element.style[k] =3D effect.originalStyle[k];=0A= });=0A= }=0A= },=0A= setDimensions: function(height, width) {=0A= var els =3D this.element.style;=0A= if(this.options.scaleX) els.width =3D width + 'px';=0A= if(this.options.scaleY) els.height =3D height + 'px';=0A= if(this.options.scaleFromCenter) {=0A= var topd =3D (height - this.dims[0])/2;=0A= var leftd =3D (width - this.dims[1])/2;=0A= if(this.elementPositioning =3D=3D 'absolute') {=0A= if(this.options.scaleY) els.top =3D this.originalTop-topd + "px";=0A= if(this.options.scaleX) els.left =3D this.originalLeft-leftd + = "px";=0A= } else {=0A= if(this.options.scaleY) els.top =3D -topd + "px";=0A= if(this.options.scaleX) els.left =3D -leftd + "px";=0A= }=0A= }=0A= }=0A= });=0A= =0A= Effect.Highlight =3D Class.create();=0A= Object.extend(Object.extend(Effect.Highlight.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= var options =3D Object.extend({=0A= startcolor: "#ffff99"=0A= }, arguments[1] || {});=0A= this.start(options);=0A= },=0A= setup: function() {=0A= // Disable background image during the effect=0A= this.oldBgImage =3D this.element.style.backgroundImage;=0A= this.element.style.backgroundImage =3D "none";=0A= if(!this.options.endcolor)=0A= this.options.endcolor =3D Element.getStyle(this.element, = 'background-color').parseColor('#ffffff');=0A= if (typeof this.options.restorecolor =3D=3D "undefined")=0A= this.options.restorecolor =3D this.element.style.backgroundColor;=0A= // init color calculations=0A= this.colors_base =3D [=0A= parseInt(this.options.startcolor.slice(1,3),16),=0A= parseInt(this.options.startcolor.slice(3,5),16),=0A= parseInt(this.options.startcolor.slice(5),16) ];=0A= this.colors_delta =3D [=0A= parseInt(this.options.endcolor.slice(1,3),16)-this.colors_base[0],=0A= parseInt(this.options.endcolor.slice(3,5),16)-this.colors_base[1],=0A= parseInt(this.options.endcolor.slice(5),16)-this.colors_base[2]];=0A= },=0A= update: function(position) {=0A= var effect =3D this; var colors =3D $R(0,2).map( function(i){ =0A= return = Math.round(effect.colors_base[i]+(effect.colors_delta[i]*position))=0A= });=0A= this.element.style.backgroundColor =3D "#" +=0A= colors[0].toColorPart() + colors[1].toColorPart() + = colors[2].toColorPart();=0A= },=0A= finish: function() {=0A= this.element.style.backgroundColor =3D this.options.restorecolor;=0A= this.element.style.backgroundImage =3D this.oldBgImage;=0A= }=0A= });=0A= =0A= Effect.ScrollTo =3D Class.create();=0A= Object.extend(Object.extend(Effect.ScrollTo.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= this.start(arguments[1] || {});=0A= },=0A= setup: function() {=0A= Position.prepare();=0A= var offsets =3D Position.cumulativeOffset(this.element);=0A= var max =3D window.innerHeight ? =0A= window.height - window.innerHeight :=0A= document.body.scrollHeight - =0A= (document.documentElement.clientHeight ? =0A= document.documentElement.clientHeight : = document.body.clientHeight);=0A= this.scrollStart =3D Position.deltaY;=0A= this.delta =3D (offsets[1] > max ? max : offsets[1]) - = this.scrollStart;=0A= },=0A= update: function(position) {=0A= Position.prepare();=0A= window.scrollTo(Position.deltaX, =0A= this.scrollStart + (position*this.delta));=0A= }=0A= });=0A= =0A= /* ------------- combination effects ------------- */=0A= =0A= Effect.Fade =3D function(element) {=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= var options =3D Object.extend({=0A= from: Element.getOpacity(element) || 1.0,=0A= to: 0.0,=0A= afterFinishInternal: function(effect) =0A= { if (effect.options.to =3D=3D 0) {=0A= Element.hide(effect.element);=0A= Element.setInlineOpacity(effect.element, oldOpacity);=0A= } =0A= }=0A= }, arguments[1] || {});=0A= return new Effect.Opacity(element,options);=0A= }=0A= =0A= Effect.Appear =3D function(element) {=0A= var options =3D Object.extend({=0A= from: (Element.getStyle(element, "display") =3D=3D "none" ? 0.0 : = Element.getOpacity(element) || 0.0),=0A= to: 1.0,=0A= beforeSetup: function(effect) =0A= { Element.setOpacity(effect.element, effect.options.from);=0A= Element.show(effect.element); }=0A= }, arguments[1] || {});=0A= return new Effect.Opacity(element,options);=0A= }=0A= =0A= Effect.Puff =3D function(element) {=0A= element =3D $(element);=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= var oldPosition =3D element.style.position;=0A= return new Effect.Parallel(=0A= [ new Effect.Scale(element, 200, =0A= { sync: true, scaleFromCenter: true, scaleContent: true, = restoreAfterFinish: true }), =0A= new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], =0A= Object.extend({ duration: 1.0, =0A= beforeSetupInternal: function(effect) =0A= { effect.effects[0].element.style.position =3D 'absolute'; },=0A= afterFinishInternal: function(effect)=0A= { Element.hide(effect.effects[0].element);=0A= effect.effects[0].element.style.position =3D oldPosition;=0A= Element.setInlineOpacity(effect.effects[0].element, = oldOpacity); }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.BlindUp =3D function(element) {=0A= element =3D $(element);=0A= Element.makeClipping(element);=0A= return new Effect.Scale(element, 0, =0A= Object.extend({ scaleContent: false, =0A= scaleX: false, =0A= restoreAfterFinish: true,=0A= afterFinishInternal: function(effect)=0A= { =0A= Element.hide(effect.element);=0A= Element.undoClipping(effect.element);=0A= } =0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.BlindDown =3D function(element) {=0A= element =3D $(element);=0A= var oldHeight =3D element.style.height;=0A= var elementDimensions =3D Element.getDimensions(element);=0A= return new Effect.Scale(element, 100, =0A= Object.extend({ scaleContent: false, =0A= scaleX: false,=0A= scaleFrom: 0,=0A= scaleMode: {originalHeight: elementDimensions.height, = originalWidth: elementDimensions.width},=0A= restoreAfterFinish: true,=0A= afterSetup: function(effect) {=0A= Element.makeClipping(effect.element);=0A= effect.element.style.height =3D "0px";=0A= Element.show(effect.element); =0A= }, =0A= afterFinishInternal: function(effect) {=0A= Element.undoClipping(effect.element);=0A= effect.element.style.height =3D oldHeight;=0A= }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.SwitchOff =3D function(element) {=0A= element =3D $(element);=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= return new Effect.Appear(element, { =0A= duration: 0.4,=0A= from: 0,=0A= transition: Effect.Transitions.flicker,=0A= afterFinishInternal: function(effect) {=0A= new Effect.Scale(effect.element, 1, { =0A= duration: 0.3, scaleFromCenter: true,=0A= scaleX: false, scaleContent: false, restoreAfterFinish: true,=0A= beforeSetup: function(effect) { =0A= Element.makePositioned(effect.element); =0A= Element.makeClipping(effect.element);=0A= },=0A= afterFinishInternal: function(effect) { =0A= Element.hide(effect.element); =0A= Element.undoClipping(effect.element);=0A= Element.undoPositioned(effect.element);=0A= Element.setInlineOpacity(effect.element, oldOpacity);=0A= }=0A= })=0A= }=0A= });=0A= }=0A= =0A= Effect.DropOut =3D function(element) {=0A= element =3D $(element);=0A= var oldTop =3D element.style.top;=0A= var oldLeft =3D element.style.left;=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= return new Effect.Parallel(=0A= [ new Effect.MoveBy(element, 100, 0, { sync: true }), =0A= new Effect.Opacity(element, { sync: true, to: 0.0 }) ],=0A= Object.extend(=0A= { duration: 0.5,=0A= beforeSetup: function(effect) { =0A= Element.makePositioned(effect.effects[0].element); },=0A= afterFinishInternal: function(effect) { =0A= Element.hide(effect.effects[0].element); =0A= Element.undoPositioned(effect.effects[0].element);=0A= effect.effects[0].element.style.left =3D oldLeft;=0A= effect.effects[0].element.style.top =3D oldTop;=0A= Element.setInlineOpacity(effect.effects[0].element, = oldOpacity); } =0A= }, arguments[1] || {}));=0A= }=0A= =0A= Effect.Shake =3D function(element) {=0A= element =3D $(element);=0A= var oldTop =3D element.style.top;=0A= var oldLeft =3D element.style.left;=0A= return new Effect.MoveBy(element, 0, 20, =0A= { duration: 0.05, afterFinishInternal: function(effect) {=0A= new Effect.MoveBy(effect.element, 0, -40, =0A= { duration: 0.1, afterFinishInternal: function(effect) {=0A= new Effect.MoveBy(effect.element, 0, 40, =0A= { duration: 0.1, afterFinishInternal: function(effect) {=0A= new Effect.MoveBy(effect.element, 0, -40, =0A= { duration: 0.1, afterFinishInternal: function(effect) {=0A= new Effect.MoveBy(effect.element, 0, 40, =0A= { duration: 0.1, afterFinishInternal: function(effect) {=0A= new Effect.MoveBy(effect.element, 0, -20, =0A= { duration: 0.05, afterFinishInternal: function(effect) {=0A= Element.undoPositioned(effect.element);=0A= effect.element.style.left =3D oldLeft;=0A= effect.element.style.top =3D oldTop;=0A= }}) }}) }}) }}) }}) }});=0A= }=0A= =0A= Effect.SlideDown =3D function(element) {=0A= element =3D $(element);=0A= Element.cleanWhitespace(element);=0A= // SlideDown need to have the content of the element wrapped in a = container element with fixed height!=0A= var oldInnerBottom =3D element.firstChild.style.bottom;=0A= var elementDimensions =3D Element.getDimensions(element);=0A= return new Effect.Scale(element, 100, =0A= Object.extend({ scaleContent: false, =0A= scaleX: false, =0A= scaleFrom: 0,=0A= scaleMode: {originalHeight: elementDimensions.height, originalWidth: = elementDimensions.width}, =0A= restoreAfterFinish: true,=0A= afterSetup: function(effect) {=0A= Element.makePositioned(effect.element.firstChild);=0A= if (window.opera) effect.element.firstChild.style.top =3D "";=0A= Element.makeClipping(effect.element);=0A= element.style.height =3D '0';=0A= Element.show(element); =0A= }, =0A= afterUpdateInternal: function(effect) { =0A= effect.element.firstChild.style.bottom =3D =0A= (effect.originalHeight - effect.element.clientHeight) + 'px'; },=0A= afterFinishInternal: function(effect) { =0A= Element.undoClipping(effect.element); =0A= Element.undoPositioned(effect.element.firstChild);=0A= effect.element.firstChild.style.bottom =3D oldInnerBottom; }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.SlideUp =3D function(element) {=0A= element =3D $(element);=0A= Element.cleanWhitespace(element);=0A= var oldInnerBottom =3D element.firstChild.style.bottom;=0A= return new Effect.Scale(element, 0, =0A= Object.extend({ scaleContent: false, =0A= scaleX: false, =0A= scaleMode: 'box',=0A= scaleFrom: 100,=0A= restoreAfterFinish: true,=0A= beforeStartInternal: function(effect) { =0A= Element.makePositioned(effect.element.firstChild);=0A= if (window.opera) effect.element.firstChild.style.top =3D "";=0A= Element.makeClipping(effect.element);=0A= Element.show(element); =0A= }, =0A= afterUpdateInternal: function(effect) { =0A= effect.element.firstChild.style.bottom =3D =0A= (effect.originalHeight - effect.element.clientHeight) + 'px'; },=0A= afterFinishInternal: function(effect) { =0A= Element.hide(effect.element);=0A= Element.undoClipping(effect.element); =0A= Element.undoPositioned(effect.element.firstChild);=0A= effect.element.firstChild.style.bottom =3D oldInnerBottom; }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.Squish =3D function(element) {=0A= // Bug in opera makes the TD containing this element expand for a = instance after finish =0A= return new Effect.Scale(element, window.opera ? 1 : 0, =0A= { restoreAfterFinish: true,=0A= beforeSetup: function(effect) { =0A= Element.makeClipping(effect.element); }, =0A= afterFinishInternal: function(effect) { =0A= Element.hide(effect.element); =0A= Element.undoClipping(effect.element); } =0A= });=0A= }=0A= =0A= Effect.Grow =3D function(element) {=0A= element =3D $(element);=0A= var options =3D arguments[1] || {};=0A= =0A= var elementDimensions =3D Element.getDimensions(element);=0A= var originalWidth =3D elementDimensions.width;=0A= var originalHeight =3D elementDimensions.height;=0A= var oldTop =3D element.style.top;=0A= var oldLeft =3D element.style.left;=0A= var oldHeight =3D element.style.height;=0A= var oldWidth =3D element.style.width;=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= =0A= var direction =3D options.direction || 'center';=0A= var moveTransition =3D options.moveTransition || = Effect.Transitions.sinoidal;=0A= var scaleTransition =3D options.scaleTransition || = Effect.Transitions.sinoidal;=0A= var opacityTransition =3D options.opacityTransition || = Effect.Transitions.full;=0A= =0A= var initialMoveX, initialMoveY;=0A= var moveX, moveY;=0A= =0A= switch (direction) {=0A= case 'top-left':=0A= initialMoveX =3D initialMoveY =3D moveX =3D moveY =3D 0; =0A= break;=0A= case 'top-right':=0A= initialMoveX =3D originalWidth;=0A= initialMoveY =3D moveY =3D 0;=0A= moveX =3D -originalWidth;=0A= break;=0A= case 'bottom-left':=0A= initialMoveX =3D moveX =3D 0;=0A= initialMoveY =3D originalHeight;=0A= moveY =3D -originalHeight;=0A= break;=0A= case 'bottom-right':=0A= initialMoveX =3D originalWidth;=0A= initialMoveY =3D originalHeight;=0A= moveX =3D -originalWidth;=0A= moveY =3D -originalHeight;=0A= break;=0A= case 'center':=0A= initialMoveX =3D originalWidth / 2;=0A= initialMoveY =3D originalHeight / 2;=0A= moveX =3D -originalWidth / 2;=0A= moveY =3D -originalHeight / 2;=0A= break;=0A= }=0A= =0A= return new Effect.MoveBy(element, initialMoveY, initialMoveX, { =0A= duration: 0.01, =0A= beforeSetup: function(effect) { =0A= Element.hide(effect.element);=0A= Element.makeClipping(effect.element);=0A= Element.makePositioned(effect.element);=0A= },=0A= afterFinishInternal: function(effect) {=0A= new Effect.Parallel(=0A= [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, = from: 0.0, transition: opacityTransition }),=0A= new Effect.MoveBy(effect.element, moveY, moveX, { sync: true, = transition: moveTransition }),=0A= new Effect.Scale(effect.element, 100, {=0A= scaleMode: { originalHeight: originalHeight, originalWidth: = originalWidth }, =0A= sync: true, scaleFrom: window.opera ? 1 : 0, transition: = scaleTransition, restoreAfterFinish: true})=0A= ], Object.extend({=0A= beforeSetup: function(effect) {=0A= effect.effects[0].element.style.height =3D 0;=0A= Element.show(effect.effects[0].element);=0A= }, =0A= afterFinishInternal: function(effect) {=0A= var el =3D effect.effects[0].element;=0A= var els =3D el.style;=0A= Element.undoClipping(el); =0A= Element.undoPositioned(el);=0A= els.top =3D oldTop;=0A= els.left =3D oldLeft;=0A= els.height =3D oldHeight;=0A= els.width =3D originalWidth;=0A= Element.setInlineOpacity(el, oldOpacity);=0A= }=0A= }, options)=0A= )=0A= }=0A= });=0A= }=0A= =0A= Effect.Shrink =3D function(element) {=0A= element =3D $(element);=0A= var options =3D arguments[1] || {};=0A= =0A= var originalWidth =3D element.clientWidth;=0A= var originalHeight =3D element.clientHeight;=0A= var oldTop =3D element.style.top;=0A= var oldLeft =3D element.style.left;=0A= var oldHeight =3D element.style.height;=0A= var oldWidth =3D element.style.width;=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= =0A= var direction =3D options.direction || 'center';=0A= var moveTransition =3D options.moveTransition || = Effect.Transitions.sinoidal;=0A= var scaleTransition =3D options.scaleTransition || = Effect.Transitions.sinoidal;=0A= var opacityTransition =3D options.opacityTransition || = Effect.Transitions.none;=0A= =0A= var moveX, moveY;=0A= =0A= switch (direction) {=0A= case 'top-left':=0A= moveX =3D moveY =3D 0;=0A= break;=0A= case 'top-right':=0A= moveX =3D originalWidth;=0A= moveY =3D 0;=0A= break;=0A= case 'bottom-left':=0A= moveX =3D 0;=0A= moveY =3D originalHeight;=0A= break;=0A= case 'bottom-right':=0A= moveX =3D originalWidth;=0A= moveY =3D originalHeight;=0A= break;=0A= case 'center': =0A= moveX =3D originalWidth / 2;=0A= moveY =3D originalHeight / 2;=0A= break;=0A= }=0A= =0A= return new Effect.Parallel(=0A= [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, = transition: opacityTransition }),=0A= new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, = transition: scaleTransition, restoreAfterFinish: true}),=0A= new Effect.MoveBy(element, moveY, moveX, { sync: true, transition: = moveTransition })=0A= ], Object.extend({ =0A= beforeStartInternal: function(effect) { =0A= Element.makePositioned(effect.effects[0].element);=0A= Element.makeClipping(effect.effects[0].element);=0A= },=0A= afterFinishInternal: function(effect) {=0A= var el =3D effect.effects[0].element;=0A= var els =3D el.style;=0A= Element.hide(el);=0A= Element.undoClipping(el); =0A= Element.undoPositioned(el);=0A= els.top =3D oldTop;=0A= els.left =3D oldLeft;=0A= els.height =3D oldHeight;=0A= els.width =3D oldWidth;=0A= Element.setInlineOpacity(el, oldOpacity);=0A= }=0A= }, options)=0A= );=0A= }=0A= =0A= Effect.Pulsate =3D function(element) {=0A= element =3D $(element);=0A= var options =3D arguments[1] || {};=0A= var oldOpacity =3D Element.getInlineOpacity(element);=0A= var transition =3D options.transition || Effect.Transitions.sinoidal;=0A= var reverser =3D function(pos){ return = transition(1-Effect.Transitions.pulse(pos)) };=0A= reverser.bind(transition);=0A= return new Effect.Opacity(element, =0A= Object.extend(Object.extend({ duration: 3.0, from: 0,=0A= afterFinishInternal: function(effect) { = Element.setInlineOpacity(effect.element, oldOpacity); }=0A= }, options), {transition: reverser}));=0A= }=0A= =0A= Effect.Fold =3D function(element) {=0A= element =3D $(element);=0A= var originalTop =3D element.style.top;=0A= var originalLeft =3D element.style.left;=0A= var originalWidth =3D element.style.width;=0A= var originalHeight =3D element.style.height;=0A= Element.makeClipping(element);=0A= return new Effect.Scale(element, 5, Object.extend({ =0A= scaleContent: false,=0A= scaleX: false,=0A= afterFinishInternal: function(effect) {=0A= new Effect.Scale(element, 1, { =0A= scaleContent: false, =0A= scaleY: false,=0A= afterFinishInternal: function(effect) { =0A= Element.hide(effect.element); =0A= Element.undoClipping(effect.element); =0A= effect.element.style.top =3D originalTop;=0A= effect.element.style.left =3D originalLeft;=0A= effect.element.style.width =3D originalWidth;=0A= effect.element.style.height =3D originalHeight;=0A= } });=0A= }}, arguments[1] || {}));=0A= }=0A= =0A= // Autocompleter.Base handles all the autocompletion functionality=0A= // that's independent of the data source for autocompletion. This=0A= // includes drawing the autocompletion menu, observing keyboard=0A= // and mouse events, and similar.=0A= //=0A= // Specific autocompleters need to provide, at the very least,=0A= // a getUpdatedChoices function that will be invoked every time=0A= // the text inside the monitored textbox changes. This method=0A= // should get the text for which to provide autocompletion by=0A= // invoking this.getEntry(), NOT by directly accessing=0A= // this.element.value. This is to allow incremental tokenized=0A= // autocompletion. Specific auto-completion logic (AJAX, etc)=0A= // belongs in getUpdatedChoices.=0A= //=0A= // Tokenized incremental autocompletion is enabled automatically=0A= // when an autocompleter is instantiated with the 'tokens' option=0A= // in the options parameter, e.g.:=0A= // new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });=0A= // will incrementally autocomplete with a comma as the token.=0A= // Additionally, ',' in the above example can be replaced with=0A= // a token array, e.g. { tokens: new Array (',', '\n') } which=0A= // enables autocompletion on multiple tokens. This is most=0A= // useful when one of the tokens is \n (a newline), as it=0A= // allows smart autocompletion after linebreaks.=0A= var Autocompleter =3D {}=0A= Autocompleter.Base =3D function()=0A= {=0A= };=0A= Autocompleter.Base.prototype =3D {=0A= base_initialize: function(element, update, options)=0A= {=0A= this.element =3D $(element);=0A= this.update =3D $(update);=0A= this.has_focus =3D false;=0A= this.changed =3D false;=0A= this.active =3D false;=0A= this.index =3D 0;=0A= this.entry_count =3D 0;=0A= if (this.setOptions)=0A= this.setOptions(options);=0A= else=0A= this.options =3D options || {};=0A= this.options.tokens =3D this.options.tokens || new Array();=0A= this.options.frequency =3D this.options.frequency || 0.4;=0A= this.options.min_chars =3D this.options.min_chars || 1;=0A= this.options.onShow =3D this.options.onShow ||=0A= function(element, update)=0A= {=0A= if (!update.style.position || = update.style.position =3D=3D 'absolute')=0A= {=0A= update.style.position =3D = 'absolute';=0A= var offsets =3D = Position.cumulativeOffset(element);=0A= update.style.left =3D offsets[0] + = 'px';=0A= update.style.top =3D (offsets[1] + = element.offsetHeight) + 'px';=0A= update.style.width =3D = element.offsetWidth + 'px';=0A= }=0A= new Effect.Appear(update, = {duration:0.15});=0A= };=0A= this.options.onHide =3D this.options.onHide ||=0A= function(element, update)=0A= {=0A= new Effect.Fade(update, = {duration:0.15})=0A= };=0A= if (this.options.indicator)=0A= this.indicator =3D $(this.options.indicator);=0A= if (typeof(this.options.tokens) =3D=3D 'string')=0A= this.options.tokens =3D new Array(this.options.tokens);=0A= this.observer =3D null;=0A= Element.hide(this.update);=0A= Event.observe(this.element, "blur", = this.onBlur.bindAsEventListener(this));=0A= Event.observe(this.element, "keypress", = this.onKeyPress.bindAsEventListener(this));=0A= },=0A= show: function()=0A= {=0A= if (this.update.style.display =3D=3D 'none') = this.options.onShow(this.element, this.update);=0A= if (!this.iefix && (navigator.appVersion.indexOf('MSIE') > 0) && = this.update.style.position =3D=3D 'absolute')=0A= {=0A= new Insertion.After(this.update,=0A= '');=0A= this.iefix =3D $(this.update.id + '_iefix');=0A= }=0A= if (this.iefix)=0A= {=0A= Position.clone(this.update, this.iefix);=0A= this.iefix.style.zIndex =3D 1;=0A= this.update.style.zIndex =3D 2;=0A= Element.show(this.iefix);=0A= }=0A= },=0A= hide: function()=0A= {=0A= if (this.update.style.display =3D=3D '') = this.options.onHide(this.element, this.update);=0A= if (this.iefix) Element.hide(this.iefix);=0A= },=0A= startIndicator: function()=0A= {=0A= if (this.indicator) Element.show(this.indicator);=0A= },=0A= stopIndicator: function()=0A= {=0A= if (this.indicator) Element.hide(this.indicator);=0A= },=0A= onKeyPress: function(event)=0A= {=0A= if (this.active)=0A= switch (event.keyCode)=0A= {=0A= case Event.KEY_TAB:=0A= case Event.KEY_RETURN:=0A= this.select_entry();=0A= Event.stop(event);=0A= case Event.KEY_ESC:=0A= this.hide();=0A= this.active =3D false;=0A= return;=0A= case Event.KEY_LEFT:=0A= case Event.KEY_RIGHT:=0A= return;=0A= case Event.KEY_UP:=0A= this.mark_previous();=0A= this.render();=0A= if (navigator.appVersion.indexOf('AppleWebKit') > 0) = Event.stop(event);=0A= return;=0A= case Event.KEY_DOWN:=0A= this.mark_next();=0A= this.render();=0A= if (navigator.appVersion.indexOf('AppleWebKit') > 0) = Event.stop(event);=0A= return;=0A= }=0A= else=0A= if (event.keyCode =3D=3D Event.KEY_TAB || event.keyCode = =3D=3D Event.KEY_RETURN)=0A= return;=0A= this.changed =3D true;=0A= this.has_focus =3D true;=0A= if (this.observer) clearTimeout(this.observer);=0A= this.observer =3D=0A= setTimeout(this.onObserverEvent.bind(this), = this.options.frequency * 1000);=0A= },=0A= onHover: function(event)=0A= {=0A= var element =3D Event.findElement(event, 'LI');=0A= if (this.index !=3D element.autocompleteIndex)=0A= {=0A= this.index =3D element.autocompleteIndex;=0A= this.render();=0A= }=0A= Event.stop(event);=0A= },=0A= onClick: function(event)=0A= {=0A= var element =3D Event.findElement(event, 'LI');=0A= this.index =3D element.autocompleteIndex;=0A= this.select_entry();=0A= Event.stop(event);=0A= },=0A= onBlur: function(event)=0A= {=0A= // needed to make click events working=0A= setTimeout(this.hide.bind(this), 250);=0A= this.has_focus =3D false;=0A= this.active =3D false;=0A= },=0A= render: function()=0A= {=0A= if (this.entry_count > 0)=0A= {=0A= for (var i =3D 0; i < this.entry_count; i++)=0A= {=0A= this.index =3D=3D i ?=0A= Element.addClassName(this.get_entry(i), "selected") :=0A= Element.removeClassName(this.get_entry(i), "selected");=0A= }=0A= if (this.has_focus)=0A= {=0A= if (this.get_current_entry().scrollIntoView)=0A= this.get_current_entry().scrollIntoView(false);=0A= this.show();=0A= this.active =3D true;=0A= }=0A= }=0A= else this.hide();=0A= },=0A= mark_previous: function()=0A= {=0A= if (this.index > 0) this.index--=0A= else this.index =3D this.entry_count - 1;=0A= },=0A= mark_next: function()=0A= {=0A= if (this.index < this.entry_count - 1) this.index++=0A= else this.index =3D 0;=0A= },=0A= get_entry: function(index)=0A= {=0A= return this.update.firstChild.childNodes[index];=0A= },=0A= get_current_entry: function()=0A= {=0A= return this.get_entry(this.index);=0A= },=0A= select_entry: function()=0A= {=0A= this.active =3D false;=0A= value =3D = Element.collectTextNodesIgnoreClass(this.get_current_entry(), = 'informal').unescapeHTML();=0A= this.updateElement(value);=0A= this.element.focus();=0A= },=0A= updateElement: function(value)=0A= {=0A= var last_token_pos =3D this.findLastToken();=0A= if (last_token_pos !=3D -1)=0A= {=0A= var new_value =3D this.element.value.substr(0, = last_token_pos + 1);=0A= var whitespace =3D this.element.value.substr(last_token_pos = + 1).match(/^\s+/);=0A= if (whitespace)=0A= new_value +=3D whitespace[0];=0A= this.element.value =3D new_value + value;=0A= }=0A= else=0A= {=0A= this.element.value =3D value;=0A= }=0A= },=0A= updateChoices: function(choices)=0A= {=0A= if (!this.changed && this.has_focus)=0A= {=0A= this.update.innerHTML =3D choices;=0A= Element.cleanWhitespace(this.update);=0A= Element.cleanWhitespace(this.update.firstChild);=0A= if (this.update.firstChild && = this.update.firstChild.childNodes)=0A= {=0A= this.entry_count =3D=0A= this.update.firstChild.childNodes.length;=0A= for (var i =3D 0; i < this.entry_count; i++)=0A= {=0A= entry =3D this.get_entry(i);=0A= entry.autocompleteIndex =3D i;=0A= this.addObservers(entry);=0A= }=0A= }=0A= else=0A= {=0A= this.entry_count =3D 0;=0A= }=0A= this.stopIndicator();=0A= this.index =3D 0;=0A= this.render();=0A= }=0A= },=0A= addObservers: function(element)=0A= {=0A= Event.observe(element, "mouseover", = this.onHover.bindAsEventListener(this));=0A= Event.observe(element, "click", = this.onClick.bindAsEventListener(this));=0A= },=0A= onObserverEvent: function()=0A= {=0A= this.changed =3D false;=0A= if (this.getEntry().length >=3D this.options.min_chars)=0A= {=0A= this.startIndicator();=0A= this.getUpdatedChoices();=0A= }=0A= else=0A= {=0A= this.active =3D false;=0A= this.hide();=0A= }=0A= },=0A= getEntry: function()=0A= {=0A= var token_pos =3D this.findLastToken();=0A= var ret;=0A= if (token_pos !=3D -1)=0A= ret =3D this.element.value.substr(token_pos + = 1).replace(/^\s+/, '').replace(/\s+$/, '');=0A= else=0A= ret =3D this.element.value;=0A= return /\n/.test(ret) ? '' : ret;=0A= },=0A= findLastToken: function()=0A= {=0A= var last_token_pos =3D -1;=0A= for (var i =3D 0; i < this.options.tokens.length; i++)=0A= {=0A= var this_token_pos =3D = this.element.value.lastIndexOf(this.options.tokens[i]);=0A= if (this_token_pos > last_token_pos)=0A= last_token_pos =3D this_token_pos;=0A= }=0A= return last_token_pos;=0A= }=0A= }=0A= Ajax.Autocompleter =3D Class.create();=0A= Object.extend(Object.extend(Ajax.Autocompleter.prototype, = Autocompleter.Base.prototype), {=0A= initialize: function(element, update, url, options)=0A= {=0A= this.base_initialize(element, update, options);=0A= this.options.asynchronous =3D true;=0A= this.options.onComplete =3D this.onComplete.bind(this)=0A= this.options.method =3D 'post';=0A= this.options.defaultParams =3D this.options.parameters || null;=0A= this.url =3D url;=0A= },=0A= getUpdatedChoices: function()=0A= {=0A= var entry =3D encodeURIComponent(this.element.name) + '=3D' +=0A= encodeURIComponent(this.getEntry());=0A= this.options.parameters =3D this.options.callback ?=0A= this.options.callback(this.element, = entry) : entry;=0A= if (this.options.defaultParams)=0A= this.options.parameters +=3D '&' + = this.options.defaultParams;=0A= // (Jeremy Higgs: Instead of using AJAX.Request, let's be = consistent and use DWR)=0A= this.options.dwrFunction(this.url, this.getEntry(), = this.options.onComplete)=0A= },=0A= onComplete: function(response)=0A= {=0A= this.updateChoices(response.response);=0A= }=0A= });=0A= // The local array autocompleter. Used when you'd prefer to=0A= // inject an array of autocompletion options into the page, rather=0A= // than sending out Ajax queries, which can be quite slow sometimes.=0A= //=0A= // The constructor takes four parameters. The first two are, as usual,=0A= // the id of the monitored textbox, and id of the autocompletion menu.=0A= // The third is the array you want to autocomplete from, and the fourth=0A= // is the options block.=0A= //=0A= // Extra local autocompletion options:=0A= // - choices - How many autocompletion choices to offer=0A= //=0A= // - partial_search - If false, the autocompleter will match entered=0A= // text only at the beginning of strings in the=0A= // autocomplete array. Defaults to true, which will=0A= // match text at the beginning of any *word* in the=0A= // strings in the autocomplete array. If you want to=0A= // search anywhere in the string, additionally set=0A= // the option full_search to true (default: off).=0A= //=0A= // - full_search - Search anywhere in autocomplete array strings.=0A= //=0A= // - partial_chars - How many characters to enter before triggering=0A= // a partial match (unlike min_chars, which defines=0A= // how many characters are required to do any match=0A= // at all). Defaults to 2.=0A= //=0A= // - ignore_case - Whether to ignore case when autocompleting.=0A= // Defaults to true.=0A= //=0A= // It's possible to pass in a custom function as the 'selector'=0A= // option, if you prefer to write your own autocompletion logic.=0A= // In that case, the other options above will not apply unless=0A= // you support them.=0A= Autocompleter.Local =3D Class.create();=0A= Autocompleter.Local.prototype =3D Object.extend(new = Autocompleter.Base(), {=0A= initialize: function(element, update, array, options)=0A= {=0A= this.base_initialize(element, update, options);=0A= this.options.array =3D array;=0A= },=0A= getUpdatedChoices: function()=0A= {=0A= this.updateChoices(this.options.selector(this));=0A= },=0A= setOptions: function(options)=0A= {=0A= this.options =3D Object.extend({=0A= choices: 10,=0A= partial_search: true,=0A= partial_chars: 2,=0A= ignore_case: true,=0A= full_search: false,=0A= selector: function(instance)=0A= {=0A= var ret =3D new Array();=0A= // Beginning matches=0A= var partial =3D new Array();=0A= // Inside matches=0A= var entry =3D instance.getEntry();=0A= var count =3D 0;=0A= for (var i =3D 0; i < instance.options.array.length &&=0A= ret.length < instance.options.choices; = i++)=0A= {=0A= var elem =3D instance.options.array[i];=0A= var found_pos =3D instance.options.ignore_case ?=0A= = elem.toLowerCase().indexOf(entry.toLowerCase()) :=0A= elem.indexOf(entry);=0A= while (found_pos !=3D -1)=0A= {=0A= if (found_pos =3D=3D 0 && elem.length !=3D = entry.length)=0A= {=0A= ret.push("
  • " + elem.substr(0, = entry.length) + "" +=0A= elem.substr(entry.length) + = "
  • ");=0A= break;=0A= }=0A= else if (entry.length >=3D = instance.options.partial_chars &&=0A= instance.options.partial_search && = found_pos !=3D -1)=0A= {=0A= if (instance.options.full_search || = /\s/.test(elem.substr(found_pos - 1, 1)))=0A= {=0A= partial.push("
  • " + elem.substr(0, = found_pos) + "" +=0A= elem.substr(found_pos, = entry.length) + "" + elem.substr(=0A= found_pos + entry.length) + = "
  • ");=0A= break;=0A= }=0A= }=0A= found_pos =3D instance.options.ignore_case ?=0A= = elem.toLowerCase().indexOf(entry.toLowerCase(), found_pos + 1) :=0A= elem.indexOf(entry, found_pos + 1);=0A= }=0A= }=0A= if (partial.length)=0A= ret =3D ret.concat(partial.slice(0, = instance.options.choices - ret.length))=0A= return "";=0A= }=0A= }, options || {});=0A= }=0A= });=0A= =0A= /*************************************************=0A= labels.js=0A= *************************************************/=0A= // please declare the "domainName" and "entityId" javascript variables = before including this script file=0A= var operationInProgress =3D false;=0A= // variable to enforce one label operation at a time=0A= // populates labelsInfoSpan with the droppable versions of the labels=0A= // also fires off another request to pull in the suggested labels=0A= =0A= /**=0A= Adding labels=0A= **/=0A= function onAddLabel()=0A= {=0A= enableDeleteLabelLinks();=0A= fetchAndWriteSuggestedLabels();=0A= }=0A= =0A= // DWR callback method for when labels are being added=0A= function add_label_callback(response)=0A= {=0A= if (response.success)=0A= {=0A= var labelsInfoSpan =3D document.getElementById('labelsList');=0A= var errorSpan =3D document.getElementById('errorSpan');=0A= errorSpan.innerHTML =3D "";=0A= labelsInfoSpan.innerHTML =3D response.response;=0A= // call the fade event on each of the new labels=0A= var updatedLabelIds =3D '';=0A= if (document.getElementById("recentlyUpdated"))=0A= {=0A= updatedLabelIds =3D = document.getElementById("recentlyUpdated").innerHTML;=0A= }=0A= var labelIdsArray =3D stringTokenizer(updatedLabelIds, new = Array(',', ' '));=0A= for (var i =3D 0; i < labelIdsArray.length; i++)=0A= {=0A= if (labelIdsArray[i].length > 0) // skip empty strings in = the tokenized array (can't figure out how they get in there)=0A= {=0A= label =3D document.getElementById('label-' + = labelIdsArray[i]);=0A= if (label.style.display =3D=3D 'none')=0A= {=0A= new Effect.Appear(document.getElementById('label-' + = labelIdsArray[i]));=0A= }=0A= }=0A= }=0A= document.addLabelForm.labelsString.value =3D '';=0A= }=0A= else=0A= {=0A= showLabelOperationErrorContainer();=0A= document.getElementById("labelOperationErrorMessage").innerHTML = =3D response.response;=0A= }=0A= // clear the text box and focus on it should the user want to add = another label=0A= document.addLabelForm.labelsString.focus();=0A= fetchAndWriteSuggestedLabels();=0A= // once status has been updated we switch off the waiting icon=0A= toggleWaitImageAndStatus(false);=0A= setLabelOperationStatusMessage('');=0A= operationInProgress =3D false;=0A= // hide box after the 'done' button is clicked if label successfully = added=0A= if (hideTextfieldAfterAdd && response.success)=0A= disableDeleteLabelLinks();=0A= }=0A= =0A= // DWR error handler for adding labels=0A= function add_label_errorhandler()=0A= {=0A= handleError("[41a] Error connecting to the server. The labels have = not been updated.");=0A= }=0A= =0A= var hideTextfieldAfterAdd=0A= // Method to add labels via AJAX=0A= function doAddLabel(hideTextfieldAfterAddParam)=0A= {=0A= hideTextfieldAfterAdd =3D hideTextfieldAfterAddParam;=0A= if (!operationInProgress)=0A= {=0A= var newLabelName =3D = document.addLabelForm.labelsString.value.toLowerCase();=0A= // if there is no text in the add label textfield and the user = clicks 'done', skip xml http request to add/validate label=0A= if (hideTextfieldAfterAdd && (newLabelName =3D=3D null || = newLabelName.length =3D=3D 0))=0A= {=0A= disableDeleteLabelLinks();=0A= return;=0A= }=0A= operationInProgress =3D true;=0A= // hide any errors from previous attempts at adding a label=0A= hideLabelOperationErrorContainer();=0A= toggleWaitImageAndStatus(true);=0A= setLabelOperationStatusMessage('Adding label ...');=0A= AddLabelToEntity.addLabel(entityId, newLabelName, = {callback:add_label_callback, errorHandler:add_label_errorhandler});=0A= }=0A= }=0A= function stringTokenizer(str, delimeters)=0A= {=0A= var result =3D new Array();=0A= var delimeterChar =3D delimeters.pop();=0A= // alert('Delimeter char: ' + delimeterChar);=0A= var temp =3D str.split(delimeterChar);=0A= if (delimeters.length =3D=3D 0)=0A= {=0A= // alert('Returning ' + temp.valueOf());=0A= return temp;=0A= }=0A= else=0A= {=0A= for (var j =3D 0; j < temp.length; j++)=0A= {=0A= // alert('Recursing on: ' + temp[j] + ' with delimeters: ' + = delimeters.valueOf());=0A= var copyOfDelimeters =3D copyArray(delimeters);=0A= result =3D result.concat(stringTokenizer(temp[j], = copyOfDelimeters));=0A= }=0A= }=0A= return result;=0A= }=0A= function copyArray(a)=0A= {=0A= var result =3D new Array();=0A= for (var i =3D 0; i < a.length; i++)=0A= result.push(a[i]);=0A= return result;=0A= }=0A= =0A= /**=0A= Removing labels=0A= **/=0A= // DWR callback method for removing labels (wraps around another = function in order to pass a local context)=0A= // See = https://dwr.dev.java.net/servlets/ReadMsg?list=3Dusers&msgNo=3D1040=0A= var remove_label_callback_wrapper =3D function(labelId)=0A= {=0A= return function(response)=0A= {=0A= if (response.success)=0A= {=0A= toggleWaitImageAndStatus(false);=0A= setLabelOperationStatusMessage('');=0A= new Effect.DropOut(document.getElementById('label-' + = labelId));=0A= }=0A= else=0A= {=0A= showLabelOperationErrorContainer();=0A= = document.getElementById("labelOperationErrorMessage").innerHTML =3D = response.response;=0A= }=0A= =0A= // once status has been updated we switch off the waiting icon=0A= toggleWaitImageAndStatus(false);=0A= setLabelOperationStatusMessage('');=0A= operationInProgress =3D false;=0A= }=0A= }=0A= =0A= // DWR error handler for removing labels=0A= function remove_label_errorhandler()=0A= {=0A= handleError("[42b] Error connecting to the server. The labels have = not been updated.");=0A= }=0A= =0A= // Method to remove label via AJAX=0A= function doRemoveLabel(labelId)=0A= {=0A= if (!operationInProgress)=0A= {=0A= operationInProgress =3D true;=0A= toggleWaitImageAndStatus(true);=0A= // hide any errors from previous attempts at adding a label=0A= hideLabelOperationErrorContainer();=0A= setLabelOperationStatusMessage('Removing label ...');=0A= RemoveLabelFromEntity.removeLabel(entityId, labelId, = {callback:remove_label_callback_wrapper(labelId), = errorHandler:remove_label_errorhandler});=0A= var errorSpan =3D this.document.getElementById('errorSpan');=0A= errorSpan.innerHTML =3D "";=0A= }=0A= }=0A= =0A= /**=0A= Viewing labels (with delete label links)=0A= **/=0A= // DWR callback method for viewing labels=0A= function view_labels_callback(response)=0A= {=0A= if (response.success)=0A= {=0A= var labelsInfoSpan =3D document.getElementById('labelsList');=0A= labelsInfoSpan.innerHTML =3D response.response;=0A= document.getElementById('editLabelsLink').style.visibility =3D = 'hidden';=0A= }=0A= else=0A= {=0A= handleError("[43a] Error connecting to the server. The labels = have not been updated.");=0A= }=0A= }=0A= =0A= // DWR error handler for viewing labels=0A= function view_labels_errorhandler()=0A= {=0A= handleError("[43b] Error connecting to the server. The labels have = not been updated.");=0A= }=0A= =0A= // Method for viewing labels with enabled delete label links (initiated = after the 'Edit' link is clicked)=0A= function enableDeleteLabelLinks()=0A= {=0A= var errorSpan =3D this.document.getElementById('errorSpan');=0A= errorSpan.innerHTML =3D "";=0A= ViewLabelsForEntity.viewLabels(entityId, = {callback:view_labels_callback, errorHandler:view_labels_errorhandler});=0A= }=0A= =0A= /**=0A= Viewing labels (with disabled delete label links)=0A= **/=0A= // DWR callback method=0A= function view_labels_disabled_callback(response)=0A= {=0A= if (response.success)=0A= {=0A= var labelsInfoSpan =3D document.getElementById('labelsList');=0A= labelsInfoSpan.innerHTML =3D response.response;=0A= hideLabelsInput();=0A= }=0A= else=0A= {=0A= handleError("[44a] Error connecting to the server. The labels = have not been updated.");=0A= }=0A= }=0A= =0A= // DWR error handler=0A= function view_labels_disabled_errorhandler()=0A= {=0A= handleError("[44b]Error connecting to the server. The labels have = not been updated.");=0A= }=0A= =0A= // Method to retreive a list of labels with no delete links (called = after pressing the 'Done' button)=0A= function disableDeleteLabelLinks()=0A= {=0A= if (!operationInProgress)=0A= {=0A= var errorSpan =3D this.document.getElementById('errorSpan');=0A= errorSpan.innerHTML =3D "";=0A= ViewLabelsForEntityWithoutDeleteLinks.viewLabels(entityId, = spaceKey, {callback:view_labels_disabled_callback, = errorHandler:view_labels_disabled_errorhandler});=0A= }=0A= }=0A= =0A= /**=0A= Suggested labels=0A= **/=0A= // DWR callback method=0A= function view_suggested_labels_callback(response)=0A= {=0A= if (response.success)=0A= {=0A= var suggestedLabelsSpan =3D = document.getElementById('suggestedLabelsSpan');=0A= suggestedLabelsSpan.innerHTML =3D response.response;=0A= }=0A= else=0A= {=0A= handleError("[45a] Error connecting to the server. The suggested = labels have not been loaded.");=0A= }=0A= }=0A= =0A= // DWR error handler=0A= function view_suggested_labels_errorhandler(x)=0A= {=0A= handleError("[45b] Error connecting to the server. The suggested = labels have not been loaded. (" + x + ")");=0A= }=0A= =0A= // Method to retrieve a list of suggested labels for the given entity=0A= function fetchAndWriteSuggestedLabels()=0A= {=0A= var errorSpan =3D document.getElementById('errorSpan');=0A= errorSpan.innerHTML =3D "";=0A= SuggestedLabelsForEntity.viewLabels(entityId, = 'labels/suggestedlabels.vm', {callback:view_suggested_labels_callback, = errorHandler:view_suggested_labels_errorhandler});=0A= }=0A= =0A= function hideLabelsInput()=0A= {=0A= hideLabelOperationErrorContainer();=0A= this.document.getElementById('labelInputSpan').style.display =3D = 'none';=0A= document.getElementById('editLabelsLink').style.visibility =3D = 'visible';=0A= }=0A= function showLabelsInput()=0A= {=0A= document.getElementById('labelInputSpan').style.display =3D 'block';=0A= // reset the value of this field, just in case the browser wants to = become helpful and insert the old value=0A= document.forms.addLabelForm.labelsString.value =3D '';=0A= document.forms.addLabelForm.labelsString.focus();=0A= document.getElementById('editLabelsLink').style.visibility =3D = 'hidden';=0A= }=0A= function hideLabelOperationErrorContainer()=0A= {=0A= if = (document.getElementById("labelOperationErrorContainer").style.display = !=3D 'none')=0A= {=0A= // clean up error message before hiding error box=0A= document.getElementById("labelOperationErrorMessage").innerHTML = =3D '';=0A= = document.getElementById("labelOperationErrorContainer").style.display = =3D 'none';=0A= }=0A= }=0A= function showLabelOperationErrorContainer()=0A= {=0A= = document.getElementById("labelOperationErrorContainer").style.display = =3D 'block';=0A= }=0A= function toggleWaitImageAndStatus(isOn)=0A= {=0A= if (isOn)=0A= document.getElementById("waitImageAndStatus").style.display =3D = 'inline';=0A= else=0A= document.getElementById("waitImageAndStatus").style.display =3D = 'none';=0A= }=0A= function setLabelOperationStatusMessage(htmlMessage)=0A= {=0A= document.getElementById("labelOperationStatus").innerHTML =3D = htmlMessage;=0A= }=0A= function handleException(exception, htmlMessage)=0A= {=0A= alert(exception);=0A= handleActionError(htmlMessage);=0A= }=0A= function handleError(htmlMessage)=0A= {=0A= handleActionError(htmlMessage);=0A= }=0A= function handleActionError(htmlMessage)=0A= {=0A= operationInProgress =3D false;=0A= toggleWaitImageAndStatus(false);=0A= setLabelOperationStatusMessage('');=0A= document.getElementById("errorSpan").innerHTML =3D htmlMessage;=0A= }=0A= =0A= function AddLabelToEntity() { }=0A= AddLabelToEntity._path =3D '/dwr';=0A= =0A= AddLabelToEntity.setPageManager =3D function(p0, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'setPageManager', p0, callback);=0A= }=0A= =0A= AddLabelToEntity.setPermissionManager =3D function(p0, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'setPermissionManager', p0, callback);=0A= }=0A= =0A= AddLabelToEntity.setLabelManager =3D function(p0, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'setLabelManager', p0, callback);=0A= }=0A= =0A= AddLabelToEntity.addLabel =3D function(p0, p1, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'addLabel', p0, p1, callback);=0A= }=0A= =0A= AddLabelToEntity.isPersonalLabel =3D function(p0, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'isPersonalLabel', p0, callback);=0A= }=0A= =0A= AddLabelToEntity.isPermitted =3D function(p0, callback) {=0A= DWREngine._execute(AddLabelToEntity._path, 'AddLabelToEntity', = 'isPermitted', p0, callback);=0A= }=0A= =0A= function RemoveLabelFromEntity() { }=0A= RemoveLabelFromEntity._path =3D '/dwr';=0A= =0A= RemoveLabelFromEntity.setPageManager =3D function(p0, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'setPageManager', p0, callback);=0A= }=0A= =0A= RemoveLabelFromEntity.setPermissionManager =3D function(p0, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'setPermissionManager', p0, callback);=0A= }=0A= =0A= RemoveLabelFromEntity.setLabelManager =3D function(p0, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'setLabelManager', p0, callback);=0A= }=0A= =0A= RemoveLabelFromEntity.removeLabel =3D function(p0, p1, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'removeLabel', p0, p1, callback);=0A= }=0A= =0A= RemoveLabelFromEntity.isPersonalLabel =3D function(p0, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'isPersonalLabel', p0, callback);=0A= }=0A= =0A= RemoveLabelFromEntity.isPermitted =3D function(p0, callback) {=0A= DWREngine._execute(RemoveLabelFromEntity._path, = 'RemoveLabelFromEntity', 'isPermitted', p0, callback);=0A= }=0A= =0A= function ViewLabelsForEntity() { }=0A= ViewLabelsForEntity._path =3D '/dwr';=0A= =0A= ViewLabelsForEntity.setPageManager =3D function(p0, callback) {=0A= DWREngine._execute(ViewLabelsForEntity._path, 'ViewLabelsForEntity', = 'setPageManager', p0, callback);=0A= }=0A= =0A= ViewLabelsForEntity.setPermissionManager =3D function(p0, callback) {=0A= DWREngine._execute(ViewLabelsForEntity._path, 'ViewLabelsForEntity', = 'setPermissionManager', p0, callback);=0A= }=0A= =0A= ViewLabelsForEntity.isPersonalLabel =3D function(p0, callback) {=0A= DWREngine._execute(ViewLabelsForEntity._path, 'ViewLabelsForEntity', = 'isPersonalLabel', p0, callback);=0A= }=0A= =0A= ViewLabelsForEntity.isPermitted =3D function(p0, callback) {=0A= DWREngine._execute(ViewLabelsForEntity._path, 'ViewLabelsForEntity', = 'isPermitted', p0, callback);=0A= }=0A= =0A= ViewLabelsForEntity.viewLabels =3D function(p0, callback) {=0A= DWREngine._execute(ViewLabelsForEntity._path, 'ViewLabelsForEntity', = 'viewLabels', p0, callback);=0A= }=0A= =0A= function ViewLabelsForEntityWithoutDeleteLinks() { }=0A= ViewLabelsForEntityWithoutDeleteLinks._path =3D '/dwr';=0A= =0A= ViewLabelsForEntityWithoutDeleteLinks.setPageManager =3D function(p0, = callback) {=0A= DWREngine._execute(ViewLabelsForEntityWithoutDeleteLinks._path, = 'ViewLabelsForEntityWithoutDeleteLinks', 'setPageManager', p0, callback);=0A= }=0A= =0A= ViewLabelsForEntityWithoutDeleteLinks.viewLabels =3D function(p0, p1, = callback) {=0A= DWREngine._execute(ViewLabelsForEntityWithoutDeleteLinks._path, = 'ViewLabelsForEntityWithoutDeleteLinks', 'viewLabels', p0, p1, callback);=0A= }=0A= =0A= function SuggestedLabelsForEntity() { }=0A= SuggestedLabelsForEntity._path =3D '/dwr';=0A= =0A= SuggestedLabelsForEntity.setPageManager =3D function(p0, callback) {=0A= DWREngine._execute(SuggestedLabelsForEntity._path, = 'SuggestedLabelsForEntity', 'setPageManager', p0, callback);=0A= }=0A= =0A= SuggestedLabelsForEntity.setLabelManager =3D function(p0, callback) {=0A= DWREngine._execute(SuggestedLabelsForEntity._path, = 'SuggestedLabelsForEntity', 'setLabelManager', p0, callback);=0A= }=0A= =0A= SuggestedLabelsForEntity.viewLabels =3D function(p0, p1, callback) {=0A= DWREngine._execute(SuggestedLabelsForEntity._path, = 'SuggestedLabelsForEntity', 'viewLabels', p0, p1, callback);=0A= }=0A= =0A= function GenerateAutocompleteLabelsListForEntity() { }=0A= GenerateAutocompleteLabelsListForEntity._path =3D '/dwr';=0A= =0A= GenerateAutocompleteLabelsListForEntity.setPageManager =3D function(p0, = callback) {=0A= DWREngine._execute(GenerateAutocompleteLabelsListForEntity._path, = 'GenerateAutocompleteLabelsListForEntity', 'setPageManager', p0, = callback);=0A= }=0A= =0A= GenerateAutocompleteLabelsListForEntity.setLabelManager =3D function(p0, = callback) {=0A= DWREngine._execute(GenerateAutocompleteLabelsListForEntity._path, = 'GenerateAutocompleteLabelsListForEntity', 'setLabelManager', p0, = callback);=0A= }=0A= =0A= GenerateAutocompleteLabelsListForEntity.autocompleteLabels =3D = function(p0, p1, callback) {=0A= DWREngine._execute(GenerateAutocompleteLabelsListForEntity._path, = 'GenerateAutocompleteLabelsListForEntity', 'autocompleteLabels', p0, p1, = callback);=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= function DWREngine() { }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.XMLHttpRequest =3D 1;=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.IFrame =3D 2;=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setErrorHandler =3D function(handler) {=0A= DWREngine._errorHandler =3D handler;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setWarningHandler =3D function(handler) {=0A= DWREngine._warningHandler =3D handler;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setTimeout =3D function(timeout) {=0A= DWREngine._timeout =3D timeout;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setPreHook =3D function(handler) {=0A= DWREngine._preHook =3D handler;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setPostHook =3D function(handler) {=0A= DWREngine._postHook =3D handler;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setMethod =3D function(newmethod) {=0A= if (newmethod !=3D DWREngine.XMLHttpRequest && newmethod !=3D = DWREngine.IFrame) {=0A= DWREngine._handleError("Remoting method must be one of = DWREngine.XMLHttpRequest or DWREngine.IFrame");=0A= return;=0A= }=0A= DWREngine._method =3D newmethod;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setVerb =3D function(verb) {=0A= if (verb !=3D "GET" && verb !=3D "POST") {=0A= DWREngine._handleError("Remoting verb must be one of GET or POST");=0A= return;=0A= }=0A= DWREngine._verb =3D verb;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setOrdered =3D function(ordered) {=0A= DWREngine._ordered =3D ordered;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.setAsync =3D function(async) {=0A= DWREngine._async =3D async;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.defaultMessageHandler =3D function(message) {=0A= if (typeof message =3D=3D "object" && message.name =3D=3D "Error" && = message.description) {=0A= alert("Error: " + message.description);=0A= }=0A= else {=0A= alert(message);=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine.beginBatch =3D function() {=0A= if (DWREngine._batch) {=0A= DWREngine._handleError("Batch already started.");=0A= return;=0A= }=0A= =0A= DWREngine._batch =3D {};=0A= DWREngine._batch.map =3D {};=0A= DWREngine._batch.paramCount =3D 0;=0A= DWREngine._batch.map.callCount =3D 0;=0A= DWREngine._batch.metadata =3D {};=0A= DWREngine._batch.preHooks =3D [];=0A= DWREngine._batch.postHooks =3D [];=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWREngine.endBatch =3D function(options) {=0A= var batch =3D DWREngine._batch;=0A= if (batch =3D=3D null) {=0A= DWREngine._handleError("No batch in progress.");=0A= return;=0A= }=0A= =0A= if (options && options.preHook) batch.preHooks.unshift(options.preHook);=0A= if (options && options.postHook) batch.postHooks.push(options.postHook);=0A= if (DWREngine._preHook) batch.preHooks.unshift(DWREngine._preHook);=0A= if (DWREngine._postHook) batch.postHooks.push(DWREngine._postHook);=0A= =0A= if (!batch.method) batch.method =3D DWREngine._method;=0A= if (!batch.verb) batch.verb =3D DWREngine._verb;=0A= if (!batch.async) batch.async =3D DWREngine._async;=0A= =0A= batch.completed =3D false;=0A= =0A= =0A= =0A= if (!DWREngine._ordered) {=0A= DWREngine._sendData(batch);=0A= DWREngine._batches[DWREngine._batches.length] =3D batch;=0A= }=0A= else {=0A= if (DWREngine._batches.length =3D=3D 0) {=0A= =0A= DWREngine._sendData(batch);=0A= DWREngine._batches[DWREngine._batches.length] =3D batch;=0A= }=0A= else {=0A= =0A= DWREngine._batchQueue[DWREngine._batchQueue.length] =3D batch;=0A= }=0A= }=0A= =0A= DWREngine._batch =3D null;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._errorHandler =3D DWREngine.defaultMessageHandler;=0A= =0A= =0A= =0A= =0A= DWREngine._warningHandler =3D DWREngine.defaultMessageHandler;=0A= =0A= =0A= =0A= =0A= DWREngine._preHook =3D null;=0A= =0A= =0A= =0A= =0A= DWREngine._postHook =3D null;=0A= =0A= =0A= =0A= =0A= DWREngine._batches =3D [];=0A= =0A= =0A= =0A= =0A= =0A= DWREngine._batchQueue =3D [];=0A= =0A= =0A= =0A= =0A= DWREngine._callData =3D {};=0A= =0A= =0A= =0A= =0A= DWREngine._method =3D DWREngine.XMLHttpRequest;=0A= =0A= =0A= =0A= =0A= DWREngine._verb =3D "POST";=0A= =0A= =0A= =0A= =0A= =0A= DWREngine._ordered =3D false;=0A= =0A= =0A= =0A= =0A= DWREngine._async =3D true;=0A= =0A= =0A= =0A= =0A= DWREngine._batch =3D null;=0A= =0A= =0A= =0A= =0A= DWREngine._timeout =3D 0;=0A= =0A= =0A= =0A= =0A= =0A= DWREngine._DOMDocument =3D ["Msxml2.DOMDocument.5.0", = "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", = "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];=0A= =0A= =0A= =0A= =0A= DWREngine._XMLHTTP =3D ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", = "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._execute =3D function(path, scriptName, methodName, = vararg_params) {=0A= var singleShot =3D false;=0A= if (DWREngine._batch =3D=3D null) {=0A= DWREngine.beginBatch();=0A= singleShot =3D true;=0A= }=0A= =0A= var args =3D [];=0A= for (var i =3D 0; i < arguments.length - 3; i++) {=0A= args[i] =3D arguments[i + 3];=0A= }=0A= =0A= if (DWREngine._batch.path =3D=3D null) {=0A= DWREngine._batch.path =3D path;=0A= }=0A= else {=0A= if (DWREngine._batch.path !=3D path) {=0A= DWREngine._handleError("Can't batch requests to multiple DWR Servlets.");=0A= return;=0A= }=0A= }=0A= =0A= =0A= var params;=0A= var callData;=0A= var firstArg =3D args[0];=0A= var lastArg =3D args[args.length - 1];=0A= =0A= if (typeof firstArg =3D=3D "function") {=0A= callData =3D { callback:args.shift() };=0A= params =3D args;=0A= }=0A= else if (typeof lastArg =3D=3D "function") {=0A= callData =3D { callback:args.pop() };=0A= params =3D args;=0A= }=0A= else if (typeof lastArg =3D=3D "object" && lastArg.callback !=3D null && = typeof lastArg.callback =3D=3D "function") {=0A= callData =3D args.pop();=0A= params =3D args;=0A= }=0A= else if (firstArg =3D=3D null) {=0A= =0A= =0A= =0A= if (lastArg =3D=3D null && args.length > 2) {=0A= if (DWREngine._warningHandler) {=0A= DWREngine._warningHandler("Ambiguous nulls at start and end of parameter = list. Which is the callback function?");=0A= }=0A= }=0A= callData =3D { callback:args.shift() };=0A= params =3D args;=0A= }=0A= else if (lastArg =3D=3D null) {=0A= callData =3D { callback:args.pop() };=0A= params =3D args;=0A= }=0A= else {=0A= if (DWREngine._warningHandler) {=0A= DWREngine._warningHandler("Missing callback function or metadata = object.");=0A= }=0A= return;=0A= }=0A= =0A= =0A= var random =3D Math.floor(Math.random() * 10001);=0A= var id =3D (random + "_" + new Date().getTime()).toString();=0A= DWREngine._callData[id] =3D callData;=0A= var prefix =3D "c" + DWREngine._batch.map.callCount + "-";=0A= =0A= if (callData.preHook) = DWREngine._batch.preHooks.unshift(callData.preHook);=0A= if (callData.postHook) = DWREngine._batch.postHooks.push(callData.postHook);=0A= if (!callData.errorHandler) callData.errorHandler =3D = DWREngine._errorHandler;=0A= if (!callData.warningHandler) callData.warningHandler =3D = DWREngine._warningHandler;=0A= if (!callData.timeout) callData.timeout =3D DWREngine._timeout;=0A= =0A= =0A= if (callData !=3D null) {=0A= for (var prop in callData) {=0A= DWREngine._batch.metadata[prop] =3D callData[prop];=0A= }=0A= }=0A= DWREngine._batch.map[prefix + "scriptName"] =3D scriptName;=0A= DWREngine._batch.map[prefix + "methodName"] =3D methodName;=0A= DWREngine._batch.map[prefix + "id"] =3D id;=0A= =0A= =0A= DWREngine._addSerializeFunctions();=0A= for (i =3D 0; i < params.length; i++) {=0A= DWREngine._serializeAll(DWREngine._batch, [], params[i], prefix + = "param" + i);=0A= }=0A= DWREngine._removeSerializeFunctions();=0A= =0A= =0A= DWREngine._batch.map.callCount++;=0A= if (singleShot) {=0A= DWREngine.endBatch();=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWREngine._sendData =3D function(batch) {=0A= =0A= if (batch.map.callCount =3D=3D 0) return;=0A= =0A= for (var i =3D 0; i < batch.preHooks.length; i++) {=0A= batch.preHooks[i]();=0A= }=0A= batch.preHooks =3D null;=0A= =0A= if (batch.metadata && batch.metadata.timeout && batch.metadata.timeout = !=3D 0) {=0A= batch.interval =3D setInterval(function() {=0A= clearInterval(batch.interval);=0A= DWREngine._abortRequest(batch);=0A= }, batch.metadata.timeout);=0A= }=0A= =0A= var statsInfo;=0A= if (batch.map.callCount =3D=3D 1) {=0A= statsInfo =3D batch.map["c0-scriptName"] + "." + = batch.map["c0-methodName"];=0A= }=0A= else {=0A= statsInfo =3D "Multiple." + batch.map.callCount;=0A= }=0A= =0A= =0A= if (batch.method =3D=3D DWREngine.XMLHttpRequest) {=0A= if (window.XMLHttpRequest) {=0A= batch.req =3D new XMLHttpRequest();=0A= }=0A= =0A= else if (window.ActiveXObject && !(navigator.userAgent.indexOf('Mac') = >=3D 0 && navigator.userAgent.indexOf("MSIE") >=3D 0)) {=0A= batch.req =3D DWREngine._newActiveXObject(DWREngine._XMLHTTP);=0A= }=0A= }=0A= =0A= var query =3D "";=0A= var prop;=0A= if (batch.req) {=0A= batch.map.xml =3D "true";=0A= =0A= if (batch.async) {=0A= batch.req.onreadystatechange =3D function() {=0A= DWREngine._stateChange(batch);=0A= };=0A= }=0A= =0A= var indexSafari =3D navigator.userAgent.indexOf('Safari/');=0A= var isSafari2 =3D false;=0A= if (indexSafari >=3D 0) {=0A= =0A= var version =3D navigator.userAgent.substring(indexSafari + 7);=0A= if (parseInt(version, 10) < 400) {=0A= batch.verb =3D=3D "GET";=0A= }=0A= else=0A= {=0A= isSafari2 =3D true;=0A= }=0A= }=0A= if (batch.verb =3D=3D "GET") {=0A= =0A= =0A= =0A= batch.map.callCount =3D "" + batch.map.callCount;=0A= =0A= for (prop in batch.map) {=0A= var qkey =3D encodeURIComponent(prop);=0A= var qval =3D encodeURIComponent(batch.map[prop]);=0A= if (qval =3D=3D "") {=0A= if (DWREngine._warningHandler) {=0A= DWREngine._warningHandler("Found empty qval for qkey=3D" + qkey);=0A= }=0A= }=0A= query +=3D qkey + "=3D" + qval + "&";=0A= }=0A= query =3D query.substring(0, query.length - 1);=0A= =0A= try {=0A= batch.req.open("GET", batch.path + "/exec/" + statsInfo + "?" + query, = batch.async);=0A= batch.req.send(null);=0A= if (!batch.async) {=0A= DWREngine._stateChange(batch);=0A= }=0A= }=0A= catch (ex) {=0A= DWREngine._handleMetaDataError(batch.metadata, ex);=0A= }=0A= }=0A= else {=0A= for (prop in batch.map) {=0A= if (typeof batch.map[prop] !=3D "function") {=0A= if (isSafari2)=0A= {=0A= query +=3D "DWR_SAFARI_PARAM" + prop + "=3D" + batch.map[prop] + "\n";=0A= }=0A= else=0A= {=0A= query +=3D prop + "=3D" + batch.map[prop] + "\n";=0A= }=0A= =0A= }=0A= }=0A= =0A= try {=0A= =0A= =0A= =0A= =0A= =0A= =0A= batch.req.open("POST", batch.path + "/exec/" + statsInfo, batch.async);=0A= batch.req.send(query);=0A= if (!batch.async) {=0A= DWREngine._stateChange(batch);=0A= }=0A= }=0A= catch (ex) {=0A= DWREngine._handleMetaDataError(batch.metadata, ex);=0A= }=0A= }=0A= }=0A= else {=0A= batch.map.xml =3D "false";=0A= var idname =3D "dwr-if-" + batch.map["c0-id"];=0A= =0A= batch.div =3D document.createElement('div');=0A= batch.div.innerHTML =3D "";=0A= document.body.appendChild(batch.div);=0A= batch.iframe =3D document.getElementById(idname);=0A= batch.iframe.setAttribute('style', 'width:0px; height:0px; border:0px;');=0A= =0A= if (batch.verb =3D=3D "GET") {=0A= for (prop in batch.map) {=0A= query +=3D encodeURIComponent(prop) + "=3D" + = encodeURIComponent(batch.map[prop]) + "&";=0A= }=0A= query =3D query.substring(0, query.length - 1);=0A= =0A= batch.iframe.setAttribute('src', batch.path + "/exec/" + statsInfo + "?" = + query);=0A= document.body.appendChild(batch.iframe);=0A= }=0A= else {=0A= batch.form =3D document.createElement('form');=0A= batch.form.setAttribute('id', 'dwr-form');=0A= batch.form.setAttribute('action', batch.path + "/exec" + statsInfo);=0A= batch.form.setAttribute('target', idname);=0A= batch.form.target =3D idname;=0A= batch.form.setAttribute('method', 'post');=0A= for (prop in batch.map) {=0A= var formInput =3D document.createElement('input');=0A= formInput.setAttribute('type', 'hidden');=0A= formInput.setAttribute('name', prop);=0A= formInput.setAttribute('value', batch.map[prop]);=0A= batch.form.appendChild(formInput);=0A= }=0A= =0A= document.body.appendChild(batch.form);=0A= batch.form.submit();=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._stateChange =3D function(batch) {=0A= if (!batch.completed && batch.req.readyState =3D=3D 4) {=0A= try {=0A= var reply =3D batch.req.responseText;=0A= var status =3D batch.req.status;=0A= =0A= if (reply =3D=3D null || reply =3D=3D "") {=0A= DWREngine._handleMetaDataError(batch.metadata, "No data received from = server");=0A= return;=0A= }=0A= =0A= =0A= if (reply.search("DWREngine._handle") =3D=3D -1) {=0A= DWREngine._handleMetaDataError(batch.metadata, "Invalid reply from = server");=0A= return;=0A= }=0A= =0A= if (status !=3D 200) {=0A= if (reply =3D=3D null) reply =3D "Unknown error occured";=0A= DWREngine._handleMetaDataError(batch.metadata, reply);=0A= return;=0A= }=0A= =0A= eval(reply);=0A= =0A= =0A= DWREngine._clearUp(batch);=0A= }=0A= catch (ex) {=0A= if (ex =3D=3D null) ex =3D "Unknown error occured";=0A= DWREngine._handleMetaDataError(batch.metadata, ex);=0A= }=0A= finally {=0A= =0A= =0A= =0A= if (DWREngine._batchQueue.length !=3D 0) {=0A= var sendbatch =3D DWREngine._batchQueue.shift();=0A= DWREngine._sendData(sendbatch);=0A= DWREngine._batches[DWREngine._batches.length] =3D sendbatch;=0A= }=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._handleResponse =3D function(id, reply) {=0A= =0A= var callData =3D DWREngine._callData[id];=0A= DWREngine._callData[id] =3D null;=0A= if (callData) {=0A= =0A= =0A= try {=0A= if (callData.callback) callData.callback(reply);=0A= }=0A= catch (ex) {=0A= DWREngine._handleMetaDataError(callData, ex);=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._handleServerError =3D function(id, error) {=0A= =0A= var callData =3D DWREngine._callData[id];=0A= DWREngine._callData[id] =3D null;=0A= if (error.message) {=0A= DWREngine._handleMetaDataError(callData, error.message, error);=0A= }=0A= else {=0A= DWREngine._handleMetaDataError(callData, error);=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._abortRequest =3D function(batch) {=0A= if (batch && batch.metadata !=3D null && !batch.completed) {=0A= DWREngine._clearUp(batch);=0A= if (batch.req) batch.req.abort();=0A= DWREngine._handleMetaDataError(batch.metadata, "Timeout");=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._clearUp =3D function(batch) {=0A= if (batch.completed) {=0A= alert("double complete");=0A= return;=0A= }=0A= =0A= if (batch.div) batch.div.parentNode.removeChild(batch.div);=0A= if (batch.iframe) batch.iframe.parentNode.removeChild(batch.iframe);=0A= if (batch.form) batch.form.parentNode.removeChild(batch.form);=0A= =0A= delete batch.req;=0A= =0A= for (var i =3D 0; i < batch.postHooks.length; i++) {=0A= batch.postHooks[i]();=0A= }=0A= batch.postHooks =3D null;=0A= =0A= =0A= for (var i =3D 0; i < DWREngine._batches.length; i++) {=0A= if (DWREngine._batches[i] =3D=3D batch) {=0A= DWREngine._batches.splice(i, 1);=0A= break;=0A= }=0A= }=0A= =0A= batch.completed =3D true;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._handleError =3D function(reason, ex) {=0A= if (DWREngine._errorHandler) {=0A= DWREngine._errorHandler(reason, ex);=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._handleMetaDataError =3D function(metadata, reason, ex) {=0A= if (metadata.errorHandler) {=0A= metadata.errorHandler(reason, ex);=0A= }=0A= else {=0A= DWREngine._handleError(reason, ex);=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._addSerializeFunctions =3D function() {=0A= Object.prototype.dwrSerialize =3D DWREngine._serializeObject;=0A= Array.prototype.dwrSerialize =3D DWREngine._serializeArray;=0A= Boolean.prototype.dwrSerialize =3D DWREngine._serializeBoolean;=0A= Number.prototype.dwrSerialize =3D DWREngine._serializeNumber;=0A= String.prototype.dwrSerialize =3D DWREngine._serializeString;=0A= Date.prototype.dwrSerialize =3D DWREngine._serializeDate;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._removeSerializeFunctions =3D function() {=0A= delete Object.prototype.dwrSerialize;=0A= delete Array.prototype.dwrSerialize;=0A= delete Boolean.prototype.dwrSerialize;=0A= delete Number.prototype.dwrSerialize;=0A= delete String.prototype.dwrSerialize;=0A= delete Date.prototype.dwrSerialize;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._serializeAll =3D function(batch, referto, data, name) {=0A= if (data =3D=3D null) {=0A= batch.map[name] =3D "null:null";=0A= return;=0A= }=0A= =0A= switch (typeof data) {=0A= case "boolean":=0A= batch.map[name] =3D "boolean:" + data;=0A= break;=0A= =0A= case "number":=0A= batch.map[name] =3D "number:" + data;=0A= break;=0A= =0A= case "string":=0A= batch.map[name] =3D "string:" + encodeURIComponent(data);=0A= break;=0A= =0A= case "object":=0A= if (data.dwrSerialize) {=0A= batch.map[name] =3D data.dwrSerialize(batch, referto, data, name);=0A= }=0A= else if (data.nodeName) {=0A= batch.map[name] =3D DWREngine._serializeXml(batch, referto, data, name);=0A= }=0A= else {=0A= if (DWREngine._warningHandler) {=0A= DWREngine._warningHandler("Object without dwrSerialize: " + typeof data = + ", attempting default converter.");=0A= }=0A= batch.map[name] =3D "default:" + data;=0A= }=0A= break;=0A= =0A= case "function":=0A= =0A= break;=0A= =0A= default:=0A= if (DWREngine._warningHandler) {=0A= DWREngine._warningHandler("Unexpected type: " + typeof data + ", = attempting default converter.");=0A= }=0A= batch.map[name] =3D "default:" + data;=0A= break;=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._lookup =3D function(referto, data, name) {=0A= var lookup;=0A= =0A= for (var i =3D 0; i < referto.length; i++) {=0A= if (referto[i].data =3D=3D data) {=0A= lookup =3D referto[i];=0A= break;=0A= }=0A= }=0A= if (lookup) {=0A= return "reference:" + lookup.name;=0A= }=0A= referto.push({ data:data, name:name });=0A= return null;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeObject =3D function(batch, referto, data, name) {=0A= var ref =3D DWREngine._lookup(referto, this, name);=0A= if (ref) return ref;=0A= =0A= if (data.nodeName) {=0A= return DWREngine._serializeXml(batch, referto, data, name);=0A= }=0A= =0A= =0A= var reply =3D "Object:{";=0A= var element;=0A= for (element in this) {=0A= if (element !=3D "dwrSerialize") {=0A= batch.paramCount++;=0A= var childName =3D "c" + DWREngine._batch.map.callCount + "-e" + = batch.paramCount;=0A= DWREngine._serializeAll(batch, referto, this[element], childName);=0A= =0A= reply +=3D encodeURIComponent(element);=0A= reply +=3D ":reference:";=0A= reply +=3D childName;=0A= reply +=3D ", ";=0A= }=0A= }=0A= =0A= if (reply.substring(reply.length - 2) =3D=3D ", ") {=0A= reply =3D reply.substring(0, reply.length - 2);=0A= }=0A= reply +=3D "}";=0A= =0A= return reply;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeXml =3D function(batch, referto, data, name) {=0A= var ref =3D DWREngine._lookup(referto, this, name);=0A= if (ref) {=0A= return ref;=0A= }=0A= var output;=0A= if (window.XMLSerializer) {=0A= var serializer =3D new XMLSerializer();=0A= output =3D serializer.serializeToString(data);=0A= }=0A= else {=0A= output =3D data.toXml;=0A= }=0A= return "XML:" + encodeURIComponent(output);=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeArray =3D function(batch, referto, data, name) {=0A= var ref =3D DWREngine._lookup(referto, this, name);=0A= if (ref) return ref;=0A= =0A= var reply =3D "Array:[";=0A= for (var i =3D 0; i < this.length; i++) {=0A= if (i !=3D 0) {=0A= reply +=3D ",";=0A= }=0A= =0A= batch.paramCount++;=0A= var childName =3D "c" + DWREngine._batch.map.callCount + "-e" + = batch.paramCount;=0A= DWREngine._serializeAll(batch, referto, this[i], childName);=0A= reply +=3D "reference:";=0A= reply +=3D childName;=0A= }=0A= reply +=3D "]";=0A= =0A= return reply;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeBoolean =3D function(batch, referto, data, name) {=0A= return "Boolean:" + this;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeNumber =3D function(batch, referto, data, name) {=0A= return "Number:" + this;=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeString =3D function(batch, referto, data, name) {=0A= return "String:" + encodeURIComponent(this);=0A= };=0A= =0A= =0A= =0A= =0A= DWREngine._serializeDate =3D function(batch, referto, data, name) {=0A= return "Date:" + this.getTime();=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._unserializeDocument =3D function(xml) {=0A= var dom;=0A= if (window.DOMParser) {=0A= var parser =3D new DOMParser();=0A= dom =3D parser.parseFromString(xml, "text/xml");=0A= if (!dom.documentElement || dom.documentElement.tagName =3D=3D = "parsererror") {=0A= var message =3D dom.documentElement.firstChild.data;=0A= message +=3D "\n" + = dom.documentElement.firstChild.nextSibling.firstChild.data;=0A= throw message;=0A= }=0A= return dom;=0A= }=0A= else if (window.ActiveXObject) {=0A= dom =3D DWREngine._newActiveXObject(DWREngine._DOMDocument);=0A= dom.loadXML(xml);=0A= =0A= return dom;=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= else {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D xml;=0A= return div;=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWREngine._newActiveXObject =3D function(axarray) {=0A= var returnValue;=0A= for (var i =3D 0; i < axarray.length; i++) {=0A= try {=0A= returnValue =3D new ActiveXObject(axarray[i]);=0A= break;=0A= }=0A= catch (ex) {=0A= }=0A= }=0A= return returnValue;=0A= };=0A= =0A= =0A= =0A= =0A= if (typeof window.encodeURIComponent =3D=3D=3D 'undefined') {=0A= DWREngine._utf8 =3D function(wide) {=0A= wide =3D "" + wide;=0A= var c;=0A= var s;=0A= var enc =3D "";=0A= var i =3D 0;=0A= while (i < wide.length) {=0A= c =3D wide.charCodeAt(i++);=0A= =0A= if (c >=3D 0xDC00 && c < 0xE000) continue;=0A= if (c >=3D 0xD800 && c < 0xDC00) {=0A= if (i >=3D wide.length) continue;=0A= s =3D wide.charCodeAt(i++);=0A= if (s < 0xDC00 || c >=3D 0xDE00) continue;=0A= c =3D ((c - 0xD800) << 10) + (s - 0xDC00) + 0x10000;=0A= }=0A= =0A= if (c < 0x80) {=0A= enc +=3D String.fromCharCode(c);=0A= }=0A= else if (c < 0x800) {=0A= enc +=3D String.fromCharCode(0xC0 + (c >> 6), 0x80 + (c & 0x3F));=0A= }=0A= else if (c < 0x10000) {=0A= enc +=3D String.fromCharCode(0xE0 + (c >> 12), 0x80 + (c >> 6 & 0x3F), = 0x80 + (c & 0x3F));=0A= }=0A= else {=0A= enc +=3D String.fromCharCode(0xF0 + (c >> 18), 0x80 + (c >> 12 & 0x3F), = 0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));=0A= }=0A= }=0A= return enc;=0A= }=0A= =0A= DWREngine._hexchars =3D "0123456789ABCDEF";=0A= =0A= DWREngine._toHex =3D function(n) {=0A= return DWREngine._hexchars.charAt(n >> 4) + DWREngine._hexchars.charAt(n = & 0xF);=0A= }=0A= =0A= DWREngine._okURIchars =3D = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";=0A= =0A= window.encodeURIComponent =3D function(s) {=0A= s =3D DWREngine._utf8(s);=0A= var c;=0A= var enc =3D "";=0A= for (var i=3D 0; i this.length) {=0A= if (arguments.length > 2) {=0A= ind =3D this.length;=0A= }=0A= else {=0A= return [];=0A= }=0A= }=0A= if (arguments.length < 2) {=0A= cnt =3D this.length-ind;=0A= }=0A= =0A= cnt =3D (typeof cnt =3D=3D "number") ? Math.max(0, cnt) : 0;=0A= removeArray =3D this.slice(ind, ind + cnt);=0A= endArray =3D this.slice(ind + cnt);=0A= this.length =3D ind;=0A= =0A= for (var i =3D 2; i < arguments.length; i++) {=0A= this[this.length] =3D arguments[i];=0A= }=0A= for (i =3D 0; i < endArray.length; i++) {=0A= this[this.length] =3D endArray[i];=0A= }=0A= =0A= return removeArray;=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= if (typeof Array.prototype.shift =3D=3D=3D 'undefined') {=0A= Array.prototype.shift =3D function(str) {=0A= var val =3D this[0];=0A= for (var i =3D 1; i < this.length; ++i) {=0A= this[i - 1] =3D this[i];=0A= }=0A= this.length--;=0A= return val;=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= if (typeof Array.prototype.unshift =3D=3D=3D 'undefined') {=0A= Array.prototype.unshift =3D function() {=0A= var i =3D unshift.arguments.length;=0A= for (var j =3D this.length - 1; j >=3D 0; --j) {=0A= this[j + i] =3D this[j];=0A= }=0A= for (j =3D 0; j < i; ++j) {=0A= this[j] =3D unshift.arguments[j];=0A= }=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= if (typeof Array.prototype.push =3D=3D=3D 'undefined') {=0A= Array.prototype.push =3D function() {=0A= var sub =3D this.length;=0A= for (var i =3D 0; i < push.arguments.length; ++i) {=0A= this[sub] =3D push.arguments[i];=0A= sub++;=0A= }=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= if (typeof Array.prototype.pop =3D=3D=3D 'undefined') {=0A= Array.prototype.pop =3D function() {=0A= var lastElement =3D this[this.length - 1];=0A= this.length--;=0A= return lastElement;=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= function DWRUtil() { }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.onReturn =3D function(event, action) {=0A= if (!event) {=0A= event =3D window.event;=0A= }=0A= if (event && event.keyCode && event.keyCode =3D=3D 13) {=0A= action();=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.selectRange =3D function(ele, start, end) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("selectRange() can't find an element with id: " + orig + = ".");=0A= return;=0A= }=0A= if (ele.setSelectionRange) {=0A= ele.setSelectionRange(start, end);=0A= }=0A= else if (ele.createTextRange) {=0A= var range =3D ele.createTextRange();=0A= range.moveStart("character", start);=0A= range.moveEnd("character", end - ele.value.length);=0A= range.select();=0A= }=0A= ele.focus();=0A= };=0A= =0A= =0A= =0A= =0A= =0A= var $;=0A= if (!$ && document.getElementById) {=0A= $ =3D function() {=0A= var elements =3D new Array();=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= return elements;=0A= }=0A= }=0A= else if (!$ && document.all) {=0A= $ =3D function() {=0A= var elements =3D new Array();=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.all[element];=0A= }=0A= if (arguments.length =3D=3D 1) {=0A= return element;=0A= }=0A= elements.push(element);=0A= }=0A= return elements;=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.toDescriptiveString =3D function(data, level, depth) {=0A= var reply =3D "";=0A= var i =3D 0;=0A= var value;=0A= var obj;=0A= if (level =3D=3D null) level =3D 0;=0A= if (depth =3D=3D null) depth =3D 0;=0A= if (data =3D=3D null) return "null";=0A= if (DWRUtil._isArray(data)) {=0A= if (data.length =3D=3D 0) reply +=3D "[]";=0A= else {=0A= if (level !=3D 0) reply +=3D "[\n";=0A= else reply =3D "[";=0A= for (i =3D 0; i < data.length; i++) {=0A= try {=0A= obj =3D data[i];=0A= if (obj =3D=3D null || typeof obj =3D=3D "function") {=0A= continue;=0A= }=0A= else if (typeof obj =3D=3D "object") {=0A= if (level > 0) value =3D DWRUtil.toDescriptiveString(obj, level - 1, = depth + 1);=0A= else value =3D DWRUtil._detailedTypeOf(obj);=0A= }=0A= else {=0A= value =3D "" + obj;=0A= value =3D value.replace(/\/n/g, "\\n");=0A= value =3D value.replace(/\/t/g, "\\t");=0A= }=0A= }=0A= catch (ex) {=0A= value =3D "" + ex;=0A= }=0A= if (level !=3D 0) {=0A= reply +=3D DWRUtil._indent(level, depth + 2) + value + ", \n";=0A= }=0A= else {=0A= if (value.length > 13) value =3D value.substring(0, 10) + "...";=0A= reply +=3D value + ", ";=0A= if (i > 5) {=0A= reply +=3D "...";=0A= break;=0A= }=0A= }=0A= }=0A= if (level !=3D 0) reply +=3D DWRUtil._indent(level, depth) + "]";=0A= else reply +=3D "]";=0A= }=0A= return reply;=0A= }=0A= if (typeof data =3D=3D "string" || typeof data =3D=3D "number" || = DWRUtil._isDate(data)) {=0A= return data.toString();=0A= }=0A= if (typeof data =3D=3D "object") {=0A= var typename =3D DWRUtil._detailedTypeOf(data);=0A= if (typename !=3D "Object") reply =3D typename + " ";=0A= if (level !=3D 0) reply +=3D "{\n";=0A= else reply =3D "{";=0A= var isHtml =3D DWRUtil._isHTMLElement(data);=0A= for (var prop in data) {=0A= if (isHtml) {=0A= =0A= if (prop.toUpperCase() =3D=3D prop || prop =3D=3D "title" ||=0A= prop =3D=3D "lang" || prop =3D=3D "dir" || prop =3D=3D "className" ||=0A= prop =3D=3D "form" || prop =3D=3D "name" || prop =3D=3D "prefix" ||=0A= prop =3D=3D "namespaceURI" || prop =3D=3D "nodeType" ||=0A= prop =3D=3D "firstChild" || prop =3D=3D "lastChild" ||=0A= prop.match(/^offset/)) {=0A= continue;=0A= }=0A= }=0A= value =3D "";=0A= try {=0A= obj =3D data[prop];=0A= if (obj =3D=3D null || typeof obj =3D=3D "function") {=0A= continue;=0A= }=0A= else if (typeof obj =3D=3D "object") {=0A= if (level > 0) {=0A= value =3D "\n";=0A= value +=3D DWRUtil._indent(level, depth + 2);=0A= value =3D DWRUtil.toDescriptiveString(obj, level - 1, depth + 1);=0A= }=0A= else {=0A= value =3D DWRUtil._detailedTypeOf(obj);=0A= }=0A= }=0A= else {=0A= value =3D "" + obj;=0A= value =3D value.replace(/\/n/g, "\\n");=0A= value =3D value.replace(/\/t/g, "\\t");=0A= }=0A= }=0A= catch (ex) {=0A= value =3D "" + ex;=0A= }=0A= if (level =3D=3D 0 && value.length > 13) value =3D value.substring(0, = 10) + "...";=0A= var propStr =3D prop;=0A= if (propStr.length > 30) propStr =3D propStr.substring(0, 27) + "...";=0A= if (level !=3D 0) reply +=3D DWRUtil._indent(level, depth + 1);=0A= reply +=3D prop + ":" + value + ", ";=0A= if (level !=3D 0) reply +=3D "\n";=0A= i++;=0A= if (level =3D=3D 0 && i > 5) {=0A= reply +=3D "...";=0A= break;=0A= }=0A= }=0A= reply +=3D DWRUtil._indent(level, depth);=0A= reply +=3D "}";=0A= return reply;=0A= }=0A= return data.toString();=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._indent =3D function(level, depth) {=0A= var reply =3D "";=0A= if (level !=3D 0) {=0A= for (var j =3D 0; j < depth; j++) {=0A= reply +=3D "\u00A0\u00A0";=0A= }=0A= reply +=3D " ";=0A= }=0A= return reply;=0A= };=0A= =0A= =0A= =0A= =0A= DWRUtil.useLoadingMessage =3D function(message) {=0A= var loadingMessage;=0A= if (message) loadingMessage =3D message;=0A= else loadingMessage =3D "Loading";=0A= DWREngine.setPreHook(function() {=0A= var disabledZone =3D $('disabledZone');=0A= if (!disabledZone) {=0A= disabledZone =3D document.createElement('div');=0A= disabledZone.setAttribute('id', 'disabledZone');=0A= disabledZone.style.position =3D "absolute";=0A= disabledZone.style.zIndex =3D "1000";=0A= disabledZone.style.left =3D "0px";=0A= disabledZone.style.top =3D "0px";=0A= disabledZone.style.width =3D "100%";=0A= disabledZone.style.height =3D "100%";=0A= document.body.appendChild(disabledZone);=0A= var messageZone =3D document.createElement('div');=0A= messageZone.setAttribute('id', 'messageZone');=0A= messageZone.style.position =3D "absolute";=0A= messageZone.style.top =3D "0px";=0A= messageZone.style.right =3D "0px";=0A= messageZone.style.background =3D "red";=0A= messageZone.style.color =3D "white";=0A= messageZone.style.fontFamily =3D "Arial,Helvetica,sans-serif";=0A= messageZone.style.padding =3D "4px";=0A= disabledZone.appendChild(messageZone);=0A= var text =3D document.createTextNode(loadingMessage);=0A= messageZone.appendChild(text);=0A= }=0A= else {=0A= $('messageZone').innerHTML =3D loadingMessage;=0A= disabledZone.style.visibility =3D 'visible';=0A= }=0A= });=0A= DWREngine.setPostHook(function() {=0A= $('disabledZone').style.visibility =3D 'hidden';=0A= });=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.setValue =3D function(ele, val) {=0A= if (val =3D=3D null) val =3D "";=0A= =0A= var orig =3D ele;=0A= var nodes, i;=0A= =0A= ele =3D $(ele);=0A= =0A= if (ele =3D=3D null) {=0A= nodes =3D document.getElementsByName(orig);=0A= if (nodes.length >=3D 1) {=0A= ele =3D nodes.item(0);=0A= }=0A= }=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("setValue() can't find an element with id/name: " + orig + = ".");=0A= return;=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "select")) {=0A= if (ele.type =3D=3D "select-multiple" && DWRUtil._isArray(val)) {=0A= DWRUtil._selectListItems(ele, val);=0A= }=0A= else {=0A= DWRUtil._selectListItem(ele, val);=0A= }=0A= return;=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "input")) {=0A= if (nodes && ele.type =3D=3D "radio") {=0A= for (i =3D 0; i < nodes.length; i++) {=0A= if (nodes.item(i).type =3D=3D "radio") {=0A= nodes.item(i).checked =3D (nodes.item(i).value =3D=3D val);=0A= }=0A= }=0A= }=0A= else {=0A= switch (ele.type) {=0A= case "checkbox":=0A= case "check-box":=0A= case "radio":=0A= ele.checked =3D (val =3D=3D true);=0A= return;=0A= default:=0A= ele.value =3D val;=0A= return;=0A= }=0A= }=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "textarea")) {=0A= ele.value =3D val;=0A= return;=0A= }=0A= =0A= =0A= =0A= if (val.nodeType) {=0A= if (val.nodeType =3D=3D 9 ) {=0A= val =3D val.documentElement;=0A= }=0A= =0A= val =3D DWRUtil._importNode(ele.ownerDocument, val, true);=0A= ele.appendChild(val);=0A= return;=0A= }=0A= =0A= =0A= ele.innerHTML =3D val;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._selectListItems =3D function(ele, val) {=0A= =0A= =0A= var found =3D false;=0A= var i;=0A= var j;=0A= for (i =3D 0; i < ele.options.length; i++) {=0A= ele.options[i].selected =3D false;=0A= for (j =3D 0; j < val.length; j++) {=0A= if (ele.options[i].value =3D=3D val[j]) {=0A= ele.options[i].selected =3D true;=0A= }=0A= }=0A= }=0A= =0A= if (found) return;=0A= =0A= for (i =3D 0; i < ele.options.length; i++) {=0A= for (j =3D 0; j < val.length; j++) {=0A= if (ele.options[i].text =3D=3D val[j]) {=0A= ele.options[i].selected =3D true;=0A= }=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._selectListItem =3D function(ele, val) {=0A= =0A= =0A= var found =3D false;=0A= var i;=0A= for (i =3D 0; i < ele.options.length; i++) {=0A= if (ele.options[i].value =3D=3D val) {=0A= ele.options[i].selected =3D true;=0A= found =3D true;=0A= }=0A= else {=0A= ele.options[i].selected =3D false;=0A= }=0A= }=0A= =0A= =0A= if (found) return;=0A= =0A= for (i =3D 0; i < ele.options.length; i++) {=0A= if (ele.options[i].text =3D=3D val) {=0A= ele.options[i].selected =3D true;=0A= break;=0A= }=0A= }=0A= }=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.getValue =3D function(ele) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= =0A= =0A= var nodes =3D document.getElementsByName(orig);=0A= if (ele =3D=3D null && nodes.length >=3D 1) {=0A= ele =3D nodes.item(0);=0A= }=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("getValue() can't find an element with id/name: " + orig + = ".");=0A= return "";=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "select")) {=0A= =0A= =0A= var sel =3D ele.selectedIndex;=0A= if (sel !=3D -1) {=0A= var reply =3D ele.options[sel].value;=0A= if (reply =3D=3D null || reply =3D=3D "") {=0A= reply =3D ele.options[sel].text;=0A= }=0A= =0A= return reply;=0A= }=0A= else {=0A= return "";=0A= }=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "input")) {=0A= if (nodes && ele.type =3D=3D "radio") {=0A= for (i =3D 0; i < nodes.length; i++) {=0A= if (nodes.item(i).type =3D=3D "radio") {=0A= if (nodes.item(i).checked) {=0A= return nodes.item(i).value;=0A= }=0A= }=0A= }=0A= }=0A= switch (ele.type) {=0A= case "checkbox":=0A= case "check-box":=0A= case "radio":=0A= return ele.checked;=0A= default:=0A= return ele.value;=0A= }=0A= }=0A= =0A= if (DWRUtil._isHTMLElement(ele, "textarea")) {=0A= return ele.value;=0A= }=0A= =0A= return ele.innerHTML;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.getText =3D function(ele) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("getText() can't find an element with id: " + orig + ".");=0A= return "";=0A= }=0A= =0A= if (!DWRUtil._isHTMLElement(ele, "select")) {=0A= DWRUtil.debug("getText() can only be used with select elements. Attempt = to use: " + DWRUtil._detailedTypeOf(ele) + " from id: " + orig + ".");=0A= return "";=0A= }=0A= =0A= =0A= =0A= var sel =3D ele.selectedIndex;=0A= if (sel !=3D -1) {=0A= return ele.options[sel].text;=0A= }=0A= else {=0A= return "";=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.setValues =3D function(map) {=0A= for (var property in map) {=0A= var ele =3D $(property);=0A= if (ele !=3D null) {=0A= var value =3D map[property];=0A= DWRUtil.setValue(property, value);=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.getValues =3D function(map) {=0A= for (var property in map) {=0A= var ele =3D $(property);=0A= if (ele !=3D null) {=0A= map[property] =3D DWRUtil.getValue(property);=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.addOptions =3D function(ele, data) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("addOptions() can't find an element with id: " + orig + = ".");=0A= return;=0A= }=0A= var useOptions =3D DWRUtil._isHTMLElement(ele, "select");=0A= var useLi =3D DWRUtil._isHTMLElement(ele, ["ul", "ol"]);=0A= if (!useOptions && !useLi) {=0A= DWRUtil.debug("addOptions() can only be used with select elements. = Attempt to use: " + DWRUtil._detailedTypeOf(ele));=0A= return;=0A= }=0A= if (data =3D=3D null) return;=0A= =0A= var text;=0A= var value;=0A= var opt;=0A= if (DWRUtil._isArray(data)) {=0A= =0A= for (var i =3D 0; i < data.length; i++) {=0A= if (useOptions) {=0A= if (arguments[2] !=3D null) {=0A= if (arguments[3] !=3D null) {=0A= text =3D DWRUtil._getValueFrom(data[i], arguments[3]);=0A= value =3D DWRUtil._getValueFrom(data[i], arguments[2]);=0A= }=0A= else {=0A= value =3D DWRUtil._getValueFrom(data[i], arguments[2]);=0A= text =3D value;=0A= }=0A= }=0A= else=0A= {=0A= text =3D DWRUtil._getValueFrom(data[i], arguments[3]);=0A= value =3D text;=0A= }=0A= if (text || value) {=0A= opt =3D new Option(text, value);=0A= ele.options[ele.options.length] =3D opt;=0A= }=0A= }=0A= else {=0A= li =3D document.createElement("li");=0A= value =3D DWRUtil._getValueFrom(data[i], arguments[2]);=0A= if (value !=3D null) {=0A= li.innerHTML =3D value;=0A= ele.appendChild(li);=0A= }=0A= }=0A= }=0A= }=0A= else if (arguments[3] !=3D null) {=0A= for (var prop in data) {=0A= if (!useOptions) {=0A= alert("DWRUtil.addOptions can only create select lists from objects.");=0A= return;=0A= }=0A= value =3D DWRUtil._getValueFrom(data[prop], arguments[2]);=0A= text =3D DWRUtil._getValueFrom(data[prop], arguments[3]);=0A= if (text || value) {=0A= opt =3D new Option(text, value);=0A= ele.options[ele.options.length] =3D opt;=0A= }=0A= }=0A= }=0A= else {=0A= for (var prop in data) {=0A= if (!useOptions) {=0A= DWRUtil.debug("DWRUtil.addOptions can only create select lists from = objects.");=0A= return;=0A= }=0A= if (typeof data[prop] =3D=3D "function") {=0A= =0A= text =3D null;=0A= value =3D null;=0A= }=0A= else if (arguments[2]) {=0A= text =3D prop;=0A= value =3D data[prop];=0A= }=0A= else {=0A= text =3D data[prop];=0A= value =3D prop;=0A= }=0A= if (text || value) {=0A= opt =3D new Option(text, value);=0A= ele.options[ele.options.length] =3D opt;=0A= }=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._getValueFrom =3D function(data, method) {=0A= if (method =3D=3D null) return data;=0A= else if (typeof method =3D=3D 'function') return method(data);=0A= else return data[method];=0A= }=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.removeAllOptions =3D function(ele) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("removeAllOptions() can't find an element with id: " + = orig + ".");=0A= return;=0A= }=0A= var useOptions =3D DWRUtil._isHTMLElement(ele, "select");=0A= var useLi =3D DWRUtil._isHTMLElement(ele, ["ul", "ol"]);=0A= if (!useOptions && !useLi) {=0A= DWRUtil.debug("removeAllOptions() can only be used with select, ol and = ul elements. Attempt to use: " + DWRUtil._detailedTypeOf(ele));=0A= return;=0A= }=0A= if (useOptions) {=0A= ele.options.length =3D 0;=0A= }=0A= else {=0A= while (ele.childNodes.length > 0) {=0A= ele.removeChild(ele.firstChild);=0A= }=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.addRows =3D function(ele, data, cellFuncs, options) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("addRows() can't find an element with id: " + orig + ".");=0A= return;=0A= }=0A= if (!DWRUtil._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"])) {=0A= DWRUtil.debug("addRows() can only be used with table, tbody, thead and = tfoot elements. Attempt to use: " + DWRUtil._detailedTypeOf(ele));=0A= return;=0A= }=0A= if (!options) options =3D {};=0A= if (!options.rowCreator) options.rowCreator =3D = DWRUtil._defaultRowCreator;=0A= if (!options.cellCreator) options.cellCreator =3D = DWRUtil._defaultCellCreator;=0A= =0A= var tr, i;=0A= if (DWRUtil._isArray(data)) {=0A= for (i =3D 0; i < data.length; i++) {=0A= tr =3D DWRUtil._addRowInner(data[i], cellFuncs, options);=0A= if (tr !=3D null) ele.appendChild(tr);=0A= }=0A= }=0A= else if (typeof data =3D=3D "object") {=0A= i =3D 0;=0A= for (var row in data) {=0A= tr =3D DWRUtil._addRowInner(row, cellFuncs, options, i);=0A= if (tr !=3D null) ele.appendChild(tr);=0A= i++;=0A= }=0A= }=0A= =0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._addRowInner =3D function(row, cellFuncs, options, i) {=0A= var tr =3D options.rowCreator(row, i);=0A= if (tr =3D=3D null) return null;=0A= for (var j =3D 0; j < cellFuncs.length; j++) {=0A= var func =3D cellFuncs[j];=0A= var td;=0A= if (typeof func =3D=3D "string") {=0A= td =3D options.cellCreator();=0A= td.appendChild(document.createTextNode(func));=0A= }=0A= else {=0A= var reply =3D func(row);=0A= td =3D options.cellCreator(reply, j);=0A= if (DWRUtil._isHTMLElement(reply, "td")) td =3D reply;=0A= else if (DWRUtil._isHTMLElement(reply)) td.appendChild(reply);=0A= else td.innerHTML =3D reply;=0A= }=0A= tr.appendChild(td);=0A= }=0A= return tr;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._defaultRowCreator =3D function(row, i) {=0A= return document.createElement("tr");=0A= };=0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._defaultCellCreator =3D function(data, j) {=0A= return document.createElement("td");=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil.removeAllRows =3D function(ele) {=0A= var orig =3D ele;=0A= ele =3D $(ele);=0A= if (ele =3D=3D null) {=0A= DWRUtil.debug("removeAllRows() can't find an element with id: " + orig + = ".");=0A= return;=0A= }=0A= if (!DWRUtil._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"])) {=0A= DWRUtil.debug("removeAllRows() can only be used with table, tbody, thead = and tfoot elements. Attempt to use: " + DWRUtil._detailedTypeOf(ele));=0A= return;=0A= }=0A= while (ele.childNodes.length > 0) {=0A= ele.removeChild(ele.firstChild);=0A= }=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._isHTMLElement =3D function(ele, nodeName) {=0A= if (ele =3D=3D null || typeof ele !=3D "object" || ele.nodeName =3D=3D = null) {=0A= return false;=0A= }=0A= =0A= if (nodeName !=3D null) {=0A= var test =3D ele.nodeName.toLowerCase();=0A= =0A= if (typeof nodeName =3D=3D "string") {=0A= return test =3D=3D nodeName.toLowerCase();=0A= }=0A= =0A= if (DWRUtil._isArray(nodeName)) {=0A= var match =3D false;=0A= for (var i =3D 0; i < nodeName.length && !match; i++) {=0A= if (test =3D=3D nodeName[i].toLowerCase()) {=0A= match =3D true;=0A= }=0A= }=0A= return match;=0A= }=0A= =0A= DWRUtil.debug("DWRUtil._isHTMLElement was passed test node name that is = neither a string or array of strings");=0A= return false;=0A= }=0A= =0A= return true;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._detailedTypeOf =3D function(x) {=0A= var reply =3D typeof x;=0A= if (reply =3D=3D "object") {=0A= reply =3D Object.prototype.toString.apply(x);=0A= reply =3D reply.substring(8, reply.length-1);=0A= }=0A= return reply;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._isArray =3D function(data) {=0A= return (data && data.join) ? true : false;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._isDate =3D function(data) {=0A= return (data && data.toUTCString) ? true : false;=0A= };=0A= =0A= =0A= =0A= =0A= =0A= =0A= DWRUtil._importNode =3D function(doc, importedNode, deep) {=0A= var newNode;=0A= =0A= if (importedNode.nodeType =3D=3D 1 ) {=0A= newNode =3D doc.createElement(importedNode.nodeName);=0A= =0A= for (var i =3D 0; i < importedNode.attributes.length; i++) {=0A= var attr =3D importedNode.attributes[i];=0A= if (attr.nodeValue !=3D null && attr.nodeValue !=3D '') {=0A= newNode.setAttribute(attr.name, attr.nodeValue);=0A= }=0A= }=0A= =0A= if (typeof importedNode.style !=3D "undefined") {=0A= newNode.style.cssText =3D importedNode.style.cssText;=0A= }=0A= }=0A= else if (importedNode.nodeType =3D=3D 3 ) {=0A= newNode =3D doc.createTextNode(importedNode.nodeValue);=0A= }=0A= =0A= if (deep && importedNode.hasChildNodes()) {=0A= for (i =3D 0; i < importedNode.childNodes.length; i++) {=0A= newNode.appendChild(DWRUtil._importNode(doc, importedNode.childNodes[i], = true));=0A= }=0A= }=0A= =0A= return newNode;=0A= }=0A= =0A= =0A= =0A= =0A= DWRUtil.debug =3D function(message) {=0A= alert(message);=0A= }=0A= =0A= ------=_NextPart_000_0000_01C7C72E.10E4ED90--