var metin = "";

function metniDegistir(eski, yeni)
{
	metin = metin.replace(new RegExp(eski, "gm") , yeni);
}

function metniDonustur()
{
	// Orijinal metin değişkene atanıyor
	metin = document.getElementById("orijinalMetinTextArea").value;
	
	// Metnin sonuna turkcekarakter.com reklamı ekleniyor
	siteReklamiEkle();

	// &#305;, &#286;, &#199; gibi bozuk görünen Türkçe harflerin düzeltilmesi
	if (document.getElementById("bozukHarflerTip1ChkBox").checked) tip1BozukHarfleriDuzelt();
	
	// Ý, ý, Þ, þ, ð gibi bozuk görünen Türkçe harflerin düzeltilmesi
	if (document.getElementById("bozukHarflerTip2ChkBox").checked) tip2BozukHarfleriDuzelt();
	
	// ÅŸ, Ä±, ÄŸ, Ã¼, Ã¶, Ã§ gibi bozuk görünen Türkçe harflerin düzeltilmesi
	if (document.getElementById("bozukHarflerTip3ChkBox").checked) tip3BozukHarfleriDuzelt();
	
	// Büyüktür işaretlerinin silinmesi
	if (document.getElementById("buyukturSilChkBox").checked) buyukturIsaretleriniSil();
	
	// Belirli sayıdaki karakterden uzun satırların bölünmesi
	if (document.getElementById("uzunSatirlariBolChkBox").checked) uzunSatirlariBol();
	
	// Satır başlarındaki ve satır sonlarındaki boşluk karakterlerinin silinmesi
	if (document.getElementById("bosluklariSilChkBox").checked) bastakiSondakiBosluklariSil();
		
	// Büyük/küçük harf değiştirme
	if (document.getElementById("buyukKucukHarfChkBox").checked) buyukKucukHarfDegistir();
	
	// Türkçe harflerin dönüştürülmesi
	if (document.getElementById("turkceHarflerChkBox").checked) turkceHarfleriDonustur();
	
	document.getElementById("duzenlenmisMetinTextArea").value = metin;
}

function tip1BozukHarfleriDuzelt()
{
	metniDegistir('&#350;', 'Ş'); metniDegistir('&#351;', 'ş');
	metniDegistir('&#286;', 'Ğ'); metniDegistir('&#287;', 'ğ');
	metniDegistir('&#304;', 'İ'); metniDegistir('&#305;', 'ı');
	metniDegistir('&#220;', 'Ü'); metniDegistir('&#252;', 'ü');
	metniDegistir('&#199;', 'Ç'); metniDegistir('&#231;', 'ç');
	metniDegistir('&#214;', 'Ö'); metniDegistir('&#246;', 'ö');
}

function tip2BozukHarfleriDuzelt()
{
	/* Windows-1254 -> Windows-1252 */
	
	metniDegistir('Þ', 'Ş'); metniDegistir('þ', 'ş');
	metniDegistir('Ð', 'Ğ'); metniDegistir('ð', 'ğ');
	metniDegistir('Ý', 'İ'); metniDegistir('ý', 'ı');
	
	/* Windows-1254 -> ISO 8859-2 */
	metniDegistir('Đ', 'Ğ'); metniDegistir('đ', 'ğ');
	metniDegistir('Ű', 'Û'); metniDegistir('ű', 'û');
}

function tip3BozukHarfleriDuzelt()
{
	/* UTF-8 -> ASCII */
	
	// 1 kere bozulan karakterler düzeltiliyor
	metniDegistir('Å', 'Ş'); metniDegistir('ÅŸ', 'ş');
	metniDegistir('Ä', 'Ğ'); metniDegistir('ÄŸ', 'ğ');
	metniDegistir('Ä°', 'İ'); metniDegistir('Ä±', 'ı');
	metniDegistir('Ãœ', 'Ü'); metniDegistir('Ã¼', 'ü');
	metniDegistir('Ã‡', 'Ç'); metniDegistir('Ã§', 'ç');
	metniDegistir('Ã–', 'Ö'); metniDegistir('Ã¶', 'ö');
	metniDegistir('Ã‚', 'Â'); metniDegistir('Ã¢', 'â');
	metniDegistir('Ã›', 'Û'); metniDegistir('Ã»', 'û');
	metniDegistir('Ã', 'Î'); metniDegistir('Ã®', 'î');
	
	// 2 kere bozulan karakterler düzeltiliyor
	metniDegistir('Ã…Â', 'Ş'); metniDegistir('Ã…Å¸', 'ş');
	metniDegistir('Ã„Â', 'Ğ'); metniDegistir('Ã„Å¸', 'ğ');
	metniDegistir('Ã„Â°', 'İ'); metniDegistir('Ã„Â±', 'ı');
	metniDegistir('ÃƒÅ“', 'Ü'); metniDegistir('ÃƒÂ¼', 'ü');
	metniDegistir('Ãƒâ€¡', 'Ç'); metniDegistir('ÃƒÂ§', 'ç');
	metniDegistir('Ãƒâ€š', 'Â'); metniDegistir('ÃƒÂ¢', 'â');
	metniDegistir('Ãƒâ€º', 'Û'); metniDegistir('ÃƒÂ»', 'û');
	metniDegistir('ÃƒÂ', 'Î'); metniDegistir('ÃƒÂ®', 'î');
}

