﻿/*What's on (tickets/default.aspx) specific xhr managers/responders*/

// Manages the xhr posting/responding for tabs (events/exhibitions/tours).
var TabResponder = {
	init: function(tabLinkSelector, tabSpinnerID) {
		this.spinnerID = tabSpinnerID;
		// listen to poplink xhr custom events
		document.observe('xhr:beforeTabXhr', TabResponder.__beforeTabXhr.bindAsEventListener(TabResponder));
		document.observe('xhr:afterTabXhr', TabResponder.__afterTabXhr.bindAsEventListener(TabResponder));
		// listen to poplink click events
		Event.selector(tabLinkSelector, "click", TabResponder.__tabClick.bindAsEventListener(TabResponder));
	},
	// event handler for month change
	__tabClick: function(e) {
		e.stop();
		Page.post(e, { before: 'xhr:beforeTabXhr', after: 'xhr:afterTabXhr' });
	},
	// event handler for before xhr.
	__beforeTabXhr: function(ce) {
		$(this.spinnerID).appear({ to: 0.5, duration: 0.1 });
		// continue xhr lifecycle
		document.fire(ce.memo.eKey, ce.memo);
	},
	// event handler for after xhr.
	__afterTabXhr: function(ce) {
		$(this.spinnerID).fade({ from: 0.5, duration: 0.25 });
		// Get the tab id for tracking
		// e.g. parse "uxToursTab" from "ctl00$mainContent$uxToursTab"
		var aTabIDs = ce.memo.target.match(/(?:[^\$]*)$/);
		if (aTabIDs != null && typeof (RAHTracking) !== 'undefined') {
			RAHTracking.TrackTab('tab', aTabIDs[0]);
		}

	}
};

// Manages the xhr posting/responding for month and tour popajax:dropdownlists under minical.
var DdlChangeResponder = {
	// initializes the management of month and tour keyword popajax:dropdownlists.
	init: function(ddlMonthID, ddlTourKeywordsID, spinnerID) {
		this.ddlMonthID = ddlMonthID;
		this.ddlTourKeywordsID = ddlTourKeywordsID;
		this.spinnerID = spinnerID;
		// listen to dropdown xhr custom events
		document.observe('xhr:beforeDdlChange', DdlChangeResponder.__beforeDdlXhr.bindAsEventListener(DdlChangeResponder));
		document.observe('xhr:afterDdlChange', DdlChangeResponder.__afterDdlXhr.bindAsEventListener(DdlChangeResponder));
		// bind month dropdownlist
		$(this.ddlMonthID).observe('change', DdlChangeResponder.__ddlChange.bindAsEventListener(DdlChangeResponder));
		// bind keyword dropdownlist
		this.bindTourChangeEvent();
	},
	// Binds change event to the TourKeywords dropdown list. Also used by code-behind as xhr callback.
	bindTourChangeEvent: function() {
		var elTourDdl = $(this.ddlTourKeywordsID);
		if (elTourDdl) {
			elTourDdl.observe('change', DdlChangeResponder.__ddlChange.bindAsEventListener(DdlChangeResponder));
		}
	},
	// event handler for month change
	__ddlChange: function(e) {
		e.stop();
		Page.post(e, { before: 'xhr:beforeDdlChange', after: 'xhr:afterDdlChange' });
	},
	// event handler for before xhr.
	__beforeDdlXhr: function(ce) {
		//console.log('before xhr');
		$(this.spinnerID).appear({ to: 0.5, duration: 0.1 });
		// continue xhr lifecycle
		document.fire(ce.memo.eKey, ce.memo);
	},
	// event handler for after xhr.
	__afterDdlXhr: function(ce) {
		//console.log('after xhr');
		$(this.spinnerID).fade({ from: 0.5, duration: 0.25 });

		// Track dropdown change
		// e.g. parse "uxMonthSelector" from "ctl00_subcolContent_uxMonthSelector"
		var aDdlIDs = ce.memo.element.name.match(/(?:[^\$]*)$/);
		if (aDdlIDs != null && typeof (RAHTracking) !== 'undefined') {
			RAHTracking.TrackDropDown(aDdlIDs[0], $F(ce.memo.element));
		}
	}
};

function initializePaginator() {
	if ($('paginator')) // element check
	{
		var initialPage = 0;
		
		if (parseInt(deephash.get('page'),10)) {
			initialPage = parseInt(deephash.get('page'),10) - 1;
		}
		
		whatsonPaginator = new Paginator($('paginator'), { initialPageIndex: initialPage, itemsPerPage: 10 });
	}
}
//respond to tab and dropdown xhrs
document.observe('xhr:afterTabXhr', initializePaginator);
document.observe('xhr:afterDdlChange', initializePaginator);
