/*
   EventBrowser javascriptek:
   
 Mukodese: a napokat es az esemenyeket egy Vectorban fogjuk tarolni, es minden egyes 
 kategoria valtas alkalmaval vegigmegyunk a tombokon es megnezzzuk, mely elemek 
 rendelkeznek az adott kategoriaval, majd ezek class-at valtoztatjuk (jelenitjuk meg)
*/

//esemenyeket fogja tarolni
//var events = new Vector(10);
var events = [];

//a select-bol ezen ertek jelenti a mindent
var allCategories = "all_categories";

/*
    Event class:kozepen egy adott event class-a
*/
function Event(id, categories){
	this.id = id;
	this.categories=categories;
	this.visible=true;
}

Event.prototype.getID = function(){
	return this.id;
}

Event.prototype.getCategories = function(){
	return this.categories;
}

Event.prototype.hasCategories = function(){
	return this.categories.getSize()>0;
}

Event.prototype.hasCategory = function(categoryName){
	return this.categories.contains(categoryName);
}

Event.prototype.isMultipleEvent = function(){
	return this.categories.getSize()>1;
}

Event.prototype.getVisible = function(){
	return this.visible;
}

Event.prototype.setVisible = function(isVisible){
	this.visible = isVisible;
}


Event.prototype.toString = function(){
	return this.id + " " + this.categories;
}


/*
  Jobb oldalt a kategoriavaltasakor hivodik meg, es 
  beallitja az adott kategoriakat tartalmazo tablazat cellak CSS style-at.
*/
function changeEventDaysStyle(portletid){
	//select tag
	var selectElement = document.getElementById("categoryselect_"+portletid);
	
	//kivalasztott kategoria
	var selectedCategory=selectElement.value;
	
	var currentDay;
	
	//ha "minden" van kivalasztva
	var isAllCategories = (selectedCategory == allCategories);
	
	//ujra lekerjuk AJAX-al a naptarat, kategoriakra szurve
	var _currentYear = document.getElementById("currentyear_"+portletid);
	var _currentMonth = document.getElementById("currentmonth_"+portletid);
	var _yearSelect = document.getElementById("yearselect_"+portletid);
	var _monthSelect = document.getElementById("monthselect_"+portletid);
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	var currentYear;
	var currentMonth;
	
	//legordulo selectre es lapozora egxyxarant mukodnie kell, eloszor legordulo selectet vizsgal
	try{
		currentYear = _yearSelect.value;
	}
	catch(e){
		currentYear = _currentYear.value;
	}
	try{
		currentMonth = _monthSelect.value;
	}
	catch(e){
		currentMonth = _currentMonth.value;
	}
	
	getCalendarForMonth(portletid, currentYear*1, currentMonth*1, _selectedCategoryID);

	//ha a kozepso megjelenito van, akkor az esemenyeket is ki kell listazni
	if(enableListEvents){
		//ha az osszeset kell listazni
		if(isAllCategories){
			listAllEvents(portletid);
		}else{
			listEvents(selectedCategory, portletid);
		}
	}
}// fv vege


/*
  Az esemeny listazo ugy mukodik, hogy van egy lathato es egy nem lathato DIV
  Attol fuggoen, hogy az adott esemenyt ki kell-e jelezni,
  a ket div kozott mozgatjuk az esemenyt tartalmazo div-et az appendChild metodus segitsegevel
  (lsd.: DOM)
  
  Ha az osszes esemenyt ki kell listazni, akkor mindegyiket befuzzuk a lathato div-be
*/
function listAllEvents(portletid){
	//a lathato div, ebbe fogjuk belefuzni az esemenyek div-jeit
	var divNode = document.getElementById("currentEvents_"+portletid);
	var currentEvent;
	var eventNode;
	
	//az osszes esemenyt elkerjuk
	for (var i=0; i<events.length;i++){
		currentEvent = events[i];
		eventNode = document.getElementById(currentEvent.getID());
		// alert(eventNode.innerHTML);
		//befuzzuk, hogy lathato legyen
		divNode.appendChild(eventNode);
	}
}

/*
  Adott kategoriaju esemenyek megjelenitese
*/
function listEvents(eventCategory, portletid){
	//ebbe fuzzuk a lathato esemenyeket (adott kategorianak megfeleloeket)
	var visibleDivNode = document.getElementById("currentEvents_"+portletid);
	//a nem megfelelo kategoriajuakat ebbe fogjuk elrejteni
	var hiddenDivNode = document.getElementById("hiddenEvents_"+portletid);
	var currentEvent;
	var eventNode;
	
	//vegigmegyunk az esemenyeken
	for (var i=0; i<events.length;i++){
		currentEvent = events[i];
		//ha benne van az aktualisan kivalasztott kategoriaban
		//akkor megjelenitjuk
		if(currentEvent.hasCategory(eventCategory)){
			eventNode = document.getElementById(currentEvent.getID());
			visibleDivNode.appendChild(eventNode);
		}else{
			//egyebkent pedig elrejtjuk
			eventNode = document.getElementById(currentEvent.getID());
			hiddenDivNode.appendChild(eventNode);
		}	
	}    
}

