var IS_LOADING = false;

function AddResult(){

	//1- Validating Result
	/*
	if(Get('rdoTournament').checked){
		if(Get('txtEventName').value.length == 0){
			alert('Please enter the tournament name');
			return;
		}
		if(Get('selRound').selectedIndex <=0){
			alert('Please select a round for this match');
			return;
		}
	}
	*/
	
	if(Get('txtOpponent').value.length == 0){
		alert("Please enter you opponent's name");
		return;
	}
	
	if(! isDate(Get("txtResultDate").value)){
		alert("Please enter a valid date");
		return;
	}
	
	var selMatchType = Get('selMatchType');
	var suffix = selMatchType[selMatchType.selectedIndex].value == 'ProSet' ||  selMatchType[selMatchType.selectedIndex].value == 'Set' ? "Pro" : "";
	if(selMatchType.selectedIndex == 0){
		alert('Please select the type of match played and enter the score');
		return;
	}
	else if(selMatchType[selMatchType.selectedIndex].value == 'ProSet' && GetSetWinner('Set1Pro', 8) <= 0){
		alert('Your score for an ' + selMatchType[selMatchType.selectedIndex].text + ' is not valid.\nPlease correct your score and try again.');
		return;
	}
	else if(selMatchType[selMatchType.selectedIndex].value == 'Set' && GetSetWinner('Set1Pro', 6) <= 0){
		alert("Your score is not valid for a set.\nPlease correct your score and try again.");
		return;
	}
	else if(selMatchType[selMatchType.selectedIndex].value == '3Sets'  ||  selMatchType[selMatchType.selectedIndex].value == 'MiniSet'){
		var player1Count = 0;
		var player2Count = 0;
		var maxGame = selMatchType[selMatchType.selectedIndex].value == 'MiniSet' ? 4 : 6;
		
		//Validating Set 1
		var set1Winner = GetSetWinner('Set1', maxGame);
		if(set1Winner <= 0){
			alert('Your score for the 1st Set is invalid for a ' + selMatchType[selMatchType.selectedIndex].text + '.\nPlease correct the score and try again.');
			return;
		}
		else if(set1Winner == 1){
			player1Count ++;
		}
		else if(set1Winner == 2){
			player2Count ++;
		}
		
		
		//Validating Set 2
		var set2Winner = GetSetWinner('Set2', maxGame);
		//alert('set2Winner->' + set2Winner);
		if(set2Winner <= 0){
			alert('Your score for the 2nd Set is invalid for a ' + selMatchType[selMatchType.selectedIndex].text + '.\nPlease correct the score and try again.');
			return;
		}
		else if(set2Winner == 1){
			player1Count ++;
		}
		else if(set2Winner == 2){
			player2Count ++;
		}


		//Validating Set 3
		var set3Winner = GetSetWinner('Set3', maxGame);
		
		if((player1Count == 2 || player2Count == 2) && set3Winner > 0){
			alert('Invalid score. This match was decided in 2 sets, but there is a 3rd set score.\nPlease remove the 3rd set score and try again');
			return;
		}
		
		//alert('set3Winner->' + set3Winner);
		if(set3Winner == -1){
			alert('Your score for the 3rd Set is invalid for a ' + selMatchType[selMatchType.selectedIndex].text + '.\nPlease correct the score and try again.');
			return;
		}
		else if(set3Winner == 1){
			player1Count ++;
		}
		else if(set3Winner == 2){
			player2Count ++;
		}
		
		//Checking if there is a winner
		if(player2Count != 2 && player1Count != 2){
			alert('Your score is invalid. Please correct it and try again');
			return;
		}
	}
	
	var playerId = Get('hidPlayerId').value;
	//2- Adding result
	
	var selRound = Get('selRound');
	var selDraw = Get('selDraw');
	var selPlayer1Set1 = Get('selPlayer1Set1' + suffix);
	var selPlayer2Set1 = Get('selPlayer2Set1' + suffix);
	var selPlayer1Set2 = Get('selPlayer1Set2');
	var selPlayer2Set2 = Get('selPlayer2Set2');
	var selPlayer1Set3 = Get('selPlayer1Set3');
	var selPlayer2Set3 = Get('selPlayer2Set3');
	var selPlayer1Set1Tiebreak = Get('selPlayer1Set1Tiebreak' + suffix);
	var selPlayer2Set1Tiebreak = Get('selPlayer2Set1Tiebreak' + suffix);
	var selPlayer1Set2Tiebreak = Get('selPlayer1Set2Tiebreak');
	var selPlayer2Set2Tiebreak = Get('selPlayer2Set2Tiebreak');
	var selPlayer1Set3Tiebreak = Get('selPlayer1Set3Tiebreak');
	var selPlayer2Set3Tiebreak = Get('selPlayer2Set3Tiebreak');
	
	var player1Set1 = GetSelected(selPlayer1Set1);
	var player2Set1 = GetSelected(selPlayer2Set1);
	var player1Set2 = GetSelected(selPlayer1Set2);
	var player2Set2 = GetSelected(selPlayer2Set2);
	var player1Set3 = GetSelected(selPlayer1Set3);
	var player2Set3 = GetSelected(selPlayer2Set3);
	var player1Set1Tiebreak = GetSelected(selPlayer1Set1Tiebreak, -1);
	var player2Set1Tiebreak = GetSelected(selPlayer2Set1Tiebreak, -1);
	var player1Set2Tiebreak = GetSelected(selPlayer1Set2Tiebreak, -1);
	var player2Set2Tiebreak = GetSelected(selPlayer2Set2Tiebreak, -1);
	var player1Set3Tiebreak = GetSelected(selPlayer1Set3Tiebreak, -1);
	var player2Set3Tiebreak = GetSelected(selPlayer2Set3Tiebreak, -1);
	
	var resultDate = Get("txtResultDate").value

	//var eventName =	Get('txtEventName').value;
	var opponent = Get('txtOpponent').value;
	
	var response = UniversalTennis.FrontEnd.player_profile.AddResult(playerId, resultDate, opponent, player1Set1, player2Set1, player1Set2, player2Set2, player1Set3, player2Set3, player1Set1Tiebreak, player2Set1Tiebreak, player1Set2Tiebreak, player2Set2Tiebreak, player1Set3Tiebreak, player2Set3Tiebreak);

	//3- Responding to response
	if(response.error != null){
		alert("This result could not be entered at this time. Please try again later.\nSorry for the inconvenience");
		Get('BoxAddResult').style.display = "none";
	}
	else{

		switch(response.value.Code){
			case 0:
				//OK
				Get('BoxAddResult').style.display = "none";
				Get('BoxDraw').style.display = "none";
				PageReload();
				break;
			case 1:
				var aryDraws = response.value.StatusData.split("||");
				var selDraw = Get('selDraw');
				for(var i=0; i < aryDraws.length; i++){
					var id = aryDraws[i].split("|")[0];
					var name = aryDraws[i].split("|")[1];
					AddElement(selDraw, id, name);
				}
				Get('BoxDraw').style.display = "block";
				break;
			
			case 2:
				//Invalid opponent name
				alert(response.value.Message);				
				break;
			
			case 3:
				//Server exception
				alert(response.value.Message);
				Get('BoxAddResult').style.display = "none";
				break;
			
			case 4:
				//Asking for more information
				
				Get('spanPlayerName').innerHTML = opponent;
				Get('hidOpponentId').value = response.value.StatusData;
				Get('BoxAddResult').style.display = "none";
				Get('BoxPlayerInfo').style.display = "block";
				break;
		}

	}
}


