/*
 * FantasyFootballXtreme.com Trade Calculator
 *
 * Put this inside of <head></head>.
 *
 *		<script src="calc.js" type="text/javascript">
 *		</script>
 *
 * Put this inside of <body></body>.
 *
 *		<script type="text/javascript">
 *		drawTradeCalculator();
 *		</script>
 */

// Global Variables
var gblplayers;
var gblListSize;
var	glbAdvice;
var gblPercentageBreak;
var gblWSUrl =  "http://" + document.domain + "/wp-content/themes/sn-fbx/tools/trade-calculator/ws-trade-calculator.php";

// Main Function Calls
setDefaults(); // set default form fields
drawTradeCalculator(); //load data into web page

// Public Functions
function setDefaults()
{
	// What message should be shown initially?
	setInitialAdvice('Hold down <strong>Ctrl</strong> for multiple players</span>');

	// What message should be shown when the values are equal?
	setEqualAdvice('<span style="color: green">This trade is EQUAL</strong>.</span>');

	// In ascending order, what are the percentage breaks and what messages should be shown when the answer is yes?
	addYesPercentageBreak(1, '<span style="color: blue">Close one, but Yes <strong>we would make this trade</strong>.</span>');
	addYesPercentageBreak(2, '<span style="color: blue">Yes, <strong>we would make this trade</strong>!</span>');
	addYesPercentageBreak(3, '<span style="color: blue">Yes, <strong>we would make this trade</strong> right now!</span>');

	// In ascending order, what are the percentage breaks and what messages should be shown when the answer is no?
	addNoPercentageBreak(1, '<span style="color: red">Close one, but <strong>we would not make this trade</strong>.</span>');
	addNoPercentageBreak(2, '<span style="color: red">No, <strong>we would not make this trade</strong>!</span>');
	addNoPercentageBreak(3, '<span style="color: red">No way, <strong>we would not make this trade</strong>!</span>');
}

function GetPlayers($listType){

var currRank;
var pastRank;
var pos;
var playerCount;
	
var addPlayers = function (rankings) {
    // store globally	
	this.gblPlayers = rankings.Players;
	
	// get handle to select elements in page
	$('lastUpdated').setHTML('Rankings last updated: ' + rankings.LastUpdated);
	var selYours = $('yourPlayers');
	var selTheirs = $('theirPlayers');

	playerCount = -1;
	
	// add player options top select elements
	for(var i = 0; i <rankings.Players.length; i++)
	{
		currRank = rankings.Players[i].Rank;

		//First row
		if (i == 0){
			pastRank = rankings.Players[i].Rank;			
			pos = rankings.Players[i].PositionAbbrev;
		}
		//Players with more than one position
		else if(currRank == pastRank){
			pos = pos + ", " + rankings.Players[i].PositionAbbrev;			
		}

		//last record, flush
		if (i + 1 == rankings.Players.length){

			playerCount ++;

			selYours.options[playerCount] = new Option(rankings.Players[i].LastName + ", " + rankings.Players[i].FirstName  + ", " + rankings.Players[i].MiddleName + " - " + pos);
		
			selTheirs.options[playerCount] = new Option(rankings.Players[i].LastName + ", " + rankings.Players[i].FirstName  + ", " + rankings.Players[i].MiddleName + " - " + pos);
			
		}

		//Add Option whenever the rank changes
		else if(currRank != pastRank){
			playerCount ++;

			selYours.options[playerCount] = new Option(rankings.Players[i-1].LastName + ", " + rankings.Players[i-1].FirstName  + ", " + rankings.Players[i-1].MiddleName + " - " + pos);
		
			selTheirs.options[playerCount] = new Option(rankings.Players[i-1].LastName + ", " + rankings.Players[i-1].FirstName  + ", " + rankings.Players[i-1].MiddleName + " - " + pos);

			pos = rankings.Players[i].PositionAbbrev;
		}

		pastRank = rankings.Players[i].Rank;
	}
}


var json_string = '{"listType":' + $listType + '}';

var jsonListType = Json.evaluate(json_string);

var request = new Json.Remote(this.gblWSUrl,{ 
	onComplete: function(response){ 
		addPlayers(response);}
	}).send(jsonListType);
}

function setInitialAdvice(message)
{
	setAdvice('initial', message);
}

function setEqualAdvice(message)
{
	setAdvice('equal', message);
}

function setAdvice(adviceLabel, message)
{
	if (typeof(glbAdvice) != 'object')
	{
		glbAdvice = new Array();
	}
	glbAdvice[adviceLabel] = message;
}

function addYesPercentageBreak(percentage, message)
{
	addPercentageBreak('yes', percentage, message);
}

function addNoPercentageBreak(percentage, message)
{
	addPercentageBreak('no', percentage, message);
}

