
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/companyAnnouncements.js
*/

var companyAnnouncements = function() {
}

companyAnnouncements.prototype.ACTION_MAP = {
	 'filter':           'filter'
	,'showAnnouncement': 'showAnnouncement'
};

companyAnnouncements.prototype.BUFFER_CONTENT_TYPE = 'text/html';
companyAnnouncements.prototype.BUFFER_URL = '/ft/resources/buffer/companyAnnouncements/CompanyAnnouncements.asp';

companyAnnouncements.prototype.DATE_VALUE_FOR_POPUP_CALENDAR = 'custom';

companyAnnouncements.prototype.KEY_CODE_ENTER = 13;

companyAnnouncements.prototype.KEYWORD_DEFAULT_TEXT = 'Keyword';

companyAnnouncements.prototype.LANGUAGE_DEFAULT = 'en';

companyAnnouncements.prototype.SEARCH_ALL_CHOICES = 'all';

companyAnnouncements.prototype.SYMBOL_DEFAULT_TEXT = 'Enter name or symbol';

companyAnnouncements.prototype.filterAnnouncements = function(ev, el) {
	if (ev) { ev.cancel(); }

	el.blur();

	this.isFilter = true;

	var data = {
		'action': this.ACTION_MAP['filter']
	};

	if (Element.hasClass(el, 'reset')) {
		this.resetForm();
	}
	else if (Element.hasClass(el, 'nav-icon')) {
		var wsod = Element.get('wsod');

		var pagingNavigation = Element.parseSelector('DIV.pagingNavigation', wsod, 'first');

		var currentRow = Number(pagingNavigation.getAttribute('currentrow'));
		var rowsPerPage = Number(pagingNavigation.getAttribute('rowsperpage'));

		if (Element.hasClass(el, 'nav-left-active')) {
			data.startRow = currentRow - rowsPerPage;
		}
		else if (Element.hasClass(el, 'nav-right-active')) {
			data.startRow = currentRow + rowsPerPage;
		}
	}

	data.isFilter = this.isFilter;

	if (this.SEARCH_ALL_CHOICES != this.country.value) {
		data.country = this.country.value;
	}

	if (this.SEARCH_ALL_CHOICES != this.date.value) {
		data.date = this.date.value;

		var selectedDatesValue = this.selectedDates.getAttribute('selectedDatesValue') || false;
		if (selectedDatesValue && selectedDatesValue.length) {
			data.selectedDates = selectedDatesValue;
		}
	}

	if (this.keywordOrISIN.value.length && (this.KEYWORD_DEFAULT_TEXT != this.keywordOrISIN.value)) {
		var selectedContent = this.content.options[this.content.selectedIndex].value;

		if ('headline' == selectedContent) {
			data.headline = this.keywordOrISIN.value;
		}
		else if ('release' == selectedContent) {
			data.release = this.keywordOrISIN.value;
		}
	}

	if (this.SEARCH_ALL_CHOICES != this.language.value) {
		data.language = this.language.value;
	}

	if (this.SYMBOL_DEFAULT_TEXT != this.symbol.value) {
		data.symbol = this.symbol.value;
	}

	if (this.calendarPopup) {
		this.calendarPopup.close();
	}

	var investorRelationsPopup = Element.parseSelector('DIV.investorRelationsPopup', Element.get('wsodPop'), 'first') || false;
	if (investorRelationsPopup) {
		Element.remove(investorRelationsPopup);
	}

	this.loading.showLoading();

	this.loadContentBuffer(data);
}

companyAnnouncements.prototype.getEventManagerForCompanyAnnouncements = function() {
	var em = new EventManager();
	
	this.getEventManagerForCompanyAnnouncements = function() {
		return em;
	}
	
	return this.getEventManagerForCompanyAnnouncements();
}

companyAnnouncements.prototype.handleTheKeypress = function(ev, el) {
	if (this.KEY_CODE_ENTER == ev.nativeEvent.keyCode) {
		// var el = ev.nativeEvent.target || ev.nativeEvent.srcElement;

		this.filterAnnouncements(ev, el);
	}
}

