var RFTWresults = new RFTWdekiInit();

var teamsInfo = new Array();
var teamsData = new Array();
var teamsLT = "";
RFTWresults.jsonpath = RFTWresults.jsonurl + "/wp-content/themes/rftw/";
//--------------------------------
//  Helper functions
//--------------------------------

function getPathHref(pathLink) {
	return Deki.BaseHref + "/" + pathLink;
}
function getLeagueHref(leagueLink) {
	return Deki.BaseHref + "/" + leagueLink;
}
function getTeamHref(leagueLink, teamLink) {
	return getLeagueHref(leagueLink) + "/" + teamLink;
}
function getSwimmerHref(swimmerId) {
	return Deki.BaseHref + "/Results_Statistics/Swimmer_Results?swimmerId=" + swimmerId;
}
function getOrigMeetHref(meetid,lt) {
	return Deki.BaseHref +  "/Results_Statistics/Meet_Results?meetId=" + meetid + "&type=" + lt;
	
}
function bxTeamsSort(a,b) {
	return a.team_name - b.team_name;
}
function bxPointsSort(a,b) {
	return parseFloat(b.points_raw) - parseFloat(a.points_raw);
}

$wpjQ(document).ready(function(){
	load_leagues();
	$wpjQ("body").append("<div id='rftwmsg'></div>");
});

//--------------------------------
// Main function: Process Meet
//--------------------------------

function processMeet(data) {
	var output = "";
	teamsInfo = [];
	teamsData = [];
	
	$wpjQ("#meet").empty();
	
	if (data.error){
		showmessage(data.error);
		return;
	}
	
	output += printMeetHeader(data);
	if (data.boxscore){
		output += printBoxScore(data);
	}
	else{
	
		output += printDefaultBoxScore(data);
	}
	output += "NOTE: Finish position in left column is from last meet.";
	output += printIndResults(data.indswims);
	output += printRelayResults(data.relays);
	output += printDivesResults(data.dives);

	$wpjQ("#meet").html(output);
	hover_links($wpjQ("#rftw_moredetails"));
	$wpjQ("#rftw_moredetails").click(function(){
		get_vm_data('detail');
	});
	hover_links($wpjQ("#rftw_lessdetails"));
	$wpjQ("#rftw_lessdetails").click(function(){
		get_vm_data();
	});
}

//--------------------------------
// Header
//--------------------------------
function printMeetHeader(data) {
	var output = "";
	
	$wpjQ.each(data.teams, function() {
		
		teamsInfo[this.team_abbrev] =  this.league_name_link + "/" + this.team_name_link;
		teamsData.push(this);
		
	});
	teamsLT = RFTWresults.pagelinks[data.team_type];

	teamsData.sort(bxTeamsSort);
	
	var teamStr = "";
	var teamNames = "";
	var leagueNames = "";
	var leagueNamesAr = [];
	var count = 1;
	for (var i in teamsData) {
		teamStr += teamsData[i].team_abbrev;
		teamNames += "<li><a href='" + getTeamHref(teamsLT + "/" + teamsData[i].league_name_link, teamsData[i].team_name_link) + "' target='_blank'>"+teamsData[i].team_name+"</a>";
		teamNames += "<br>[ Calculated from last swim on <a href='";
		teamNames +=  getOrigMeetHref(teamsData[i].last_meet_id,data.team_type);
		teamNames += "' target='_blank'>";
		teamNames += teamsData[i].lastmeetdate + "</a> (opens in new window) ]</li>";
		
		var leagueNameHref = "<a href='" + getLeagueHref(teamsLT + "/" + teamsData[i].league_name_link) + "' target='_blank'>"+teamsData[i].league_name+"</a>";
		if ( !in_array(leagueNameHref,leagueNamesAr) ){
			leagueNamesAr.push(leagueNameHref);
		}
		if (count < teamsData.length) {
			teamStr += " : ";
			count++;
		}
	}
	var count = 1;
	for (var i in leagueNamesAr) {
		leagueNames += leagueNamesAr[i];
		if (count < leagueNamesAr.length) {
			leagueNames += " <br/> ";
			count++;
		}
	}
	
    output += "<div id='meet-header'>";
    if (data.boxscoretype == "short") {
	if (data.meet_title){
		output +="<center><h2>" + data.meet_title + "</h2></center>";
	}
	else{
	    	output += "<center><h2>" + data.meet_type + "</h2></center>";
	}
    } else {
		output += "<center><h2>" + teamStr + "</h2></center>";
	}
	output += "<strong>Date:</strong> " + data.meet_date + "<br>";
	
	output += "<strong>League:</strong> " + leagueNames + "<br>";
	output += "<strong>Location:</strong> (virtual meet)<br>";
	output += "<strong>Course:</strong> " + data.course + "<br>";
	if (data.division) {
		output += "<strong>Division:</strong> " + data.division + "<br>";
	}
	output += "<strong>Opponents:</strong><ul>" + teamNames + "</ul><br>";
    output += "</div>";
	return output;
}

