/**
 * interwikiFordító (interwikiTranslator)
 * @author Báthory Péter, 2008 (])
 * @see ]
 * 
 * @license GNU GPL
 * @note If you want to use the script in your language, copy the code to your
 *  Wikipedia, translate the content of variable “langList” and in createMenu()
 *  function change: 'Eredeti' → 'Original', 'Magyar' → your language, and
 *  'Vegyes' → 'Both'
 */

var $langUl;
var langList = {
	'en': 'Angol',
	'aa': 'Afar',
	'ab': 'Abház',
	'ace': 'Acehi',
	'af': 'Afrikaans',
	'ak': 'Akan',
	'als': 'Alemann',
	'am': 'Amhara',
	'an': 'Aragóniai spanyol',
	'ang': 'Óangol/angolszász',
	'ast': 'Asztúriai spanyol',
	'ar': 'Arab',
	'arc': 'Asszír újarámi',
	'arz': 'Egyiptomi arab',
	'as': 'Asszámi',
	'av': 'Avar',
	'ay': 'Ajmara',
	'az': 'Azeri',
	'bcl': 'Bikol',
	'ba': 'Baskír',
	'bar': 'Bajor',
	'bat-smg': 'Szamogitiai litván',
	'be': 'Belarusz',
	'be-x-old': 'Taraskevica belarusz',
	'bg': 'Bolgár',
	'bh': 'Bhódzspuri/bihári',
	'bi': 'Biszlama',
	'bjn': 'Banjar',
	'bm': 'Manding/bambara',
	'bn': 'Bengáli',
	'bo': 'Tibeti',
	'bpy': 'Bisnuprija manipuri',
	'br': 'Breton',
	'bs': 'Bosnyák',
	'bug': 'Bugisz',
	'bxr': 'Burját',
	'ca': 'Katalán',
	'cbk-zam': 'Zamboangai chavacano',
	'cdo': 'Min-tung',
	'ce': 'Csecsen',
	'ceb': 'Cebuano',
	'ch': 'Csamorro',
	'chr': 'Cseroki',
	'chy': 'Cheyenne',
	'ckb': 'Szoráni kurd',
	'co': 'Korzikai',
	'cr': 'Krí',
	'crh': 'Krími tatár',
	'cs': 'Cseh',
	'csb': 'Kasub',
	'cu': 'Óegyházi szláv',
	'cv': 'Csuvas',
	'cy': 'Walesi',
	'da': 'Dán',
	'de': 'Német',
	'diq': 'Zázá',
	'dsb': 'Alsószorb',
	'dv': 'Maldív',
	'dz': 'Dzongkha',
	'ee': 'Eve',
	'el': 'Görög',
	'eml': 'Emiliano-romagnolo',
	'eo': 'Eszperantó',
	'es': 'Spanyol',
	'et': 'Észt',
	'eu': 'Baszk',
	'ext': 'Extremadurai',
	'fa': 'Perzsa',
	'fi': 'Finn',
	'fiu-vro': 'Võro',
	'fj': 'Fidzsi',
	'ff': 'Ful',
	'fy': 'Nyugati fríz',
	'fo': 'Feröeri',
	'fr': 'Francia',
	'frp': 'Frankoprovanszál',
	'fur': 'Friuli',
	'ga': 'Ír',
	'gag': 'Gaguz',
	'gan': 'Kan',
	'gd': 'Skót gael',
	'gl': 'Galiciai',
	'glk': 'Gilaki',
	'gn': 'Guarani',
	'got': 'Gót',
	'gu': 'Gudzsaráti',
	'gv': 'Manx',
	'ha': 'Hausza',
	'hak': 'Hakka',
	'haw': 'Hawaii',
	'he': 'Héber',
	'hi': 'Hindi',
	'hif': 'Fidzsi hindi',
	'ho': 'Hiri-motu',
	'hr': 'Horvát',
	'hsb': 'Felsőszorb',
	'ht': 'Haiti kreol',
	'hu': 'Magyar',
	'hy': 'Örmény',
	'ia': 'Interlingva',
	'ie': 'Occidental',
	'ii': 'Szecsuáni ji/lolo',
	'ig': 'Igbo',
	'id': 'Indonéz',
	'ik': 'Inupiak',
	'ilo': 'Ilokano',
	'io': 'Ido',
	'is': 'Izlandi',
	'it': 'Olasz',
	'iu': 'Inuktitut',
	'ja': 'Japán',
	'jbo': 'Lojban',
	'jv': 'Jávai',
	'ka': 'Grúz',
	'kaa': 'Karakalpak',
	'kab': 'Kabyle',
	'kg': 'Kikongo',
	'ki': 'Kikuju',
	'kj': 'Kvanyama',
	'kk': 'Kazak',
	'kl': 'Grönlandi',
	'km': 'Khmer',
	'kn': 'Kannada',
	'ko': 'Koreai',
	'koi': 'Komi-permják',
	'krc': 'Karacsáj-balkár',
	'ks': 'Kasmíri',
	'ksh': 'Ripuári',
	'ku': 'Kurd',
	'kv': 'Komi',
	'kw': 'Korni',
	'ky': 'Kirgiz',
	'la': 'Latin',
	'lad': 'Ladino',
	'lb': 'Luxemburgi',
	'lbe': 'Lak',
	'lg': 'Ganda',
	'li': 'Limburgi',
	'lij': 'Ligur',
	'lmo': 'Lombard',
	'ln': 'Lingala',
	'lo': 'Lao',
	'lt': 'Litván',
	'lv': 'Lett',
	'map-bms': 'Malajálam',
	'mdf': 'Moksa',
	'mg': 'Malgas',
	'mh': 'Marshall-szigeteki',
	'mhr': 'Mari',
	'mi': 'Maori',
	'ml': 'Malajálam',
	'mk': 'Macedón',
	'mn': 'Mongol',
	'mo': 'Moldovai',
	'mr': 'Maráthi',
	'mrj': 'Hegyi mari',
	'ms': 'Maláj',
	'mt': 'Máltai',
	'my': 'Burmai',
	'myv': 'Erza',
	'mwl': 'Mirandai',
	'mzn': 'Mázandaráni',
	'na': 'Naurui',
	'nah': 'Azték',
	'nap': 'Nápolyi',
	'nds': 'Alnémet',
	'nds-nl': 'Holland alsószász',
	'ne': 'Nepáli',
	'new': 'Névári',
	'ng': 'Ndonga',
	'nl': 'Holland',
	'nn': 'Újnorvég',
	'no': 'Norvég',
	'nov': 'Novial',
	'nrm': 'Normandiai',
	'nv': 'Navahó',
	'ny': 'Cseva',
	'oc': 'Okcitán',
	'om': 'Oromo',
	'or': 'Orija',
	'os': 'Oszét',
	'pa': 'Pandzsábi',
	'pag': 'Pangasinan',
	'pam': 'Pampanga',
	'pap': 'Papiamentu',
	'pdc': 'Pennsylvaniai német',
	'pi': 'Páli',
	'pih': 'Norfuk',
	'pl': 'Lengyel',
	'pms': 'Piemonti',
	'pnb': 'Nyugati pandzsábi',
	'pnt': 'Pontuszi görög',
	'ps': 'Pasto',
	'pt': 'Portugál',
	'qu': 'Kecsua',
	'ro': 'Román',
	'roa-rup': 'Aromán',
	'roa-tara': 'Tarantino',
	'rm': 'Rétoromán',
	'rmy': 'Romani',
	'rn': 'Kirundi',
	'ru': 'Orosz',
	'rue': 'Ruszin',
	'rw': 'Kinyarvanda',
	'sa': 'Szanszkrit',
	'sah': 'Jakut/szaha',
	'se': 'Északi számi',
	'sc': 'Szárd',
	'scn': 'Szicíliai',
	'sco': 'Skóciai angol',
	'sd': 'Szindhi',
	'sh': 'Szerbhorvát',
	'sg': 'Szango',
	'si': 'Szingaléz',
	'simple': 'Egyszerűsített angol',
	'sk': 'Szlovák',
	'sl': 'Szlovén',
	'sm': 'Szamoai',
	'sn': 'Sona',
	'so': 'Szomáli',
	'sq': 'Albán',
	'sr': 'Szerb',
	'srn': 'Sranan',
	'ss': 'Swati',
	'st': 'Szoto',
	'stq': 'Saterlandi fríz',
	'su': 'Szundai',
	'sv': 'Svéd',
	'sw': 'Szuahéli',
	'szl': 'Sziléziai',
	'ta': 'Tamil',
	'te': 'Telugu',
	'tet': 'Tetum',
	'tg': 'Tádzsik',
	'th': 'Thai',
	'ti': 'Tigrinya',
	'tk': 'Türkmén',
	'tl': 'Tagalog',
	'tn': 'Csvana',
	'to': 'Tonga',
	'tpi': 'Tok-piszin',
	'tr': 'Török',
	'ts': 'Conga',
	'tt': 'Tatár',
	'tum': 'Tumbuka',
	'tw': 'Tvi',
	'ty': 'Tahiti',
	'udm': 'Udmurt',
	'ug': 'Ujgur',
	'uk': 'Ukrán',
	'ur': 'Urdu',
	'uz': 'Üzbég',
	've': 'Venda',
	'vec': 'Velencei',
	'vi': 'Vietnami',
	'vls': 'Nyugati flamand',
	'vo': 'Volapük',
	'wa': 'Vallon',
	'war': 'Waray',
	'wo': 'Volof',
	'wuu': 'Wu',
	'xal': 'Kalmük',
	'xh': 'Yhosza',
	'yi': 'Jiddis',
	'yo': 'Joruba',
	'za': 'Csuang',
	'zea': 'Zeelandi',
	'zh': 'Kínai',
	'zh-classical': 'Klasszikus kínai',
	'zh-min-nan': 'Min Nan',
	'zh-yue': 'Kantoni',
	'zu': 'Zulu'
};

