
function CademaSemseAccents(Cadena) {
	var CadenaSense = "";
	for (var i = 0; i < Cadena.length; i++) CadenaSense += CaracterSenseAccents(Cadena.charAt(i));
	return CadenaSense;
}

function CaracterSenseAccents(Caracter) {
	Caracter = Caracter.charAt(0);
	var ValorAscii = Caracter.charCodeAt(0);
	if ((ValorAscii >= 192) && (ValorAscii <= 221)) {   // Vocals accentuades en majúscules: del 192 al 221
		switch (Caracter) {
			case "À":
			case "Á":
			case "Â":
			case "Ä":
			case "Ã":
			case "Å":
				Caracter = "A";
				break;
			case "È":
			case "É":
			case "Ê":
			case "Ë":
				Caracter = "E";
				break;
			case "Ì":
			case "Í":
			case "Î":
			case "Ï":
				Caracter = "I";
				break;
			case "Ò":
			case "Ó":
			case "Ô":
			case "Ö":
			case "Õ":
				Caracter = "O";
				break;
			case "Ù":
			case "Ú":
			case "Û":
			case "Ü":
				Caracter = "U";
				break;
			case "Ý":
				Caracter = "Y"
				break;
		}
	} else {
		if ((ValorAscii >= 224) && (ValorAscii <= 255)) {   // Vocals accentuades en minúscules: del 224 al 255
			switch (Caracter) {
				case "à":
				case "á":
				case "â":
				case "ä":
				case "ã":
				case "å":
					Caracter = "a";
					break;
				case "è":
				case "é":
				case "ê":
				case "ë":
					Caracter = "e";
					break;
				case "ì":
				case "í":
				case "î":
				case "ï":
					Caracter = "i";
					break;
				case "ò":
				case "ó":
				case "ô":
				case "ö":
				case "õ":
					Caracter = "o";
					break;
				case "ù":
				case "ú":
				case "û":
				case "ü":
					Caracter = "u"
					break;
				case "ý":
				case "ÿ":
					Caracter = "y";
					break;
			}
		}
	}
	return Caracter;
}

var Caracters = new Array();

function Caracter (Id, HTML) {
 this.Id = Id;
 this.HTML = HTML;
}

function AfegirCaracter (Id, HTML) {
	Caracters[Caracters.length] = new Caracter(Id, HTML);
}

