/**
 * @(#)Language.java
 * The class which provides the appropiate
 * resources for the current language.
 *
 * @author Mehmet Mithat Cinar
 * @version 1.00 21.12.2009
 */
 
package bin;
 
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;

public class Language {
	
	/**
     * <code>currentLang</code><br>
     * The current language index.
     */
    private static int currentLang=0;
	
	/**
     * <code>languages</code><br>
     * List of available languages.
     */
    private static final String[] languages = {
		"English",	// ENGLISH
		"Türkçe"	// TURKISH
	};

    /**
     * <code>translators</code><br>
     * List of the translators.
     */
    private static final String[] translators = {
		"Nerd4Ever",	// ENGLISH
		"Nerd4Ever"		// TURKISH
	};
	
	/**
     * <code>menu</code><br>
     * The image used for the menu. Language-specific.
     */
    private static BufferedImage menu;
    
    /**
     * <code>hoverMenu</code><br>
     * The image used for the hoverMenu. Language-specific.
     */
    private static BufferedImage hoverMenu;
	
	/**
     * <code>loadResources</code><br>
     * Loads the language-based image resources.
     * @throws An exception if the images are not found.
     */
    public static void loadResources() throws Exception {
    	// Load the menu image
    	menu = ImageIO.read(new File("images/gui/lang/"+currentLang+"/menu.png"));
    	// Load the hoverMenu image
    	hoverMenu = ImageIO.read(new File("images/gui/lang/"+currentLang+"/hovermenu.png"));
	}
	
