
	var s_hataAyikla = false;

	function Tip(value)
	{
	    //---- string, number, object, array, null vb döndürür
	    var s = typeof value;
	    if (s === 'object') {
		if (value) {
		    if (typeof value.length === 'number' &&
			    !(value.propertyIsEnumerable('length')) &&
			    typeof value.splice === 'function') {
			s = 'array';
		    }
		} else {
		    s = 'null';
		}
	    }
	    return s;
	}



	function is_array( mixed_var ) {
	    if (!mixed_var) {
	        return false;
	    }
	 
	    if (typeof mixed_var === 'object') {
	          if (mixed_var.propertyIsEnumerable('length') || typeof mixed_var.length !== 'number') {
	              return false;
	          }
	         return true;
	    }
	 
	    return false;
	}

//		function isArray(obj) {
//   if (obj.constructor.toString().indexOf("Array") == -1)
//      return false;
//   else
//      return true;
//}

	function in_array(needle, haystack) {
		var length = haystack.length;
		for(var i = 0; i < length; i++) {
			if(haystack[i] == needle) return true;
		}
		return false;
	}

	function SiteAdresi()
	{
		return g_siteAdresi;
	}

	function Degisenler(onEk, diziSonek, tip, OnayIslevi)
	{
		//önek  = idAna, idAlt veya idG
		//tip	= html veya value
		var degiskenler		= diziSonek;//Array("Ana", "Y", "E", "F", "Ek", "Kar", "Kargo") gibi
		var nesneler		= Nesneler(onEk, degiskenler, tip, OnayIslevi);
		if(s_hataAyikla)	NesneleriYaz(nesneler);
		//NesneleriYaz(nesneler);
		return nesneler;
	}
	
	function Gonder(adres, nesne)
	{
		var gonderilenBilgi = "b=" + encodeURIComponent(JSON.encode(nesne));
		if(s_hataAyikla) alert(gonderilenBilgi);
		
		var myHTMLRequest = new Request(
				{	
					method: 'post',
					url: adres,
					data: gonderilenBilgi,
					onSuccess: function (responseText) {
						//alert(this.response.text);
						if(s_hataAyikla) {
							myJSON = JSON.encode(this.response);
							alert(myJSON);
						}
					}
				}
			)
		myHTMLRequest.send();
	};

	function Gonder2(adres, nesne, islev)
	{
		var gonderilenBilgi = "b=" + encodeURIComponent(JSON.encode(nesne));
		// alert(gonderilenBilgi);

		var myHTMLRequest = new Request(
				{
					method: 'post',
					url: adres,
					data: gonderilenBilgi,
					onSuccess: islev,
                                        evalScripts: true
				}
			)
		myHTMLRequest.send();
	};

	function GonderEtiket(adres, nesne, etiket)
	{
		// İstenilen sayfaya nesne gönderir sonucu verilen etikete koyar
		var gonderilenBilgi = "";
		if(nesne) gonderilenBilgi = "b=" + encodeURIComponent(JSON.encode(nesne));
		if(s_hataAyikla) alert(gonderilenBilgi);

		var myHTMLRequest = new Request.HTML(
				{
					url: adres,
					method: "get",
					encoding: "iso-8859-9",
					data: gonderilenBilgi,
					urlEncoded : true,
					update: etiket,
					headers: {"Content-Type":	"application/x-www-form-urlencoded;charset=iso-8859-9", 'charset':'iso-8859-9'},
					//headers: {'charset':'iso-8859-9'},
					evalResponse: true,
					evalScripts: true,
					

					onFailure: function(xhr)
					{
						NesneYaz(xhr);
						alert("hata");
					},

					//onRequest: function() { alert('Request made. Please wait...'); },
					onException: function() {alert('Exeption');},

					onComplete: function (html) {
						//etiket.set("html", html);
						//alert(html);
					},

					onSuccess: (function (html) {
						//etiket.set("html", html);
						//NesneYaz(html);
						//etiket.set("html", html[0].data);
						//alert(html);

						//NesneYaz(this.response);
						//alert("başarı");
					})
				}
			)
		myHTMLRequest.send();
	};

	function ajaxFunction()
	{
		alert("eben");
		var xmlhttp;
		if (window.XMLHttpRequest)
		  {
		  // code for IE7+, Firefox, Chrome, Opera, Safari
		  xmlhttp=new XMLHttpRequest();
		  }
		else if (window.ActiveXObject)
		  {
		  // code for IE6, IE5
		  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		  }
		else
		  {
		  alert("Your browser does not support XMLHTTP!");
		  }

		alert("adım 2")
		xmlhttp.onreadystatechange  = function()
		{
			 if(xmlhttp.readyState  == 4)
			 {
				  if(xmlhttp.status  == 200) alert(xmlhttp.responseText);
				  else						 document.ajax.dyn="Error code " + xmlhttp.status;
			 }
		};

		xmlhttp.open("POST", "http://localhost/deneme/",  true);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=ISO-8859-9");
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;language=tr");

		if (xmlhttp.overrideMimeType) xmlhttp.overrideMimeType('text/xml; charset=iso-8859-9');

		xmlhttp.send("null");

		alert("bitti");
	}




	function Nesneler(idOnEk, degiskenler, etiketAlan, OnayIslevi)
	{
		//--------- Verilen idye sahip nesnelerin dizisini döndürür
		//------- DİKKAT: maks nesne adedi 5000
		// idOnEk + degiskenler + sırano dan id hesaplar ve sayfada varsa nesne[degiskenler] = value der ve nesneyide sonuç dizisi nesnelere ekler
		/*
			ÖRNEK:
			var degiskenler = Array("Firma", "AnaBolum", "Bolum", "Marka", "UrunAdedi", "EkleCikart");
			var nesneler = Nesneler("id", degiskenler, "html", Onayla);
			NesneYaz(nesneler[0]);
		*/

		var nesneler = new Array();
		var nesneAdedi = 0;
		var degiskenAdedi = degiskenler.length;
		
		for(var i=0; i<5000; i++) {
			var nesne = new Object();
			for(var j=0; j<degiskenler.length; j++) {
				var etiket = $(idOnEk + degiskenler[j] + i);
				if(!etiket) break;
				nesne[degiskenler[j]] = etiket.get(etiketAlan);
			}
			if(j != degiskenAdedi) break; // değişken bulunamadı nesne yok demek çık
			if(OnayIslevi && OnayIslevi(nesne)) nesneler[nesneAdedi++] = nesne;//nesne onaylandı.listeye eklenebilir.
		}
		if(nesneAdedi == 0) return null;
		else				return nesneler;// dizi yarattığımız için boş bir object oluyor
	}

	function NesneBul(idOnEk, degiskenler)
	{
		//--------- Verilen idye sahip nesneyi döndürür
		// 
		
		// idOnEk + degiskenler + sırano dan id hesaplar ve sayfada varsa nesne[degiskenler] = value der ve nesneyide sonuç dizisi nesnelere ekler
		/*
			ÖRNEK:
			var degiskenler = Array("Firma", "AnaBolum", "Bolum", "Marka", "UrunAdedi", "EkleCikart");
			var nesne = NesneBul("id", degiskenler, "html");
			NesneYaz(nesne);
		*/
		var nesne = new Object();
		var bulunan = 0;
		var deger;
		for(var j=0; j<degiskenler.length; j++) {
			var etiket = $(idOnEk + degiskenler[j]);
			if(!etiket) continue;
			deger = null;
			if(etiket.get("html")) deger = etiket.get("html");
			if(etiket.get("value")) deger = etiket.get("value");
			if(!deger) continue; // boş
			nesne[degiskenler[j]] = deger;
			bulunan++;
		}
		if(!bulunan) return null; // değişken bulunamadı nesne yok demek çık
		return nesne;
	}

	function NesneBirlestir(nAna, nYavru)
	{
		for(var degisken in nYavru)        nAna[degisken] = nYavru[degisken];
		return nAna;
	}


	function NesneMetni(nesne)
	{
		if(!nesne) return "nesne yok";
		return JSON.encode(nesne);

		var nesneMetni = "";
		for(var i in nesne) {
			var deger = nesne[i];
			if(typeof(nesne[i]) == 'object') deger = NesneMetni(nesne[i]);
			
			nesneMetni += i + ":" + deger + "\n";
		}
		nesneMetni += "\n";
		return nesneMetni;
	}
	
	function NesneYaz(nesne)
	{
		var nesneMetni = NesneMetni(nesne);
		alert(nesneMetni);
	}
	
	function NesneleriYaz(nesneler)
	{
		if(!is_array(nesneler)) return;
		
		var metin = "";
		for(var i=0; i<nesneler.length; i++) metin += NesneMetni(nesneler[i]);
		alert(metin);
	}

	function TamEncode(metin)
	{
		if(!metin) return null;
		var yeni = encodeURIComponent(metin);
		yeni = yeni.replace("'", "%27");
		return yeni;
	}

	function HtmlEncode(metin)
	{
	    var sonuc = metin.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
	    return sonuc;
	}
	
	function HtmlDecode(metin)
	{
	    var sonuc = metin.replace('&amp;','&').replace('&lt;','<').replace('&gt;','>');
	    return sonuc;
	}


	function TamDecode(metin)
	{
		if(!metin) return null;
		var yeni = metin.replace("%27", "'");
		yeni = decodeURIComponent(yeni);
		// alert(yeni);
		return yeni;
	}

	function Deger(isim)
	{
		return $(isim).get("value");
	}

	function Html(isim)
	{
		return $(isim).get("html");
	}


	function Kopyala(obj)
	{
		if(obj == null || typeof(obj) != 'object')	return obj;
		var temp = obj.constructor(); // changed
		for(var key in obj)	temp[key] = Kopyala(obj[key]);
		return temp;
	}

	function KopyalaBasit(obj)
	{
		// bu çozukjları kopyamaz, aynı objlara işaret edilir
		if(obj == null || typeof(obj) != 'object')	return obj;
		var temp = new Object(); // changed
		for(var key in obj)	temp[key] = obj[key];
		return temp;
	}

	function TipDizi(input)
	{
		return typeof(input)=='object'&&(input instanceof Array);
	}

	function JsonDecode(metin)
	{
		var sonuc;
		eval('sonuc = ' + metin + ';')
		return sonuc;
	}

	function DonusDegeri(o)
	{
		return o.response.text;
	}

	function DonusDegeriO(o)
	{
            if(!o.response) return false;
            var donus = JsonDecode(o.response.text);
            return donus;
	}

	function DizideBul(deger, dizi)
	{
		//---- verilen dizideki değerin keyini döndürür.
		//for(var i=0; i<dizi.length; i++) if(dizi[i] == deger)return i;
		for(var k in dizi) if(dizi[k] == deger) {
		    if(is_array(dizi))	return k.toInt();
		    else		return k;
		}
		return null;
	}

	function DiziBul(diziler, isim, deger)
	{
		// verilen alana sahip diziyi döndürür. bulamazsa veya birden fazla sizi varsa null döner
		var sonucDiziler = DizileriBul(diziler, isim, deger);
		if(sonucDiziler && sonucDiziler.length == 1) return sonucDiziler[0];// tek dizi olması lazım
		return null;
	}


	function DizileriBul(diziler, isim, deger)
	{
		// verilen alana sahip dizileri döndürür
		var sonuc = new Array();
		for(var i=0; i<diziler.length; i++) {
			var dizi = diziler[i];
			if(dizi[isim] == deger) sonuc.push(dizi);
		}
		if(sonuc.length) return sonuc;
		return null;
	}

	function DiziIkiliden(ikili)
	{
	    var dizi = new Object();
	    for(var isim in ikili) {
		var deger = ikili[isim];
		var patlak = isim.match(/\.?[0-9a-z\u00A1-\uFFFF]+/gi);
		var hedef = dizi;
		for(var i=0; i<patlak.length; i++) {
		    var p = patlak[i].replace(".", "");
		    
		    if(i == patlak.length - 1) hedef[p] = deger;
		    else {
			if(!hedef[p])	hedef[p] = new Object();
			hedef = hedef[p];
		    }
		}
	    }
	    return dizi;
	}

	function DiziIkili(dizi)
	{
	    var ikili = new Object();
	    DiziIkiliTemel(null, dizi, ikili);
	    return ikili;
	}

	function DiziCsvden(csv, sutun, satir, temizle)
	{
	    //----- "color : #FFFFFF;" den o["color"] = #FFFFFF elde eder
	    var dizi = new Object();
	    if(csv) {
		var satirlar = csv.split(satir);
		for(var i=0; i<satirlar.length; i++) {
		    if(satirlar[i].length < 1)  continue;
		    var sutunlar = satirlar[i].split(sutun);
		    if(temizle) {
			sutunlar[0] = String(trim(sutunlar[0]));
			sutunlar[1] = String(trim(sutunlar[1]));
		    }
		    dizi[sutunlar[0]] = sutunlar[1];
		}
	    }
	    return dizi;
	}

	function DiziCsv(dizi, sutun, satir)
	{
	    var csv = "";
	    for(var k in dizi) {
		csv += k + sutun + dizi[k] + satir;
	    }
	    return csv;
	}


	function DiziDb(dbler)
	{
	    var ikili = new Object();
	    for(var i=0; i<dbler.length; i++) {
		var db = dbler[i];
		if(Tip(db["ilkDeğer"]) == "array") {
		    for(var j=0; j<db["ilkDeğer"].length; j++) {
			ikili[db["isim"] + "." + j] = db["ilkDeğer"][j];// tuş.0 = "asd"
		    }
		}
		else ikili[db["isim"]] = db["ilkDeğer"];
	    }
	    var dizi = DiziIkiliden(ikili);
	    return dizi;
	}

	function DiziDbIsim(isim)
	{
	    return isim.replace(/\.\d+/g, "");
	}

	function DiziIkiliTemel(isimAna, dizi, ikili)
	{
	    for(var isim in dizi) {
		var deger = dizi[isim];
		var isimCocuk = isim;
		if(isimAna) isimCocuk = isimAna + "." + isim;
		if(Tip(deger) == "object" || Tip(deger) == "array") DiziIkiliTemel(isimCocuk, deger, ikili);
		else ikili[isimCocuk] = deger;
	    }
	}

	function DiziElemanYoket(dizi, no)
	{
		delete(dizi[no]);// object için
		return dizi.splice(no, 1);// bu keyi çıkart
	}

	function DiziElemanYoket2(dizi, eleman)
	{
	    //--- verilen elemanı yokeder ve diziden çıkarır
	    for(var i=0; i<dizi.length; i++) {
		if(eleman == dizi[i]) {
		    delete(dizi[i]);
		    dizi.splice(i, 1);
		    break;
		}
	    }
	}

	function DiziKopyala(dizi)
	{
		return dizi.slice();
	}
        
        function DiziAlt(dizi, isimler)
	{
            //--- dizideki istenen alanları sonuca koyar
            var sonuc = new Array();
            
            for(var i=0; i<isimler.length; i++) {
                var isim = isimler[i];
                sonuc[isim] = dizi[isim];
            }
            
            return sonuc;
	}

	function DiziKopyalaTam(obj)
	{
		if(obj == null || typeof(obj) != 'object')	return obj;
		var temp = obj.constructor(); // changed
		for(var key in obj)	temp[key] = Kopyala(obj[key]);
		return temp;
	}

	function DiziKopyalaBasit(obj)
	{
		// çozukjları kopyamaz, aynı objlara işaret edilir
		if(obj == null || typeof(obj) != 'object')	return obj;
		var temp = new Object(); // changed
		for(var key in obj)	temp[key] = obj[key];
		return temp;
	}

	function DiziBirlestirHedef(kaynak, hedef)
	{
		//--- kaynak diziyi hedefe ekler, yeni dizi yaratılmaz. birleşmiş dizi hedefte olur
	    	// - kaynak hedefin üzerine yazar. çocuklar birleşmez
		for(var isim in kaynak)	hedef[isim] = kaynak[isim];
	}

	function DiziBirlestirBasit(a, b)
	{
	    //--- çocukları birleştirmez, yeni dizi döner
	    // b a nın üzerine yazar
	    var c = new Object();
	    var isim;
	    for(isim in a) c[isim] = a[isim];
	    for(isim in b) c[isim] = b[isim];
	    
	    return c;
	}
        
        function DiziBirlestirBasitKoru(a, b)
	{
	    //--- çocukları birleştirmez, yeni dizi döner
	    // b a nın üzerine yazmaz. ikiside kalır
	    var c = new Object();
	    var isim;
	    for(isim in a) c[isim] = a[isim];
	    for(isim in b) {
                if(undefined != c[isim]) {
                    if(Tip(c[isim]) == "array") c[isim].push(b[isim]);
                    else {
                        var sakla = c[isim];
                        c[isim] = new Array();
                        c[isim].push(sakla);
                        c[isim].push(b[isim]);
                    }
                }
                else c[isim] = b[isim];
            }
	    
	    return c;
	}

	function HtmlYeniEtiket(id, tip, baba)
	{
		var ozellikler = null;
		var yeni = new Element(tip, ozellikler);
		yeni.set("id", id);
		yeni.inject($(baba), "top");
		return yeni;
	}

	function HtmlDegis(id, alan, deger)
	{
		var alanlar = ["id", "class", "style", "value", "html"];
		if(DizideBul(alan, alanlar))	$(id).set(alan, deger);
		else {
			var e = $(id);
			e[alan] = deger;
		}
	}

	function HtmlEtiketKopyala(id, idYeni)
	{
		var yeni = $(id).clone();
		yeni.set("id", idYeni);
	}

	function HtmlEtiketCocuklari(id, secim)
	{
		//secim
		return $(id).getChildren(secim);
	}

	function HtmlEtiketEkle(id, baba, konum)
	{
		// konum after, top vb olabilir
		$(id).inject(baba, konum);
	}

	function HtmlEtiketTamBoyut(e)
	{
		//---- etiketin tam enini ve boyunu döndürür
		// sonuc[en,boy] margin + padding + en,boy
		var sonuc = new Object();
//		sonuc["en"] =	parseInt(e.getStyle("width")) +
//						2 * parseInt(e.getStyle("padding")) + parseInt(e.getStyle("padding-left")) + parseInt(e.getStyle("padding-right")) +
//						2 * parseInt(e.getStyle("margin")) + parseInt(e.getStyle("margin-left")) + parseInt(e.getStyle("margin-right"));
//						2 * parseInt(e.getStyle("border")) + parseInt(e.getStyle("margin-left")) + parseInt(e.getStyle("margin-right"));
//
//		sonuc["boy"] =	parseInt(e.getStyle("height")) +
//						parseInt(e.getStyle("padding-top")) + parseInt(e.getStyle("padding-bottom")) +
//						parseInt(e.getStyle("margin-top")) + parseInt(e.getStyle("margin-bottom"));
//					NesneYaz(sonuc);

		var boyut = e.getComputedSize();
		sonuc["en"] = boyut.totalWidth;
		sonuc["boy"] = boyut.totalHeight;
		return sonuc;
	}
	
	function HtmlOlay(id, olay, islev)
	{
		$(id).addEvent(olay, islev);
	}