//--------------------------------
// Box Score
//--------------------------------
function printBoxScore(data) {
	var output = "";
	if (data.boxscoretype == "short") {
		output += printDivisionalBoxScore(data);
	} else {
		output += printFullBoxScore(data);
	}
	return output;
}

//--------------------------------
// Divisional Box Score
//--------------------------------
function printDivisionalBoxScore(data) {
	var output = "";
	output += "<table class='api-data box-score' width='440'>";
    output += "<caption class='w440'>Virtual Box Score</caption>";    
    output += "<thead class='box-score'>";
    
    var bxTeams = new Array();
    $wpjQ.each(data.teams, function() {    	
		bxTeams.push(this);
    });
    bxTeams.sort(bxTeamsSort);
    
    // Header    
   	output += "<th class='scoring-breakdown'>Scoring Breakdown</th>";
    $wpjQ.each(data.boxscore, function() {
		output += "<th class='eventname'>" + this.eventname + "</th>";
    });
    output += "</tr>";
    output += "<tr></thead>";
    
    var maxPoints = [];
    $wpjQ.each(data.boxscore, function() {
    	var eventMax = this.teams.sort(bxPointsSort)[0];
    	maxPoints.push(eventMax.points);
    });
    
    output += "<tbody class='box-score'>";
    for (var i in bxTeams) {
		output += "<tr>";
		output += "<td class='scoring-breakdown'>" + bxTeams[i].team_abbrev + "</td>";
		var j = 0;
		$wpjQ.each(data.boxscore, function() {
			var sortedTeams = this.teams.sort(bxTeamsSort);
			if (sortedTeams[i].points == maxPoints[j]) {
				output += "<td class='box-team'><b>" + sortedTeams[i].points + "</b></td>";
			} else {
				output += "<td class='box-team'>" + sortedTeams[i].points + "</td>";
			}
			j++;
		});
		output += "</tr>";
    }
    output += "</tbody>";
	output += "</table>";
	
	return output;
}

//--------------------------------
// Full Detailed Box Score
//--------------------------------
function printFullBoxScore(data) {
	var output = "";
	output += "<table class='api-data box-score' width='440'>";
    output += "<caption class='w440'>Virtual Box Score</caption>";    
    output += "<thead class='box-score'>";
    output += "<tr>";
   	output += "<th class='scoring-breakdown'>Scoring Breakdown</th>";
   	
   	var bxTeams = new Array();
    $wpjQ.each(data.teams, function() {    	
		bxTeams.push(this);
    });
    bxTeams.sort(bxTeamsSort);
    for (var i in bxTeams) {
		output += "<th class='box-team'>" + bxTeams[i].team_abbrev + "</th>";
	}

    output += "</tr></thead><tbody class='box-score'>";
	var c=0;
    $wpjQ.each(data.boxscore, function() {
		//output += "<tr>";
		if (c % 2 == 0) {
			output += "<tr class='even'>";
		} else { 
			output += "<tr class='odd'>";
		}
//		if ($wpjQ.trim(this.eventname) == "Totals" || $wpjQ.trim(this.eventname) == "Boys All" || $wpjQ.trim(this.eventname) == "Girls All") {
			output += "<td class='eventname'>" + this.eventname + "</td>";
//		} else {
//			output += "<td class='eventname eventname-link'>" + "<a href='#" + this.eventname + "'>" + this.eventname + "</a></td>";
//		}
		var maxPoints = 0;
		var bxScores = new Array();
		$wpjQ.each(this.teams, function() {
			if (parseFloat(this.points) > maxPoints) { maxPoints = parseFloat(this.points); }
			bxScores.push(this);
		});
		bxScores.sort(bxTeamsSort);

		var totalTeams = teamsData.length;
		for (var i in bxScores) {
			var teamClass = i==(totalTeams-1) ? ' box-team-final' : ' box-team';
			if (parseFloat(bxScores[i].points) == maxPoints) {
				output += "<td class='win" + teamClass + "'>";
			} else {
				output += "<td class='" + teamClass + "'>";
			}
			output += bxScores[i].points + "</td>";
		}
		if (i == 0){
			output +="<td class='box-team-final'>0.0</td>";
		}
		output += "</tr>";
		c++;
    });
 
	if (c % 2 == 0) {
		output += "<tr class='even'>";
	} else { 
		output += "<tr class='odd'>";
	}
	output += "<td colspan='3' style='text-align:right;'><span id='rftw_lessdetails' style='color:#15657E;'>Less detail</span></td></tr>";
  output += "</tbody>";
	output += "</table>";
	
	return output;
}
//--------------------------------
// Default Shorter Box Score
//--------------------------------

