/**** SABİTLER ****/

var LF = String.fromCharCode(10);
var CRLF = String.fromCharCode(13) + LF;

/**** FONKSİYONLAR ****/

// document.getElementById için kısaltma
function gebi(id)
{
	return document.getElementById(id);
}

// Gönderilen metnin tamamının rakamlardan oluşup oluşmadığını bulan fonksiyon
function hepsiRakamDegil(metin)
{
	if (metin.search(new RegExp("[^0-9]", "gim")) == -1) return false;
	
	return true;
}

// Gönderilen metnin pozitif bir tamsayı olup olmadığını kontrol eden fonksiyon (boş metin sayı değildir)
function pozitifTamsayiDegil(metin)
{
	// Boş metin gönderilmişse
	if (!metin) return true;
	
	// Metinde rakam harici karakterler varsa
	return hepsiRakamDegil(metin);
}

// Gönderilen metinde bul-değiştir işlemi yapan fonksiyon
function bulDegistir(metin, eski, yeni, mod)
{
	// Mod gönderilmemişse
	if (!mod) mod = "gm";
	
	return metin.replace(new RegExp(eski, mod), yeni);
}

// Gönderilen kontrole gönderilen satırı ekleyen fonksiyon
function satirEkle(kontrol, eklenecekSatir, aradakiBosSatirlarSilinmesin)
{
	// Kontrolün üzerindeki metin düzenleniyor
	bosSatirlariSil(kontrol, aradakiBosSatirlarSilinmesin);

	// Değişkenler hazırlanıyor
	var mevcutIcerik = kontrol.value;
	
	// Eklenecek satır boşsa
	if (eklenecekSatir == "") return;

	// Eklenecek satır önceden zaten eklenmişse !!! ali varsa galip'i eklemez
	if (mevcutIcerik.indexOf(eklenecekSatir) != -1) return

	// Gönderilen satır ekleniyor
	if (mevcutIcerik != "") mevcutIcerik += "\n";
	mevcutIcerik += eklenecekSatir;
	
	kontrol.value = mevcutIcerik;
}

// Gönderilen metindeki boş satırları silen fonksiyon
// (Satır başlarındaki ve satır sonlarındaki beyaz boşlukları da siler)
function bosSatirlariSil(kontrol, aradakiBosSatirlarSilinmesin)
{
	metin = kontrol.value;
	
	/* IE alt satıra crlf ile, Firefox lf ile geçiyor */
	
	// crlf karakterleri lf karakterine dönüştürülüyor
	metin = bulDegistir(metin, CRLF, LF);

	// Satır başlarındaki ve satır sonlarındaki beyaz boşluklar siliniyor
	metin = bulDegistir(metin, "(^[ \t]+|[ \t]+$)", "");

	// Satır başlarındaki ve satır sonlarındaki boş satırlar siliniyor
	var mod = "gm";
	if (aradakiBosSatirlarSilinmesin) mod = "g";
	metin = bulDegistir(metin, "^\n+", "", mod);
	metin = bulDegistir(metin, "\n+$", "", mod);
	
	/* Değeri döndürmeden önce IE için lf'leri crlf'ye çevirmeye gerek yok çünkü kendisi zaten çeviriyor */
	
	kontrol.value = metin;
}

// Gönderilen kontroldeki metnin başından (varsa) "http://" kısmını silen fonksiyon
function httpSil(adres)
{
	return bulDegistir(adres, "^http://", "");
}

// Gönderilen kontroldeki metnin başındaki ve sonundaki beyaz boşlukları silen fonksion
function boslukKirp(kontrol)
{
	kontrol.value = bulDegistir(kontrol.value, "(^[ \t]+|[ \t]+$)", "");
}

