var MH_CAL_DISP_ALLEVENTS = "all-events";
var MH_CAL_DISP_MYEVENTS = "my-events";

var MH_CAL_MONTH_PREV = "previous-month";
var MH_CAL_MONTH_NEXT = "next-month";

function initMHCalendar() {

	// hide submit button
	$$("form#mh_calendar_form input[type='submit']").addClass("hidden");
	
}

function resetMHCalendar() {

	// reset form (ie/firefox/chrome form field caching hack...)
	$("mh_calendar_form").reset();
	
	// reset date (ie/firefox/chrome form field caching hack...)
	var today = new Date();
	
	$$("form#mh_calendar_form input[name='ev-month']")[0].setProperty("value", today.getMonth() + 1);
	$$("form#mh_calendar_form input[name='ev-year']")[0].setProperty("value", today.getFullYear());

}

function mhCalendarLoad(response) {

	if (response != null) {
	
		// hide loading icon
		$$("div#mh_calendar ul.days")[0].removeClass("loading");
		
		// set inner html
		$$("div#mh_calendar ul.days")[0].set("html", response.html);
	
	} else {
	
		// get params
		var disp = $$("form#mh_calendar_form select")[0].value;
		var month = $$("form#mh_calendar_form input[name='ev-month']")[0].getProperty("value");
		var year = $$("form#mh_calendar_form input[name='ev-year']")[0].getProperty("value");
		
		// hide dates
		var dates = $$("div#mh_calendar ul.days li");
		
		for (var i = 0; i < dates.length; i++)
			dates[i].setStyle("visibility", "hidden");
		
		// show loading icon
		$$("div#mh_calendar ul.days")[0].addClass("loading");
		
		// json request
		new Request.JSON({
				url: "/modules/h_members/actions.php",
				onSuccess: mhCalendarLoad
			}).post({
				"a": "cal_load",
				"disp": disp,
				"month": month,
				"year": year
			});
	
	}

}

function mhCalSetHeader(response, cls, update_href) {

	if (response != null) {
	
		$$("div#mh_calendar div.header a." + MH_CAL_DISP_ALLEVENTS)[0].setProperty("href", response.all_events);
		$$("div#mh_calendar div.header a." + MH_CAL_DISP_MYEVENTS)[0].setProperty("href", response.my_events);
	
	} else {

		// toggle active link
		if (cls != null) {
		
			if (cls == MH_CAL_DISP_ALLEVENTS || cls == MH_CAL_DISP_MYEVENTS) {
			
				// get header links
				var header_links = $$("div#mh_calendar div.header a");
				
				// deactivate all links
				for (var i = 0; i < header_links.length; i++)
					header_links[i].removeClass("active");
				
				// activate clicked link
				$$("div#mh_calendar a." + cls)[0].addClass("active");
				
			}
			
		}
		
		// update link href
		if (update_href != null) {
		
			// get params
			var month = $$("form#mh_calendar_form input[name='ev-month']")[0].getProperty("value");
			var year = $$("form#mh_calendar_form input[name='ev-year']")[0].getProperty("value");
			
			// json request
			new Request.JSON({
					url: "/modules/h_members/actions.php",
					onSuccess: mhCalSetHeader
				}).post({
					"a": "hl_urls",
					"month": month,
					"year": year
				});
		
		}
		
	}

}

function mhCalHeaderToggle(ev, link, cls) {

	// handle event
	var event = new Event(ev).stop();
	
	if (!$(link).hasClass("active")) {
	
		// set active header link
		mhCalSetHeader(null, cls);
		
		// select drop down option
		mhCalSetDdl(cls);
		
		// refresh calendar
		mhCalendarLoad();
		
		// load events
		mhBodyLoad(null, MH_EVENTS_TAB);
	
	}

}

function mhCalMonthToggle(response, ev, link) {

	if (response != null) {

		// update form data
		$$("form#mh_calendar_form input[name='ev-month']")[0].setProperty("value", response.month);
		$$("form#mh_calendar_form input[name='ev-year']")[0].setProperty("value", response.year);
		
		// set inner html
		$$("div#mh_calendar ul.months")[0].set("html", response.html);
		
		// update header links
		mhCalSetHeader(null, null, true);
		
		// refresh calendar
		mhCalendarLoad(null);
	
	} else {
	
		// handle event
		var event = new Event(ev).stop();	
		
		// get params
		var action = null;
		var disp = $$("form#mh_calendar_form select")[0].value;
		var month = $$("form#mh_calendar_form input[name='ev-month']")[0].getProperty("value");
		var year = $$("form#mh_calendar_form input[name='ev-year']")[0].getProperty("value");
		
		if ($(link).getParent("li").hasClass(MH_CAL_MONTH_PREV))
			action = "cal_prev_month";
		else if ($(link).getParent("li").hasClass(MH_CAL_MONTH_NEXT))
			action = "cal_next_month";
		
		if (action != null) {
		
			// json request
			new Request.JSON({
					url: "/modules/h_members/actions.php",
					onSuccess: mhCalMonthToggle
				}).post({
					"a": action,
					"disp": disp,
					"month": month,
					"year": year
				});
		
		}
		
	}

}

function mhCalSetDdl(option) {

	// get options
	var options = $$("form#mh_calendar_form select option");
	
	// set active option
	for (var i = 0; i < options.length; i++) {
	
		if (options[i].getProperty("value") == option)
			options[i].setProperty("selected", "selected");
		else
			options[i].removeProperty("selected");
	
	}
	
}

function mhCalDdlToggle(option) {

	// set active header link
	mhCalSetHeader(null, option);
	
	// refresh calendar
	mhCalendarLoad();
	
	// load events
	mhBodyLoad(null, MH_EVENTS_TAB);

}

function mhCalDayClick(ev, day) {

	// handle event
	var event = new Event(ev).stop();
	
	var params = new Object();
	params.ev_day = day;

	// load events
	mhBodyLoad(null, MH_EVENTS_TAB, params);

}

windowDomReady[windowDomReady.length] = function() {

	// calendar
	if ($("mh_calendar_form"))
		initMHCalendar();
	
};

windowOnload[windowOnload.length] = function() {

	// calendar
	if ($("mh_calendar_form"))
		resetMHCalendar();

};