nfl.namespace('nfl.freeagency');
nfl.namespace('nfl.freeagency.players');

nfl.freeagency.players.dataset	= Class.create();
nfl.freeagency.players.dataset.prototype	= {
	initialize: function(object){
		this.__dataset		= object;
		this.itemsPerPage	= 500;
		this.currentPage	= 1;
	},
	__sortByName: function(a, b) {
		var x = a.name.toLowerCase();
		var y = b.name.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	__sortByPosition: function(a, b) {
		var x = a.position.toLowerCase();
		var y = b.position.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	__sortByTeam: function(a, b) {
		var x = a.teamCurrent.toLowerCase();
		var y = b.teamCurrent.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	sortedBy: function(sortType){
		//var __tArray	= Object.clone(this.__dataset);
		var __tArray	= this.__dataset.clone();
		switch(sortType){
			case "position":
				__tArray.sort(this.__sortByPosition)
				break
			case "name":
				__tArray.sort(this.__sortByName)
				break
			case "team":
				__tArray.sort(this.__sortByTeam)
				break
			default:
				break
		}
		__tArray.itemsPerPage = this.itemsPerPage;
		__tArray.currentPage = this.currentPage;
		__tArray.filter = null;
		__tArray.inspect = function(){
			var retVal	= "[";
			for(i=0; i < this.size(); i++){				
				var dataRow	= this[i];
				var drKeys	= Object.keys(dataRow);
				var drVals	= Object.values(dataRow);
				
				retVal	+= "{";
				for(z=0; z < drKeys.size(); z++){
					retVal	+= (drKeys[z]+":"+drVals[z]+",");
				}
				retVal	+= "}";
			}
			retVal	+= "]";
			return retVal
		}
		__tArray.totalPages = function(){
			return Math.Round((this.totalResults() / itemsPerPage));
		}
		__tArray.totalResults = function(){
			return this.__getFilteredResults().size();
		}
		__tArray.bindTo	= function(obj){
			this.__databoundobject	= obj;
		}
		__tArray.__getFilteredResults	= function(){
			var __debugchecks	= "__getFilteredResults: ("+ this.filter +")\n\r";
			var resArray		= new Array()
			for(i=0; i < this.size(); i++){
				var dataRow			= this[i];
				var matchesFilter	= false;
				if(this.filter != null){
					var fVal	= dataRow[this.filter.field];
					var fType	= (typeof fVal);
					if((""+fVal.constructor.toString()).indexOf('Array()') > -1){/*object is array, fraking idiotic */fType = 'array'; fVal = $A(fVal);}
					__debugchecks	+= (fType +' '+ fVal +" "+ this.filter.operator +" "+ this.filter.criteria +" ? ");

					if(this.filter.operator == '='){
						if(fType == 'array'){
							(dataRow[this.filter.field]).each(function(arrayValue){if(arrayValue.toUpperCase() === this.filter.criteria.toUpperCase()){ matchesFilter = true; }}.bind(this));
						}
						if(fType == 'string'){
							if(dataRow[this.filter.field].toUpperCase() == this.filter.criteria.toUpperCase()){ matchesFilter = true; }
						}
					}
					if(this.filter.operator == 'startsWith'){
						if(dataRow[this.filter.field].toUpperCase().indexOf(this.filter.criteria.toUpperCase()) === 0){ matchesFilter = true; }
					}
					if(this.filter.operator == 'contains'){
						if(fType == 'array'){
							dataRow[this.filter.field].each(function(arrayValue){if(arrayValue.toUpperCase() === this.filter.criteria.toUpperCase()){ matchesFilter = true; }}.bind(this));
						}
						if(fType == 'string'){
							if(dataRow[this.filter.field].toUpperCase().indexOf(this.filter.criteria.toUpperCase()) > -1){ matchesFilter = true; }
						}
					}
					__debugchecks	+= (matchesFilter+ "\n\r");
				}
				if(matchesFilter === true || this.filter === null){
					resArray[resArray.length]	= dataRow;
				}
			}
			nfl.log(__debugchecks);
			return resArray
		}
		__tArray.databind	= function(){
			var __tableId		= (typeof this.__databoundobject.id != 'undefined') ? this.__databoundobject.id : "data-grid-table";
			var __tableClassName= (typeof this.__databoundobject.className != 'undefined') ? this.__databoundobject.className : "data-grid-table";
			var __rowTemplate	= new Template("<tr><td align=\"center\">#{name}</td><td align=\"center\"><a href=\"#players-tab-set-1:players-grid-container-position/players-list-links-position:pos-#{positionGroupLowerCase}\">#{position}</a></td><td align=\"center\">#{status}</td><td align=\"center\">#{height}</td><td align=\"center\">#{weight}</td><td align=\"center\">#{experience}</td><td align=\"center\">#{teamPrevious.href}</td><td align=\"center\">#{teamCurrent.href}</td></tr>");
			var __rowTemplate2	= new Template("<tr class=\"altrow\"><td align=\"center\">#{name}</td><td align=\"center\"><a href=\"#players-tab-set-1:players-grid-container-position/players-list-links-position:pos-#{positionGroupLowerCase}\">#{position}</a></td><td align=\"center\">#{status}</td><td align=\"center\">#{height}</td><td align=\"center\">#{weight}</td><td align=\"center\">#{experience}</td><td align=\"center\">#{teamPrevious.href}</td><td align=\"center\">#{teamCurrent.href}</td></tr>");
			var __tableContent	= "<table id=\""+ __tableId +"\" class=\""+ __tableClassName +"\" cellspacing=\"1\" cellpadding=\"0\" width=\"100%\">\n\r";
			var __currentIndex	= 0;
			var __rowInc		= 1;
			var __rowAlt		= false;
			var __filteredResults = this.__getFilteredResults();
			if(this.currentPage > 1){
				__currentIndex	= ((this.itemsPerPage * this.currentPage)+1);
			}
			
			__tableContent	+= "<thead><tr><td align=\"center\">Player</td><td align=\"center\">Position</td><td align=\"center\">Status</td><td align=\"center\">Height</td><td align=\"center\">Weight</td><td align=\"center\">Experience</td><td align=\"center\">2008 Team</td><td align=\"center\">2009 Team</td></tr></thead>";
			//__tableContent	+= "<tr class=\"top-row-spacer\"><td>&nbsp;</td><td></td><td></td><td></td><td></td></tr>";
			//__debugchecks		= "debug checks: \n\r";
			nfl.log("__filteredResults.size() = "+ __filteredResults.size());
			for(i=0; i < __filteredResults.size(); i++){				
				var dataRow					= __filteredResults[i];
				dataRow.firstName			= dataRow.firstName.toLowerCase();
				dataRow.lastName			= dataRow.lastName.toLowerCase();
				dataRow.firstNameEncoded	= dataRow.firstName.replace(/ /gi,"-");
				dataRow.lastNameEncoded		= dataRow.lastName.replace(/ /gi,"-");
				if(__rowInc < this.itemsPerPage){
					if(!__rowAlt){
						var tr_content	= __rowTemplate.evaluate(dataRow);
						__rowAlt		= true;
					}else{
						var tr_content	= __rowTemplate2.evaluate(dataRow);
						__rowAlt		= false;
					}
					__tableContent	   += (tr_content +'\n\r');
					//__debugchecks	   += (tr_content +'\n\r');
					__rowInc++
				}else{
					if(__rowInc > this.itemsPerPage){ break; }
				}
			}
			//nfl.log(__debugchecks +"\n\r\n\rwriting to: "+ this.__databoundobject.id);
			__tableContent	+= "</table>\n\r";
			if(__filteredResults.size() > 0){
				this.__databoundobject.up().removeClassName("no-results");
				this.__databoundobject.replace(__tableContent);
				this.__databoundobject	= $(__tableId);
			}else{
				this.__databoundobject.up().addClassName("no-results");
			}
		}
		
		return __tArray;
	}
}


nfl.freeagency.players.onTabClick	= function(event){
	var srcObj		= Event.element(event);
	var tabText;
	nfl.log("{nfl.freeagency.players.onTabClick: srcObj.tagName = "+ srcObj.tagName +"}");
	nfl.log("{nfl.freeagency.players.onTabClick: srcObj.innerHTML = "+ srcObj.innerHTML +"}");
	switch(srcObj.tagName){
		case "A":
			var tabText	= srcObj.innerHTML.strip().toLowerCase();
			break;
		case "LI":
			tabText 	= srcObj.down("a").innerHTML.strip().toLowerCase();
			break;
		case "DIV":
			tabText 	= srcObj.up().down("a").innerHTML.strip().toLowerCase();
			break;
		default:
			break;
			
	}
	/*
	if(srcObj.tagName == "A"){
		var tabText		= srcObj.innerHTML.substring(0,srcObj.innerHTML.indexOf("<")).strip().toLowerCase();
	}else{
		if(srcObj.tagName == "LI"){
			tabText = srcObj.down().innerHTML.substring(0,srcObj.down().innerHTML.indexOf("<")).strip().toLowerCase();
		}
	}
	*/
	nfl.log("{nfl.freeagency.players.onTabClick: "+ tabText +"}");
	nfl.freeagency.players.changeDataSet(tabText);
}

nfl.freeagency.players.changeDataSet = function(strDataType,filterObj){
	nfl.log("nfl.freeagency.players.changeDataSet: \""+ strDataType +"\"");
	var filter		= (typeof filterObj == 'undefined' || typeof filterObj == 'null')? false : filterObj
	var filterExp	= "";
	var dataChanged	= false;		

	switch(strDataType){
		case "by name":
			if(nfl.freeagency.players.activeDataSet !== playersDataSetbyName){ 
				nfl.freeagency.players.activeDataSet = playersDataSetbyName;
				dataChanged = true;
				if(!filter){
					filterExp	= "#players-list-links-alphabetical #alpha-a";
					nfl.freeagency.players.activeDataSet.filter	= {field: 'name', criteria: 'A', operator: 'startsWith'};
				}else{
					filterExp	= "#players-list-links-alphabetical #alpha-"+ filter.criteria.toLowerCase();
				}
			};
			break;
		case "by position":
			if(nfl.freeagency.players.activeDataSet !== playersDataSetbyPosition){ 
				nfl.freeagency.players.activeDataSet = playersDataSetbyPosition; 
				dataChanged = true; 
				if(!filter){
					filterExp	= "#players-list-links-position #pos-qb";
					nfl.freeagency.players.activeDataSet.filter	= {field: 'position', criteria: 'QB', operator: '='};
				}else{
					filterExp	= "#players-list-links-position #pos-"+ filter.criteria.toLowerCase();
				}
			};
			break;
		case "by team":
			if(nfl.freeagency.players.activeDataSet !== playersDataSetbyTeam){ 
				nfl.freeagency.players.activeDataSet = playersDataSetbyTeam;
				dataChanged = true; 
			};
			break;
		default:
			break;
	}
	if(filter){
		nfl.freeagency.players.activeDataSet.filter	= filter;
	}
	if(dataChanged){
		/* reset dataset paging properties.. hmm... or maybe not */
		/* redraw datagrid view port */
		//nfl.log("nfl.freeagency.players.onTabClick: activeDataSet:\n\r"+ nfl.freeagency.players.activeDataSet.inspect());
		nfl.freeagency.players.activeDataSet.databind();
		hightlightFilterChoice(filterExp);
	}
	nfl.log("nfl.freeagency.players.changeDataSet: exit");
}

nfl.namespace('freeagency.players.activeSearch');
nfl.freeagency.players.activeSearch.onKeyPress = function(e){
	var evt					= (e) ? e : window.event;
	var currKeyCode;
	var currKeyChar;
	if(window.event){
		currKeyCode = e.keyCode;
	}
	else if(e.which){
		currKeyCode = e.which;
	}
	var currKeyChar			= String.fromCharCode(currKeyCode);
	var currTotalVal		= (Event.element(e).value).strip().toUpperCase();
	nfl.log("nfl.freeagency.players.activeSearch.onKeyPress: currKeyChar = "+ currKeyChar);
	if(("abcdefghijklmnopqrstuvwxyz0123456789").indexOf(currKeyChar.toLowerCase()) > -1){
		var currTotalVal	= (Event.element(e).value + currKeyChar).strip().toUpperCase();
	}else{
		 if(currKeyCode == 8){
		 	var currTotalVal	= currTotalVal.substring(0, currTotalVal.length - 1);
		 }
	}
	nfl.log("nfl.freeagency.players.activeSearch.onKeyPress: "+ currTotalVal);
	/* filter current result set based on current total value */
	
	applyFilter(currTotalVal,"name","startsWith");
}
nfl.freeagency.players.activeSearch.onFirstFocus	= function(event){
	Event.element(event).value	= "";
	Event.element(event).removeClassName("players-grid-activesearch-displaymessage");
	Event.stopObserving($('activesearch-term'),'focus',nfl.freeagency.players.activeSearch.onFirstFocus);
	
}

applyFilter	= function(filterValue,filterField,filterOperator){
	if(filterValue != 'ALL'){
		nfl.freeagency.players.activeDataSet.filter	= {field: filterField, criteria: filterValue, operator: filterOperator};
		nfl.log("field: "+ filterField +", criteria: "+filterValue+", operator: "+filterOperator);
	}else{
		nfl.log("field: "+ filterField +", criteria: "+filterValue+", operator: "+filterOperator);
		nfl.freeagency.players.activeDataSet.filter	= null;
	}
	nfl.freeagency.players.activeDataSet.databind();
}
hightlightFilterChoice = function(filterExp){
	/* clear all old filter items */
	nfl.log("hightlightFilterChoice: "+ filterExp);
	$$(".players-list-links li.active").each(function(li){
		li.removeClassName('active');
	});
	/* set filter items to bold */
	$$(filterExp).each(function(li){
		li.addClassName('active');
	});
}
populateTeamsPulldown	= function(){
	var ele	= $('players-list-dropdown-team');
	var teams	= new Array();
	for(i=0; i < playersDataSetbyTeam.size(); i++){
		var dataRow			= playersDataSetbyTeam[i];
		if(teams.indexOf(dataRow.teamCurrent.name) == -1){ teams[teams.length]	= dataRow.teamCurrent.name; }
		if(teams.indexOf(dataRow.teamPrevious.name) == -1){ teams[teams.length]	= dataRow.teamPrevious.name; }
	}
	teams.sort();
	/* now populate conference pulldown with list */
	ele.options.length	= 0;
	ele.options[0]		= new Option("Choose an NFL Team","-1");
	for(i=0;i<teams.length;i++){
		ele.options[(i + 1)]	= new Option(teams[i],teams[i]);
		ele.options[(i + 1)].id = ('team-'+(teams[i]).toLowerCase().replace(' ','-'));
	}
}

nfl.freeagency.players.getFilterParams	= function(){
	console.log('nfl.freeagency.players.getFilterParams');
	var retObj	= {};
	retObj	= {'filterElement':$("players-grid-container-alphabetical"),filterValueElement:$("alpha-a"),filterValue:"alpha-a",phrase:"by name",filter:{field: "name", criteria: "a", operator: "startsWith"}};
	$$(".players-list-links li.active").each(function(li){
		li.removeClassName('active');
	});
	if(window.location.hashparams.get() != null){
		nfl.log('hashchange: hashparams not null');
		var hparams	= window.location.hashparams.get();
		if(hparams.get('players-tab-set-1') != null){
			nfl.log('hashchange: '+hparams.get('players-tab-set-1'));
			/* has tab param */
			var tabSectionId	= hparams.get('players-tab-set-1');
			var filterId		= false;
			try{
				filterId	= $(tabSectionId).down('ul',0).identify();
			}catch(e){
				nfl.log('hashchange: error:'+e.message);
				try{
					filterId	= $(tabSectionId).down('select',0).identify();
				}catch(e){nfl.log('hashchange: error:'+e.message);}
			}
			if(filterId){
				nfl.log('hashchange: filterId='+filterId);
				var filterVal = false;
				if(typeof hparams.get(filterId) !== 'undefined'){
					//alert(window.location.hashparams.get().get(filterId));
					filterVal	= (hparams.get(filterId)).toLowerCase();
					$(filterVal).addClassName("active");
				}else{
					//filter val hash param is blank
					if($(filterId).tagName == 'UL'){ filterVal = $(filterId).select("li")[0].identify(); $(filterVal).addClassName("active");}
					if($(filterId).tagName == 'SELECT'){ filterVal = $($(filterId).options[0]).identify();}							
				}
				console.log('hashchange: filterVal='+filterVal);
				retObj	= {filterElement:$(filterId),filterValueElement:$(filterVal),filterValue:filterVal};
				if(filterVal.indexOf('anonymous_element') == -1){
					switch(tabSectionId){
						case "players-grid-container-position":
							retObj.phrase = 'by position';
							retObj.filter	= {field: "positionGroupLowerCase", criteria: retObj.filterValue.replace('pos-',''), operator: "="};
							break;
						case "players-grid-container-team":
							retObj.phrase = 'by team';
							retObj.filter	= {field: "teamKeyWords", criteria: retObj.filterValue.replace('team-',''), operator: "="};
							break;
						case "players-grid-container-alphabetical":
							retObj.phrase = 'by name';
							retObj.filter	= {field: "name", criteria: retObj.filterValue.replace('alpha-',''), operator: "startsWith"};
							break;			
					}
				}
			}
		}else{
			//check for filter hash params
			if(typeof window.location.hashparams.get().get('players-list-links-alphabetical') !== 'undefined'){
				/* has filter value in hash params but not tab param */
				filterVal					= (window.location.hashparams.get().get('players-list-links-alphabetical')).toLowerCase();
				retObj.filterValueElement	= $(filterVal);
				retObj.filterValue			= filterVal;
				retObj.filter.criteria		= filterVal.substring(6);
				$(filterVal).addClassName("active");
			}
		}
	}
	return retObj;
}

/*
Event.observe(window, 'load', function() {
	var freeAgencyTabSet = new nfl.ui.tabs.tabSet('tab-set', false); 
	var query = location.search.substring(1);
	var queryObj = query.toQueryParams();
	if (queryObj.position) {
		switch (queryObj.position.toLowerCase()) {
			case "qb":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-0').down('a'));
				break;
			case "rb":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-1').down('a'));
				break;
			case "wr/te":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-2').down('a'));
				break;
			case "ol":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-3').down('a'));
				break;
			case "dl":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-4').down('a'));
				break;
			case "lb":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-5').down('a'));
				break;
			case "db":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-6').down('a'));
				break;
			case "sp":
				freeAgencyTabSet.changeTab($('tab-set-1-tab-7').down('a'));
				break;
			default:
				break;
		}
	}
});
*/