function CarregarCaracters () {
	Cars = [["&", "&amp;"], 
					["'", "&rsquo;"], 
					["€", "&euro;"], 
					["Á", "&Aacute;"], 
					["á", "&aacute;"], 
					["Â", "&Acirc;"], 
					["â", "&acirc;"], 
					["Æ", "&AElig;"], 
					["æ", "&aelig;"], 
					["À", "&Agrave;"], 
					["à", "&agrave;"], 
					["Ä", "&Auml;"], 
					["ä", "&auml;"], 
					["Ã", "&Atilde;"], 
					["ã", "&atilde;"], 
					["Å", "&Aring;"], 
					["å", "&aring;"], 
					["Ç", "&Ccedil;"], 
					["ç", "&ccedil;"], 
					["É", "&Eacute;"], 
					["é", "&eacute;"], 
					["Ê", "&Ecirc;"], 
					["ê", "&ecirc;"], 
					["È", "&Egrave;"], 
					["è", "&egrave;"], 
					["Í", "&Iacute;"], 
					["í", "&iacute;"], 
					["Î", "&Icirc;"], 
					["î", "&icirc;"], 
					["Ì", "&Igrave;"], 
					["ì", "&igrave;"], 
					["Ï", "&Iuml;"], 
					["ï", "&iuml;"], 
					["Ó", "&Oacute;"], 
					["ó", "&oacute;"], 
					["Ô", "&Ocirc;"], 
					["ô", "&ocirc;"], 
					["Œ", "&OElig;"], 
					["œ", "&oelig;"], 
					["Ø", "&Oslash;"], 
					["ø", "&oslash;"], 
					["Ò", "&Ograve;"], 
					["ò", "&ograve;"], 
					["Ö", "&Ouml;"], 
					["ö", "&ouml;"], 
					["Õ", "&Otilde;"], 
					["õ", "&otilde;"], 
					["Ú", "&Uacute;"], 
					["ú", "&uacute;"], 
					["Û", "&Ucirc;"], 
					["û", "&ucirc;"], 
					["Ù", "&Ugrave;"], 
					["ù", "&ugrave;"], 
					["Ü", "&Uuml;"], 
					["ü", "&uuml;"], 
					["Ý", "&Yacute;"], 
					["ý", "&yacute;"], 
					["ÿ", "&yuml;"], 
					["Ÿ", "&Yuml;"], 
					["Ñ", "&Ntilde;"], 
					["ñ", "&ntilde;"], 
					["¡", "&iexcl;"], 
					["¿", "&iquest;"], 
					["<", "&lt;"], 
					[">", "&gt;"], 
					['"', "&quot;"], 
					["©", "&copy;"], 
					["¤", "&curren;"], 
					["°", "&deg;"], 
					["÷", "&divide;"], 
					["½", "&frac12;"], 
					["¼", "&frac14;"], 
					["¾", "&frac34;"], 
					["«", "&laquo;"], 
					["»", "&raquo;"], 
					["µ", "&micro;"], 
					["·", "&middot;"], 
					["¬", "&not;"], 
					["ª", "&ordf;"], 
					["º", "&ordm;"], 
					["¶", "&para;"], 
					["±", "&plusmn;"], 
					["£", "&pound;"], 
					["®", "&reg;"], 
					["§", "&sect;"], 
					["¹", "&sup1;"], 
					["²", "&sup2;"], 
					["³", "&sup3;"], 
					["ß", "&szlig;"], 
					["Þ", "&THORN;"], 
					["þ", "&thorn;"], 
					["×", "&times;"], 
					["¥", "&yen;"], 
					["`", "&lsquo;"], 
					["´", "&rsquo;"], 
					["‘", "&lsquo;"], 
					["’", "&rsquo;"], 
					["“", "&ldquo;"], 
					["”", "&rdquo;"], 
					["‹", "&lsaquo;"], 
					["›", "&rsaquo;"], 
					["‰", "&permil;"], 
					["…", "&hellip;"], 
					["'", "&prime;"], 
					["™", "&trade;"], 
					["•", "&bull;"]
	];
	for (i = 0; i < Cars.length; i++) AfegirCaracter (Cars[i][0], Cars[i][1]);
}

String.prototype.ToHTML = function () { 
	if (Caracters.length == 0) CarregarCaracters();
	str = this.valueOf();
	for (car in Caracters) { 
			str = str.replace(Caracters[car].Id, Caracters[car].HTML); 
	} 
	return str;
}

function ObjNota (Catala, Castella, Angles) {
	this.Catala = Catala;
	this.Castella = Castella;
	this.Angles = Angles;
}

ObjNota.prototype = {
	Text:function(Llengua) {
		Llengua = Llengua.toUpperCase();
		text = "";
		switch (Llengua) {
			case "ES":
				text = this.Castella;
				break;
			case "EN":
				text = this.Angles;
				break;
			default:
				text = this.Catala;
		}
		return text;
	}
}

function ObjPais (Catala, Castella, Angles) {
	this.Catala = Catala;
	this.Castella = Castella;
	this.Angles = Angles;
	this.TeNotaLectorat = false;
	this.NotaLectorat = null;
	this.TeNotaCasal = false;
	this.NotaCasal = null;
}

ObjPais.prototype = {
	Nom:function (Llengua) {
		Llengua = Llengua.toUpperCase();
		nom = "";
		switch (Llengua) {
			case "ES":
				nom = this.Castella;
				break;
			case "EN":
				nom = this.Angles;
				break;
			default:
				nom = this.Catala;
		}
		return nom;
	}, 
	AfegirNotaLectorat:function (Catala, Castella, Angles) {
		this.NotaLectorat = new ObjNota(Catala, Castella, Angles);
		this.TeNotaLectorat = true;
	},
	AfegirNotaCasal:function (Catala, Castella, Angles) {
		this.NotaCasal = new ObjNota(Catala, Castella, Angles);
		this.TeNotaCasal = true;
	},
	AfegirLlistaLectorats:function () {
		Lectorats.AfegirPais (this);
	},
	AfegirLlistaCasals:function () {
		Casals.AfegirPais (this);
	}
}