// Sayfa üzerindeki bütün butonları kullanılabilir/kullanılamaz yapan fonksiyon
function tumButonlarDisabledAyarla(disabledDurumu)
{
	// Sayfadaki bütün inputlar diziye alınıyor
	var inputlar = document.getElementsByTagName("input");

	// Her bir input için tekrarla
	for (var i = 0; i < inputlar.length; i++)
	{
		// Sıradaki input buton veya submitse kullanılamaz yapılıyor
		var tip = inputlar[i].getAttribute("type");
		if (tip == "button" || tip == "submit" || tip == "reset")
		{
			inputlar[i].disabled = disabledDurumu;
		}
	}
}

// Sayfa üzerindeki bütün butonları kullanılamaz yapıp formu submit eden fonksiyon
function formuGonder()
{
	// Sayfa üzerindeki bütün butonlar kullanılamaz yapılıyor
	tumButonlarDisabledAyarla(true);
	
	// Form gönderiliyor
	gebi("frm").submit();
}

// Gönderilen metindeki <br> ve türevlerini LF karakterine dönüştüren fonksiyon
function br2lf(metin)
{
	metin = bulDegistir(metin, CRLF, "");
	metin = bulDegistir(metin, LF, "")
	metin = bulDegistir(metin, "<[Bb][Rr] */*>", LF);
	
	return metin;
}

// Gönderilen metindeki CRLF karakterlerini LF karakterine çeviriyor
function crlf2lf(metin)
{
	return bulDegistir(metin, CRLF, LF);
}

// Gönderilen adresin başına -yoksa- http:// ekleyen fonksiyon
function httpEkle(adres)
{
	// Adresin başına http:// yazılmış ama tamamı küçük harfle yazılmamış olabilir. Yazılmışsa tamamı küçük harfe çevriliyor.
	adres = bulDegistir(adres, "^http://", "http://", "i");
	
	// Adresin başında http:// yoksa
	if (adres.search(new RegExp("^http://", "g")) == -1) {
		adres = "http://" + adres;
	}
	
	return adres;
}

// Gönderilen tarihi (tarih gönderilmemişse bugünün tarihini) kısa formatta veren fonksiyon
function tarihKisaFormat(tarih)
{
	if (!tarih) tarih = new Date();
	
	var gun = String(tarih.getDate());
	var ay = String(tarih.getMonth() + 1);
	var yil = String(tarih.getFullYear());

	gun = (gun.length == 1 ? "0" + gun : gun);
	ay = (ay.length == 1 ? "0" + ay : ay);
	
	return gun + "." + ay + "." + yil;
}

// Bugünün tarihini uzun formatta veren fonksiyon
function tarihUzunFormat(tarih)
{
	if (!tarih) tarih = new Date();
	
	var gunAdlari = new Array("Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi");
	var ayAdlari = new Array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık");
	
	var gun = String(tarih.getDate());
	var ay = ayAdlari[tarih.getMonth()];
	var yil = String(tarih.getFullYear());
	var gunAdi = gunAdlari[tarih.getDay()];

	gun = (gun.length == 1 ? "0" + gun : gun);
	
	return gun + " " + ay + " " + yil + " " + gunAdi;
}

// Gönderilen metnin tarih formatında olup olmadığını kontrol eden fonksiyon
function tarihFormatindaDegil(metin)
{
	// Ayıraç olarak nokta kullanılmamışsa, ayıraç noktaya dönüştürülüyor
	metin = bulDegistir(metin, "[/,* -]", ".");
	
	// Gün, ay, yıl birbirinden ayrılıyor
	var tarihDizi = metin.split(".");
	
	if (tarihDizi.length != 3) return true; // İki nokta yoksa
	
	var gun = tarihDizi[0];
	var ay = tarihDizi[1];
	var yil = tarihDizi[2];
	
	if (pozitifTamsayiDegil(gun)) return true; // Gün pozitif tamsayı değilse
	if (pozitifTamsayiDegil(ay)) return true; // Ay pozitif tamsayı değilse
	if (pozitifTamsayiDegil(yil)) return true; // Yıl pozitif tamsayı değilse
	
	if (gun < 1 || gun > 31) return true; // Gün 1-31 arasında değilse
	if (ay < 1 || ay > 12) return true; // Ay 1-12 arasında değilse
	if (yil < 2000 || yil > 2050) return true; // Yıl 2000-2050 arasında değilse
	
	return false;
}