function printDefaultBoxScore(data) {
	var output = "";
	output +="<table cellspacing='0' cellpadding='0' border='0' width='440' style='table-layout: fixed;' class='api-data swimmerseason'>"
	//output += "<table class='api-data swimmerseason' width='440'>";
    output += "<caption class='w440 schedule'>Virtual Box Score</caption>";    
    output += "<thead>";
    output += "<tr>";
   	output += "<th class='swimresult'>Scoring Breakdown</th>";
	output += "<th class='swimresult'>" + data.teams[0].team_abbrev + "</th>";
	output += "<th class='swimresult'>" + data.teams[1].team_abbrev + "</th></tr></thead>";	
	output += "<tbody class='all-meets'>";

	for (var j in data.shortboxscore){
		output+=showBoxLine(data.shortboxscore[j],j);
	}
	j++;
	if (j % 2 == 0) {
		output += "<tr class='even'>";
	} else { 
		output += "<tr class='odd'>";
	}
	output += "<td colspan='3' style='text-align:right;'><span id='rftw_moredetails' style='color:#15657E;'>More detail</span></td></tr>";
	output += "</tbody></table>";
	
	return output;
}
function showBoxLine(row,count){
	var hwin="";
	var owin="";
	if (Number(row.team1_pts) > Number(row.team2_pts)){
		hwin=" win";
	}	
	if (Number(row.team1_pts) < Number(row.team2_pts)){
		owin=" win";
	}	
	var out="";
	if (count % 2 == 0) {
		out += "<tr class='even'>";
	} else { 
		out += "<tr class='odd'>";
	}
	
	out += "<td class='box-team'>" + row.category + "</td>";
	out += "<td class='box-team" + hwin + "'>" + row.team1_pts + "</td>";
	out += "<td class='box-team" + owin + "'>" + row.team2_pts + "</td>";
	out += "</tr>";
	
	return out;
}

//--------------------------------
// Individual Results
//--------------------------------
function printIndResults(ind) {
	var output = "";
	$wpjQ.each(ind, function() {
		output += "<table  class='api-data individual-results' width='440'>";
		output += "<caption class='w440'><a name='" + this.eventname + "' target='_blank'>" + this.eventname + "</a>" + " - " + this.eventnum + "</caption>";
        output += "<thead class='individual-results'>";
		output += "<tr>";
        output += "<th class='finish'>&#35;</th>";
        output += "<th class='swimmer'>Swimmer</th>";
        output += "<th class='age'>Age</th>";
        output += "<th class='team'>Team</th>";
        output += "<th class='seedtime'>Seed Time</th>";
        output += "<th class='swimresult'>Swim Time</th>";
        output += "<th class='points'>Points</th>";
        output += "</tr>";
        output += "</thead>";
		output += "<tbody class='individual-results'>";        
		output += printEachEvent(this);
		output += "</tbody>";
		output += "</table>";
	});	
	return output;
}

//--------------------------------
// Each Event
//--------------------------------
function printEachEvent(event) {
	output = "";
	var count = 0;
	if (!event.swimmers) { return output; }
	$wpjQ.each(event.swimmers, function() {
		var teamwww = getPathHref(teamsLT + "/" + teamsInfo[this.team_abbrev]);
		var swimmerwww = getSwimmerHref(this.swimmer_id);
		if (count % 2 != 0) {
			output += "<tr class='even'>";
		} else { 
			output += "<tr class='odd'>";
		}
		output += "<td class='finish'>" + this.finish + "</td>";
		if (!this.swimmer_name) {
			output += "<td class='swimmer'>&mdash;</td>";
		} else {
			output += "<td class='swimmer'>" + "<a href='"+swimmerwww+"' target='_blank'>"+this.swimmer_name + "</a></td>";
		}
		output += "<td class='age'>" + this.swimmer_age + "</td>";
		output += "<td class='team'>" + "<a href='"+ teamwww +"' target='_blank'>"+ this.team_abbrev + "</a></td>";
		output += "<td class='seedtime'>" + this.seedtime + "</td>";
		output += "<td class='swimresult'>" + this.swimresult + "</td>";
		if ((!this.points || this.points == 0) && this.status) {
			output += "<td class='points'>" + this.status + "</td>";
		} else {
			output += "<td class='points'>" + Math.round(this.points*10)/10;
		}
		output += "</tr>";
		count++;
	});
	return output;
}