//	function SiteAdresi()
//	{
//		var adres = $("siteAdresi").get("html");
//		return adres;
//	}
	
	function ScriptYukle(adres)
	{
		document.write('<script src="', adres, '" type="text/JavaScript"><\/script>');
	}

	function NYarat()
	{
		var is = arguments[0];// global n bilgisi
		var yeni = new Object();
		yeni["Tip"] = is.tip; // örneğin resim
		yeni.no = NKimlikNo();
		yeni.Isim = is.tip + yeni.no + ".png";// resim + 0 + .png = resim0.png
		g_elemanlar.push(yeni);
		is.secili = yeni;// global n bilgisinde seçili n
		NBosalt(is);
		NKutusuYenile(is);
	}

	function NKopyala()
	{
//		//--- Seçili js elemanını kopyalar. ayrıca bunun kaynak ve hedefindeki idleri seçili pencerenin idsi ile değiştirir
//		var eski = g_seciliJs;
//		var yeni = Kopyala(g_seciliJs);
//		g_elemanlar.push(yeni);
//		g_seciliJs = yeni;
//
//		var kopyalananId = eski.Kaynak;
//		var kopyaId = g_seciliPencere.get("id");
//		yeni.Kaynak = kopyaId;
//		yeni.Hedef = yeni.Hedef.replace(kopyalananId, kopyaId);
//		JsOlayKutusuYenile();
	}

	function NKimlikNo()
	{
		//----- g_elemanlarda kullanılmayan noyu döndürür
		for(var no=0; no<10000; no++) {
			for(var i=0; i<g_elemanlar.length; i++) {
				var eleman = g_elemanlar[i];
				if(eleman.no == no) break;
			}
			if(i == g_elemanlar.length) return no; // kullanılmayan no
		}
		return null;
	}

	function NYoket()
	{
		//--- Seçili elemanı siler
		var is = arguments[0];

		//--- Elemanı bul ve çıkart diziden
		for(var i=0; i<g_elemanlar.length; i++) {
			var eleman = g_elemanlar[i];
			if(eleman == is.eleman) {
				g_elemanlar.splice(i, 1);
				is.secili = null;
			}
		}
		NKutusuYenile(is);
	}

	function NKutusuYenile()
	{
		// elemanlar kutusunu yeniler
		// tüm elemanları gezer ve elekutusuna ekler. ayrıca eleman seçili ise özelliklerini jsinputlarına koyar
		var is = arguments[0];
		var kutu = $(is.elemanlarKutusu);
		kutu.empty();// elemanlar kutusu
		var secili;

		for(var i=0; i<g_elemanlar.length; i++) {
			var eleman = g_elemanlar[i];
			if(eleman.Tip != is.tip) continue;
			if(is.secili == eleman) secili = "selected";
			else						  secili = null;

			var yeniOption = new Element('option', {selected: secili, value: i, html: eleman.Isim});
			yeniOption.inject(kutu);
			if(!is.secili) is.secili = eleman;//---- Seçili olay yoksa ilk elemanı seç
		}
		if(is.secili) NDoldur(is);
	}

	function NBul(no)
	{
		// nosu verilen elemanı döndürr
		for(var i=0; i<g_elemanlar.length; i++) {
			if(no == g_elemanlar[i].no) {
				return g_elemanlar[i];
			}
		}
		return null;
	}

	function NDegis()
	{
		//----- elemanlar kutusu değiştiğinde çalışır ve içindeki seçilen elemanı seçili yapar
		// elemanlar inputuna eklenmeli
		var is = arguments[0];
		var no = this.get("value");
		var eleman = NBul(no);
		is.secili = eleman;// elemanı seçili yap
		//NesneYaz(eleman);
		NDoldur(is);
	}

	function NDoldur(is)
	{
		//----- özellik inputlarını seçili eleman ile doldurur
		var ozellik = is.ozellik;
		var onEk = is.onEk;
		var isim;
		for(var i=0; i<ozellik.length; i++) {
			isim = ozellik[i];
			var id = onEk+isim;// jsKaynak gibi
			if(!$(id)) continue;
			$(id).set("value", is.secili[isim]);
		}
		if(is.Doldur) is.Doldur(is);// her doldurmada yapılacak özel doldur işlemi
	}

	function NBosalt()
	{
		//----- özellik inputlarını boşaltır
		var is = arguments[0];
		var ozellik = is.ozellik;
		var onEk = is.onEk;
		var isim;

		for(var i=0; i<ozellik.length; i++) {
			isim = ozellik[i];
			var id = onEk+isim;// jsKaynak gibi
			if(!$(id)) continue;
			MesajB("Silindi", id);
			$(id).set("value", null);
		}
	}

	function NDuzenle()
	{
		//----- özellik inputu değişince seçili elemanı değiştirir. n inputlarına eklenir change ile ekle
		// DİKKAT: iste onEk ve secili gerekli
		var is = arguments[0];
		if(!is.secili) return;
		var isim = this.get("id");
		isim = isim.split(is.onEk);// jsKaynak => Kaynak
		isim = isim[1];
		if(this.get("value") != undefined)		is.secili[isim] = this.get("value");
		else if(this.get("html") != undefined)	is.secili[isim] = this.get("html");
		NKutusuYenile(is);
	}

	function NInputYaratDegisim()
	{
		//----- özellik inputu değiştiğinde input etiketiyle çağrılır. babayı değiştirir ve ElemanDegisti yi çağırır
		var deger = this.get("value");
		var isim = this.isim;
		var diziIsmi = null;

		//--- Diziler için resim>>0,1 gibi olur
		if(-1 != isim.search(">>")) {
			var eskiIsim = isim;
			var patlak = isim.split(">>");
			isim = patlak[1];
			diziIsmi = patlak[0];
			//alert(eskiIsim + " yeniİsim: " + isim);
			// dizi ismini çıkar rotate-0 gibi
		}
		if(!deger && diziIsmi == "defs") this.baba.splice(isim,1);// defleri sil
		else this.baba[isim] = deger;

		// Kullanıcı input değişti işlevi varsa güncellenmiş elemanla beraber çağır
		if(this.ElemanDegisti) this.ElemanDegisti(this.eleman);// tepeEleman değişti birşeyler yapılabilir. resim oluşturmak gibi
	}

	function NInputYarat(isim, deger, baba, is)
	{
		// is.eleman		: düzenlenecek obj
		// is.ElemanDegisti : eleman değişince çağrılan işlev(eleman geçilir)
		// is.anaCerceve	: inputların konacağı  etiket
		// eleman ElemanDegisti geçilirki obj değiştiğinde elemanla birşeyler yapılabilsin. gerçi bu elemana seçiliObj danda ulaşılabilir
		if(deger == null || (typeof(obj) != 'object' && !is_array(deger)))	{
			var cerceve = new Element('div', {"id": "", "name": isim, "value": "", "style": ""});
			cerceve.inject(is.anaCerceve, "bottom");

			var sol = new Element('div', {"id": "", "name": isim, "html": isim, "style": "clear:both; float:left; width:150px;"});
			sol.inject(cerceve, "top");

			var sag = new Element('div', {"id": "", "name": isim, "style": "float:left;"});
			sag.inject(cerceve, "bottom");

			var input = new Element('input', {"id": "input" + is.tepeEleman.no, "name": isim, "value": deger, "style": ""});
			input.inject(sag, "bottom");
			input.addEvent("change", NInputYaratDegisim);
			input.baba = baba;
			input.isim = isim;
			input.ElemanDegisti = is.ElemanDegisti;// Kullanıcının değişim işlevi
			input.eleman = is.eleman;
			return;
		}
		if(is_array(deger)) for(var i=0; i<deger.length; i++)	NInputYarat(isim + ">>" + i, deger[i], deger, is);
		else for(var key in deger)	NInputYarat(key, deger[key], deger, is);
	}

	function HedefKaydetSonuc()
	{
		if(this.response.text) Mesaj("Kaydedildi");
		else Mesaj("Kaydedilemedi");
	}

	function HedefKaydet()
	{
		// tüm bilgileri kaydeder
		var b = {"eleman": g_elemanlar, "phpYok" : 1};
		Gonder2(SiteAdresi() + "/sayfaKaydet2.php", b, SayfaKaydetSonuc);
		Mesaj("Kaydedildi", b["sayfa"]["Isim"]);
	}

	function HedefIsim()
	{
		//---- Sayfa ismi değişimce kontrol için merkeze gönderir
		var isim = $("hedefIsim").get("value");
		return isim;
	}

	function HedefIsimKontrol()
	{
		//---- Sayfa ismi değişimce kontrol için merkeze gönderir
		var b = new Object();
		b["hedefIsim"] = $("hedefIsim").get("value");
		b["formIsim"] = $("formIsim").get("html");

		Gonder2(SiteAdresi() + "/hedefKontrol.php", b, SayfaKontrolSonuc);
	}

	function HedefIsimKontrolSonuc()
	{
		if(this.response.text == 0)	{
			var sayfaIsmi = $("hedefIsim").get("value");
			$("hedefIsim").set("value", null);// bu isim kullanımda
			Mesaj(sayfaIsmi + " kullanımda. Lütfen başka isim verin");
		}
		else HedefKaydet();// isim geçerli kaydet
	}

	function HedefYoket()
	{
		//---- sayfayı siteden siler + boş bir sayfa açar
		var b = new Object();
		b["hedefIsim"] = $("hedefIsim").get("value");
		b["formIsim"] = $("formIsim").get("html");

		if(!b["hedefIsim"] || !b["formIsim"])  {
			Mesaj("Silinecek sayfa bulunamadı.");
			return;
		}
		Gonder(SiteAdresi() + "/sayfaYoket2.php", b);

		var sayfaAdres = $("sayfaAdres").get("html");
		window.location = SiteAdresi() + "/" + sayfaAdres;// boş sayfa
	}

	function HedefDegis()
	{
		//---- hedefler inputundaki seçili hedef değişince yeni hedefle sayfa açar
		var yeniNo = this.get("value");
		var sayfaAdres = $("sayfaAdres").get("html");
		window.location = SiteAdresi() + "/" + sayfaAdres + "?no=" + yeniNo;
	}

	function HedefYenile()
	{
//		var sayfa = Deger("uiPencere_sayfaIsim");
//		window.location = SiteAdresi() + "/resimEditor.php?sayfa=" + sayfa;
	}

	function EtiketDragEkle(etiket, cerceve)
	{
		var position = etiket.getStyle("position");

		if(position == "absolute") {//----- Kayan pencerelere drag ekleme
			if(!etiket.myDrag) {
				etiket.myDrag = new Drag.Move(etiket.get("id"), {
						container: cerceve
				});
			}
			etiket.myDrag.attach();// Tuş bırakıldığında otomatik olarak konum değiştirme işlemi bitiyor
		}
	}

	function EtiketSec(etiket, event)
	{
		//----- Etikete basılınca çalışır. Bunu çağır sonra diğer seçim işlemlerini yap
		// etiketin arka planı kırmızı olur
		// etiketin elemanı seçilir ve özellikleri özellik alanına eklenir

		//---- olay babalara gitmesin
		event.stopPropagation();

		//---- çerçeveyi kırmızı yap
		etiket.setStyle("border", "1px solid #ff0000");

		//---- eski seçilinin kırmızı çerçevesini kapat
		var eb = ElemanBilgisi(etiket.eleman);
		var eskiSeciliEtiket =$(eb.secim.eleman.etiketId);
		eskiSeciliEtiket.setStyle("border", "0px solid #ff0000");

		//---- Etiketn html özelliklerini elemana kaydet
		if(etiket.kaydet) {
			var eleman = etiket.eleman;
			eleman["ana"] = etiket.getParent().get("id");
			eleman["sıraEtiket"]  = EtiketSirasi(etiket);// etiket sıralarını kaydet
			var ozellikler = new Array("style", "class", "id");
			for(var i=0; i<ozellikler.length; i++) {
				var isim = ozellikler[i];
				var deger = this.get(isim);
				eleman[isim] = deger;
			}
		}
	}


	function EtiketleriYarat()
	{
		// tüm elemanlar için etiketleri yaratır eğer anası varsa
		// önce hepsini yarat sonra analarına ekle. çünkü henüz anası yaratılmamaış olabilir
		var e;

		for(i=0; i<g_elemanlar.length; i++) {
			e = g_elemanlar[i];
			if(e.ana) 			var etiket = new Element("div");
		}

		function sirala(a,b)
		{
			if(a.sıraEtiket > b.sıraEtiket)	return 1;
			else							return -1;
		}
		g_elemanlar.sort(sirala);

		for(i=0; i<g_elemanlar.length; i++) {
			e = g_elemanlar[i];
			if(e.ana) e.inject($(e.ana));
		}
	}

	function EtiketSirasi(etiket)
	{
		//---- verilen etiketin babası içindeki sırasını döndürür
		var baba = etiket.getParent();
		var cocuklar = baba.getChildren();
		var id = etiket.get("id");
		for(var i=0; i<cocuklar.length; i++) {
			if(cocuklar[i].get("id") == id) return i;
		}
		return null;
	}

	function EtiketYarat(tip)
	{
		//---- tip = div, input vb
		return new Element(tip);

	}

	function EtiketBirakilanEtiketeEkle(etiket, event, etiketler, cerceve)
	{
		// DİKKAT: shift basılı olmalı
		// fare bırakıldığı zaman seçili etiketi verilen etiketlerden üzerinde olduğuna ekler
		// event fare bırakıldı eventi, fare koordinatları için
		
		if(!event.shift) return;
		
		var e;
		var fare = event.page;
		var maksAnaAdedi = 0;
		var hedefAna = null;
		
		var i;
		for(i=0; i<etiketler.length; i++) {
			e = etiketler[i];
			if(!e) continue;
			if(e == etiket) continue;// etiketi kendine ekleme

			var konum = e.getCoordinates();
			//---- Fare Kutunun içinde ise kututu ve derinliğini ekle
			if(fare.x > konum.left && fare.x < konum.right && fare.y > konum.top && fare.y < konum.bottom) {
				//alert("Bırakılan Pencere: " + pencere.get("id"));
				//anaPencereler.push(pencere);
				//derinlikler.push(derinlik);
				var anaAdedi = e.getParents("div").length;
				if(anaAdedi > maksAnaAdedi) {// en içteki kutuyu seç yani en fazla anası olana ekliyoruz basılanlardan
					// alert(babaAdedi);
					// alert(maksBabaAdedi);
					maksAnaAdedi = anaAdedi;
					hedefAna = e;
				}
			}
		}

		//alert("seçili " + g_seciliPencere.get("id"));
		//alert("hedef " + hedefAna.get("id"));

		//---- İstenilen seviyedeki anaya taşı eğer tuş bırakıldığında bir pencere varsa
		// DİKKAT: Pencerenin içindeki bir etiketin seviyesi 1
		var eklendi = false;
		if(hedefAna) {
			if(hedefAna == etiket.getParent()) {
				//MesajB("Baba Geçildi", g_seciliPencere.getParent().get("id"));
				return; // Zaten bu pencereye eklenmiş
			}
			//alert("Ana Pencere: " + hedefAna.get("id"));
			//alert("Çocuk : " + g_seciliPencere.get("id") + " Ana : " + hedefAna.get("id"));
			etiket.inject(hedefAna);
			var position = hedefAna.getStyle("position");
			if(!position) hedefAna.setStyle("position", "relative");

			eklendi = true;
		}
		else {
			// hiç bir pencerenin içine bırakılmamışsa çerçeveye bırakılmış ve zaten çerçevede değilse
			if(cerceve != etiket.getParent()) {
				etiket.inject(cerceve);
				hedefAna = cerceve;
				eklendi = true;
			}
		}

		if(eklendi) {
			etiket.setStyle("positon", "absolute");
			etiket.setStyle("top", "0px");
			etiket.setStyle("left", "0px");
			MesajB("Eklendi", etiket.get("id") + " - (ana) " + hedefAna.get("id"));
		}
		else MesajB("Eklenmedi", etiket.get("id"));
	}

	function EtiketArkaPlan()
	{
		//---- cevaptaki resimAdresi, cevaptaki etikete arka plan yapar
		var sonuc = DonusDegeriO(this);
		var resimAdresi = sonuc["resimAdres"] ;
		var etiketId = sonuc["etiketId"] ;

		var zaman = new Date();
		resimAdresi += "?" + zaman.getTime();
		$(etiketId).setStyle("background-image", 'url("'+resimAdresi +'")');


//		resmi yenilemek için
//	    if (document.images) {
//			var now = new Date();
//
//			//NesneleriYaz(document.images);
//			var img = document.createElement("img");
//			img.src = url;
//			img.name = url;
//			document[url] = img;
//			document[url].src = url + "?" + now.getTime();
//			alert(url);
//			NesneYaz(document[url]);
//		}
	}

	function ElemanSec(eleman, ElemanDegisti)
	{
		// ElemanSec
		//---- etikete basılınca elemanın inputlarını oluştur, elemanı seçer vb
		// ayrıca her input değişimce etiket.InputDegisti çalışır (resimal, renkata vb)
		var eb = ElemanBilgisi(etiket.eleman);
		eb.secim.eleman = eleman;
		ElemanListeYenile(eb.elemanListe, eb.elemanlar, eleman);

		var is;
		is.eleman = eleman;
		is.ElemanDegisti = ElemanDegisti;
		is.anaCerceve = eb.özellikler;
		NInputYarat(null, eleman, null, this.eleman, ElemanDegisti);
	}

	function ElemanSec2(elemanlar)
	{
		// verilen elemanlardan ilkini seçili yapar
		ElemanSec(elemanlar[0]);// özellik inputları vb
	}

	function ElemanYarat()
	{
		//---- elemanı g_elemanlara ekler, kimlik no verir
		var eleman = new Object();
		eleman.kimlikNo = NKimlikNo();
		g_elemanlar.push(eleman);
		return eleman;
	}

	function ElemanEtiketBagla(eleman, etiket)
	{
		// eleman ve etiketi birbirine bağlar.
		// etikete basılınca elemanseçi çağırıp eleman inputlarını yaratır
		//var etiketId = "idCs"+eleman.no;
		if(!etiket) return null;
		//etiket.set("id", etiketId);
		etiket.eleman = eleman;
		//eleman.etiketId = etiketId;
		etiket.InputDegisti = eval(eleman.degis);
		etiket.ElemanSec = ElemanSec;
		etiket.ElemanSec();
		etiket.addEvent("mousedown", ElemanSec);
		return etiket;
	}

	function ElemanYoket(eleman, secim)
	{
		//---- Eleman seçiliyse seçimden çıkart
		if(secim.eleman == eleman) secim.eleman = null; // Tamir başkasını seç

		//---- elemanı ve etiketini yok eder
		var etiket = $(eleman.etiketId);
		etiket.setStyle("display", "none");
		//NesneYaz(etiket.eleman);
		g_silinenElemanlar.push(eleman.kimlikNo);

		//---- Elemanı diziden çıkar ve yoket
		delete(etiket.eleman);
		for(i=0; i<g_elemanlar.length; i++) {
			if(g_elemanlar[i] == eleman) DiziElemanYoket(g_elemanlar, i);
		}

		//---- Etiketi yoket
		etiket.destroy();
		etiket.secim.seciliEtiket = null;
		// PencereSec();
		// PencerelerKutusunuYenile();
	}

	function ElemanListeYenile(input, elemanlar, seciliEleman)
	{
		//---- inputundaki tüm select optionları siler elemanları ekler
		// seçili eleman kutudada seçili olur
		// secim.eleman daki elemanı inputta seçili yapar
		input.empty();
	
		for(var i=0; i<elemanlar.length; i++) {
			var eleman = elemanlar[i];
			var yeniOption = new Element('option', {value: eleman.kimlikNo, html:eleman.isim});
			yeniOption.inject(input);
		}

		if(seciliEleman) {
			input.set("value", seciliEleman.kimlikNo);
			input.set("html", seciliEleman.isim);
		}
	}




