<?php
/*******************************************************************************
 * Copyright (c) 2007 Eclipse Foundation 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:
 *    Paul Colton (Aptana)- initial API and implementation
 *    Eclipse Foundation
 *    Kit Lo (IBM) - [281434] Syncup overuses the "possibly incorrect" flag
*******************************************************************************/
require("global.php");
InitPage("login");

$pageTitle 		= "Babel Project";
$pageKeywords 	= "translation,language,nlpack,pack,eclipse,babel";

global $addon;
$addon->callHook("head");


//$_SESSION['language'] = "";
//$_SESSION['project'] = "";
//$_SESSION['version'] = "";

# Bug 221420 Allow bookmarking file/string/translation
if(isset($_GET['project'])) {
	$_SESSION['project'] = stripslashes($_GET['project']);
}
if(isset($_GET['version'])) {
	$_SESSION['version'] = stripslashes($_GET['version']);
}
if(isset($_GET['file'])) {
	$_SESSION['file'] = stripslashes($_GET['file']);
}
if(isset($_GET['string'])) {
	$_SESSION['string'] = htmlspecialchars($_GET['string']);
}

$filesOrderNameChecked = "";
if (!isset($_SESSION['filesOrder']) or $_SESSION['filesOrder'] == 'name') {
	$filesOrderNameChecked = "checked";
}

$filesOrderCompletionChecked = "";
if (isset($_SESSION['filesOrder']) and $_SESSION['filesOrder'] == 'completion') {
	$filesOrderCompletionChecked = "checked";
}

?>

<h1 id="page-message">Welcome to the Babel Project</h1>
<?php include("fragments/motd.php");?>
<div id="contentArea">

	<h2>Languages / Projects / Versions / Files</h2>
	<div id="language" class="side-component-small">
		<h4 id="language-selection">Languages</h4>
		<ul id="language-area" class="scrollable-area"></ul>
	</div>

	<div id="project" class="side-component-small projects">
		<h4 id="project-selection">Projects</h4>
		<ul id="project-area" class="scrollable-area"></ul>
	</div>
	
	<div id="version" class="side-component-small versions">
		<h4 id="version-selection">Versions</h4>
		<ul id="version-area" class="scrollable-area"></ul>
	</div>

	<div id="files" class="side-component-small files">
		<h4 id="files-selection">
			Files
			<input id="files-order-name" name="files-order" type="radio" <?= $filesOrderNameChecked ?>>ordered by name
			<input id="files-order-completion" name="files-order" type="radio" <?= $filesOrderCompletionChecked ?>>ordered by completion
		</h4>
		<ul id="files-area" class="scrollable-area"></ul>
	</div>
	<div class="clearing"></div>
	
	
<!--  	
<script type="text/javascript"> 
	var myTabs = new YAHOO.widget.TabView("string-area"); 
</script>  
-->


	
	<div id="string-area" class="yui-navset full-component">
	<h2 id="string-title">Strings In File</h2>
<!--
	    <ul class="yui-nav"> 
        <li class="selected"><a href="#tab1"><em>Untranslated</em></a></li> 
	        <li><a href="#tab2"><em>Flagged Incorrect</em></a></li> 
	        <li><a href="#tab3"><em>Awaiting Rating</em></a></li> 
	    </ul>             
  	  	<div class="yui-content" style="clear: both;"> 
			<div id="not-translated">
			</div>
			
			<ul id="flagged-incorrect">
			</ul>
			
			<ul id="awaiting-ratings">
			</ul>
		</div>
	    
-->	    
  	  	<div id="projecs-strings-area" class="yui-content"> </div>
		
		<div id="not-translated"></div>
	</div>
	
	
	<div id="translation-area" class="full-component">
	   <h2 id="translation-title">Translation For Key</h2>
	   <div id="translation-form-container"></div>
	   <div class="clearing"></div>
	</div>
	
	<div class="clearing"></div>
	
</div>

<center>Note: Translations by Babel Syncup are synchronization of existing translations. Translations are possibly incorrect.</center>

<script language="javascript">
	YAHOO.languageManager.getAjaxLanguages();
</script>


<?php
	global $addon;
    $addon->callHook("footer");
?>