companyAnnouncements.prototype.init = function() {
	var wsod = Element.get('wsod');
	this.loading = new LoadingOverlay(wsod);
	this.searchForm = Element.get('searchAllAnnouncements');

	this.symbol = Element.parseSelector('DIV.companySymbolSearch INPUT', this.searchForm, 'first') || false;
	if (this.symbol) {
		this.getEventManagerForCompanyAnnouncements().add(this.symbol, 'focus', Common.focusText, Common);
		this.getEventManagerForCompanyAnnouncements().add(this.symbol, 'blur', Common.blurText, Common);

		// Possible enhancement to support "enter" keypress events; might require changes to the related module's init / render
		// this.getEventManagerForCompanyAnnouncements().add(this.symbol, 'keypress', this.handleTheKeypress, this);

		this.setSymbolSearch();
	}

	this.content = Element.get('content');
	this.country = Element.get('country');
	this.language = Element.get('language');

	this.calendarPopup = false;
	this.date = Element.get('date');
	this.selectedDates = Element.get('selectedDates');
	this.getEventManagerForCompanyAnnouncements().add(this.date, 'change', this.showOrHideCalendar, this);
	this.getEventManagerForCompanyAnnouncements().add(this.selectedDates, 'click', this.showOrHideCalendar, this);

	this.keywordOrISIN = Element.get('keywordOrISIN');
	this.getEventManagerForCompanyAnnouncements().add(this.keywordOrISIN, 'focus', Common.focusText, Common);
	this.getEventManagerForCompanyAnnouncements().add(this.keywordOrISIN, 'blur', Common.blurText, Common);

	var filterContainer = Element.get('filterContainer');
	var filterInnerButton = Element.parseSelector('DIV.filter DIV', filterContainer, 'first');
	this.getEventManagerForCompanyAnnouncements().add(filterInnerButton, 'click', this.filterAnnouncements, this);

	var pagingNavigation = Element.parseSelector('DIV.pagingNavigation', wsod, 'first');
	var navIcons = Element.parseSelector('A.nav-icon', pagingNavigation);
	if (navIcons && navIcons.length) {
		this.getEventManagerForCompanyAnnouncements().add(navIcons, 'click', this.filterAnnouncements, this);
	}

	var breadcrumbs = Element.parseSelector('A.breadcrumb', wsod);
	if (breadcrumbs && breadcrumbs.length) {
		this.getEventManagerForCompanyAnnouncements().add(breadcrumbs, 'click', this.filterAnnouncements, this);
	}

	var headlineKeys = Element.parseSelector('A.headlineKey', wsod);
	if (headlineKeys && headlineKeys.length) {
		this.getEventManagerForCompanyAnnouncements().add(headlineKeys, 'click', this.showAnnouncement, this);
	}
}

companyAnnouncements.prototype.resetForm = function() {
	this.isFilter = false;

	this.content.selectedIndex = 0;
	this.country.selectedIndex = 0;

	this.date.selectedIndex = 0;
	Element.setHTML(this.selectedDates, '');
	Element.setAttribute(this.selectedDates, 'selectedDatesValue', '');

	this.keywordOrISIN.value = this.KEYWORD_DEFAULT_TEXT;
	this.symbol.value = this.SYMBOL_DEFAULT_TEXT;

	var currentLanguage;
	var languageOptions = (this.language && this.language.options) ? this.language.options : 0;

	for (var i = 0; i < languageOptions.length; i++) {
		currentLanguage = languageOptions[i];

		if (this.LANGUAGE_DEFAULT == currentLanguage.value) {
			this.language.selectedIndex = i;
			break;
		}
	}
}

companyAnnouncements.prototype.setSymbolSearch = function() {
	var self = this;

	var s = new SymbolSearch();
		s.setForm(this.searchForm);
		s.setRequestor(new ContentBuffer());

		s.moreResultsPopupMode(true);
		s.moreResultsHandlerCallback(
			function(popup, parent) {
				var elLinks = Element.parseSelector('.interactiveChartLink', parent || Element.get('wsod'));

				Events.add(elLinks, 'click', function(e, el) {
					e.cancel();

					var symbol = el.getAttribute('intchartsymbol');
					var issueName = el.getAttribute('issuename');

					self.symbol.value = symbol;
	
					popup.close();
				}.Context(this));		
			}, this
		);

		s.go = function(symbol) {
			this.clearResults();

			self.symbol.value = symbol;
		};
}

companyAnnouncements.prototype.showAnnouncement = function(ev, el) {
	if (ev) { ev.cancel(); }

	var data = {
		 'action':      this.ACTION_MAP['showAnnouncement']
		,'headlineKey': el.getAttribute('headlineKey')
	};

	if (this.calendarPopup) {
		this.calendarPopup.close();
	}

	var investorRelationsPopup = Element.parseSelector('DIV.investorRelationsPopup', Element.get('wsodPop'), 'first') || false;
	if (investorRelationsPopup) {
		Element.remove(investorRelationsPopup);
	}

	this.loading.showLoading();

	this.loadContentBuffer(data);
}