function ObjLectorats () {
	this.Llista = new Array();
	this.NumNotes = -1;
}

ObjLectorats.prototype = {
	AfegirPais:function (Pais) {
		this.Llista[this.Llista.length] = Pais;
	},
	NumeroDeNotes:function () {
		if (this.NumNotes == -1) this.ComptarNumeroDeNotes();
		return this.NumNotes;
	},
	ComptarNumeroDeNotes:function () {
		this.NumNotes = 0;
		for (i = 0; i < this.Llista.length; i++) {
			if (this.Llista[i].TeNotaLectorat) this.NumNotes++;
		}
	},
	EscriureLlista:function (Llengua) {
		Llengua = Llengua.toUpperCase();
		n = 0;
		if (this.NumeroDeNotes() == 1) n = "*";
		document.writeln('<p class="text_base">' + Paisos[Llengua] + ':</p>');
		document.writeln('<ul>');
		NomsINotes = new Array();
		NomsINotes.ReordenarPelNom = function(Inici, Final) {
			// Algoritmo de ordenación de matrices. "Método rápido" de C. A. R. Hoare.
			// Extraido del libro "Algoritmos + estructuras de datos = programas" de Niklaus Wirth.
			// Funciona de manera recursiva.
			// Retocado por Franchis
			var ValX = new Array();
			var ValW = new Array();
			if (!Inici) Inici = 0;
			if (!Final) Final = (this.length - 1);
			var Valor = (Inici == Final);
			if ((Valor) || (Inici > Final)) {
				Valor = false;
			} else {
				var i = Inici;
				var j = Final;
				if (j == (i + 1)) {
					if (this[i][0] > this[j][0]) {
						ValW = this[i];
						this[i] = this[j];
						this[j] = ValW;
					}
					Valor = true;
				} else {
					ValX = this[Math.floor((Inici + Final) / 2)];
					do {
						while (this[i][0] < ValX[0]) {i += 1;}
						while (ValX[0] < this[j][0]) {j -= 1;}
						if (i <= j) {
							if (i < j) {
								ValW = this[i];
								this[i] = this[j];
								this[j] = ValW;
							}
							i += 1;
							j -= 1;
						}
					} while (i <= j);
					Valor = true;
					if (Inici < j) Valor = this.ReordenarPelNom(Inici, j);
					if ((Valor) && (i < Final)) Valor = this.ReordenarPelNom(i, Final);
				}
			}
			return Valor;
		}
		for (var i = 0; i < this.Llista.length; i++) {
			NomsINotes[i] = new Array();
			NomsINotes[i][0] = this.Llista[i].Nom(Llengua);
			NomsINotes[i][1] = NomsINotes[i][0].ToHTML();
			NomsINotes[i][0] = CademaSemseAccents(NomsINotes[i][0].toLowerCase());
			if (this.Llista[i].TeNotaLectorat) NomsINotes[i][2] = this.Llista[i].NotaLectorat.Text(Llengua);
			else NomsINotes[i][2] = "";
		}
		NomsINotes.ReordenarPelNom();
		cad_notes = "";
		for (var i = 0; i < NomsINotes.length; i++) {
			cad = '<li class="text_base_alt"><a href="http://www.llull.cat/_cat/_cultura/cultura_catalana_mapa.shtml" class="text_base_enll">';
			cad += NomsINotes[i][1] + '</a>';
			if (NomsINotes[i][2] != '') {
				cad += "&nbsp;";
				cad_notes += "<br>";
				if (this.NumeroDeNotes() == 1) {
					cad += '<sup>' + "*" + '</sup>';
					cad_notes += '<sup>' + "*" + '</sup>';
				} else {
					n++;
					cad += '<sup>' + n + '</sup>';
					cad_notes += '<sup>' + n + '</sup>';
				}
				cad_notes += "&nbsp;" + NomsINotes[i][2];
			}
			cad += '</li>';
			document.writeln(cad);
		}
		document.writeln('</ul>');
		document.writeln('<p class="text_base nota">&nbsp;' + cad_notes + '</p>')
	}
}

function ObjCasals () {
	this.Llista = new Array();
	this.NumNotes = -1;
}