	/**
     * <code>help</code><br>
     * An array which stores the user's 
     * manual in different languages.
     */
    private static final String[] help = {
    	// ENGLISH
			"	Welcome to jLibris eBook Reader! \n" +
			"\n" +
			"	To start the unique experience of reading " +
			"with jLibris, click on the \"Open File\" " +
			"button in the toolbar. \n" +
			"\n" +
			"	About the Toolbar\n" +
			"\n" +
			"	jLibris has an easy-to-use toolbar which gives " +
			"you full control over the appearance of your " +
			"program. You can personalize your reader or easily " +
			"navigate through pages via the toolbar. Alternatively, " +
			"you can use UP or LEFT ARROW buttons in your keyboard " +
			"instead of \"Prev. Page\" button, and RIGHT or DOWN ARROWS " +
			"instead of \"Next Page\" button.\n" +
			"\n" +
			"	Style Menu\n\n" +
			"	jLibris has an extra menu which is controlling the appearance " +
			"of the reader. By clicking on the \"Style Menu\", you can enable " + 
			"this menu.\n" + 
			"	In this menu, by pressing \"Choose " +
			"Image\" button in the toolbar, you can either select one of the " +
			"images provided or load your own image. Using \"Toggle BG Img\" " +
			"button, you can easily cycle between background image and a solid " +
			"background color. To choose a solid background color, you can click " +
			"on the \"Back Color\" button. \n" + 
			"\n" +
			"	To determine text's foreground color, click on the \"Font Color\" button.\n" +
			"\n" +
			"	\"Font Face\" opens a special font face chooser which allows you to choose " +
			"a desired font face, font size and to decide whether the text should be italic, " +
			"bold, either of them, or plain. \n" +
			"\n" +
			"	The little clock on the top of the Style Menu shows you how long you have been reading. " +
			"\n\n" + 
			"	And finally, the \"Apply Preset Theme\" button provides predefined stylistic " +
			"appearances.\n\n" +
			"	Now let's advance to the main menu's buttons:\n" +
			"\n" +
			"	Now try to input a number inside the upper white arrow and "+
			"press \"GO\". This will directly open that page.\n"+
			"\n	Pressing one of the \"First Page\" or \"Last Page\" buttons will send you to " + 
			"the first or the last page of the book. \n"+
			"\n	Very surprisingly, X closes the program.\n" +
			"\n" +
			"	If you wonder who we are, you can see \"Credits\" with a single click "+
			"on the jLibris logo in the middle of the navigation toolbar. \n" +
			"\n" +
			"	\"U Not Engrish?\" Don't worry, by clicking the \"EN\" sign above, you can choose " +
			"one of the supported languages. (We still don't know how you can read this if you don't"+
			" know English)\n" +
			"	By the way, by pressing R , you can toggle \"Eye Relaxing Mode\", which " +
			"continuously darkens and lightens the screen slowly so that your eyes don't " +
			"have to bear the same amount of light all the time. Give it a try.\n" +
			"\n" +
			"	Well... May the force be with you,\n" +
			"\n" +
			"Lorem ipsum dolor sit amet..." +
			"\n\n				Nerd4Ever Team",
		// TURKISH
			"	jLibris e-Kitap Okuyucu'ya hoşgeldiniz! \n" +
			"\n" +
			"	jLibris kullanarak kitap okumanın doyumsuz zevkine varmak için, araç çubuğundaki \"Dosya Aç\" düğmesine tıklayın. \n"+
			"\n" +
			"	Araç Çubuğu Hakkında\n" +
			"\n" +
			"	jLibris, kullanıcıya programın görünümü üzerinde sınırsız kontrol imkanı tanıyan kullanımı kolay bir araç çubuğuna sahiptir. "+
			"Araç çubuğu sayesinde okuyucunuzu kolayca kişiselleştirebilir veya sayfalar arasında gezinebilirsiniz. " +
			"Ayrıca \"Önceki Sayfa\" düğmesi yerine klavyenizden YUKARI veya SOL YÖN TUŞUna, \"Sonraki Sayfa\" yerine de AŞAĞI veya SAĞ YÖN TUŞUna basabilirsiniz.\n" +
			"\n" +
			"	Stil Menüsü\n\n" +
			"	jLibris'in, okuyucunun görünümünü kontrol eden fazladan bir menüsü vardır."+
			" \"Stil Menüsü\"ne tıklayarak bu menüyü etkinleştirebilirsiniz. \n" +
			"	Bu menüde, \"Arkaplan Resmi Seç\" düğmesine tıklayarak hazır bulunan resimlerden birini seçebilir veya kendi resminizi yükleyebilirsiniz. " +
			" \"A.P. Resmini Aç/Kapa\" düğmesini kullanarak arkaplan resmiyle düz bir renk arasında kolayca geçiş yapabilirsiniz. " +
			" Düz bir arkaplan rengi seçmek için \"Arkaplan Rengi\" düğmesine tıklayabilirsiniz. \n" +
			"\n" +
			"	Yazı rengini ayarlamak için \"Yazıtipi Rengi Seç\" düğmesine tıklayın.\n" +
			"\n" +
			"	\"Yazı Tipi Seç\" düğmesi; istediğiniz yazı tipini, boyutunu ve stilini seçmenize imkan tanıyan özel bir yazı tipi seçme ekranı açar. \n" +
			"\n" +
			"	Stil Menüsü'nün üst tarafındaki küçük saat, size ne kadar süredir okumakta olduğunuzu gösterir. " +
			"\n\n" + 
			"	Son olarak, \"Hazır Tema Uygula\" düğmesi size önceden tanımlanmış görünümler sunar.\n\n" +
			"	Şimdi ana menünün düğmelerine bakalım:\n" +
			"\n" +
			"	Yukarıdaki beyaz okun içerisine bir sayı girip \"Git\"e basın. Bu, doğrudan o sayfayı açacaktır.\n" +
			"\n \"İlk Sayfa\" ve \"Son Sayfa\" düğmelerinden birine tıklamak sizi kitabın ilk ya da son sayfasına gönderir. \n" +
			"\n	Şaşırtıcı ama, X programı kapatır.\n" +
			"\n" +
			"	Kim olduğumuzu merak ediyorsanız, gezinti araç çubuğunun ortasındaki jLibris düğmesine tıklayarak \"Katkıda Bulunanlar\"ı görebilirsiniz. \n" +
			"\n" +
			"	Türkçe bilmiyor musunuz? Merak etmeyin, yukarıdaki \"TR\" simgesine tıklayarak, desteklenen dillerden birini seçebilirsiniz. "+
			"(Türkçeniz yoksa bunu nasıl okuyabileceğinizi ise bilmiyoruz.)\n" +
			"	Bu arada, R'ye basarak, ekranı sürekli yavaşça aydınlatıp karartan ve gözünüzün yorulmasını engelleyen \"Göz Rahatlatma Modu\"na girebilirsiniz. Bir deneyin. \n" +
			"\n" +
			"	Bu kadar... Güç sizinle olsun,\n" +
			"\n" +
			"Lorem ipsum dolor sit amet..." +
			"\n\n				Nerd4Ever Takımı",
	};
		
