var ua;
ua = navigator.userAgent;

var isIE = (navigator.appName == "Microsoft Internet Explorer");
var isIE6 = isIE && (ua.indexOf('MSIE 6') != -1);
var isIE7 = isIE && (ua.indexOf('MSIE 7') != -1);
var isFF = (ua.indexOf('Firefox') != -1);

var px = (document.all) ? "" : "px";

var ELEMENT_NODE 			= 1;
var ATTRIBUTE_NODE	 		= 2;
var TEXT_NODE 				= 3;
var CDATA_SECTION_NODE		= 4;
var COMMENT_NODE			= 8;
var DOCUMENT_NODE			= 9;
var DOCUMENT_TYPE_NODE		= 10;
var DOCUMENT_FRAGMENT_NODE	= 11;

if (window.attachEvent) { // IE
	window.attachEvent("onload", NaptarLetrehozas);
}
else { // DOM
	window.addEventListener("load", NaptarLetrehozas, false);
}

function NaptarLetrehozas() {
	naptar.show();
}

	// Ez a konstruktor
function EsemenynaptarNaptar(div_id) {
	this.naptar_div = div_id;
	this.htmlDoc = "";
	this.esemenyek = new Array();      
	this.timeout = null;
	this.over = null;
	d = new Date();
	this.akt_ev = d.getFullYear();
	this.akt_ho = d.getMonth();
	this.akt_nap = d.getDate();
	this.datum = d.getFullYear() + "-" + this.setDigits(d.getMonth() + 1, 2) + "-" + this.setDigits(d.getDate(), 2);
}