ObjCasals.prototype = {
	AfegirPais:function (Pais) {
		this.Llista[this.Llista.length] = Pais;
	},
	NumeroDeNotes:function () {
		if (this.NumNotes == -1) this.ComptarNumeroDeNotes();
		return this.NumNotes;
	},
	ComptarNumeroDeNotes:function () {
		this.NumNotes = 0;
		for (i = 0; i < this.Llista.length; i++) {
			if (this.Llista[i].TeNotaCasal) this.NumNotes++;
		}
	},
	EscriureLlista:function (Llengua) {
		Llengua = Llengua.toUpperCase();
		n = 0;
		if (this.NumeroDeNotes() == 1) n = "*";
		document.writeln('<p class="text_base">' + Paisos[Llengua] + ':</p>');
		document.writeln('<ul>');
		NomsINotes = new Array();
		NomsINotes.ReordenarPelNom = function(Inici, Final) {
			// Algoritmo de ordenación de matrices. "Método rápido" de C. A. R. Hoare.
			// Extraido del libro "Algoritmos + estructuras de datos = programas" de Niklaus Wirth.
			// Funciona de manera recursiva.
			// Retocado por Franchis
			var ValX = new Array();
			var ValW = new Array();
			if (!Inici) Inici = 0;
			if (!Final) Final = (this.length - 1);
			var Valor = (Inici == Final);
			if ((Valor) || (Inici > Final)) {
				Valor = false;
			} else {
				var i = Inici;
				var j = Final;
				if (j == (i + 1)) {
					if (this[i][0] > this[j][0]) {
						ValW = this[i];
						this[i] = this[j];
						this[j] = ValW;
					}
					Valor = true;
				} else {
					ValX = this[Math.floor((Inici + Final) / 2)];
					do {
						while (this[i][0] < ValX[0]) {i += 1;}
						while (ValX[0] < this[j][0]) {j -= 1;}
						if (i <= j) {
							if (i < j) {
								ValW = this[i];
								this[i] = this[j];
								this[j] = ValW;
							}
							i += 1;
							j -= 1;
						}
					} while (i <= j);
					Valor = true;
					if (Inici < j) Valor = this.ReordenarPelNom(Inici, j);
					if ((Valor) && (i < Final)) Valor = this.ReordenarPelNom(i, Final);
				}
			}
			return Valor;
		}
		for (var i = 0; i < this.Llista.length; i++) {
			NomsINotes[i] = new Array();
			NomsINotes[i][0] = this.Llista[i].Nom(Llengua);
			NomsINotes[i][1] = NomsINotes[i][0].ToHTML();
			NomsINotes[i][0] = CademaSemseAccents(NomsINotes[i][0].toLowerCase());
			if (this.Llista[i].TeNotaCasal) NomsINotes[i][2] = this.Llista[i].NotaCasal.Text(Llengua);
			else NomsINotes[i][2] = "";
		}
		NomsINotes.ReordenarPelNom();
		cad_notes = "";
		for (var i = 0; i < NomsINotes.length; i++) {
			cad = '<li class="text_base_alt"><a href="http://www10.gencat.net/pres_casals/AppJava/casal_paisos.jsp" class="text_base_enll">';
			cad += NomsINotes[i][1] + '</a>';
			if (NomsINotes[i][2] != '') {
				cad += "&nbsp;";
				cad_notes += "<br>";
				if (this.NumeroDeNotes() == 1) {
					cad += '<sup>' + "*" + '</sup>';
					cad_notes += '<sup>' + "*" + '</sup>';
				} else {
					n++;
					cad += '<sup>' + n + '</sup>';
					cad_notes += '<sup>' + n + '</sup>';
				}
				cad_notes += "&nbsp;" + NomsINotes[i][2];
			}
			cad += '</li>';
			document.writeln(cad);
		}
		document.writeln('</ul>');
		document.writeln('<p class="text_base nota">&nbsp;' + cad_notes + '</p>')
	}
}

var Paisos = new Array();
Paisos["CA"] = "Països";
Paisos["ES"] = "Paises";
Paisos["EN"] = "Countries";
var Lectorats = new ObjLectorats;
var Casals = new ObjCasals;

