YAHOO.namespace("Heehaw.Data");
var Y = YAHOO, H = YAHOO.Heehaw, DT = Y.widget.DataTable;

YAHOO.util.Event.addListener( window, "load", function() {
	H.getSearchTerm = function(query) {
		H.JSON_table.ds.sendRequest(
						'search_term='
								+ escape(query)
								+ '&event_id='
								+ escape( Y.util.Dom.get("dt_input_event_id").value ),
						H.JSON_table.dt.onDataReturnInitializeTable,
						YAHOO.Heehaw.JSON_table.dt);
	};

	H.getTeamMemberTerms = function(query) {
		H.JSON_table.ds.sendRequest(
						'term_team_member='
								+ escape(query)
								+ '&event_id='
								+ escape(Y.util.Dom.get("dt_input_event_id").value),
						H.JSON_table.dt.onDataReturnInitializeTable,
						YAHOO.Heehaw.JSON_table.dt);
	};

	H.JSON_table = new function() {
		// Override the built-in formatter
		YAHOO.widget.DataTable.formatTeamLink = function(
				elCell, oRecord, oColumn, oData) {
			var user = oData;
			elCell.innerHTML = "<a href=\"/teams/"
					+ oRecord.getData().web_name + "\">"
					+ oRecord.getData().team_name + "</a>";
		};
		YAHOO.widget.DataTable.formatDonateLink = function(
				elCell, oRecord, oColumn, oData) {
			var user = oData;
			elCell.innerHTML = "<a href=\"/donate/"
					+ oRecord.getData().web_name + "\">Donate Now</a>";
		};

		// Override the built-in formatter
		YAHOO.widget.DataTable.formatTotalRaised = function( elCell, oRecord, oColumn, oData) {
			elCell.innerHTML += '&pound;' + oRecord.getData().total_raised;
		}

		// Override the built-in formatter
		YAHOO.widget.DataTable.formatFundraisingTarget = function( elCell, oRecord, oColumn, oData) {
			elCell.innerHTML += '&pound;' + oRecord.getData().fundraising_target;
		}

		// Override the built-in formatter
		YAHOO.widget.DataTable.formatAmountRaised = function( elCell, oRecord, oColumn, oData) {
			elCell.innerHTML += '&pound;' + oRecord.getData().open_pledge_total;
		}

		//H.getSearchTerm
		var oACDS = new YAHOO.util.FunctionDataSource(
				H.getSearchTerm);
		oACDS.queryMatchContains = true;
		var oAutoComp = new YAHOO.widget.AutoComplete(
				"dt_input_search_term",
				"dt_ac_container_search_term", oACDS);
/*
		// H.getTeamMemberTerms
		var oACDS = new YAHOO.util.FunctionDataSource(
				H.getTeamMemberTerms);
		oACDS.queryMatchContains = true;
		var oAutoComp = new YAHOO.widget.AutoComplete(
				"dt_input_team_member",
				"dt_ac_container_team_member", oACDS);
**/
		var myColumnDefs = [
				{
					key : "team_name",
					label : "Team Name",
					sortable : true,
					formatter : Y.widget.DataTable.formatTeamLink
				},
				{
					key : "donate_link",
					label : "Donate",
					sortable : false,
					formatter : Y.widget.DataTable.formatDonateLink
				},
				{
					key : "total_raised",
					label : "Total Raised",
					sortable : true,
					formatter : Y.widget.DataTable.formatTotalRaised
				},
				{
					key : "open_pledge_total",
					label : "Pledged",
					sortable : false,
					formatter : Y.widget.DataTable.formatAmountRaised
				},
				{
					key : "fundraising_target",
					label : "Target",
					sortable : false,
					formatter : Y.widget.DataTable.formatFundraisingTarget
				} ];

		this.myDataSource = new YAHOO.util.DataSource( "/resources/includes/team_search_json_results.php?" );

		this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;

		this.myDataSource.connXhrMode = "queueRequests";

		this.myDataSource.responseSchema = {
			resultsList : "ResultSet.Result",
			fields : [ "team_id", "name", "web_name",
					"team_name",
					"donate_link",  "description", "company_name",
					"fundraising_target", "total_raised",
					"open_pledge_total" ],
			metaFields : {
				totalRecords : "ResultSet.totalResultsAvailable"
			}
		};

		var myRequestBuilder = function(oState, oSelf) {

			// Get states or use defaults
			oState = oState || {
				pagination : null,
				sortedBy : null
			};
			var sort = (oState.sortedBy) ? oState.sortedBy.key : "total_raised", 
				dir = (oState.sortedBy && oState.sortedBy.dir === DT.CLASS_DESC) ? "desc" : "asc",
				startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0, 
				results = (oState.pagination) ? oState.pagination.rowsPerPage : 25;

			// Build custom request
			return "sort="
					+ sort
					+ "&dir="
					+ dir
					+ "&startIndex="
					+ startIndex
					+ "&results="
					+ results
					+ "&search_term="
					+ escape(Y.util.Dom.get("dt_input_search_term").value)
					+ "&event_id="
					+ escape(Y.util.Dom.get("dt_input_event_id").value);
		};

		// Configure pagination features
		H.paginationConfig = {
			initialRequest : "sort=total_raised&dir=desc&startIndex=0&results=25&event_id=" + escape(Y.util.Dom.get("dt_input_event_id").value),
			dynamicData : true, // Enables dynamic server-driven data
			sortedBy : {
				key : "total_raised",
				dir : DT.CLASS_DESC
			}, // Sets UI initial sort arrow
			paginator : new YAHOO.widget.Paginator( {
				rowsPerPage : 25
			}), // Enables pagination
			generateRequest : myRequestBuilder
		};

		this.myDataTable = new YAHOO.widget.DataTable(
				"overview", myColumnDefs, this.myDataSource,
				H.paginationConfig);

		// Update totalRecords on the fly with value from server
		this.myDataTable.handleDataReturnPayload = function(
				oRequest, oResponse, oPayload) {
			if (oPayload == undefined) {
				return {
					totalRecords : oResponse.meta.totalRecords
				};
			} else {
				oPayload.totalRecords = oResponse.meta.totalRecords;
				return oPayload;
			}
		}

		return {
			ds : this.myDataSource,
			dt : this.myDataTable
		};
	};
});