EsemenynaptarNaptar.prototype = {
	
	show : function(datum) {
		if (datum == "undefined") datum = this.datum;
		this.setDatum(datum);
		this.getAdatok();
	},
	
	setDatum : function(datum) {
		if ((typeof datum == "undefined") || (!/^[12]{1}[90]{1}[0-9]{2}(([\-\/\.]{1})[0-9]{2})\2[0-9]{2}/.test(datum))) {
			d = new Date();
			this.akt_ev = d.getFullYear();
			this.akt_ho = d.getMonth() + 1;
			this.akt_nap = d.getDate();
			datum = this.getAktDatumString();
		}
		this.datum = datum;
	},
	
	setAktNap : function(nap) {
		if ((!/^[\d]+$/.test(nap)) || (nap == "")) {
			d = new Date();
			nap = d.getDate();
		}
		this.akt_nap = nap;
	},
	
	setAktHonap : function(honap) {
		
	},
	
	setAktEv : function(ev) {
		
	},
	
	setDigits : function(num, digits) {
		var result = "";
		var str = num.toString();
		for (var i = 0; i < (digits - str.length); i++) {
			result += "0";
		}
		return result + str;
	},
	
	getAktDatumString : function() {
		return this.akt_ev + '-' + this.setDigits(this.akt_ho, 2) + "-" + this.setDigits(this.akt_nap, 2);
	},
	
	write : function() {
		document.getElementById(this.naptar_div).innerHTML = this.htmlDoc;
		this.addEvents();
	},
	
	addEvents : function() {
		my = this;
		var napok = getElementsByAttribute(document.getElementById("EsemenynaptarMainDiv"), "div", "class", "esemenynap");
		for (var i = 0; i < napok.length; i++) {
			dt = this.getAktDatumString();
			napok[i].onmouseover = function() {my.mouseOver(this);}
			napok[i].onmouseout = function() {my.mouseOut(this);}
			napok[i].onclick = function() {my.mouseClick(this);}
		}
	},
	
	mouseOver : function(obj) {
		if (this.over != obj) {
			content = document.getElementById("b_content");
			fej = document.getElementById("b_top");
				// todo: A következő sort a teszt miatt kivettem. Szerintem később vissza kell tenni.
				// a HTML-ben található id="buborek" miatt nem kell ez a sor
			//if (!isIE6) buborek = document.getElementById("buborek");
			child = getElementsByAttribute(obj, "div", "class", "events");
			nap_top = getRealTop(obj);
			nap_left = getRealLeft(obj);
			
			clearTimeout(this.timeout);
			this.over = obj;
			this.setAktNap(obj.getAttribute("nap"));
			
			fej.innerHTML = '<span class="fej_datum">' + this.getAktDatumString() + '</span>';
			content.innerHTML = child[0].innerHTML;
			
			buborek_height = buborek.clientHeight;
			buborek.style.top = (nap_top - buborek_height) + px;
			buborek.style.left = (nap_left - 20) + px;
			
			this.timeout = setTimeout('naptar.setVisibility("visible")', 500);
		}
	},
	
	mouseOut : function(obj) {
		if (this.over == obj) {
			clearTimeout(this.timeout);
			this.over = null;
			this.timeout = setTimeout('naptar.setVisibility("hidden")', 500);
		}
	},
	
	mouseClick : function(obj) {
		window.location.href = this.self_url() + "?menu=esemenynaptar&cw_enm=esemenyek&datum=" + this.getAktDatumString();
	},
	
	self_url : function() {
		return location.protocol + "//" + location.host + location.pathname;
	},
	
	setDisplay : function(value) { 
		div = document.getElementById("buborek");
		div.style.display = value;
	},
	
	setVisibility : function(value) {
		div = document.getElementById("buborek");
		div.style.visibility = value;
	},
	
	getEv : function() {
		return this.splitDatum()[0];
	},
	
	getHonap : function(nevvel) {
		h = this.splitDatum()[1];
		if (nevvel) {
			return this.getHonapnev(h);
		}
		return h;
	},
	
	getHonapnev : function(honap) {
		var honapnevek = Array("december","január","február","március","április","május","június","július","augusztus","szeptember","október","november","december");
		h = /[^0]+.*/.exec(honap);
		return honapnevek[h[0]];
	},
	
	getNapnev : function(nap) {
		var napnevek = Array("hétfő","kedd","szerda","csütörtök","péntek","szombat","vasárnap");
		h = /[^0]+.*/.exec(nap);
		return napnevek[h[0]];
	},
	
	splitDatum : function() {
		return this.datum.split(this.datum.substring(4,5));
	},
	
	getAdatok: function() {
		path = (EsemenyekPath) ? EsemenyekPath : "";
		datum = this.datum;
		this.makeRequest(path + 'esemenynaptar_esemenyek.php?datum=' + datum);
	},
	
	makeRequest: function(url) {
		my = this;
		var http_request = false;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				http_request.overrideMimeType('text/xml');
			}
		} 
		else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {
				}
			}
		}
		if (!http_request) {
			alert('Ajax hiba! Nem sikerült XMLHTTP példányt létrehozni.');
			return false;
		}
		http_request.onreadystatechange = function() {
			my.setHtmlDoc(http_request);
		};
		http_request.open('GET', url, true);
		http_request.send(null);
	},
	
	setHtmlDoc: function(http_request) {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				this.htmlDoc = http_request.responseText; // eredeti
				this.write(); // eredeti
			}
			else {
				alert('Ajax hiba! A kérés nem teljesíthető.');
			}
		}
	},
	
	fel : function(container) {
		if (!gorget) {
			if (container == "ho_container") {
				next = this.akt_ho + 1;
				this.akt_ho = (next > 12) ? 1 : next;
				text = this.getHonapnev(this.akt_ho);
			}
			else {
				this.akt_ev = this.akt_ev + 1;
				text = this.akt_ev;
			}
			this.setDatum(this.getAktDatumString());
			
			obj = document.getElementById(container);
			d = document.createElement("DIV");
			t = document.createTextNode(text);
			d.appendChild(t);
			obj.appendChild(d);
			ek = obj.childNodes;
			elemek = Array();
			
			for (var i = 0; i < ek.length; i++) if (ek[i].nodeType == ELEMENT_NODE) elemek.push(ek[i]);
			var elem_height = elemek[0].offsetHeight;
			
			var lepes = (isFF) ? 5 : 1;
			var interval = setInterval(function() {
				if (elemek[0].offsetTop > 0) {
					poz = elemek[0].offsetTop - lepes;
					if (poz < 0) poz = 0;
					elemek[0].style.top = (poz) + px;
					elemek[1].style.top = (poz) + px;
					gorget = true;
				}
				else {
					window.clearInterval(interval);
					elemek[1].style.top = "17" + px;
					obj.removeChild(elemek[0]);
					gorget = false;
				}
			}, 10);
		}
	},
	
	le : function(container) {
		if (!gorget) {
			if (container == "ho_container") {
				prev = this.akt_ho - 1;
				this.akt_ho = (prev < 1) ? 12 : prev;
				text = this.getHonapnev(this.akt_ho);
			}
			else {
				this.akt_ev = this.akt_ev - 1;
				text = this.akt_ev;
			}
			this.setDatum(this.getAktDatumString());

			obj = document.getElementById(container);
			d = document.createElement("DIV");
			t = document.createTextNode(text);
			d.appendChild(t);
			elem_height = d.offsetHeight;
			obj.appendChild(d);
			ek = obj.childNodes;
			elemek = Array();
			
			for (var i = 0; i < ek.length; i++) if (ek[i].nodeType == ELEMENT_NODE) elemek.push(ek[i]);
			elemek[1].style.top = "-17" + px;
			obj.insertBefore(elemek[1], obj.firstChild);
				// Ezt a sort az IE6-on kívül minden böngésző megeszi
			//obj.insertBefore(elemek[1], obj.firstElementChild);
			elemek[1].style.top = "0" + px;
			elemek[0].style.top = "0" + px;
			
			var lepes = (isFF) ? 5 : 1;
			var interval = setInterval(function() {
				if (elemek[1].offsetTop < 17) {
					poz = elemek[1].offsetTop + lepes;
					if (poz > 17) poz = 17;
					elemek[1].style.top = (poz) + px;
					elemek[0].style.top = (poz) + px;
					gorget = true;
				}
				else {
					window.clearInterval(interval);
					obj.removeChild(elemek[0]);
					elemek[1].style.top = "17" + px;
					gorget = false;
				}
			}, 10);
		}
	}
}