function GetSetWinner(setName, winnerGameCount){
	var sel1 = Get('selPlayer1' + setName);
	var sel2 = Get('selPlayer2' + setName);
	
	var player1Games = sel1[sel1.selectedIndex].value;
	var player2Games = sel2[sel2.selectedIndex].value;
	
	if(sel1.selectedIndex == 0 && sel2.selectedIndex == 0){
		//blank set
		return 0;
	}
	
	if(setName=="Set3" && parseInt(player1Games) + parseInt(player2Games) == 1){
		return parseInt(player1Games) - parseInt(player2Games) > 0 ? 1 : 2;
	}
	else if( (player1Games == winnerGameCount+1 && player2Games < winnerGameCount-1) || (player2Games == winnerGameCount+1 && player1Games < winnerGameCount-1) || (player1Games == player2Games) || (parseInt(player1Games) + parseInt(player2Games) == (parseInt(winnerGameCount)*2) - 1)){	
		return -1;
	}
	else if(player1Games >= winnerGameCount || player2Games >= winnerGameCount){
		return parseInt(player1Games) - parseInt(player2Games) > 0 ? 1 : 2;
	}
	else{
		return -1; //all other invalid scores
	}
}



function InitHeadToHead() {
	
	
}

function SetTournament(){

	new CAPXOUS.AutoComplete("txtEventName", function() {
		return "../event-search.aspx?name=" + this.text.value
	});

	Get('lblEventName').style.display = "block";
	var txtEventName = Get('txtEventName');
	txtEventName.style.display = "block";
	txtEventName.value = "Enter event name";
	Get('lblRound').style.display = "block";
	Get('selRound').style.display = "block";
}