var Alemanya = new ObjPais ("Alemanya", "Alemania", "Germany");
var Andorra = new ObjPais ("Andorra", "Andorra", "Andorra");
var Australia = new ObjPais ("Austràlia", "Australia", "Australia");
var Austria = new ObjPais ("Àustria", "Austria", "Austria");
var Belgica = new ObjPais ("Bèlgica", "Bélgica", "Belgium");
var Brasil = new ObjPais ("Brasil", "Brasil", "Brasil");
var Camerun = new ObjPais ("Camerun", "Camerún", "Cameroon");
var Canada = new ObjPais ("Canadà", "Canadá", "Canada");
var Colombia = new ObjPais ("Colòmbia", "Colombia", "Columbia");
var Costa_Rica = new ObjPais ("Costa Rica", "Costa Rica", "Costa Rica");
var Croacia = new ObjPais ("Croàcia", "Croacia", "Croatia");
var Cuba = new ObjPais ("Cuba", "Cuba", "Cuba");
var Dinamarca = new ObjPais ("Dinamarca", "Dinamarca", "Denmark");
var El_Salvador = new ObjPais ("El Salvador", "El Salvador", "El Salvador");
var Equador = new ObjPais ("Equador", "Ecuador", "Ecuador");
var Eslovenia = new ObjPais ("Eslovènia", "Eslovenia", "Slovenia");
var Espanya = new ObjPais ("Espanya", "España", "Spain");
var Estats_Units = new ObjPais ("Estats Units", "Estados Unidos", "United States");
var Nota = new Array();
Nota["CA"] = 'Si voleu m&eacute;s informaci&oacute;, visiteu el web de la <a href="http://carla.acad.umn.edu/lctl/access.html" class="text_base_enll">Universitat de Minnesota</a>';
Nota["ES"] = 'Para m&aacute;s informaci&oacute;n, visite la web de la <a href="http://carla.acad.umn.edu/lctl/access.html" class="text_base_enll">Universidad de Minnesota</a>';
Nota["EN"] = 'For further information, please visit the University of Minnesota <a href="http://carla.acad.umn.edu/lctl/access.html" target="_blank" class="text_base_enll">website</a>';
Estats_Units.AfegirNotaLectorat(Nota["CA"], Nota["ES"], Nota["EN"]);
var Estonia = new ObjPais ("Estònia", "Estonia", "Estonia");
var Finlandia = new ObjPais ("Finlàndia", "Finlandia", "Finland");
var França = new ObjPais ("França", "Francia", "France");
var Gran_Bretanya = new ObjPais ("Gran Bretanya", "Gran Bretaña", "United Kingdom");
var Guatemala = new ObjPais ("Guatemala", "Guatemala", "Guatemala");
var Guinea_Equatorial = new ObjPais ("Guinea Equatorial", "Guinea Ecuatorial", "Equatorial Guinea");
var Hondures = new ObjPais ("Hondures", "Honduras", "Honduras");
var Hongria = new ObjPais ("Hongria", "Hungría", "Hungary");
var India = new ObjPais ("Índia", "India", "India");
var Irlanda = new ObjPais ("Irlanda", "Irlanda", "Ireland");
var Israel = new ObjPais ("Israel", "Israel", "Israel");
var Italia = new ObjPais ("Itàlia", "Italia", "Italy");
var Japo = new ObjPais ("Japó", "Japón", "Japan");
var Luxemburg = new ObjPais ("Luxemburg", "Luxemburgo", "Luxembourg");
var Marroc = new ObjPais ("Marroc", "Marruecos", "Morocco");
var Mexic = new ObjPais ("Mèxic", "México", "Mexico");
var Paisos_Baixos = new ObjPais ("Països Baixos", "Países Bajos", "Netherlands");
var Paraguai = new ObjPais ("Paraguai", "Paraguay", "Paraguay");
var Peru = new ObjPais ("Perú", "Perú", "Peru");
var Polonia = new ObjPais ("Polònia", "Polonia", "Poland");
var Portugal = new ObjPais ("Portugal", "Portugal", "Portugal");
var Puerto_Rico = new ObjPais ("Puerto Rico", "Puerto Rico", "Puerto Rico");
var Republica_Argentina = new ObjPais ("República Argentina", "República Argentina", "Argentina");
var Republica_de_l_Uruguai = new ObjPais ("República de l'Uruguai", "República del Uruguay", "Uruguay");
var Republica_Dominicana = new ObjPais ("República Dominicana", "República Dominicana", "Dominican Republic");
var Republica_Txeca = new ObjPais ("República Txeca", "República Checa", "Czech Republic");
var Romania = new ObjPais ("Romania", "Rumanía", "Romania");
var Russia = new ObjPais ("Rússia", "Rusia", "Russia");
var Serbia = new ObjPais ("Sèrbia", "Serbia", "Serbia");
var Suecia = new ObjPais ("Suècia", "Suecia", "Sweden");
var Suissa = new ObjPais ("Suïssa", "Suiza", "Switzerland");
var Veneçuela = new ObjPais ("Veneçuela", "Venezuela", "Venezuela");
var Xile = new ObjPais ("Xile", "Chile", "Chile");
var Xina = new ObjPais ("Xina", "China", "Republic of China");