var naptar = new EsemenynaptarNaptar("EsemenynaptarMainDiv");
var gorget;

function getRealTop(e){
  var top = e.offsetTop;
  while (e=e.offsetParent){
    top += e.offsetTop;
  }
  return top ;
}
 
function getRealLeft(e){
  var left = e.offsetLeft;
  while (e=e.offsetParent){
    left += e.offsetLeft;
  }
  return left;
}

/* Meghívása: 
var elemek = getElementsByAttribute(document.body, "*", "id");
var elemek = getElementsByAttribute(document.getElementById("the-form"), "input", "type", "text");
*/
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i<arrElements.length; i++){
		oCurrent = arrElements[i];
		if (isIE6 || isIE7) {
			oAttribute = oCurrent.getAttributeNode(strAttributeName).value;
		}
		else {
			oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
		}
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}

if (!Array.prototype.indexOf) {  
	/* Mivel az IE nem ismeri az indexOf függvényt, hasznos kiegészítés
	 * az array.indexOf() függvény (FF 1.5-től ismeri, de nem ismeri az IE) 
	 * 
	 * első paraméter "elem", az az elem amelyet a tömbben keresünk. 
	 * @param {Number} [from] Position in array to look from. 
	 */  
	Array.prototype.indexOf = function(elem /*, from*/) {  
		var len = this.length;  

		var from = Number(arguments[1]) || 0;  
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);  
		if (from < 0) {  
			from += len;  
		}

		for (; from < len; from++) {  
			if (from in this && this[from] === elem) {  
				return from;  
			}
		}

		return -1;  
	};
}