function SetPracticeMatch(){
	Get('lblEventName').style.display = "none";
	var txtEventName = Get('txtEventName');
	txtEventName.style.display = "none";
	txtEventName.value = "";
	Get('lblRound').style.display = "none";
	Get('selRound').style.display = "none";
}

function SetScore(result){
	IS_LOADING = true;
	
	var tblOneSet = Get("tblOneSetScore");
	var tblThreeSets = Get("tblThreeSetScore");
	var setMax = 7;
	var suffix = "";

	if(result.MatchType == "MiniSet"){
		setMax = 5;
	}
	else if(result.MatchType == "Set"){
		setMax = 7;
		suffix = "Pro"; //so that it loads the correct drop down
	}
	else if(result.MatchType == "ProSet"){
		setMax = 9;
		suffix="Pro";
	}

	// ---------  SET 1 ----------------
	
	SetScoreDropDown("selPlayer1Set1" + suffix, setMax, result.Player1Set1);
	SetScoreDropDown("selPlayer2Set1" + suffix, setMax, result.Player2Set1);
	
	//Tiebreak		
	if(result.Player1Set1Tiebreak > 0 || result.Player2Set1Tiebreak > 0){
		//Get("divPlayer1Set1Tiebreak" + suffix).style.display = "block";
		//Get("divPlayer2Set1Tiebreak" + suffix).style.display = "block";
		SetScoreDropDown("selPlayer1Set1Tiebreak" + suffix, 20, result.Player1Set1Tiebreak);
		SetScoreDropDown("selPlayer2Set1Tiebreak" + suffix, 20, result.Player2Set1Tiebreak);
	}
	else{
		Get("divPlayer1Set1Tiebreak" + suffix).style.display = "none";
		Get("divPlayer2Set1Tiebreak" + suffix).style.display = "none";
	}
	
	if(result.MatchType != "ProSet" && result.MatchType != "Set"){ //Only show one set for match types of Pro-set and One set
		// ----------- SET 2 ----------------
		SetScoreDropDown("selPlayer1Set2", setMax, result.Player1Set2);
		SetScoreDropDown("selPlayer2Set2", setMax, result.Player2Set2);
		
		//Tiebreak
		if(result.Player1Set2Tiebreak > 0 || result.Player2Set2Tiebreak > 0){
			//Get("divPlayer1Set2Tiebreak" + suffix).style.display = "block";
			//Get("divPlayer2Set2Tiebreak" + suffix).style.display = "block";
			SetScoreDropDown("selPlayer1Set2Tiebreak", 20, result.Player1Set2Tiebreak);
			SetScoreDropDown("selPlayer2Set2Tiebreak", 20, result.Player2Set2Tiebreak);
		}
		else{
			Get("divPlayer1Set2Tiebreak" + suffix).style.display = "none";
			Get("divPlayer2Set2Tiebreak" + suffix).style.display = "none";
		}

		// ----------- SET 3 ----------------
		SetScoreDropDown("selPlayer1Set3", setMax, result.Player1Set3);
		SetScoreDropDown("selPlayer2Set3", setMax, result.Player2Set3);
			
		//Tiebreak
		if(result.Player1Set3Tiebreak > 0 || result.Player2Set3Tiebreak > 0){
			//Get("divPlayer1Set3Tiebreak" + suffix).style.display = "block";
			//Get("divPlayer2Set3Tiebreak" + suffix).style.display = "block";
			SetScoreDropDown("selPlayer1Set3Tiebreak", 20, result.Player1Set3Tiebreak);
			SetScoreDropDown("selPlayer2Set3Tiebreak", 20, result.Player2Set3Tiebreak);
		}
		else{
			Get("divPlayer1Set3Tiebreak" + suffix).style.display = "none";
			Get("divPlayer2Set3Tiebreak" + suffix).style.display = "none";
		}
		
		tblOneSet.style.display = "none";
		tblThreeSets.style.display = "block";
	}
	else{		
		tblOneSet.style.display = "block";
		tblThreeSets.style.display = "none";	
		
	}
	IS_LOADING = false;
}