Lectorats.AfegirPais(Alemanya);
Lectorats.AfegirPais(Australia);
Lectorats.AfegirPais(Austria);
Lectorats.AfegirPais(Belgica);
Lectorats.AfegirPais(Camerun);
Lectorats.AfegirPais(Canada);
Lectorats.AfegirPais(Croacia);
Lectorats.AfegirPais(Cuba);
Lectorats.AfegirPais(Eslovenia);
Lectorats.AfegirPais(Espanya);
Lectorats.AfegirPais(Estats_Units);
Lectorats.AfegirPais(Estonia);
Lectorats.AfegirPais(Finlandia);
Lectorats.AfegirPais(França);
Lectorats.AfegirPais(Gran_Bretanya);
Lectorats.AfegirPais(Hongria);
Lectorats.AfegirPais(India);
Lectorats.AfegirPais(Irlanda);
Lectorats.AfegirPais(Israel);
Lectorats.AfegirPais(Italia);
Lectorats.AfegirPais(Japo);
Lectorats.AfegirPais(Marroc);
Lectorats.AfegirPais(Mexic);
Lectorats.AfegirPais(Paisos_Baixos);
Lectorats.AfegirPais(Polonia);
Lectorats.AfegirPais(Portugal);
Lectorats.AfegirPais(Republica_Argentina);
Lectorats.AfegirPais(Republica_de_l_Uruguai);
Lectorats.AfegirPais(Republica_Txeca);
Lectorats.AfegirPais(Romania);
Lectorats.AfegirPais(Russia);
Lectorats.AfegirPais(Serbia);
Lectorats.AfegirPais(Suissa);
Lectorats.AfegirPais(Xile);

Casals.AfegirPais(Alemanya);
Casals.AfegirPais(Andorra);
Casals.AfegirPais(Australia);
Casals.AfegirPais(Austria);
Casals.AfegirPais(Belgica);
Casals.AfegirPais(Brasil);
Casals.AfegirPais(Canada);
Casals.AfegirPais(Colombia);
Casals.AfegirPais(Costa_Rica);
Casals.AfegirPais(Cuba);
Casals.AfegirPais(Dinamarca);
Casals.AfegirPais(El_Salvador);
Casals.AfegirPais(Equador);
Casals.AfegirPais(Espanya);
Casals.AfegirPais(Estats_Units);
Casals.AfegirPais(França);
Casals.AfegirPais(Gran_Bretanya);
Casals.AfegirPais(Guatemala);
Casals.AfegirPais(Guinea_Equatorial);
Casals.AfegirPais(Hondures);
Casals.AfegirPais(Irlanda);
Casals.AfegirPais(Italia);
Casals.AfegirPais(Japo);
Casals.AfegirPais(Luxemburg);
Casals.AfegirPais(Marroc);
Casals.AfegirPais(Mexic);
Casals.AfegirPais(Paisos_Baixos);
Casals.AfegirPais(Paraguai);
Casals.AfegirPais(Peru);
Casals.AfegirPais(Puerto_Rico);
Casals.AfegirPais(Republica_Argentina);
Casals.AfegirPais(Republica_de_l_Uruguai);
Casals.AfegirPais(Republica_Dominicana);
Casals.AfegirPais(Suecia);
Casals.AfegirPais(Suissa);
Casals.AfegirPais(Veneçuela);
Casals.AfegirPais(Xile);
Casals.AfegirPais(Xina);