///////////////////////////////////////////////////

function writeYearOptionsForCalendar(portletid){
	Now = new Date();
	NowYear = Now.getFullYear(); //Aktualis ev
	if (NowYear < 2000) NowYear += 1900; //netscape miatt kell
	
	CurrentYear = NowYear;
	CurrentMonth = Now.getMonth();
	
	FromYear = NowYear - 6;
	ToYear = NowYear + 5;
	  
	line = "";
	
	for (i=ToYear; i!=FromYear; i--)
	{
		if (i==CurrentYear){
			line += "<OPTION value='"+i+"' selected = 'selected'>";
		}
		else{
			line += "<OPTION value='"+i+"'>";
		}
		line += i;
	}
	return line;
}

/*
 * az oldal letoltese utan a mai datumhoz betolti a naptarat
 */
function loadCalendar(portletid){
	d = new Date();
	currentyear = d.getFullYear();
	currentmonth = d.getMonth()+1;//0-11-ig vannak a honapok, ezert

	getCalendarForMonth(portletid, currentyear, currentmonth);
	//az osszes eventet listazzuk alapbol
	/*try{
		listAllEvents();
	}
	catch(e){}*/
}

/*
 * elozo honap nyil onclick esemnye
 */
function jumpToPrevMonth(portletid){
	var _currentYear = document.getElementById("currentyear_"+portletid);
	var _currentMonth = document.getElementById("currentmonth_"+portletid);
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	var prevYear = _currentYear.value*1;
	var prevMonth = _currentMonth.value*1;
	if (the_selectedMonth==1){
		prevYear = prevYear-1;
		prevMonth = 12;
	}
	else{
		prevMonth = prevMonth-1;
	}
	
	getCalendarForMonth(portletid, prevYear, prevMonth, _selectedCategoryID);
}

/*
 * kovetkezo honap nyil onclick esemenye
 */
function jumpToNextMonth(portletid){
	var _currentYear = document.getElementById("currentyear_"+portletid);
	var _currentMonth = document.getElementById("currentmonth_"+portletid);
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	var nextYear = parseInt(_currentYear.value);
	var nextMonth = parseInt(_currentMonth.value);
	if (the_selectedMonth==12){
		nextYear = nextYear+1;
		nextMonth = 1;
	}
	else{
		nextMonth = nextMonth+1;
	}
	
	getCalendarForMonth(portletid, nextYear, nextMonth, _selectedCategoryID);
}

/*
 * elozo ev nyil onclick esemnye
 */
function jumpToPrevYear(portletid){
	var _currentYear = document.getElementById("currentyear_"+portletid);
	var _currentMonth = document.getElementById("currentmonth_"+portletid);
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	var prevYear = _currentYear.value*1;
	var prevMonth = _currentMonth.value*1;
	
	prevYear = prevYear-1;
	
	getCalendarForMonth(portletid, prevYear, prevMonth, _selectedCategoryID);
}

/*
 * kovetkezo ev nyil onclick esemenye
 */
function jumpToNextYear(portletid){
	var _currentYear = document.getElementById("currentyear_"+portletid);
	var _currentMonth = document.getElementById("currentmonth_"+portletid);
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	var nextYear = parseInt(_currentYear.value);
	var nextMonth = parseInt(_currentMonth.value);
	
	nextYear = nextYear+1;
	
	getCalendarForMonth(portletid, nextYear, nextMonth, _selectedCategoryID);
}

/*
 * ev es honap kivalaszto onchange esemenye
 */
function jumpToCalendarMonth(portletid){
	selectedYear = document.getElementById("yearselect_"+portletid).value;
	selectedMonth = document.getElementById("monthselect_"+portletid).value;
	var _currentCategorySelector = document.getElementById("categoryselect_"+portletid);
	var _selectedCategoryID = (_currentCategorySelector==null)?"":_currentCategorySelector.value;
	
	getCalendarForMonth(portletid, selectedYear, selectedMonth, _selectedCategoryID);
}

/*
 * ajax hivas
 */
