/*
 * Copyright (c) 2005, 2006 IBM 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:
 * IBM Corporation - initial implementation
 */

/* 
 * Set up general fonts, sizes and colors 
 */
body { font-family : Arial, sans-serif; }

H1, H2, H3, H4, p, a { color : #4D4D4D; }

.intro-header H1 {
	font-size : 16pt;
	font-weight : normal;
	color : #E5E5E5;
}

h2 {
	font-size : 13pt;
	font-weight : normal;
	color : #7B8694;
}
/* For regular div labels */
H4 .div-label {
	font-size : 10pt;
	font-weight : bold;
}

/* For the main page content's title */
#content-header H4 .div-label {
	font-size : 14pt;
	font-weight : normal;
	color : #8C96A2;
	float : none;
	clear : both;
}

.page-description { 
	font-size : 10pt;
	float : none;
	clear : both;
}

a {
	font-weight : bold;
	text-decoration : none;
	color : #4D4D4D;
}

a .link-label {
	font-size : 10pt;
	font-weight : normal;
}

#navigation-links a .link-label {
	font-size : 9pt;
	font-weight : normal;
	color : #E5E5E5;
}

a .text {
	font-size : 8pt;
	font-weight : normal;
}

p .group-description {
	font-size : 10pt;
	font-weight : normal;
}


/* 
 * Set up other general properties like padding/margins
 */
html, body { width : 100%; height : 100%; }

html, body, div, h1, h4, p, a { margin : 0px; padding : 0px; }

.intro-header H1 { padding-top : 10px; margin-left : 10px; }

/* For regular div labels */
#page-content div H4 {
	padding : 10px;
	padding-bottom : 0px;
}

/* For the main page content's div label */
#page-content #content-header H4 {
	padding-bottom : 10px;
	padding-top : 0px;
}

/* special case for Mozilla's main content-header label.
   Mozilla 1.4 needs more room at the top */
#page-content > #content-header H4 { padding-top : 10px; }

/* Needed in IE to get shift+tab to show the active image properly */
a:active {
	border : solid 0px;
}

a img {
	border-width : 0;
	background-repeat : no-repeat;
}

/*
 * to get scrollbars working in both IE and Mozilla
 */
html,body { overflow: auto; }
html>body { overflow: visible; }

/*
 * Set up the body, decorative background, and navigation for the content 
 * pages. 
 * Note: the root page handles its own background and navigation; these
 * settings primarily apply to the content pages
 */
body {
	background-color : #FFFFFF;
	background-repeat : no-repeat;
	background-position : bottom right;
}

#background-image {
	width : 100%;
	min-width : 770px;
	height : 164px;
	background-image : url(graphics/contentpage/background.jpg);
	background-repeat : no-repeat;
	background-position : top left;	
	position : absolute;
	top : 0px;
	z-index : -100;
}

#curve-image { 
	width : 100%;
	height : 164px;
	position : absolute;
	top : 0px;
	background-image : url(graphics/contentpage/background.gif);
	background-repeat : no-repeat;
	background-position : top center;
	margin : 0;
	padding : 0;
}

.intro-header {	background-color : transparent; z-index : 100;}

body, .page{
	min-width : 770px;
	/* since IE doesn't support min-width, try expression */
	width:expression(document.body.clientWidth < 770? "770px": "auto" );
	min-height : 425px;
	height : 100%;
	height : expression(document.body.clientHeight < 425? "425px": "100%" );
}

.page { 
	background-image : url(graphics/contentpage/wordmark.gif);
	background-repeat : no-repeat;
	background-position : bottom left;
	min-height : 475px;
}

#page-content {
	background-repeat : no-repeat;
	background-position : bottom right;
	height : 70%;
}

/* 
 * Lay out the navigation links 
 * (Root page does something similar for its navigation)
 */
#navigation-links {
	position : relative;
	left : 10px;
	top : 5px;
	height : 60;
	width : 98%;
}

#navigation-links a {
	padding-left : 5px;
	padding-right : 5px;
	float : left;
	text-align : center;
}

#navigation-links a img {
	height : 52px;
	width : 52px;
	vertical-align : middle;
}

#navigation-links a .link-label { display : block; margin-top : 5px;}

#navigation-links a .text { display : none; }

#navigation-links a:hover, 
#navigation-links a:focus 
#navigation-links a:active { border-right : 0px;}

/* properties for each of the navigation-links  */
#navigation-links a#overview img { background-image : url(graphics/icons/etool/overview48.gif); }
#navigation-links a#overview:hover img,
#navigation-links a#overview:focus img,
#navigation-links a#overview:active img { background-image : url(graphics/icons/ctool/overview48.gif); }
/*#navigation-links a#overview:active img { background-image : url(graphics/icons/ctool/overview48sel.gif); }*/

#navigation-links a#tutorials img { background-image : url(graphics/icons/etool/tutorials48.gif); }
#navigation-links a#tutorials:hover img,
#navigation-links a#tutorials:active img,
#navigation-links a#tutorials:focus img { background-image : url(graphics/icons/ctool/tutorials48.gif); }
/*#navigation-links a#tutorials:active img { background-image : url(graphics/icons/ctool/tutorials48sel.gif); }*/

#navigation-links a#samples img { background-image : url(graphics/icons/etool/samples48.gif); }
#navigation-links a#samples:hover img,
#navigation-links a#samples:active img,
#navigation-links a#samples:focus img { background-image : url(graphics/icons/ctool/samples48.gif); }
/*#navigation-links a#samples:active img { background-image : url(graphics/icons/ctool/samples48sel.gif); }*/

#navigation-links a#news img { background-image : url(graphics/icons/etool/whatsnew48.gif); }
#navigation-links a#news:hover img,
#navigation-links a#news:focus img,
#navigation-links a#news:active img { background-image : url(graphics/icons/ctool/whatsnew48.gif); }
/*#navigation-links a#news:active img { background-image : url(graphics/icons/ctool/whatsnew48sel.gif); }*/

#navigation-links a#workbench { position : absolute;  right : 0px; top : -35px; text-align : right;}
#navigation-links a#workbench .text { display : none; }
#navigation-links a#workbench img { background-image : url(graphics/icons/etool/wb48.gif); width : 53px; height : 53px;}
#navigation-links a#workbench:hover img,
#navigation-links a#workbench:focus img,
#navigation-links a#workbench:active img { background-image : url(graphics/icons/ctool/wb48.gif); }

/* 
 * Lay out the page title and description 
 */
h1, p { margin-left : 10px; } /* required in mozilla so the page description is properly indented */

/* position the page content so that the page title overlays the bottom
 * of the background image, but make sure the content is always on top 
 * (using z-index) */
#page-content {
	float : none;
	clear : both;
	text-align : center;
	margin-top : 35px;
}

.page > #page-content { margin-top : 50px; }

#page-content p { 
	padding-bottom : 15px; 
	text-align : left; 
	float : none;
	clear : both;
}

#page-content #content-header H4, .page-description {
	text-align : left;
	margin-right : 10px;
	float : none;
	clear : both;
}

