
function efektler()
{
	// Verilen etiket için bir veya birden fazla efekt yaratır. istenildiği zaman hepsini durdurur.
	// Eğer bir olaya sıralı eklemek istiyorsan link:chain ver.
	// Her bir sıra paralel çalışır. Sıra içinde seri çalışılır. 
	// is = id, hedef, olay, renkİlk, renkSon, sure
	// id olayın olacağı etiket, hedef canlandırılacak etiket
	// degisim  : özelliği ne kadar değiştireceğimiz. Örneğin top:50 için 50 değişecek. İLK DEĞER ÖNEMSİZ.
	// sınır	: en fazla bu değerler arasında olacak. top için 0, 100 dersen -1 durumunda 0 olur


	this.Degis = function(is)
	{
		//------ Verilen etiketin arka plan rengini istenen olayda değiştirir
		if(is.olay) $(is.id).addEvent(is.olay, this.Ekle.pass(is));
		else		this.Ekle(is);// olay felan yok hemen başlat
	}

	function Kontrol()
	{
		var is = arguments[0];
		var id = is.hedef;
		var etiket = $(id);

		alert("KONTROL");

		if(is.kontrol) {
			for(var key in is.kontrol) {
				var sinir = is.kontrol[key];
				var deger = etiket.getStyle(key).toInt();

				if(deger < sinir[0]) {
					etiket.setStyle(key, sinir[0]);
					alert(sinir[0]);
				}
				if(deger > sinir[1]) {
					etiket.setStyle(key, sinir[1]);
					alert(sinir[1]);
				}
				
			}
		}
	}

	function Degistir(etiket, ozellikler, degisimler)
	{
		//------ ozellikler deki herbir stil değişkeni için etiketteki ilk değeri bulur ve buna değişimi ekler
		// ÖR: etiket.style.top=10 ve değişimler.top = 50 için ozellikler.top=60 olur
		// DİKKAT: bunun amacı o anki değerden başlayan bir canlandırma yapmak
		// özellikleri animasyona nesnesine verirsen ilk değerden yeni değere gider
		for(var key in degisimler) {
			var ilkDeger = etiket.getStyle(key).toInt();
			ozellikler[key] = ilkDeger + degisimler[key];
		}
		//alert(ozellikler);
	}

	this.Ekle = function()
	{
		//------ Verilen iş için hedefe efekt ekler ve başlatır
		var is = arguments[0];

		//NesneYaz(is);
		
		//---- Tüm görevler için efekt yarat
		// DİKKAT: her görevde istenen elementler istenilen şekilde değiştirilir. kısaca bir olay olduğunda istenilen tüm elementlere 
		for(var i=0; i<is.gorev.length; i++) {
			var gorev = is.gorev[i];

			//--- varsa eğer işlev çağır
			if(gorev.islev)	gorev.islev(is);
			if(!gorev.hedef) {
				gorev.hedef = Array(is.id);// hedef yoksa kendisi hedef
				//NesneYaz(gorev.hedef);
			}

			for(var j=0; j<gorev.hedef.length; j++) {

				//---- Tüm hedef etiketleri değiştir, efekt ekle
				var id = gorev.hedef[j];
				var hedefEtiket = $(id);

				if(gorev.adres) {
					//alert(gorev.adres);
					GonderEtiket(gorev.adres, null, hedefEtiket);
					continue;
				}

				if(gorev.hemen) {
					for(var isim in gorev.hemen) {
						var deger = gorev.hemen[isim];
						hedefEtiket.setStyle(isim, deger);
					}
				}
				
				if(!gorev.start) gorev.start = Object();
				if(gorev.degisim) {
					Degistir(hedefEtiket, gorev.start, gorev.degisim);
					//NesneYaz(is.start);
				}
				
				//------ Efekt Nesnesi yoksa yarat
				// DİKKAT: Efekt nesnesini efektin efektin uygulandığı nesneye ekliyoruz. böylece başka birisi bu etiketi durdurmak isterse rahatça ulaşacak
				if(!hedefEtiket.efekt) {
					//complete: Kontrol.pass(is), chainComplete : Kontrol.pass(is),
					if(!gorev.link) gorev.link = "cancel";
					hedefEtiket.efekt =  new Fx.Morph(id, {duration: gorev.sure, complete: Kontrol, chainComplete : Kontrol.pass(is), link:gorev.link, transition: Fx.Transitions.Sine.easeOut});// DİKKAT: yaratırken chain deme çalışmıyor sanırım.
					hedefEtiket.efekt.Kontrol = Kontrol;
				}

				var efekt = hedefEtiket.efekt;
				//------ İsteğer göre seri veya paraler veya sadece bu efekt olsun
				//if(is.link == "chain")	efekt.chain(function(){this.start(is.start)}); // bunu sıraya ekle. DİKKAT: boş efekte chain yaparsan çalışmıyor
				//else						efekt.start(is.start);// sıradaki diğerlerini durdur bunu ekle
				efekt.start(gorev.start);// sıradaki diğerlerini durdur bunu ekle
			}
		}
	}
}