function buyukturIsaretleriniSil()
{
	// Metindeki bütün > karakterlerinin silinmesi
	if (document.getElementById("butunBuyukturSilRadio").checked) butunBuyukturSil();

	// Sadece satır başındaki > karakterlerinin silinmesi
	else if (document.getElementById("satirBaslariBuyukturSilRadio").checked) satirBaslariBuyukturSil();
}

function butunBuyukturSil()
{
	/* Büyüktür işaretleri sağındaki ve solundaki bütün boşlukları da kapsayacak şekilde ele alınıyor */
	/* Yani "> ", " >", " > ", ">     ", "    >  ", vb. hepsi aynı kabul ediliyor                     */
	
	// Satır başında olanlar boşluk karakterine dönüştürülüyor
	satirBaslariBuyukturSil();
	
	// Satır başında olmayanlar boşluk karakterine dönüştürülüyor
	metniDegistir("( *> *)+", " ");
}

function satirBaslariBuyukturSil()
{
	// Satır başında olanlar boşluk karakterine dönüştürülüyor
	metniDegistir("^( *> *)+", "");
}

function uzunSatirlariBol()
{
	var karakterSayisi = document.getElementById("karakterSayisiText").value;

	// Metnin satırları bölünerek diziye alınıyor
	var satirlar = metin.split(lf);
	
	// Her satır ayrı ayrı işleniyor
	for (i = 0; i < satirlar.length; i++)
	{
		var satir = satirlar[i];
		var satirinGeriKalani = satir;
		satir = "";
		
		// Satırın kalan kısmı istenen maksimum karakter sayısından uzun olduğu sürece tekrarla
		while (satirinGeriKalani.length > karakterSayisi)
		{
			// Satırın başından istenen karakter kadarlık bir alt katar alınıyor
			altKatar = satirinGeriKalani.substring(0, karakterSayisi);
			satirinGeriKalani = satirinGeriKalani.substring(karakterSayisi);
			
			// Satırın geri kalanının ilk karakteri boşluk değilse (bölünen kelime varsa)
			if (satirinGeriKalani.substring(0, 1) != " ")
			{
				// Alt katardaki en son boşluğun yeri bulunuyor
				sonBoslukIndeks = altKatar.lastIndexOf(" ");
				
				// Alt katarda boşluk yoksa istenen satır uzunluğundan daha uzun bir kelime bölünmüştür
				// Alt katarda boşluk varsa
				if (sonBoslukIndeks > -1)
				{
					// Alt katarın en son boşluktan sonrası (bir sonraki kelimenin baş tarafı) satırın geri kalanının başına ekleniyor
					var kelimeninBasi = altKatar.substring(sonBoslukIndeks + 1);
					satirinGeriKalani = kelimeninBasi + satirinGeriKalani;
					
					// Alt katardan en son boşluk ve sonrası siliniyor
					altKatar = altKatar.substring(0, sonBoslukIndeks);
				}
			}
			// Kelimenin tam sonundan bölünmüşse
			else
			{
				// Satırın geri kalanının başındaki boşluk siliniyor
				satirinGeriKalani = satirinGeriKalani.substring(1);
			}
			
			// Satırın düzenlenmiş haline alt katar ve \n karakteri ekleniyor
			satir += altKatar + "\n";
		}
		
		// Satırın düzenlenmiş haline satırın geri kalanı metin ekleniyor
		satir += satirinGeriKalani;
		
		// Satırın düzenlenmiş hali diziye geri yazılıyor
		satirlar[i] = satir;
	}
	
	// Dizi birleştiriliyor
	metin = satirlar.join(lf);
}

function bastakiSondakiBosluklariSil()
{
	// Satır başındaki ve satır sonundaki boşlukları sil
	metniDegistir("^ +| +$", "");
}

function buyukKucukHarfDegistir()
{
	// Tümü küçük harf
	if (eleman("kucukHarfRadio").checked) metin = kucukHarfeCevir(metin);
	
	// Tümü büyük harf
	if (eleman("buyukHarfRadio").checked) metin = buyukHarfeCevir(metin);
	
	// Yalnızca ilk harfler büyük
	if (eleman("ilkHarflerRadio").checked) metin = ilkHarfleriBuyukYap(metin);
}

function turkceHarfleriDonustur()
{
	// İstenmişse Ş/ş harfleri $ karakterine dönüştürülüyor
	if (eleman("sChkBox").checked) metniDegistir("Ş|ş", "$");
	
	// İstenmişse ı harfi I harfine dönüştürülüyor
	if (eleman("iChkBox").checked) metniDegistir("ı", "I");
	
	// Ü, ü, Ö, ö, Ç, ç harflerinin dönüştürülecekse
	if (!eleman("uocChkBox").checked)
	{
		metniDegistir('Ü', 'U'); metniDegistir('ü', 'u');
		metniDegistir('Ç', 'C'); metniDegistir('ç', 'c');
		metniDegistir('Ö', 'O'); metniDegistir('ö', 'o');
	}

	// Diğer Türkçe harfler dönüştürülüyor
	metniDegistir('Ş', 'S'); metniDegistir('ş', 's');
	metniDegistir('Ğ', 'G'); metniDegistir('ğ', 'g');
	metniDegistir('İ', 'I'); metniDegistir('ı', 'i');
	
	// Ayıp kelimenin düzeltilmesi
	if (eleman("ayipChkBox").checked) metniDegistir("sik", "sIk");
}

function siteReklamiEkle()
{
	metin += lf + lf + "www.TurkceKarakter.com";
	metin += lf + "Bozuk görünen Türkçe harfleri düzelten site.";
}