	/**
     * <code>textres</code><br>
     * An array list which stores the text 
     * resources in different languages.
     */
    private static final String[][] textres = new String[][] {
/* 0*/  {"ERROR: ","HATA: "},
/* 1*/  {"Supported Image Files","Desteklenen Resim Dosyaları"},
/* 2*/  {"Choose Font Color...","Yazıtipi Rengini Seçin..."},
/* 3*/  {"Choose Background Color...","Arkaplan Rengini Seçin..."},
/* 4*/  {"jLibris eBook Reader","jLibris e-Kitap Okuyucu"},
/* 5*/  {"Choose a theme...","Bir tema seçin..."},
/* 6*/  {"Choose a language...","Bir dil seçin..."},
/* 7*/  {"Font face: ","Yazı tipi: "},
/* 8*/  {"Style:","Biçem:"},
/* 9*/  {"Plain","Normal"},
/*10*/  {"Bold","Kalın"},
/*11*/  {"Italic","İtalik"},
/*12*/  {"Bold Italic","Kalın İtalik"},
/*13*/  {"Size:","Boyut:"},
/*14*/  {"Apply","Uygula"},
/*15*/  {"TXT Files","TXT Dosyaları"},
/*16*/  {"Credits","Katkıda Bulunanlar"},
/*17*/  {"Programmer","Programcı"},
/*18*/  {"Instructor","Eğitmen"},
/*19*/  {"Lab Assistant","Lab Asistanı"},
/*20*/  {"Team Leader","Takım Lideri"},
/*21*/  {"Beta Tester","Denetçi"},
/*22*/  {"Artwork","Görsel Tasarım"},
/*23*/  {"THE END","SON"},
/*24*/  {"Reading Duration","Okuma Süresi"},
/*25*/  {"hour(s)","saat"},
/*26*/  {"minute(s)","dakika"},
/*27*/	{"Code Commentary","Kod Açıklamaları"},
/*28*/	{"<RESOURCE NOT FOUND>","<KAYNAK BULUNAMADI>"},
/*29*/	{"<LANGUAGE NOT FOUND>","<DİL BULUNAMADI>"},
/*30*/	{"Help","Yardım"},
/*31*/	{"Translators","Çevirenler"}
    };
	
	/**
     * <code>getHelp</code><br>
     * Returns a String object in the current language.
     * @return Help in the current language.
     */
    public static String getHelp() {
		return help[currentLang];
	}
	
	/**
     * <code>getText</code><br>
     * Returns the nth String resource object in the current language.
     * @param i The index number of the text resource.
     * @return Text in the current language.
     */
    public static String getText(int i) {
    	// If the index is out of bounds
    	if (i<0 || i>=textres.length)
    		// Set the i integer to which belongs to "<RESOURCE NOT FOUND>"
    		i = 28;
    	// Return the text resource in the given language
		return textres[i][currentLang];
	}
	
	/**
     * <code>getLanguageName</code><br>
     * Returns the name of the current language.
     * @return The name of the current language.
     */
    public static String getLanguageName() {
    	// Return the language name
		return getLanguageName(currentLang);
	}
	
	/**
     * <code>getLanguageName</code><br>
     * Returns the name of the current language.
     * @param i The index of the language
     * @return The name of the current language.
     */
    public static String getLanguageName(int i) {
    	// If the language is not there
    	if (i<0 || i>=languages.length)
    		// Return "<LANGUAGE NOT FOUND>" in the current language
    		return getText(29);
    	// Return the name of the language
		return languages[i];
	}
	/**
     * <code>getTranslatorName</code><br>
     * Returns the name of the language's translator.
     * @param i The index of the translator's name
     * @return The name of the language's translator.
     */
    public static String getTranslatorName(int i) {
    	// If the language is not there
    	if (i<0 || i>=translators.length)
    		// Return "Nerd4Ever"
    		return "Nerd4Ever";
    	// Return the name of the language
		return translators[i];
	}
		
	/**
     * <code>getLanguageIndex</code><br>
     * Returns the current language index.
     * @return The current language index.
     */
    public static int getLanguageIndex() {
    	// Return the current language's index
		return currentLang;
	}
		
	/**
     * <code>chooseLanguage</code><br>
     * Chooses the language in the determined index.
     * @param i The index of the desired language.
     */
    public static void chooseLanguage(int i) {
    	// Limit i in the array boundary and return the result
		currentLang = (i>=0)?((i<languages.length)?i:0):(languages.length-1);
	}
	
	/**
     * <code>languageCount</code><br>
     * Returns the count of the languages.
     * @return The count of the languages as an int.
     */
    public static int languageCount() {
    	// Return how many languages are there
		return languages.length;
	}
	
	/**
     * <code>getMenu</code><br>
     * Returns the BufferedImage <code>menu</code>.
     * @return The menu image.
     */
	public static BufferedImage getMenu() {
		// Return the menu image
		return menu;
	}
	
	/**
     * <code>getHoverMenu</code><br>
     * Returns the BufferedImage <code>hoverMenu</code>.
     * @return The hoverMenu image.
     */
	public static BufferedImage getHoverMenu() {
		// Return the hoverMenu image
		return hoverMenu;
	}
}