YAHOO.namespace('cs');

YAHOO.cs.MeetResults = function(meetData) {	
	var oDS = new YAHOO.util.LocalDataSource(meetData);
	oDS.responseType = YAHOO.util.DataSource.TYPE_JSON;

	var events = oDS['liveData']['events'];
	var tableEl,eventId, tableList = [];

	for (var i in events) {
		eventId = events[i]['title']['1'];
		tableEl = YAHOO.util.Dom.get("eventtable_"+eventId);		
		if (!tableEl) {
			alert('couldnt find html el with id: eventtable_'+eventId);
			return;
		};

		dt = YAHOO.cs.EventTable(tableEl,oDS,eventId);
		tableList.push(dt);
	};
	
	var teamFilter = function(team_id) {
		for (var i=0; i < tableList.length; i++) {
			tableList[i].filterRowSet(team_id);
		};
	};
	
	var setView = function(val) {
		for (var i=0; i < tableList.length; i++) {
			tableList[i].setView(val);
		};
	};
	
	
	return {
		teamFilter:teamFilter,
		setView:setView
	}
	
};


YAHOO.cs.EventTable = function(tableEl,oDS,eventId) {
	
	YAHOO.widget.DataTable.formatSwimmerLink = function(el, oRecord, oColumn, oData) {
        var swimmer_id = oRecord.getData("swimmer_id");
		var name = oRecord.getData("swimmer_name");
        el.innerHTML = '<a href="/swimmer/' + swimmer_id + '/">' + name + '</a>';
    };

	YAHOO.widget.DataTable.formatTeamLink = function(el, oRecord, oColumn, oData) {
        var institution_id = oRecord.getData("institution_id");
		var name = oRecord.getData("institution_name");
        el.innerHTML = '<a href="/institution/' + institution_id + '/">' + name + '</a>';
    };

	YAHOO.widget.DataTable.formatRelayTeamLink = function(el, oRecord, oColumn, oData) {		
        var institution_id = oRecord.getData("institution_id");
		var name = oRecord.getData("institution_name");
		var relay_name = oRecord.getData("relayname");
		var toptime_id  = oRecord.getData("id");
		var legs = oDS['liveData']['relaylegs'][toptime_id];
		legs = YAHOO.cs.formatRelay(legs,this.viewType);
		
        el.innerHTML = '<a href="/institution/' + institution_id + '/">' + name + ' - ' + relay_name + '</a>' + legs;
    };

	YAHOO.widget.DataTable.formatTimeLink = function(el, oRecord, oColumn, oData) {
		var toptime_id = oRecord.getData("id");
		var time = oRecord.getData('finalstime')
		el.innerHTML = '<a href="#" class="splitlink" id="toptime'+ toptime_id +'">' + time + '</a>';
		YAHOO.util.Event.on(el, 'click', function(e) {
			if (e) YAHOO.util.Event.preventDefault(e);	
		});
		
		var splits = oDS['liveData']['splits'][toptime_id];
		if (splits) {
			new YAHOO.widget.Tooltip("tooltip"+toptime_id, { 
				context:el, 
				text:YAHOO.cs.formatSplit(splits),
				showDelay:500 } );
		};
	};
	
	YAHOO.widget.DataTable.prototype.hiddenRows = [];
	YAHOO.widget.DataTable.prototype.viewType = 0;
	
	YAHOO.widget.DataTable.prototype.setView = function (val) {
		this.viewType = val;
		this.render();
	};
	
	YAHOO.widget.DataTable.prototype.filterRowSet = function (team_id) { 					
		var start = 0, count = 0, current = 0,
			recs = this.getRecordSet().getRecords();
		
		if (this.hiddenRows.length>0) {
			for (var i=0; i < this.hiddenRows.length; i++) {
				recs.splice(this.hiddenRows[i].pos,0,this.hiddenRows[i].rec);
			};
		};
		this.hiddenRows = [];
		
		while (current < recs.length && team_id != 0) {
			if (recs[current].getData('institution_id') != team_id) {
				//push to this.hiddenRows
				obj = {};
				obj.rec = recs[current];
				obj.pos = current;
				this.hiddenRows.push(obj);
				
				if (count === 0) {
					start = current;
				} 
				count++;
				current++;
			} else {
				if (count) {					
					recs.splice(start, count);
					count = 0;
					current = start;
				} else {
					current++;
				}
			}
		}
		
		if (count) {				
			recs.splice(start, count);
		}
		
		this.render();
	};
	
	
	oDS.responseSchema = {
		resultsList : "events."+eventId+".rows",
		fields: ["pos","prelimplace","eventnumber","finalstime","swimoffcourse","poinstscored","id","seedtime","numlegs","prelimcourse","relaydistance","prelimheat","finalsheat","relaystroke","seedcourse","swimmer_name","eventstroke","finalscourse","eventdistance","meet_id","swimmer_id","prelimtime","relayname","institution_id","swimofftime","dateofswim","prelimlane","finalslane","institution_name","exh","finalsplace","recid","eventage","eventgender"]
	};
		
	var indEventColumnDefs = [
		{key:"pos",sortable:false, resizeable:false,label:"Pos",width:10},
        {key:"swimmer_name",sortable:false, resizeable:true, label:"Name", formatter:YAHOO.widget.DataTable.formatSwimmerLink},
		{key:"institution_name",sortable:false, resizeable:true, label:"Team",formatter:YAHOO.widget.DataTable.formatTeamLink},
        {key:"finalstime", sortable:false, resizeable:true,label:"Time", formatter:YAHOO.widget.DataTable.formatTimeLink}
	];
	
	var relayEventColumnDefs = [
		{key:"pos",sortable:false, resizeable:false,label:"Pos",width:10},
		{key:"institution_name",sortable:false, resizeable:true, label:"Team",formatter:YAHOO.widget.DataTable.formatRelayTeamLink},
        {key:"finalstime", sortable:false, resizeable:true,label:"Time"}
	];
	
	//grab the first record and determine the columnDefs
	var record = oDS['liveData']['events'][eventId]['rows'][0];
	var columns = (record['relayname'] == null) ? indEventColumnDefs : relayEventColumnDefs;
	//use eventTitle as a table caption
	var eventTitle = oDS['liveData']['events'][eventId]['title'][0];
	
	return new YAHOO.widget.DataTable(tableEl, columns, oDS, {caption: eventTitle});
};