companyAnnouncements.prototype.showOrHideCalendar = function(ev, el) {
	if (ev) { ev.cancel(); }

	var date = Element.get('date');
	var selectedDateValue = date.options[date.selectedIndex].value;

	this.calendarPopup = this.calendarPopup || new CalendarPopup();

	if (this.DATE_VALUE_FOR_POPUP_CALENDAR == selectedDateValue) {
		var oArgs = {
			'yearMinimum': '2009'
		};

		this.calendarPopup.setCallback(this.updateSelectedDates, this);
		this.calendarPopup.init(oArgs);
	}
	else {
		Element.setHTML(this.selectedDates, '');
		Element.setAttribute(this.selectedDates, 'selectedDatesValue', '');

		var calendarPopup = Element.parseSelector('DIV.calendarPopup', Element.get('wsodPop'), 'first') || false;

		if (calendarPopup) {
			Element.addClass(calendarPopup, 'wsodHidden');
		}
	}
}

companyAnnouncements.prototype.loadContentBuffer = function(data) {
	data = data || {};

	var serializedData = Common.getSerializer().serialize(data);
	var methodForOnLoad;

	if (this.ACTION_MAP['showAnnouncement'] == data.action) {
		methodForOnLoad = this.onLoadForShowAnnouncement;
	}
	else {
		// this.ACTION_MAP['filterAnnouncement']
		methodForOnLoad = this.onLoad;
	}

	var contentBuffer = new ContentBuffer();
		contentBuffer.abortRequests();
		contentBuffer.load(
			{
				 contentType: data.contentType || this.BUFFER_CONTENT_TYPE
				,context:     this
				,data:        { serializedData:serializedData }
				,onload:      methodForOnLoad
				,onerror:     this.onError
				,preventEval: true
				,url:         this.BUFFER_URL
			}
		);
}

companyAnnouncements.prototype.onError = function(cb) {
	var results = cb.getResult() || '';
	// console.log(results);

	this.loading.hideLoading();
}

companyAnnouncements.prototype.onLoad = function(cb) {
	var results = cb.getResult() || '';

	var resultsModuleContainer = Element.get('resultsModuleContainer');

	Element.addClass(resultsModuleContainer, 'hidden');

	Element.setHTML(resultsModuleContainer, results);

	var wsod = Element.get('wsod');

	var pagingNavigation = Element.parseSelector('DIV.pagingNavigation', wsod, 'first');
	var navIcons = Element.parseSelector('A.nav-icon', pagingNavigation) || false;
	if (navIcons) {
		this.getEventManagerForCompanyAnnouncements().add(navIcons, 'click', this.filterAnnouncements, this);
	}

	var breadcrumbs = Element.parseSelector('A.breadcrumb', wsod);
	if (breadcrumbs && breadcrumbs.length) {
		this.getEventManagerForCompanyAnnouncements().add(breadcrumbs, 'click', this.filterAnnouncements, this);
	}

	var headlineKeys = Element.parseSelector('A.headlineKey', wsod);
	if (headlineKeys && headlineKeys.length) {
		this.getEventManagerForCompanyAnnouncements().add(headlineKeys, 'click', this.showAnnouncement, this);
	}

	var investorRelations = new InvestorRelations();
		investorRelations.init();

	Element.removeClass(resultsModuleContainer, 'hidden');

	this.loading.hideLoading();
}

companyAnnouncements.prototype.onLoadForShowAnnouncement = function(cb) {
	var results = cb.getResult() || '';

	var resultsModuleContainer = Element.get('resultsModuleContainer');
	Element.addClass(resultsModuleContainer, 'hidden');
	Element.setHTML(resultsModuleContainer, results);

	var wsod = Element.get('wsod');

	var breadcrumbs = Element.parseSelector('A.breadcrumb', wsod);
	if (breadcrumbs && breadcrumbs.length) {
		this.getEventManagerForCompanyAnnouncements().add(breadcrumbs, 'click', this.filterAnnouncements, this);
	}

	Element.removeClass(resultsModuleContainer, 'hidden');

	this.loading.hideLoading();
}


companyAnnouncements.prototype.updateSelectedDates = function(startDate, endDate) {
	startDate = startDate || false;
	endDate = endDate || false;

	var startYear, startMonth, startDay, endYear, endMonth, endDay, adjustedStartMonth, adjustedEndMonth;

	if (startDate) {
		startYear = startDate.getFullYear();
		startMonth = startDate.getMonth();
		startDay = startDate.getDate();

		adjustedStartMonth = Number(startMonth) + 1;
	}

	if (endDate) {
		endYear = endDate.getFullYear();
		endMonth = endDate.getMonth();
		endDay = endDate.getDate();

		adjustedEndMonth = Number(endMonth) + 1;
	}

	var selectedDates = Element.get('selectedDates');

	Element.setHTML(selectedDates, [ startDay, '/', adjustedStartMonth, '/', startYear, ' - ', endDay, '/', adjustedEndMonth, '/', endYear ].join(''));
	Element.setAttribute(selectedDates, 'selectedDatesValue', [ startYear, '-', adjustedStartMonth, '-', startDay, '|', endYear, '-', adjustedEndMonth, '-', endDay ].join(''));
}