function init() {
	$langUl = $( '#p-lang ul:first' );
	var $nodes = $langUl.children( 'li.interlanguage-link' );
	if ( !$nodes.length ) return;
	// enwiki miatt, mert ott a completelist nem osztály, hanem id
	$nodes.find( '#interwiki-completelist' ).addClass( 'interwiki-completelist' );
	
	var i = 1;
	$nodes.each( function () {
		if ( $( this ).children().first().is( 'a' ) ) {
			bovit( this, i++ );
		}
	} );
	
	createMenu();
	changeLang( localStorage.getItem( 'interwikiNyelv' ) - 1, true );
	// ha értelmetlen eredményt kapunk, azt a függvény kezeli
}

function bovit( node, eredetiSorrend ) {
	// Nyelvkód meghatározása a <li> id-jából (pl. interwiki-en)
	var nyelv = node.className.match( /interwiki-(*)/ );

	var magyarul = langList || nyelv;

	if ( node.childNodes !== undefined && node.childNodes.nodeName == '#text' )
		node.removeChild(node.childNodes);	//IE hiba jav
		
	// Magyar név hozzáadása zárójel nélküli alakban
	var $ujlink1 = $( '<a>' )
		.attr( 'href', node.childNodes.href )
		.text( magyarul )
		.data( 'rendnyelv', magyarul )
		.appendTo( node )
		.hide();
	
	// Magyar név hozzáadása zárójeles alakban
	var $ujlink2 = $( '<a>' )
		.attr( 'href', node.childNodes.href )
		.text( $( node.childNodes ).text() + ' ' )
		.append( $( '<span>' )
			.addClass( 'iwt-tr' )
			.text( '(' + magyarul + ')' )
		)
		.data( 'rendnyelv', eredetiSorrend )
		.appendTo( node )
		.hide();
	
	$( node ).children( ':first' ).data( 'rendnyelv', eredetiSorrend );
}