function SetScoreDropDown(name, max, selected){
	var sel = Get(name);
	//removing all items
	ClearDropDown(sel);
	
	AddElement(sel, -1, "");
	
	//adding new items
	for(var i=0; i<= max; i++){
		AddElement(sel, i, i);
	}
	
	sel.selectedIndex = selected + 1;
}

function SetTiebreak(setName, suffix){
	var selMatchType = Get('selMatchType');
	var matchType = selMatchType[selMatchType.selectedIndex].value;
	
	if(!IS_LOADING){
		
		var player1 = Get('selPlayer1' + setName + suffix);
		var player2 = Get('selPlayer2' + setName + suffix);
		var gameSum = parseInt(player1[player1.selectedIndex].value) + parseInt(player2[player2.selectedIndex].value);
		
		if( (gameSum == 13 && matchType == "3Sets") || (gameSum == 9 && matchType == "MiniSet") || (gameSum == 17 && matchType == "ProSet")){
			//show tiebreak
			//Get('divPlayer1' + setName + "Tiebreak" + suffix).style.display = "block";
			//Get('divPlayer2' + setName + "Tiebreak" + suffix).style.display = "block";
			SetScoreDropDown("selPlayer1" + setName + "Tiebreak" + suffix, 20, -1);
			SetScoreDropDown("selPlayer2" + setName + "Tiebreak" + suffix, 20, -1);
		}
		else{
			//hide tiebreak
			Get('divPlayer1' + setName + "Tiebreak" + suffix).style.display = "none";
			Get('divPlayer2' + setName + "Tiebreak" + suffix).style.display = "none";
		}
	}
}

function UpdatePlayerInfo(){
	var playerId = Get('hidOpponentId').value;
	var sex = "";
	if(Get("rdoSexMale").checked){
		sex = "M";
	}
	else if(Get("rdoSexFemale").checked){
		sex = "F";
	}
	
	var countryId = GetSelected(Get('selCountry'));
	var stateId = 0;
	var selState = Get('selState');
	if(selState.style.display == 'block'){
		stateId = GetSelected(selState);
	}
	
	var email = Get('txtEmail').value;
	
	UniversalTennis.FrontEnd.player_profile.UpdatePlayerInfo(playerId, sex, countryId, stateId, email);

}

function ShowAddResult(e){
	var box = Get('BoxAddResult');
	box.style.display = "block";
}



//--------------- TYPES -------------------
function Score(type){
	this.MatchType = type;
	this.Player1Set1=-1;
	this.Player2Set1=-1;
	this.Player2Set1=-1;
	this.Player1Set2=-1;
	this.Player2Set2=-1;
	this.Player1Set3=-1;
	this.Player2Set3=-1;
	
	this.Player1Set1Tiebreak=-1;
	this.Player2Set1Tiebreak=-1;
	this.Player2Set1Tiebreak=-1;
	this.Player1Set2Tiebreak=-1;
	this.Player2Set2Tiebreak=-1;
	this.Player1Set3Tiebreak=-1;
	this.Player2Set3Tiebreak=-1;
	
}
