/**
 * Widget silme işleminde bir div açıp silip silinmeyeceğini soracak. Ardından
 * da cevaba göre işlem yapacak.
 */
var WidgetSil = Class.create();
/**
 * Kalıtım aktarılıyor.
 */
Object.extend(WidgetSil.prototype, {
	/**
	 * API versiyonu
	 */
	versiyon :'1.0.0',
	/**
	 * İşlem yapılacak widgetID
	 */
	widgetID :null,
	/**
	 * Silinsin mi mesajının çıkacağı DIV id
	 */
	widgetSilDivID :'WidgetSilDIV',
	/**
	 * Mesajın gösterileceği div...
	 */
	widgetSilMesajDivID :'WidgetSilMesajDIV',
	/**
	 * 
	 */
	widgetSilEvetHayirDivID :'WidgetSilDIVEvetHayir',
	/**
	 * Belirtilen ms içinde kendi kendine widgetsil DIV i kapanacaktır.
	 */
	widgetSilOtomatikKapaSetTimeout :1000,
	/**
	 * 
	 */
	widgetSilGlobalDegiskenAdi :'widgetSil',
	/**
	 * Mesaj
	 */
	orijinalMesaj :'#{baslik} başlıklı sihirbaz silinsin mi?',
	/**
	 * widgetSilDivID nesnesine yeni bir DIV id atar.
	 */
	ataWidgetSilDivID : function(divID) {

		if (this.nullveyaTanimsizveyaBosMuKontrolu(divID)) {
			debug.log('ataWidgetSilDivID: Div ID gereklidir.');
			return false;
		}

		this.widgetSilDivID = divID;
		return true;
	},
	/**
	 * Mesajın bulunduğu div.
	 */
	ataWidgetSilMesajDivID : function(divID) {

		if (this.nullveyaTanimsizveyaBosMuKontrolu(divID)) {
			debug.log('ataWidgetSilMesajDivID: Div ID gereklidir.');
			return false;
		}

		this.widgetSilMesajDivID = divID;
		return true;
	},
	/**
	 * widget ID atanır
	 */
	atawidgetID : function(widgetID) {

		if (this.nullveyaTanimsizveyaBosMuKontrolu(widgetID)) {
			debug.log('atawidgetID: Widget ID gereklidir.');
			return false;
		}

		this.widgetID = widgetID;
		return true;
	},
	/**
	 * Kurucu fonksiyon
	 */
	initialize : function(widgetID) {

		try {

			if (!this.nullveyaTanimsizveyaBosMuKontrolu(this.widgetID)) {
				this.gorunmezYap();
				debug.log('Daha önce işaretli widget normle döndürülüyor.');
			}

			if (this.atawidgetID(widgetID)) {
				this.getirMesaji();
				this.gorunurYapvePozisyonunuAyarla();
				debug.log('Yeni widget işaretleniyor.');
			}

			$(this.widgetSilDivID).title = this.widgetID;

			this.eventYenidenHesapla = this.gorunurYapvePozisyonunuAyarla
					.bindAsEventListener(this);

			Event.observe(window, "scroll", this.eventYenidenHesapla);
			Event.observe(window, "resize", this.eventYenidenHesapla);

			this.mesajdanSonraKapatGosterGosterme(false);

			debug.log('Eventlar başladı.');

		} catch (e) {
			debug.log('Kurucu fonk. hata oluştu' + e);
		}

		debug.log('WidgetSil nesnesi versiyon: ' + this.versiyon);

		return;
	},
	/**
	 * null, undefined ve boş kontrolu yapar. Doğru ise TRUE döner.
	 */
	nullveyaTanimsizveyaBosMuKontrolu : function(girdi) {

		if (girdi == null || girdi == undefined || girdi == '') {
			return true;
		}

		return false;
	},
	/**
	 * Div i görünür yapar ve pozisyonunu widgete göre ayarlar.
	 */
	gorunurYapvePozisyonunuAyarla : function() {

		if (this.nullveyaTanimsizveyaBosMuKontrolu(this.widgetID)) {
			debug.log('gorunurYapvePozisyonunuAyarla: Widget ID nerede?');
			return false;
		}

		var widgetSilDIV = $(this.widgetSilDivID);
		var ekranBilgisi = this.getirEkranBilgilerini();

		widgetSilDIV.setStyle( {
			display :'inline',
			top :ekranBilgisi.height + 'px',
			left :ekranBilgisi.width + 'px'
		});

		this.silenecekWidgetiIsaretle();

		debug.log('gorunurYapvePozisyonunuAyarla: içindeyim hahahaaa');

		return;
	},
	/**
	 * Div i görünmez yapar. Ve title bilgisini null yapar.
	 */
	gorunmezYap : function() {

		if (this.nullveyaTanimsizveyaBosMuKontrolu(this.widgetID)) {
			debug.log('gorunmezYap: Widget ID nerede?');
			return false;
		}

		var widgetSilDivID = $(this.widgetSilDivID);
		widgetSilDivID.setStyle( {
			display :'none'
		});

		widgetSilDivID.title = null;
		this.silinecekDiyeIsaretliWidgetiNormaleDondur();

		Event.stopObserving(window, "resize", this.eventYenidenHesapla);
		Event.stopObserving(window, "scroll", this.eventYenidenHesapla);

		debug.log('Eventlar siliniyor.');

		return;
	},
	/**
	 * Silinecek widgeti belirtilen bir biçimde işaretler.
	 */
	silenecekWidgetiIsaretle : function() {
		/**
		 * $(this.widgetID).setStyle( { border :'1px solid red' });
		 * 
		 * return;
		 */
	},
	/**
	 * Silinecek diye işeretlenen widgeti normale döndürür.
	 */
	silinecekDiyeIsaretliWidgetiNormaleDondur : function() {
		/**
		 * $(this.widgetID).setStyle( { border :null });
		 * 
		 * return;
		 */
	},
	/**
	 * verilen widget ID nin cumulativeOffset ini getirir.
	 */
	getirWidgetOffseti : function() {

		return Position.positionedOffset($(this.widgetID));
	},
	/**
	 * Mesaj DIV nin hangi pozisyonsa gösterileceğini hesaplar.
	 */
	getirEkranBilgilerini : function() {

		var ekranBilgisi = new Object();
		var scrollOff = document.viewport.getScrollOffsets();
		var widget = $(this.widgetSilDivID);

		try {

			widget.h = (widget.getHeight() / 2);
			widget.w = (widget.getWidth() / 2);

		} catch (e) {

			widget.h = 0;
			widget.w = 0;
		}

		ekranBilgisi.width = Math.ceil(((document.viewport.getWidth() / 2)
				+ scrollOff.left - widget.w));
		ekranBilgisi.height = Math.ceil((document.viewport.getHeight() / 2
				+ scrollOff.top - widget.h));

		return ekranBilgisi;
	},
	/**
	 * Widgeti silme işlemini gerçekleştirir..
	 */
	widgetiSil : function() {

		var id = this.widgetID;
		var widget = eval('portal.widget' + id);
		var url = eval('portal.widget' + id + '.removeURL') + '&wid=' + id;
		var widgetSilDivID = $(this.widgetSilDivID);
		var widgetSilMesajDivID = $(this.widgetSilMesajDivID);
		var ws = this;

		new Ajax.Request(url, {
			method :'post',
			onSuccess : function(transport) {
				var json = transport.responseText.evalJSON();

				if (json.islemTamam == 1) {

					document.body.appendChild($(id + '_kontrol_div').hide());
					portal.remove(widget);
					portal._updateColumnsHeight();
					widgetSilMesajDivID.update('Widget Başarıyla Silindi.')
					ws.mesajdanSonraKapatGosterGosterme(true);
					setTimeout(
							ws.widgetSilGlobalDegiskenAdi + '.gorunmezYap()',
							2000);

				} else {

					widgetSilMesajDivID.update('Bir hata oluştu.');
					ws.mesajdanSonraKapatGosterGosterme(true);

				}
			}
		});

	},
	/**
	 * Mesajı şablondan oluşturur.
	 */
	getirMesaji : function() {

		var id = this.widgetID;
		var widget = eval('portal.widget' + id);
		var mesajDiv = $(this.widgetSilMesajDivID);
		var sablonum = new Template(this.orijinalMesaj);
		var degistir = {
			baslik :widget.getTitle().innerHTML
		};

		mesajDiv.update(sablonum.evaluate(degistir));

		return;
	},
	/**
	 * 
	 */
	mesajdanSonraKapatGosterGosterme : function(mode) {

		var widgetSilEvetHayirDivID = $(this.widgetSilEvetHayirDivID);

		if (mode) {

			widgetSilEvetHayirDivID.setStyle( {
				display :'none'
			});

		} else {

			widgetSilEvetHayirDivID.setStyle( {
				display :'inline'
			});

		}

		return;
	}
});