//--------------------------------
// Relay Results
//--------------------------------
function printRelayResults(relay) {
	var output = "";
	$wpjQ.each(relay, function() {
	output += "<table class='api-data relay-results' width='440'>";
		output += "<caption class='w440'><a name='" + this.eventname + "' target='_blank'>" + this.eventname + "</a>" + " - " + this.eventnum + "</caption>";
        output += "<thead>";
		output += "<tr>";
        output += "<th class='swimmer'>Swimmer</th>";
        output += "<th class='age'>Age</th>";
        output += "<th class='team'>Team</th>";
        output += "<th class='seedtime'>Seed Time</th>";
        output += "<th class='swimresult'>Swim Time</th>";
        output += "<th class='points'>Points</th>";
        output += "</tr></thead><tbody>";

		output += printEachRelay(this);

		output += "</tbody>";
		output += "</table>";
	});
	return output;
}

function printEachRelay(relay) {
	var output = "";
	var count = 0;
	if (!relay.teams) { return output; }
	$wpjQ.each(relay.teams, function() {
		var teamwww = getPathHref(teamsInfo[this.team_abbrev]);
		if (count % 2 == 0) {
			output += "<tr class='even'>";
		} else { 
			output += "<tr class='odd'>";
		}
		output += printRelaySwimmers(this.swimmers);
		output += printRelayAges(this.swimmers);
		output += "<td class='team'>" + "<a href='"+teamwww+"' target='_blank'>"+ this.team_abbrev + "</a></td>";
		output += "<td class='seedtime'>" + this.seedtime + "</td>";
		if (!this.swimresult) {
			output += "<td class='swimresult'>&mdash;</td>";
		} else {
			output += "<td class='swimresult'>" + this.swimresult + "</td>";
		}
		output += "<td class='points'>" + Math.round(this.points*10)/10 + "</td>";
		output += "</tr>";
		count++;
	});
	return output;
}

function printRelaySwimmers(swimmersData) {
	var output = "";
	output += "<td class='relay swimmer-data swimmer'>";	
	$wpjQ.each(swimmersData, function() {
		if (!this.swimmer_name) {
			output += "&mdash;";
		} else {
			var swimmerwww = getSwimmerHref(this.swimmer_id);
			output += "<a href='" + swimmerwww + "' target='_blank'>" +this.swimmer_name + "</a>";
		}
		output += "<br>";
	});
	output += "</td>";
	return output;
}

function printRelayAges(swimmersData) {
	var output = "";
	output += "<td class='relay swimmer-data age'>";
	$wpjQ.each(swimmersData, function() {
		output += this.swimmer_age + "<br>";
	});
	output += "</td>";
	return output;
}

//--------------------------------
// Dive Results
//--------------------------------
function printDivesResults(dive) {
	var output = "";
	if (!dive || dive[0].divers == null) { 
		return output; 
	}
	$wpjQ.each(dive, function() {
		output += "<table class='api-data' width='440'>";
		output += "<caption class='w440'><a name='" + this.eventname + "' target='_blank'>"+ this.eventname + " - " + this.eventnum + "</a></caption>";
		output += "<thead>";
		output += "<tr>";
        output += "<th class='swimmer'>Swimmer</th>";
        output += "<th class='age'>Age</th>";
        output += "<th class='team'>Team</th>";
        output += "<th class='score dive-score'>Dive Score</th>";
        output += "<th class='points'>Points</th>";
        output += "</tr></thead><tbody>";

		output += printEachDive(this);

		output += "</tbody>";
		output += "</table>";
	});	
	
	return output;
}