// Gönderilen metni (geçerli bir tarih ise) Date nesnesine dönüştüren fonksiyon
function str2date(metin, hataMesajiGoster, kontrol)
{
	// Değişkenler hazırlanıyor
	var hataMesaji = "\"" + metin + "\" geçerli bir tarih değil.";
	
	// Girilen metnin tarih formatında değilse
	if (tarihFormatindaDegil(metin))
	{
		// Hata mesajı gösterilecekse
		if (hataMesajiGoster)
		{
			if (kontrol) kontrol.focus;
			alert(hataMesaji);
		}
		
		return null;
	}
	
	// Ayıraç olarak nokta kullanılmamışsa, ayıraç noktaya dönüştürülüyor
	metin = bulDegistir(metin, "[/,* -]", ".");

	// Gün, ay, yıl birbirinden ayrılıyor
	var tarihDizi = metin.split(".");
	
	// Date nesnesi oluşturuluyor
	var tarih = new Date(tarihDizi[2], tarihDizi[1] - 1, tarihDizi[0]);
	
	// Date nesnesinin gün, ay, yıl değerleri girilen değerlerden farklı ise
	// (31.04.2008 gönderilmişse tarih nesnesi bunu otomatik olarak 01.05.2008'e çevirir)
	var gunFarkli = (parseInt(tarihDizi[0], 10) != tarih.getDate());
	var ayFarkli = (parseInt(tarihDizi[1], 10) != tarih.getMonth() + 1);
	var yilFarkli = (parseInt(tarihDizi[2], 10) != tarih.getFullYear());
	
	// Gün, ay veya yıl girilenden farklı ise
	if (gunFarkli || ayFarkli || yilFarkli)
	{
		// Hata mesajı gösterilecekse
		if (hataMesajiGoster)
		{
			if (kontrol) kontrol.focus;
			alert(hataMesaji);
		}
		
		return null;
	}
	
	return tarih;
}

// Gönderilen Select'te seçili olan metni döndüren fonksiyon
function selectSeciliMetin(kontrol)
{
	var seciliMetin = kontrol.options[kontrol.selectedIndex].text;
	if (seciliMetin == "Seçiniz") seciliMetin = "";
	
	return seciliMetin;
}

// Gönderilen select'in option'ları arasında gönderilen değerin olup olmadığını bulan fonksiyon
function selectOptionValueVar(kontrol, deger)
{
	for (i = 0; i < kontrol.options.length; i++)
	{
		if (kontrol.options[i].value == deger) return true;
	}
	
	return false;
}

// Gönderilen select'in tüm option'larını silen fonksiyon
function selectTumOptionlariSil(kontrol)
{
	for (i = kontrol.options.length - 1; i >= 0 ; i--)
	{
		kontrol.remove(i);
	}
}

// Dizi şeklinde gönderilen seçenekleri option olarak gönderilen select nesnesine ekleyen fonksiyon
function selectDiziOptionEkle(kontrol, degerDizisi, secenekDizisi, eskiOptionlarSilinecek)
{
	// Eski option'lar silinecekse
	if (eskiOptionlarSilinecek) selectTumOptionlariSil(kontrol);
	
	// Seçenekler ekleniyor
	for (i = 0; i < degerDizisi.length; i++)
	{
		// Hem değer hem seçenek boş ise atla
		if (!degerDizisi[i] && !secenekDizisi[i]) continue;
		
		eklenecek = new Option(secenekDizisi[i], degerDizisi[i]);
		kontrol.options.add(eklenecek);
	}
}