function sort( type ) {
	function listSort(a, b) {
		if (a.childNodes !== undefined && b.childNodes !== undefined) {
			a = $( a.childNodes ).data( 'rendnyelv' );
			b = $( b.childNodes ).data( 'rendnyelv' );
			if ( type === 1 ) { // magyar sorrend szerint, szavak vannak
				return a.localeCompare( b, 'hu', { sensitivity: 'base' } );
			} else { // eredeti sorrend szerint, számok vannak
				return a - b;
			}
		}
	}
	
	var $list = $langUl.find( 'li.interlanguage-link' );
	
	// Rendezés
	$list.sort( listSort );
	
	// Végül újraépítjük a listát – a További nyelvek és a Teljes lista elé
	$langUl.prepend( $list );
}

function createMenu() {
	function createOption( text, id ) {
		return (
			$( '<li>' )
				.append( $( '<a>' )
					.attr( 'href', '#' )
					.text( text )
					.data( 'iwt-id', id )
					.click( changeLang )
				)
		);
	}
	$( '<ul>' )
		.attr( 'id', 'interwikiNyelvValtMenu' )
		.append(
			createOption( 'Eredeti', 0 ),
			createOption( 'Magyar',  1 ),
			createOption( 'Vegyes',  2 )
		)
		.insertBefore( $langUl );
}

function changeLang( type, nemrendez ) {
	if ( // eseményt kaptunk
		typeof type === 'object' &&
		typeof type.preventDefault === 'function' &&
		typeof type.target === 'object'
	) {
		type.preventDefault();
		type = $( type.target ).data( 'iwt-id' );
	}
	if ( .indexOf( type ) < 0 ) type = 0; // biztos, ami biztos
	var $nyelvMenu = $( '#interwikiNyelvValtMenu' );
	// Menü átváltása és rendezés
	if ( !nemrendez || type === 1 ) { // a magyart betöltéskor is rendezzük
		sort( type );
	}
	$nyelvMenu.find( 'a' ).removeClass( 'iwt-sel' ).eq( type ).addClass( 'iwt-sel' );
	
	// Minden nyelvre beállítja a láthatóságot
	$langUl.find( 'li.interlanguage-link' ).each( function () {
		$( this ).children().hide().eq( type ).show();
	} );
	
	if ( !nemrendez ) { // Csak akkor mentjük a sütit, ha kattintással hívódott meg a függvény
		var time = new Date();
		time.setTime( time.getTime() + 60 * 24 * 3600000 ); // 60 nap
		// type + 1, mert a 0 IE-ben törli
		localStorage.setItem( 'interwikiNyelv', type + 1, time );
	}
	return false;
}

$( init );