
/***********************************************

Fejlesztette: Hidv�gi G�bor (C) 2006.
www.hidvegi.net

***********************************************/

var hg_legordulok = [];
var delay_hide=20;

function Legordulo(os) {
	var parameterek = arguments, self = this, $ = function(id) { return document.getElementById(id); }, dcE = function(str) { return document.createElement(str); };
	var szulo = $(os), szuloszelesseg = szulo.offsetWidth, menupontok, aktualis = 0, azonosito = 'legordulo_' + os, kijelolt;
	var beallitasok = {
		urlek		: false,
		stilus		: 'legordulo',
		szelesseg	: false,
		maxelem		: false
	};

	this.nyitva = false;
	this.azonosito = azonosito;

	function stilus(obj, mezo) {
		var eredmeny = '';
		if (obj.currentStyle) {
			eredmeny = obj.currentStyle[mezo];
		}
		if (window.getComputedStyle) {
			eredmeny = document.defaultView.getComputedStyle(obj, null).getPropertyValue(mezo);
		}
		return eredmeny;
	}
	function allapotsor() {
		window.status = '';
		return true;
	}
	function ures() {
		return false;
	}
	function legordulok_bezar() {
		for (var i = 0; i < hg_legordulok.length; i++) {
			if (hg_legordulok[i].nyitva) {
				hg_legordulok[i].bezar();
			}
		}
	}

	function ertek_beallit(cim) {
		var _obj;
		_obj = $('a_' + azonosito);
		_obj.childNodes[0].nodeValue = cim;
	}

	function letrehoz() {
		var a, ul, div_kozep, div_balszel, div_jobbszel, div_teszt, div_tarto, li;
		var j = 0;

		a = dcE('a');
		a.href = '#';
		a.obj = self;
		a.hideFocus = true;
		a.id = 'a_' + azonosito;
		a.onclick = function() {
			if (this.obj.nyitva) {
			
			} else {
				legordulok_bezar();			
			}	

			this.obj.stilusell(true);
			this.obj.kinyitbezar();
			return false;
		};

		a.onfocus = a.onmouseover = allapotsor;
		a.ondragstart = ures;
		a.appendChild(document.createTextNode(menupontok[aktualis][1]));

		div_jobbszel = dcE('div');
		div_jobbszel.className = 'jobbszel';
		div_jobbszel.appendChild(a);

		div_teszt = dcE('div');
		div_teszt.style.position = 'absolute';
		div_teszt.style.background = 'none';

		div_jobbszel.appendChild(div_teszt);
		div_balszel = dcE('div');
		div_balszel.className = 'balszel';
		div_balszel.appendChild(div_jobbszel);

		ul = dcE('ul');
		ul.className = 'nemlatszik';
		ul.id = 'ul_' + azonosito;
		if (beallitasok.szelesseg !== false) {
			ul.style.width = beallitasok.szelesseg + 'px';
		}

		menupontok_letrehoz(ul);
		
		div_kozep = dcE('div');
		div_kozep.id = azonosito;
		div_kozep.className = beallitasok.stilus;
		div_kozep.style.width = szuloszelesseg + 'px';
		div_kozep.appendChild(div_balszel);
		div_kozep.appendChild(ul);
		div_tarto = dcE('div');
		div_tarto.className = 'legordulo_tarto';
		div_tarto.style.background = 'none';
		
		div_tarto.appendChild(div_kozep);
		div_kozep.style.zIndex = 9000 - hg_legordulok.length;
		
		szulo.style.display = 'none';
		
		szulo.parentNode.insertBefore(div_tarto, szulo.nextSibling);
		hg_legordulok[hg_legordulok.length] = self;

		ertek_beallit(menupontok[aktualis][1]);

		if (beallitasok.maxelem !== false && szulo.options.length > beallitasok.maxelem && ul.style.overflow === '') {
			var magassag = 0;
			var elemek = ul.getElementsByTagName('a');
			j = 0;
			for (i in elemek) {
				if (elemek[i].offsetHeight !== undefined) {
					magassag += elemek[i].offsetHeight;
					j++;
					if (j == beallitasok.maxelem) {
						break;
					}
				}
			}
			ul.style.height = '150px';
		}
		if (window.bongeszo_obj && window.bongeszo_obj.ie && window.bongeszo_obj.ie < 7) {
			ul.style.overflow = 'auto';
		}
		var _obj = $('a_' + azonosito);
		if (_obj.currentStyle && window.bongeszo_obj.ie && window.bongeszo_obj.ie && window.bongeszo_obj.ie != '5.5') {
			var _padding = 0;
			_padding += parseInt(_obj.currentStyle.paddingLeft, 10);
			_padding += parseInt(_obj.currentStyle.paddingRight, 10);
			_obj.style.width = (szuloszelesseg - _padding) + 'px';
		}
		if (beallitasok.szelesseg === false) {
			ul = $('ul_' + azonosito);
			j = szuloszelesseg - ul.offsetWidth;
			var k = stilus(ul, 'width');
			ul.style.width = k + j + 'px';
		}
		
		document.getElementById('ul_' + azonosito).onclick = document.getElementById(azonosito.replace(/legordulo_/,'')).onchange;
		document.getElementById('ul_' + azonosito).onmouseout = function () {
			start_delayhide()
		};
		document.getElementById('ul_' + azonosito).onmouseover = function () {
			clear_delayhide()
		};
	}
	function hidemenu() {
		legordulok_bezar();
	}
	function start_delayhide() {
		delayhide=setTimeout(hidemenu,delay_hide)
	}
	function clear_delayhide() {
		if (window.delayhide)
		clearTimeout(delayhide);
	}
	function menupontok_letrehoz(ul) {
		var j = 0, li;
		for (var i in menupontok) {
			if (i >= 0) {
				li = dcE('li');
				li.appendChild(ujmenupont(menupontok[i], j));
				li.id = 'value_'+menupontok[i][0]
				ul.appendChild(li);
				j++;
			}
		}
	}

	function ujmenupont(ertekek, szam) {
		var cim = ertekek[1];
		var ertek = ertekek[0];
		var a = dcE('a');
		a.href = (beallitasok.urlek) ? ertek : '#';
		a.hideFocus = true;
		a.obj = self;
		a.cim = cim;
		a.ertek = ertek;
		a.szam = szam;
		a.disabled = ertekek[2];
		if (!beallitasok.urlek) {
			a.onfocus = a.onmouseover = allapotsor;
			a.onclick = function() { if (!this.disabled) { this.obj.ertek_atad(this); } return false; };
		}
		a.ondragstart = ures;
		a.appendChild(document.createTextNode(cim));
		return a;
	}

	this.menupontok_frissit = function() {
		var ul = $('ul_' + azonosito), a;

		while (undefined !== (a = ul.getElementsByTagName('a')[0])) {
			a.click = a.onfocus = a.ondragstart = null;
			ul.removeChild(a.parentNode);
		}
		szulo_beolvas();
		menupontok_letrehoz(ul);
		ertek_beallit(menupontok[aktualis][1]);
	};

	this.stilusell = function(bekapcsol) {
		var _obj = $(azonosito).getElementsByTagName('a')[0];
		if (bekapcsol) {
			_obj.onmouseout_bizt = _obj.onmouseout;
			_obj.onmouseout = function() {};
		}
		else {
			_obj.onmouseout = _obj.onmouseout_bizt;
			$(azonosito).className = beallitasok.stilus;
		}
	};

	this.kinyitbezar = function() {
		if (this.nyitva) {
			this.bezar();
		}
		else {
			this.kinyit();
		}
	};
	this.kinyit = function() {
		this.nyitva = true;
		$('ul_' + azonosito).className = 'latszik';
		setTimeout(function() { document.getElementsByTagName('body')[0].onclick = legordulok_bezar; }, 20);
	};
	this.bezar = function() {
		document.onkeydown = null;
		this.nyitva = false;
		$('ul_' + azonosito).className = 'nemlatszik';
		document.getElementsByTagName('body')[0].onclick = ures;
		this.stilusell(false);
	};

	this.ertek_atad = function(obj) {
		ertek_beallit(obj.cim);
		this.ertek = obj.ertek;
		szulo.selectedIndex = obj.szam;
		this.bezar();
	};

	function szulo_beolvas() {
		menupontok = [];
		for (var i = 0; i < szulo.options.length; i++) {
			if (i === 0 || szulo.options[i].selected) {
				aktualis = i;
			}
			menupontok[menupontok.length] = [szulo.options[i].value, szulo.options[i].text, szulo.options[i].disabled];
		}
	}

	function konstruktor() {
		szulo_beolvas();
		if (parameterek.length == 2) {
			var initobject = parameterek[1];
			for (i in initobject) {
				beallitasok[i] = initobject[i];
			}
		}
		letrehoz();
	}

	konstruktor();
}