//--------------------------------
// Each Dive
//--------------------------------
function printEachDive(dive) {
	output = "";
	var count = 0;
	if (!dive.divers) { return output; }
	$wpjQ.each(dive.divers, function() {
		var teamwww = getPathHref(teamsInfo[this.team_abbrev]);
		var diverwww = getSwimmerHref(this.diver_id);
		if (count % 2 != 0) {
			output += "<tr class='even'>";
		} else { 
			output += "<tr class='odd'>";
		}
		output += "<td class='swimmer'>" + "<a href='"+diverwww+"' target='_blank'>"+this.diver_name + "</a></td>";
		if (parseInt(this.diver_age) > 0) {
			output += "<td class='age'>" + this.diver_age + "</td>";
		} else {
			output += "<td class='age'></td>";
		}
		output += "<td class='team'>" + "<a href='"+teamwww+"' target='_blank'>"+ this.team_abbrev + "</a></td>";
		output += "<td class='score dive-score'>" + this.dive_score + "</td>";
		output += "<td class='points'>" + Math.round(this.points*10)/10 + "</td>";
		output += "</tr>";
		count++;
	});
	return output;
}
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
function in_array(needle,haystack){
// copy of the php function same name
// no error check to see if haystack is actually an array. 

	for (var i = 0;i<haystack.length;i++){
		if (haystack[i] == needle){
			return true;
			}
		}
	return false;

}

/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
function load_leagues(){
	
	var league_type=RFTWresults.lt.replace(/hs/, "high school")
	
	$wpjQ.getJSON("http://"+ RFTWresults.jsonpath + "json.php?leagues&callback=?",{"lt" : RFTWresults.lt},function(data){
		
		var out="<code>Choose a league:<br></code><select id='leaguelist'><option></option>";
		for (var j in data){
			out+="<option value='" + data[j].league_id + "'>" + data[j].league_name + "</option>";
		}
		out += "</select>";
		$wpjQ("#leagues").html(out);
		$wpjQ("#leaguelist").change(function(){
			var id = 0;
			if ($wpjQ(this).val()){
				id = $wpjQ(this).val();
			}
			
			get_teams(id);
			
			
		});
	});

}
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
function get_teams(leagueid){
	$wpjQ("#teamlist").remove();
	
	if (leagueid > 0){
	
		$wpjQ.getJSON("http://"+ RFTWresults.jsonpath + "json.php?teams&callback=?",{"lid" : leagueid},function(data){
			var output="Choose up to two teams for a virtual meet<br>";
			for (var j in data){
				output += "<input type='checkbox' name='chkrftwteams' value='" + data[j].team_id + "' class='rftwteams'>";
				output += "<span id='rftwteamschk" + data[j].team_id + "'>&nbsp;" + data[j].team_name + " (" + data[j].division + ")<br></span>";
				
				
			}
			$wpjQ("#leaguelist").after("<div id='teamlist'>" + output + "<br><button id='rftw_runvm'>Make virtual meet</button></div>");
			$wpjQ("input[name='chkrftwteams']").change(function(){
				var n = $wpjQ("input[name='chkrftwteams']:checked").length;
				if (n > 2){
		//			$wpjQ(this).attr("checked","");
				}
				if (n == 2){
					$wpjQ("input[name='chkrftwteams']:not(:checked)").each(function(){
						$wpjQ(this).hide();
						var id = $wpjQ(this).val();
						$wpjQ("#rftwteamschk" + id).hide();
						
					});
					
				}
				else{
					$wpjQ("input[name='chkrftwteams']:not(:checked)").each(function(){
						$wpjQ(this).show();
						var id = $wpjQ(this).val();
						$wpjQ("#rftwteamschk" + id).show();
						
					});
					
				}
				
			});
			$wpjQ("#rftw_runvm").click(function(){
				get_vm_data();
			});
		});
	}

}
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
function get_vm_data(details){
	
	var teams= {};
	var t = 1;
	if (details != ""){
		teams["sl"]=details;
	}
	 $wpjQ("input[name=chkrftwteams]:checked").each(function(){
		teams["t" + t] = $wpjQ(this).val();
		t++;
	});
	
	$wpjQ.getJSON("http://"+ RFTWresults.jsonpath + "json.php?virtualmeet&callback=?",teams,function(data){
		 processMeet(data);
	});
	
	
}


/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
function hover_links(obj){

	obj.mouseover(function(){
				$j(this).css("cursor","pointer");
				$j(this).css("text-decoration","underline");
				$j(this).css("color","#444444");
				}).mouseout(function(){
				
				$j(this).css("cursor","");
				$j(this).css("text-decoration","");
				$j(this).css("color","#15657E");
				
				});
}

