/*******************************************************************************
 * Copyright (c) 2005, 2010 Intel Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Intel Corporation - initial API and implementation
 *     IBM Corporation 2006, refactored index view into a single frame
 *     IBM Corporation 2009, added style for .see
 *     IBM Corporation 2010, Added see all link
 *******************************************************************************/

BODY {
    <%=prefs.getViewBackgroundStyle()%>
	font:<%=prefs.getViewFont()%>;
	margin-top:5px;
	margin-<%=isRTL?"right":"left"%>:5px;
	padding:0px;
	border:0px;	
	cursor:default;
	overflow:hidden;
}

TABLE, TR, TD, P {
	margin:0px;
	padding:0px;
	border:0px;
}

TABLE {
	font:<%=prefs.getViewFont()%>;
	width:100%;
}

TR {
	height:21px;
}


INPUT {
	font:<%=prefs.getViewFont()%>;
	margin:0;
	padding:0;
	border:1px solid ThreeDShadow;
}

INPUT {
    font-size:1.0em;
}

#instruction {
	white-space:nowrap;
}

#indexList {
    overflow:auto;
    width: 100%;
    height: 100px;
}

#typein {
	width:100%;
}

#typeinTable {
	width:100%;
	height: 4em;
}

#button {
	background:ThreeDShadow;
	color:Window;
	font-size: 1.0em;
	font-weight:bold;
	margin-left:1px;
}

<%
	if (requestData.isIE()) {
%>
#go {
	padding-<%=isRTL?"right":"left"%>:1px;
}
<%
	}
%>

#root {
	margin-top:0px;
	margin-<%=isRTL?"right":"left"%>:5px;	
}

#innerNavigation {
    margin-top:0px;
    padding-bottom: 5px;
	font-weight:bold;
	width:100%;
}

#navigation {
    width:100%;
}

#td_previous {   
    text-align:<%=isRTL?"right":"left"%>;
    width:50%;
}

#td_next {
    text-align:<%=isRTL?"left":"right"%>;
    width:50%;
}

DIV.root {
    font-weight:normal;
}

DIV.visible, DIV.unopened { 
	border-width:0; 
	margin-<%=isRTL?"right":"left"%>:1.5em; 
	font-weight:normal;
}
  
DIV.hidden {
	display:none; 
}

DIV.visible, DIV.root {  
    margin-top:1px; 
}


DIV.group { 
	border-width:0; 
	margin-<%=isRTL?"right":"left"%>:0; 
}

SPAN.item{
    white-space: nowrap;
}

IMG {
	border:0px;
	margin:0px;
	padding:0px;
	margin-<%=isRTL?"left":"right"%>:4px;
}

IMG.expander, IMG.h {
    margin-top:4px;
    margin-bottom:2px;
}

A {
	text-decoration:none; 
	padding-<%=isRTL?"left":"right"%>:2px;
	color:WindowText;
	/* this works in ie5.5, but not in ie5.0  */
	white-space: nowrap;
}

A:hover{
	text-decoration:underline; 
}

A.active{ 
	color:HighlightText; 
	background:Highlight;
	width:100%;
}

A.active:hover{
	text-decoration:underline; 
}

A.see {
    font-style : italic;
    color : #0000FF;
}

<%
if (requestData.isSafari()){
%>

A.nolink {
	color:#808080;
}

<% 
} else {
%>

A.nolink {
	color:GrayText;
}

<%
}
%>

A.nolink {
	text-decoration:none; 
	font-weight:bold;
}

A.nolink:hover {
	text-decoration:none; 
}

.h {
	visibility:hidden;
}

.showall {
    text-decoration:underline; 
    color:#0066FF; 
	cursor:pointer;
}