function addPercentageBreak(adviceLabel, percentage, message)
{
	if (typeof(glbPercentageBreak) != 'object')
	{
		glbPercentageBreak = new Array();
	}
	if (typeof(glbPercentageBreak[adviceLabel]) != 'object')
	{
		glbPercentageBreak[adviceLabel] = new Array();
	}

	var size = glbPercentageBreak[adviceLabel].length;

	glbPercentageBreak[adviceLabel][size] = new Array();
	glbPercentageBreak[adviceLabel][size]['percentage'] = percentage;
	glbPercentageBreak[adviceLabel][size]['message'] = message;
}
function drawTradeCalculator()
{

	//Capture List Type Querystring if called fom main page
	tradeType = document.location.search;

	redraftChecked = "";
	dynastyChecked = "";

	if(tradeType == "?tradeType=dynasty")
	{
		dynastyChecked = "checked";
	}
	else
	{
		redraftChecked = "checked";
	}

	document.write('<p id="lastUpdated" class="date-stamp"></p>');

	document.write('<p style=\"text-align:center\">Select the draft type your league uses:</p>');
	document.write('<form id=listTypeForm style=\"text-align:center\" name=listTypeForm action="" method="post">');
//	document.write('<input type="radio" name="listType" value="1" onClick="GetPlayers(1)" ' + redraftChecked + '>Redraft</input>');
//	document.write('<input type="radio" name="listType" value="2" onClick="GetPlayers(2)" ' + dynastyChecked + '>Dynasty<br>');
	document.write('</form>');

	document.write('<div id=\"trade-calculator\" align=\"center\">')
	document.write('<p style=\"text-align:center\">For the most accurate results, select either a <strong>one-for-one</strong> or a <strong>two-for-two</strong> type of trade.</p><p style=\"text-align:center\">Created using an average of (4) staff value systems</p>');
	document.write('<br />');
	document.write('<a href="/fantasy-baseball-xtreme-tools/trade-calculator/">Start Over</a>');
	document.write('<table>');
	document.write('<tr>');
	document.write('<th>');
	document.write('Your Players');
	document.write('<br />');
	document.write('</th>');
	document.write('<th>');
	document.write('Their Players');
	document.write('<br />');
	document.write('</th>');
	document.write('</tr>');
	document.write('<tr>');
	document.write('<td>');
document.write('<select id="yourPlayers" multiple="true" size="15" onchange="javascript:playerSelectionChanged()"');
	document.write('</td>');
	document.write('<td>');
document.write('<select id="theirPlayers" multiple="true" size="15" onchange="javascript:playerSelectionChanged()"');
	document.write('</td>');
	document.write('</tr>');
	document.write('</table>');
	document.write('Select ONE player from EACH side');
	document.write('<br />');
	document.write('<label id="ourAdvice">' + this.glbAdvice['initial'] + '</label>');
	document.write('</div>');
	document.write('<br />');
	//document.write('<div class=\"clearone\">&nbsp;</div>'); // uncomment this if you want full sized center column
	
	// remote web service call to get data
	GetPlayers(1);
}

function playerSelectionChanged()
{
	player = this.gblPlayers;
	var ourAdvice = glbAdvice['initial'];
	var yourPoints = 0.0;
	var theirPoints = 0.0;

	for (var i = 0; i < player.length; i++)
	{
		if (document.getElementById('yourPlayers').options[i]){		
			if (document.getElementById('yourPlayers').options[i].selected)
			{
				yourPoints += parseFloat(player[i].Rank);
			}

			if (document.getElementById('theirPlayers').options[i].selected)
			{
				theirPoints += parseFloat(player[i].Rank);
			}
		}
	}
	//GGS 9-7-08:  New Calculation:
    var pointDifference = Math.round((theirPoints - yourPoints) * 20);
    var pointDifferenceAdjusted;

	//<=-5 different, no way make trade
	if(pointDifference <= -5){
		pointDifferenceAdjusted = -3;
	}
	//-2 to -4 different, do not make trade
	else if(pointDifference <= -2){
		pointDifferenceAdjusted = -2;
	}
	//-1 different, close, no trade
	else if(pointDifference <= -1){
		pointDifferenceAdjusted = -1;
	}
	//0 is EQUAL
	else if(pointDifference <= 0){
		pointDifferenceAdjusted = 0;
	}
	//1 different, close, make trade
	else if(pointDifference <= 1){
		pointDifferenceAdjusted = 1;
	}
	//2-4 different, make trade
	else if(pointDifference <= 4){
		pointDifferenceAdjusted = 2;
	}
	//>= 5, make trade right now
	else{
			pointDifferenceAdjusted = 3;
	}

	var lesserPoints = Math.min(yourPoints, theirPoints);

	//debug info
	//alert('your points:' + yourPoints);
    //alert('their points:' + theirPoints);
    //alert(pointDifference + ' adjusted ' + pointDifferenceAdjusted);

	
	if (lesserPoints != 0)
	{
		var percentage = Math.round(Math.abs(pointDifference) / lesserPoints * 100);
		
		ourAdvice = glbAdvice['equal'];
		if (pointDifferenceAdjusted > 0)
		{
			for (var i = glbPercentageBreak['yes'].length - 1; i >= 0; i--)
			{
//				if (percentage >= glbPercentageBreak['yes'][i]['percentage'])
				if (pointDifferenceAdjusted >= glbPercentageBreak['yes'][i]['percentage'])
				{
					ourAdvice = glbPercentageBreak['yes'][i]['message'];
					break;
				}
			}
		}
		else if (pointDifferenceAdjusted < 0)
		{
			for (var i = glbPercentageBreak['no'].length - 1; i >= 0; i--)
			{
//				if (percentage >= glbPercentageBreak['no'][i]['percentage'])
				if (Math.abs(pointDifferenceAdjusted) >= glbPercentageBreak['no'][i]['percentage'])
				{
					ourAdvice = glbPercentageBreak['no'][i]['message'];
					break;
				}
			}
		}
	}
	document.getElementById('ourAdvice').innerHTML = ourAdvice;
}


