(function () {
	var Lang = YAHOO.lang,
		JSON = Lang.JSON,
		Dom = YAHOO.util.Dom,
		Event = YAHOO.util.Event,
		Connect = YAHOO.util.Connect,
		Paginator = YAHOO.widget.Paginator,
		XHRDataSource = YAHOO.util.XHRDataSource,
		DataTable = YAHOO.widget.DataTable,
		foo;
	
	foo = {
		
		settings: {
			lastItemType: null,
			lastOption: null,
			item_type: '0',
			option: '0',
			setItemType: function (el) {
				var href = Dom.getAttribute(el, 'href');
				if(href.indexOf('?type_id=') != 0) {
					href = href.slice(href.indexOf('?type_id='));
				}
				if (foo.settings.lastItemType) {
					Dom.removeClass(foo.settings.lastItemType, 'selected');
				}
				if (href.length && href.length >= 9) {
					foo.settings.item_type = href.slice(9);
				} else {
					foo.settings.item_type = '0';
				}
				Dom.addClass(el, 'selected');
				foo.settings.lastItemType = el;
				return foo.settings.item_type;
			},
			setOption: function (el) {
				var href = Dom.getAttribute(el, 'href');
				if(href.indexOf('?option_id=') != 0) {
					href = href.slice(href.indexOf('?option_id='));
				}
				if (foo.settings.lastOption) {
					Dom.removeClass(foo.settings.lastOption, 'selected');
				}
				if (href.length && href.length >= 11) {
					foo.settings.option = href.slice(11);
				} else {
					foo.settings.option = '0';
				}
				Dom.addClass(el, 'selected');
				foo.settings.lastOption = el;
				return foo.settings.option;
			}
		},
		
		init: function () {
	
//			var myLogReader = new YAHOO.widget.LogReader();
			var myColumnDefs,
				myDataSource,
				oConfigs,
				myDataTable,
				initOption,
				initString = '';
			
			initOption = Dom.getElementsByClassName('selected', 'a', 'bazTypeMenu');
			if (initOption[0]) {
				initString += '&item_type=' + foo.settings.setItemType(initOption[0]);
			}
			initOption = Dom.getElementsByClassName('selected', 'a', 'bazViewMenu');
			if (initOption[0]) {
				initString += '&option=' + foo.settings.setOption(initOption[0]);
			}
			
			myColumnDefs = [
				{key: "name_f", 			label: "Item", sortable: true},
				{key: "details", 			label: "Details", sortable: true},
				{key: "seller_profile", 	label: "Seller", sortable: true}
			];
			
			myDataSource = new XHRDataSource("ajax_modules/a_bazaar.php?case=getdata&");
			myDataSource.responseType = XHRDataSource.TYPE_JSON;
			myDataSource.responseSchema = {
				resultsList: "data.records",
				fields: ["name_f", "details", "seller_profile"],
				metaFields: {
					totalRecords: "totalRecords"
				}
			};
			
			oConfigs = {
				paginator: new Paginator({
					rowsPerPage: 20,
					containers: 'thePagCont'
				}),
				dynamicData: true,
				sortedBy: {key: "name_f", dir: DataTable.CLASS_DESC},
				initialRequest: "sort=name_f&dir=asc&startIndex=0&results=5" + initString,
				generateRequest: foo.requestBuilder
			};
			myDataTable = new DataTable("theTable", myColumnDefs, myDataSource, oConfigs);
			myDataTable.handleDataReturnPayload = function (oRequest, oResponse, oPayload) { 
				oPayload.totalRecords = oResponse.meta.totalRecords; 
				return oPayload; 
			};
			foo.myDataSource = myDataSource;
			foo.myDataTable = myDataTable;
			
			Event.on('bazaarPage', 'click', foo.bazaarPageClick);
			
		},

		requestBuilder: function (oState, oSelf) {
			var sort, dir, startIndex, results;
			
			oState = oState || {pagination: null, sortedBy: null};
            
			sort = (oState.sortedBy) ? oState.sortedBy.key : oSelf.getColumnSet().keys[0].getKey();
			dir = (oState.sortedBy && oState.sortedBy.dir === DataTable.CLASS_DESC) ? "desc" : "asc";
			startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
			results = (oState.pagination) ? oState.pagination.rowsPerPage : null;
			
			return  "sort=" 		+ sort +
					"&dir=" 		+ dir +
					"&item_type="	+ foo.settings.item_type +
					"&option="		+ foo.settings.option +
					"&results=" 	+ results +
					"&startIndex=" 	+ startIndex +
				    "&endIndex=" 	+ (startIndex + results - 1);
		},
		
		bazaarPageClick: function (e) {
			var target = Event.getTarget(e);
			if (Dom.hasClass(target, 'typeLink')) {
				Event.preventDefault(e);
				foo.settings.setItemType(target);
				foo.fireDT();

			} else if (Dom.hasClass(target, 'viewLink')) {
				Event.preventDefault(e);
				foo.settings.setOption(target);
				foo.fireDT();
			}
		},
		
		fireDT: function () {
            var oState = foo.myDataTable.getState(),
            	request,
				oCallback = {
				    success : foo.myDataTable.onDataReturnSetRows,
				    failure : foo.myDataTable.onDataReturnSetRows,
                    argument : oState,
				    scope : foo.myDataTable
				};
            if (oState.pagination) {
                oState.pagination.recordOffset = 0;
            }
            
            request = foo.myDataTable.get("generateRequest")(oState, foo.myDataTable);

//            foo.myDataTable.unselectAllRows();
//            foo.myDataTable.unselectAllCells();
			foo.myDataSource.sendRequest(request, oCallback);
			
		}
	};
	// '&searchText=' + encodeURIComponent(foo.settings.searchText);
	
	Event.onDOMReady(foo.init, true, true);
}());