/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/dropdown.js
*/

var DropDown_Class = function ( oArgs ) {
	
	this.oArgs = oArgs;
	
	return this;
}

DropDown_Class.prototype.width = 221;

DropDown_Class.prototype.init = function () {
	
	this.__triggers    = new Object();
	this.__parent      = this.oArgs.parent;
	this.__body        = Element.get("wsod")
	
	this.attachEvents();
	return this;
}

DropDown_Class.prototype.attachEvents = function () {
	
	if(!window.Events) {
		
		window.Events = new EventManager();	
	}
	
	Events.add({
		 element:this.__parent
		,type:"click"
		,handler:this.handleDropdown
		,context:this
	});
	
	Events.add({
		 element:document.body
		,type:"click"
		,handler:this.closeOnContentClick
		,context:this
	});
}

DropDown_Class.prototype.closeOnContentClick = function (e ) {
	var target = e.getTarget()
	
	for(var i in this.__triggers){
		if(this.__triggers[i].element == target){
			return;
		}
	}
	
	this.openCloseMenu(this.__currentItem)

}

DropDown_Class.prototype.addItem = function ( oArgs ) {
	
	this.__triggers[ oArgs.id ] = {
		 element:oArgs.element
		,subitems:Array.prototype.concat( oArgs.subitems || [] )
		,events:Array.prototype.concat( oArgs.events || [] )	
	};
	
	return this;
}

DropDown_Class.prototype.removeItem = function ( id ) {
	
	if(this.__triggers[ id ])	{
		
		Events.remove( this.__triggers[ id ].subitems );
		delete this.__triggers[ id ];
	}
	
	return this;
}

DropDown_Class.prototype.handleDropdown = function (ev, el) {
	
	var t = ev.getTarget();
		t.blur();
		
	for(var i in this.__triggers) {
		
		if(t == this.__triggers[i].element)	{
			
			this.openCloseMenu( this.__triggers[i] );
			break;
		}
	}
}

DropDown_Class.prototype.createSubMenu = function (trigger) {
	
	var subMenu = Element.create("div", {className:"submenu none"});
	var ul 		= Element.create("ul", {}, null, subMenu);
	
	Events.add({
		 element:trigger.subitems
		,type:"click"
		,handler:this.closeItem
		,context:this
		,data:{trigger:trigger}
	});

	var children = trigger.subitems.length;
	var x 		 = 0;
	
	while(x < children) {
		
		Element.addChild(ul, Element.create("li", {}, trigger.subitems[x] ));
		x++;
	}
	
	if(trigger.events) {
		
		var i   = 0;
		var len = trigger.events.length;
		var ev;
		
		for(; i < len; i++) {
			
			ev = trigger.events[i];
			
			Events.add({
				 element:trigger.subitems
				,type:ev.type
				,handler:ev.handler
				,context:ev.context || window
				,data:ev.data || {}
			});		
		}
	}
		
	Element.addChild(this.__body, subMenu);
	return subMenu;
}


DropDown_Class.prototype.openCloseMenu = function (trigger) {
	if(!trigger){
		return;
	}
	if(this.__currentItem) {
		
		Element.addClass(this.__currentItem.submenu, "none");

		this.__currentItem.isOn = false;
		
		if(this.__currentItem.element === trigger.element) {
			
			this.__currentItem = null;
			return;	
		}
	}
	
	if(!trigger.submenu) {
		
		trigger.submenu = this.createSubMenu(trigger);
	}
	
	this.__currentItem = trigger;
	
	var xy = Element.getXY(this.__currentItem.element);
	var hw = Element.getSize(this.__currentItem.element);
	
	Element.setStyle(this.__currentItem.submenu, "left:" + ((xy.x + hw.width) - this.width) + "px");
	Element.setStyle(this.__currentItem.submenu, "top:" + (xy.y + hw.height) + "px");
	
	Element.removeClass( this.__currentItem.submenu, "none");
	trigger.isOn = true;
}


DropDown_Class.prototype.closeItem = function (ev, el, oData) {
	
	this.openCloseMenu( oData.trigger );
}