YAHOO.cs.formatSplit = function(splits) {
	if (!splits) {
		return;
	};	
	
	var splittype = splits[0].type;
	var splitdistance = parseInt(splits[0].distance);
	var times = [];
	
	for (var i=0; i < splits.length; i++) {
		t = splits[i].times;
		for (var j=0; j < t.length; j++) {
			times.push(t[j]);
		};
	};
	
	var timesmkp = '<table>';
	for (var i=0; i < times.length; i++) {
		timesmkp += '<tr><td>' + (splitdistance*(i+1)) + '</td><td>' + times[i] + '</td></tr>';
	};
	timesmkp += '</table>';

	return '<strong>'+splittype+'</strong><br>' + timesmkp;
};


YAHOO.cs.formatRelay = function(legs,view) {
	if (!legs) {
		return;
	};
	
	var mkp,el,id,name,time,takeofftime,swimmers = []
	if (view == 0) {
		for (var i=0; i < legs.length; i++) {
			id = legs[i]['swimmer_id'];
			name = legs[i]['swimmer_name'];
			el = '<a href="/swimmer/'+id+'">'+name+'</a>';
			swimmers.push(el);
		};
		mkp = swimmers.join(', ');
	} else {
		mkp = '<table>';
		mkp += '<tr><th>Name</th><th>Reaction</th><th>Time</th></tr>';
		for (var i=0; i < legs.length; i++) {
			id = legs[i]['swimmer_id'];
			name = legs[i]['swimmer_name'];
			time = legs[i]['legtime'];
			takeofftime = legs[i]['takeofftime'];
			mkp += '<tr><td><a href="/swimmer/'+id+'">'+name+'</a></td><td>'+ takeofftime +'</td><td>'+ time +'</td></tr>';
		};
		mkp += '</table>';
	};
	
	return '<br>'+ mkp;
};