
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/glossary/TermOfTheDay.js
*/
var TermOfTheDay_class = function() {}

TermOfTheDay_class.prototype.PATH_EDIT_TERM_OF_DAY = "/ft/resources/buffer/glossaryUpdateTermOfDay.asp";
TermOfTheDay_class.prototype.PATH_PAGE_CALENDAR = "/ft/resources/buffer/glossaryCalendarTermOfDay.asp";

TermOfTheDay_class.prototype.init = function() {
	var aTermSearchInputs = Element.parseSelector("input.termOfTheDayInput", "wsod"),
		ref = this;

	this.loadingOverlay = this.loadingOverlay || new LoadingOverlay(Element.parseSelector("div.calendarGroup", "wsod", "first"));
		
	this.attachEditableEvents();
	
	this.getEventManager().add(Element.parseSelector("div.calendarNav a", "wsod"), "click", this.pageCalendar, this);
	this.getEventManager().add(Element.parseSelector("div.calendar a.cancel", "wsod"), "click", this.disableEditControls, this);
	
	for (var i = 0, oTermSearch; i < aTermSearchInputs.length; i++) {
		oTermSearch = new TermSearch_class();
		oTermSearch.submitForm = function(e) {
			if (e) { e.cancel(); }
			
			var active = Element.parseSelector("div.termOfDaySearch!wsodHidden form", "wsod", "first");
			var input = Element.parseSelector("input", active, "first");
			
			this.cb.abortRequests();
			ref.getContentBuffer().abortRequests();
			
			var conn = ref.getContentBuffer().load({
				debug: true,
				url: ref.PATH_EDIT_TERM_OF_DAY,
				method: "post",
				contentType: "text/javascript",
				context:ref,
				preventEval: true,
				data: {
					params: Common.getSerializer().serialize({
						term: input.value,
						date: Element.getParentBySelector(active, "div[date]").getAttribute("date")
					})
				},
				onload: ref.modifyTermOfDay
			});
		};
		oTermSearch.init(aTermSearchInputs[i]);
	}
}

TermOfTheDay_class.prototype.attachEditableEvents = function() {
	this._editableTerms = this._editableTerms || Element.parseSelector("div.calendar div.active", "wsod");
	
	this.getEventManager().add(this._editableTerms, "mouseover", this.showHover, this);
	this.getEventManager().add(this._editableTerms, "mouseout", this.hideHover, this);
	this.getEventManager().add(this._editableTerms, "click", this.enableEditControls, this);
}

TermOfTheDay_class.prototype.removeEditableEvents = function() {
	this._editableTerms = this._editableTerms || Element.parseSelector("div.calendar div.active", "wsod");
	
	this.getEventManager().remove(this._editableTerms, "mouseover");
	this.getEventManager().remove(this._editableTerms, "mouseout");
	this.getEventManager().remove(this._editableTerms, "click");
}

TermOfTheDay_class.prototype.showHover = function(e, el) {
	Element.addClass(el, "hover");
}

TermOfTheDay_class.prototype.hideHover = function(e, el) {
	Element.removeClass(Element.parseSelector("div.calendar div.hover"), "hover");
}

TermOfTheDay_class.prototype.enableEditControls = function(e, el) {
	e.cancel();

	this.hideHover();

	this.removeEditableEvents();

	Element.removeClass(Element.parseSelector("a.termOfTheDay", "wsod"), "wsodHidden");
	Element.addClass(Element.parseSelector("div.termOfDaySearch", "wsod"), "wsodHidden");
	
	Element.removeClass(Element.parseSelector("div.termOfDaySearch", el), "wsodHidden");
	
	Element.addClass(Element.parseSelector("a.termOfTheDay", el), "wsodHidden");
	Element.removeClass(Element.parseSelector("div.termOfDaySearch", el), "wsodHidden");
}

TermOfTheDay_class.prototype.disableEditControls = function(e, el) {
	e.cancel();

	var parent = Element.getParentBySelector(el, "div.active");
	
	Element.addClass(Element.parseSelector("div.termOfDaySearch", parent), "wsodHidden");
	
	Element.addClass(Element.parseSelector("div.termOfDaySearch", parent), "wsodHidden");
	Element.removeClass(Element.parseSelector("a.termOfTheDay", parent), "wsodHidden");
	
	this.attachEditableEvents();
}

TermOfTheDay_class.prototype.modifyTermOfDay = function(cb) {
	var result = Common.getSerializer().deserialize(cb.getResult());

	var parent = Element.parseSelector("div[date='"+result.date+"']", "wsod", "first");
	
	if (parent) {
		if (result.success) {
			Element.parseSelector("input.termOfTheDayInput", parent, "first").value = "";
			Element.setHTML(Element.parseSelector("a.termOfTheDay", parent, "first"), result.term);
		}
		
		Element.addClass(Element.parseSelector("div.termOfDaySearch", parent), "wsodHidden");
		Element.removeClass(Element.parseSelector("a.termOfTheDay", parent), "wsodHidden");
	}
	
	this.attachEditableEvents();
}

TermOfTheDay_class.prototype.pageCalendar = function(e, el) {
	this.getEventManager().removeAll();

	this.getContentBuffer().abortRequests();

	this.loadingOverlay.showLoading();
	
	var conn = this.getContentBuffer().load({
		debug: true,
		url: this.PATH_PAGE_CALENDAR,
		method: "post",
		contentType: "text/html",
		context:this,
		data: {
			params: Common.getSerializer().serialize({
				date: el.getAttribute("pageDate")
			})
		},
		onload: this.renderCalendar
	});
}

TermOfTheDay_class.prototype.renderCalendar = function(cb) {
	var calendarGroup = Element.parseSelector("div.calendarGroup", "wsod", "first");
	
	Element.setHTML(calendarGroup, "");
	Element.setHTML(calendarGroup, cb.getResult());
	
	this._editableTerms = null;
	
	this.init();
}

TermOfTheDay_class.prototype.getEventManager = function() {
	var em = new EventManager();
	
	this.getEventManager = function() {
		return em;
	}
	
	return this.getEventManager();
}

TermOfTheDay_class.prototype.getContentBuffer = function() {
	var cb = new ContentBuffer();
	
	this.getContentBuffer = function() {
		return cb;
	}
	
	return this.getContentBuffer();
}