/*!______________________________________________________________________*\
||                                                                      ||
|| __   __					                              ||			
|| \ \ / /__  _ __   ___ __ _ 		- Fırat Ağdaş                 ||
||  \ V / _ \| '_ \ / __/ _` |		- Yonca New Media             ||
||   | | (_) | | | | (_| (_| |		- firat@yonca-ad.com          ||
||   |_|\___/|_| |_|\___\__,_|                                          ||
||                                                                      ||
||______________________________________________________________________||
\*                                                                      */

/**
* Tab Index Numarası
*
* @var	integer
*/
var __TABINDEX = 0;

/**
* Focus, herhangi bir input üzerinde mi?
*
* @var	boolean
*/
var __ONINPUT = false;

/**
* Objeye class ekle çıkart fonksiyonu
*
* @param	object	Class değişikliği yapılması istenen obje
* @param	strig	Class adı
* @param	integer	1 ise ekler, aksi taktirde çıkarır.
*
* @return	void
*/
var car = function(o, c, r) 
{ 
	if (r == 1) 
	{
		Dom.addClass(o, c);
		__ONINPUT = true;
	}
	else
	{
		Dom.removeClass(o, c);
		__ONINPUT = false;
	}
};

/**#@+
* Input, Textarea, Select değerlerine göre Class Ekle kaldır Fonksiyonları
*/
var pie_f = function(e) { car(this, 'ifoc', 1); };
var pie_b = function(e) { car(this, 'ifoc', 0); };
var prce_b = function(e) { car(this, 'rcfoc', 0); };
var prce_f = function(e) { car(this, 'rcfoc', 1); };
var pte_f = function(e) { car(this, 'tfoc', 1); };
var pte_b = function(e) { car(this, 'tfoc', 0); };
/**#@-*/

/**
* Obje üzerinde id yoksa id ekler ve Sonraki Nodu belirler...
*
* @param	object	Obje
* @param	mixed	Sonraki nod mevcutsa object, yoksa false
*
* @return	string	Girilen ID
*/
function pifoc(o, ln)
{
	if (!o.id)
	{
		Dom.generateId(o, 'ync_');
	}

	o.nextNode = ln ? ln : false;
	Event.addListener(o, 'keydown', focnn);

	return o.id;
}

/**
* Mozilla türü tarayıcılar için Enter Tab İlişkilendirme fonksiyonu
*
* @param	object	event
*/
function focnn(e)
{
	var keycode = e.keyCode ? e.keyCode : e.which;
	if (keycode == 13 && this.nextNode && this.nextNode != false && nn(this) != 'textarea')
	{
		Dom.get(this.nextNode).focus();
		Event.preventDefault(e);
	}
}

function iaelm(o)
{
	if (Dom.getStyle(o, 'visibility') == 'hidden' || Dom.getStyle(o, 'display') == 'none')
	{
		return false;
	}
	
	return true;
}

/**
* Belirtilen Forum elementlerine otomatik TabIndex verme ve Tab - Enter İlişkilendirme eventlerini ekleme fonksiyonu
*
* @return	void
*/
function pfe()
{
	for (var i = 0; i < document.forms.length; i++)
	{
		var lastnode = '';
		var dfl = document.forms[i].elements.length;
		__TABINDEX += dfl;
		var pre_tabindex = __TABINDEX, lastinput = null;	 

		for (var k = dfl - 1; k >= 0; k--)
		{
			var fel = document.forms[i].elements[k];
			switch (nn(fel))
			{
				case 'input':
					if (!iaelm(fel))
					{
						break;
					}
					
					var ftype = tlc(fel.type);
					if (ftype == 'text' || ftype == 'password')
					{
						Event.addListener(fel, 'focus', pie_f);
						Event.addListener(fel, 'blur', pie_b);
					}
					else if (ftype == 'radio' || ftype == 'checkbox')
					{
						Event.addListener(fel, 'focus', prce_f);
						Event.addListener(fel, 'blur', prce_b);
					}
					else if (ftype == 'submit')
					{
						// hiç birşey
					}
					else if (ftype != 'file')
					{
						break;
					}

					fel.tabIndex = --pre_tabindex;
					/*if (!UA.ie && ftype != 'submit')
					{*/
						lastnode = pifoc(fel, lastnode);
					//}
					
					lastinput = fel;
					
				break;
				case 'textarea':
					if (!iaelm(fel))
					{
						break;
					}
					
					Event.addListener(fel, 'focus', pte_f);
					Event.addListener(fel, 'blur', pte_b);

					fel.tabIndex = --pre_tabindex;

					/*if (!UA.ie)
					{*/
						lastnode = pifoc(fel, lastnode);
					// }
					
					lastinput = fel;
				break;
				
				case 'select':
					if (!iaelm(fel))
					{
						break;
					}
					
					fel.tabIndex = --pre_tabindex;
					
					lastnode = pifoc(fel, lastnode);
					
					lastinput = fel;
				break;
			}
		}

		/*if (UA.ie)
		{ // enter tuşu sadece IE üzerinde Değişim Yapılabiliyor
			Event.on(document.forms, 'keydown', pfekd_ie);
		}*/

		if (lastinput !== null)
		{
			lastinput.focus();
		}
	
		Event.on(document.forms[i], 'keydown', form_keydown, i);
	}
}

function form_keydown(e, idname)
{
	var keycode = e.keyCode ? e.keyCode : e.which, ctrlkey = e.ctrlKey ? e.ctrlKey : (e.modifiers == 2);
	if (ctrlkey && keycode == 85)
	{
		Event.preventDefault(e);
		var form = Dom.get('quick_submit_' + idname);
		if (!form)
		{
			form = new Yonca.element('div', {
				className  : 'outsetblock',
				id         : 'quick_submit_' + idname
			});
			
			var submitbtn = new Yonca.element('input', { type: 'submit', value: 'Kaydet', className: 'button' }), 
				resetbtn = new Yonca.element('input', { type: 'reset', value: 'Sıfırla', className: 'cbutton' }),
				cancelbtn = new Yonca.element('input', { type: 'button', value: 'İptal', className  : 'cbutton' });
				
			Event.on(cancelbtn, 'click', function(e)
			{
				Dom.removeClass(document.body, 'hidden_select');
				Dom.setStyle(form, 'display', 'none');
				Dom.setStyle(form, 'top', '-9999px');
				Dom.setStyle(form, 'left', '-9999px');
			});
			
			form.appendChild(submitbtn);
			form.appendChild(document.createTextNode(' '));
			form.appendChild(resetbtn);
			form.appendChild(document.createTextNode(' '));
			form.appendChild(cancelbtn);
			
			this.appendChild(form);
		}
		
		Dom.addClass(document.body, 'hidden_select');
		Dom.setStyle(form, 'display', '');
		center_object(form);
		
		return false;
	}
}

/**
* Internet Explorer 'da girilen Key Nosu düzenlenebiliyor...
* Bu nedenle Mozilla tabanlı tarayıcılara tab-enter ilişkilendirmesi yapacağız diye
* acı çekmiyoruz :)
*
* @param	object	event

function pfekd_ie(e)
{
	if (e.keyCode == 13 && __ONINPUT && nn(Event.getTarget(e)) != 'textarea')
	{
		e.keyCode = 9;
	}
}
*/
// Window Yüklendiğinde TabIndex çalıştır... 
// Event.addListener(w, 'load', pfe);

// Artık DOMReady sırasında çalıştırıyoruz.
Yonca.domready_register(pfe);

