﻿/*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.doAsyncPostBack(e, {onBeforeRequest: 'xhr:beforeTabXhr', onAfterResponse: '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.preRequestEventKey, 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.doAsyncPostBack(e, {onBeforeRequest: 'xhr:beforeDdlChange', onAfterResponse: '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.preRequestEventKey, 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
    {
        whatsonPaginator = new Paginator( $('paginator'), {initialPageIndex: 0, itemsPerPage: 10} );
    }
}
//respond to tab and dropdown xhrs
document.observe('xhr:afterTabXhr', initializePaginator);
document.observe('xhr:afterDdlChange', initializePaginator);