function getCalendarForMonth(portletid, year, month, categoryID){
	ajaxURL = location.href;
	idxquery = ajaxURL.indexOf("?");
	idxanchor = ajaxURL.indexOf("#");
	
	
	if (idxquery>0 && idxanchor>0) idx = Math.min(idxquery,idxanchor);
	else if (idxquery>0) idx = idxquery;
	else idx = idxanchor;
	
	if (idx>0){
		ajaxURL = ajaxURL.substring(0,idx);
	}
	ajaxURL += "?ajaxrequest=EventBrowserAjaxAction&eb_portletid="+portletid+"&month="+year+"_"+month+"&category="+categoryID;
	
	try{
		var _eventHeadingID = document.getElementById("eventheadingid_"+portletid);
		if (_eventHeadingID!=null){
			ajaxURL += "&headingid="+_eventHeadingID.value;
		}
	}
	catch(e){ajaxURL}
	
	req = $.ajax({url:ajaxURL, success:getCalendarForMonth_callBack, type:'GET'});
	/*req = ponte.Services.AjaxService.createRequest(ajaxURL, getCalendarForMonth_callBack, undefined, 'GET', null);
	
	req.makeRequest();*/
}

/*
 * ajax hivas visszateresekor az eredmenyt feldolgozo metodus
 */
function getCalendarForMonth_callBack(response){
	//firefox 4096 bug miatt el kell kerni a responsetextet is, mert neha truncolja a visszaadott XML-t
	response.responseText;
	//var xmldoc = response.responseXML;
	var xmldoc = response;
	
	var root = xmldoc.getElementsByTagName('eventbrowserdataroot').item(0);
	
	if (root==null){
		window.location.reload();
	}

	var portletid = root.getElementsByTagName("eb_portletid").item(0).firstChild.nodeValue;
	var calendarContent = root.getElementsByTagName("transformedcalendarnode").item(0).firstChild.nodeValue;
	//helyere rakjuk a transzformalt calendar nodeot
	var calendarPlaceHolder = document.getElementById('calendarplaceholder_div_'+portletid);
	calendarPlaceHolder.innerHTML = calendarContent;
	
	the_selectedYear = root.getElementsByTagName("selected_year").item(0).firstChild.nodeValue;
	the_selectedMonth = root.getElementsByTagName("selected_month").item(0).firstChild.nodeValue;
	the_selectedCategory = root.getElementsByTagName("selected_category").item(0).firstChild.nodeValue;
	the_selected_day_id = document.getElementById("selected_day_id_"+portletid);
	
	//megprobaljuk kijelolni a kivalasztott napot (css class-al)
	try{
		var selectedDay = document.getElementById(the_selected_day_id.value);
		selectedDay.className = selectedDay.className + " ThisDayEvent";
	}
	catch(e){}
	
	//nem fontos, ha van legordulo ev select, azt allitja
	try{
		_yearSelector = document.getElementById("yearselect_"+portletid);
		for (i = 0; i<_yearSelector.options.length; i++){
			if (_yearSelector.options[i].value==the_selectedYear){
				_yearSelector.options[i].selected=true;
			}
			else{
				_yearSelector.options[i].selected=false;
			}
		}
	}catch(e){}
	
	//nem fontos, ha van legordulo honap select, azt allitja
	try{
		_monthSelector = document.getElementById("monthselect_"+portletid);
		for (i = 0; i<_monthSelector.options.length; i++){
			if (_monthSelector.options[i].value==the_selectedMonth){
				_monthSelector.options[i].selected=true;
			}
			else{
				_monthSelector.options[i].selected=false;
			}
		}
	}
	catch(e){}
	
	//ha van lapozo akkor az ahhoz kello aktualis ev es honap input erteket allitja
	try{
		_currentYear = document.getElementById("currentyear_"+portletid);
		_currentMonth = document.getElementById("currentmonth_"+portletid);
		
		_currentYear.value=the_selectedYear;
		_currentMonth.value=the_selectedMonth;
	}
	catch(e){}

	//ha kulon van lapozo az evhez es a honaphoz akkor kulon kell kiirni az evet es honapot
	try{
		_currentYearText = document.getElementById("currentyeartext_"+portletid);
		_currentMonthText = document.getElementById("currentmonthtext_"+portletid);
		
		_currentYearText.innerHTML = the_selectedYear;
		_currentMonthText.innerHTML = root.getElementsByTagName("selected_month_name").item(0).firstChild.nodeValue;
	}
	catch(e){}
	
	//ha van aktualis datum kiiras akkor azt allitja (ev + honap betuvel formatum)
	try{
		_currentMonth_div = document.getElementById("currentmonth_div_"+portletid);
		_currentMonth_div.innerHTML = the_selectedYear+". "+root.getElementsByTagName("selected_month_name").item(0).firstChild.nodeValue;
	}
	catch(e){}
	
	//ha van kategoria valaszto akkor azt allitja
	try{
		_categorySelector = document.getElementById("categoryselect_"+portletid);
		for (i = 0; i<_yearSelector.options.length; i++){
			if (_categorySelector.options[i].value==the_selectedCategory){
				_categorySelector.options[i].selected=true;
			}
			else{
				_categorySelector.options[i].selected=false;
			}
		}
	}
	catch(e){}
}

