﻿/**
 * Global variables
 */
var topStatsDisplay = "";
var absolutePath = "";

/**
 * Document load event handler
 */
jQuery(document).ready(function () {
    // Initialise the pager object if there is one
    if (typeof (pagerObj) != "undefined" && pagerObj != null) {
        initializePager(pagerObj);
    }
    
    jQuery(".DataBoxHeader").click(function () { jQuery(this).siblings(".DataBoxContent").toggle(); });

    DisplayPlayerInfoHover();
});

/**
 * Invokes a WS with JSON data.
 *
 * @param wsUrl              URL of the web service
 * @param dataCallback       callback function to obtain the data to pass to the web service
 * @param beforeSendCallback callback function that is invoked before the WS request is sent
 * @param successCallback    callback function for a successful WS request
 */
function invokeJsonWS(wsUrl, dataCallback, beforeSendCallback, successCallback) {
    jQuery.ajax({
        type: "POST",
        url: wsUrl,
        data: dataCallback(),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: beforeSendCallback,
        success: successCallback,
        error: function (request, error) { if (request.status != 0) { alert("An error has occurred. Error type: " + error); } }
    });
}

/**
 * Invokes a web service that returns the control rendered on the server . The control to be rendered is specified in the
 * data passed to the web service, and the local rendering is driven by the <c>onSuccess</c> callback method.
 *
 * @param jsonData              callback function to obtain the rendering parameters
 * @param beforeRenderCallback  callback function that is invoked before the rendering starts
 * @param successCallback       callback function that is invoked when the rendering completes
 */
function RenderControl(jsonData, beforeRenderCallback, successCallback) {
    var statsLink = window.location.pathname;
    invokeJsonWS(subPath + "/StatsService.asmx/RenderControl", jsonData, beforeRenderCallback, successCallback);
}

/**
 * Initialise the pager, setting its properties and assigning event handlers.
 *
 * @param pagerObj  the pager object to initialise
 */
function initializePager(pagerObj) {
    jQuery("#PagerSummary").html("Page " + (pagerObj.CurrentPage + 1) + " of " + pagerObj.NumberOfPages + " (" + pagerObj.NumberOfResults + " items)");
    if (pagerObj.NumberOfPages > 1) {
		jQuery("#slider-range-max").slider("destroy");
		jQuery("#slider-range-max > div").remove();
        jQuery("#slider-range-max").slider({
            range: "max",
            min: 1,
            max: pagerObj.NumberOfPages,
            value: pagerObj.CurrentPage + 1,
            slide: function (event, element) { jQuery("#PagerSummary").html("Page <span class=\"PagerSliderPageNo\">" + element.value + "</span> of " + pagerObj.NumberOfPages + " (" + pagerObj.NumberOfResults + " items)"); },
            change: function (event, element)  { Search(pagerObj.ControlToPage, false, element.value - 1, pagerObj.NumberOfResults); }
        });
        jQuery(".Pager").show();
    } else {
        jQuery(".Pager").hide();
    }
}

/*
* This method gets the next page from the search results.
*/
function GetNextPage() {
    if (pagerObj.NextPage >= pagerObj.NumberOfPages)
    {
        return;
    }
	Search(pagerObj.ControlToPage, false, pagerObj.NextPage, pagerObj.NumberOfResults, pagerObj.DataParameters);
}

/*
* This method gets the previous page from the search results.
*/
function GetPreviousPage() {
    if (pagerObj.PreviousPage < 0)
    {
        return;
    }
    Search(pagerObj.ControlToPage, false, pagerObj.PreviousPage, pagerObj.NumberOfResults, pagerObj.DataParameters);
}

/*
* This method is executed by the 'Search' button in the Search Competition screen
*/
function Search(controlName, newSearch, pageNo, numberOfResults, DataParameters) {

	var CurrentSeason = true;
	
	CurrentSeason = ($("*[id$='cbCurrentSeasonOnly']").size() <= 0) ? true :GetControlValue("*[id$='cbCurrentSeasonOnly']");
	

    var getDataMethod = function() {
        var jdataObj = "{'jdata': \"{'ControlName':'" + controlName + "'," +
				"'CompetitionSearchData': {" +
			    "'CompetitionArea':'" + GetControlValue("*[id$='ddlArea']") + "'," +
		        "'CompetitionName':'" + GetControlValue("*[id$='txtCompetitionName']") + "'," +
		        "'CompetitionType':'" + GetControlValue("*[id$='ddlType']") +
				"','CurrentSeasonOnly':'" + CurrentSeason + "'}," +
				"'ClubSearchData': {" +
		        "'ClubName':'" + GetControlValue("*[id$='txtClubName']") + "'," +
		        "'CurrentSeasonOnly':'" + CurrentSeason + "'," +
		        "'CompetitionID':'" + GetControlValue("*[id$='ddlCompetition']") + "'}," +
				((DataParameters) ? (
		        "'DataParameters': {" +
		        "'ClubID':'" + DataParameters.ClubID + "'," +
		        "'TeamID':'" + DataParameters.TeamID + "'},")
		        : "") +

		        "'PlayerSearchData': {" +
		        "'PlayerName':'" + GetControlValue("*[id$='txtPlayerName']") + "'," +
		        "'ClubID':'" + GetControlValue("*[id$='ddlClubs']") + "'}," +

		        "'CurrentPage':'" + ((typeof (pageNo) != 'undefined' && pageNo != null && pageNo != '') ? pageNo : "0") + "'," +
				"'NumberOfResults':'" + ((typeof (numberOfResults) != 'undefined' && numberOfResults != null && numberOfResults != '') ? numberOfResults : "0") + "'}\"}";
        return jdataObj;
    }

	var onBeforeSend = function() {
		//Reveal the 'Please wait' image
		$('#SearchResults').html("<div id='Spinner' class='Spinner'></div>");
		return true;
	}

	var onSuccess = function(rdata) {
		//Load the returned data into the container
		$('#SearchResults').html(rdata);

		//Handle the case when no results are returned
		//There is always at least one div element rendered that contain the viewstate hidden input elmenet
		if ($('#SearchResults').children().length == 1)
			$('#SearchResults').html("<div style='color:#fff; text-align:center;'>No results. <br />Please try to refine your search terms.</div>");

        if (typeof (pagerObj) != "undefined" && pagerObj != null) {
            initializePager(pagerObj);
        }
	}

	RenderControl(getDataMethod, onBeforeSend, onSuccess);
}

/*
* This method is executed by the 'Clear' button in the Search Competition screen
*/
function ClearSearch(controlName) {
	$("input[type='text']").val('');
	$("input[type='checkbox']").each(function() { this.checked = true; });
	$('select').val('');
	Search(controlName, true);
}

/*
* This method retrieves data from an input element based on its id as formed by a jQuery selector
*/


function GetControlValue(controlID) {
	var ctrl = $(controlID);
	if (typeof (ctrl) != 'undefined' && ctrl != null) {
		if (ctrl.is("input[type='checkbox']"))
			return ctrl.attr("checked");
		else 
		{
			if (ctrl.val() != null && ctrl.val() != 'null')
			{
				return ctrl.val().replace("'", "/'");
			}
		}
	}
	return '';
}

/*
* This method retrieves Player general Informations
*/

function GetPlayerInfo(PlayerID, controlName, idControlDest) {
	var getDataMethod = function() {
		var jdataObj = "{'jdata': \"{'ControlName':'" + controlName + "'," +
				"'PlayerInfoData': {" +
		        "'PlayerID':'" + PlayerID + "'}"
		        + "" + absolutePath + "}\"}";
		return jdataObj;
	}

	var onBeforeSend = function() {
		//Reveal the 'Please wait' image
		$("#" + idControlDest).html("<div id='Spinner' style='padding: 90px 50px; width: 219px; height:25px;'><div class='Spinner'  style='margin:0 auto;'/></div>");
		return true;
	}

	var onSuccess = function(rdata) {
		//Load the returned data into the container
		$("#" + idControlDest).html(rdata);
	}

	RenderControl(getDataMethod, onBeforeSend, onSuccess);
}

/*
* This method retrieves a query string parameter by it's name
*/
function getQueryStringValueByKey(link, key) {
	var KeyValues = new Array();
	var queryString = link.substring(link.indexOf('?') + 1, link.length);
	KeyValues = queryString.split('&');

	var key;
	var val;

	for (var i = 0; i < KeyValues.length; i++) {
		currentKey = KeyValues[i].substring(0, KeyValues[i].indexOf('='));
		val = KeyValues[i].substring(key.length + 1, KeyValues[i].length);

		if (currentKey.toLowerCase() == key.toLowerCase()) {
			return val;
		}
	}
	return "";
}

function DisplayOfficialsFixtures(OfficialID, idControlDest) {
	var getDataMethod = function() {
		var jdataObj = "{'jdata': \"{'ControlName':'OfficialsFixturesList'," +
				"'MatchOfficialInfoData': {" +
		        "'MatchOfficialID':'" + OfficialID + "'}"
		        + "}\"}";
		return jdataObj;
	}

	var onBeforeSend = function() {
		//Reveal the 'Please wait' image
		//$("#" + idControlDest).html("<div id='Spinner' class='Spinner' style='margin:109px 90px'></div>");

		$("#" + idControlDest).html("<div id='Spinner' style='padding: 131px 90px;  margin:0 auto; width: auto; height:25px;'><div class='Spinner'  style='margin:0 auto;'/></div>");
		return true;
	}

	var onSuccess = function(rdata) {
		//Load the returned data into the container
		$("#" + idControlDest).html(rdata);
	}

	RenderControl(getDataMethod, onBeforeSend, onSuccess);
}

function GetMatchOfficialsInfos(OfficialID, controlName, idControlDest) {
	var getDataMethod = function() {
		var jdataObj = "{'jdata': \"{'ControlName':'" + controlName + "'," +
				"'MatchOfficialInfoData': {" +
		        "'MatchOfficialID':'" + OfficialID + "'}"
		        + "}\"}";
		return jdataObj;
	}

	var onBeforeSend = function() {
		//Reveal the 'Please wait' image
		$("#" + idControlDest).html("<div id='Spinner' style=' margin:0 auto; padding-top:90px; width:auto; height:25px;'><div class='Spinner'  style='margin:0 auto;'/></div>");
		return true;
	}

	var onSuccess = function(rdata) {
		//Load the returned data into the container
		$("#" + idControlDest).html(rdata);
	}

	RenderControl(getDataMethod, onBeforeSend, onSuccess);
}

function GetMatchOfficialGames(OfficialID, idControlDest) {
	if (OfficialID.length > 0) {
		if ($("#" + idControlDest).css("display") == "none") {
			$("#" + idControlDest).slideToggle("slow");
		}
		DisplayOfficialsFixtures(OfficialID, idControlDest);
		return false;
	}
	return false;
}


//displays the profile for player, can be extended for officials easily later. //todo : extend for Others
function DisplayPlayerInfoHover() {
	$(".PlayerHoverProfile").hover(function() {//PlayersList_Name
		var link = $(this).attr("href");
		var playerID = getQueryStringValueByKey(link, "playerID");
		var CompID = getQueryStringValueByKey(link, "CompID");
		var offset = $(this).offset();
		var marginTop = -225;
		var marginLeft = 0;

		if (playerID.length > 0) {
			GetPlayerInfo(playerID, 'PlayerProfile', 'divPlayerInfos');
		}

		var divPlayerInfos = $('#divPlayerInfos');

		if (divPlayerInfos.length <= 0) {
			$('body').append("<div id='divPlayerInfos' class='playerProfile' style='display: none; background-color: #e0e0e0; width:296px'></div>");
			divPlayerInfos = $('#divPlayerInfos');
		}

		$('#divPlayerInfos').css("top", offset.top + marginTop + "px")
											.css("left", offset.left + marginLeft + "px")
											.stop()
											.fadeIn(500, function() { $(this).css("opacity", 1) })
											;
	},
					function() {
						$('#divPlayerInfos')
											.stop()
											.css("opacity", 1)
											.fadeOut(800);

					});

	$('#divPlayerInfos').hover(
							function() {
								$(this).stop()
										.fadeIn(500, function() { $(this).css("opacity", 1); })
							},
							 function() {
							 	$(this).stop()
								.fadeOut(800);
							 }
							 );
}

/*
* This method retrieves Player general Informations
*/

function GetTopStatsItem(GroupSetID, GroupID, TeamID, TopStatItemName, idControlDest) {

	// TopStatsDisplay can be set by the client page to render specific prefences to that page.

	var getDataMethod = function() {
		var jdataObj = "{'jdata': \"{'ControlName':'" + 'TopStatsItem' + "'," +
				topStatsDisplay +
				"'TopStatsInfoData': {" +
				"'TopStatItemName':'" + TopStatItemName + "'," +
				"'GroupID':'" + GroupID + "'," +
				"'TeamID':'" + TeamID + "'," +
			    "'GroupSetID':'" + GroupSetID + "'}"
		        + "}\"}";
		return jdataObj;
	}

	var onBeforeSend = function() {
		//Reveal the 'Please wait' image
		//
		$("#" + idControlDest).html("<div id='Spinner' style=' margin:0 auto; padding-top:90px; width:auto; height:25px;'><div class='Spinner'  style='margin:0 auto;'/></div>");
		return true;
	}

	var onSuccess = function(rdata) {
		//Load the returned data into the container

		rdata = rdata.toString().replace('id="__VIEWSTATE"', 'id="VIEWSTATE2"');
		rdata = rdata.toString().replace('name="__VIEWSTATE"', 'name="VIEWSTATE2"');

		$("#" + idControlDest).html(rdata);

		$("#VIEWSTATE2").remove();
	}

	RenderControl(getDataMethod, onBeforeSend, onSuccess);
}

//Jquery Plugin to get updated innerHTML
(function($) {
	var oldHTML = $.fn.html;

	$.fn.formhtml = function() {
		if (arguments.length) return oldHTML.apply(this, arguments);
		$("input,textarea,button", this).each(function() {
			this.setAttribute('value', this.value);
		});
		$(":radio,:checkbox", this).each(function() {
			if (this.checked) this.setAttribute('checked', 'checked');
			else this.removeAttribute('checked');
		});
		$("option", this).each(function() {
			if (this.selected) this.setAttribute('selected', 'selected');
			else this.removeAttribute('selected');
		});
		return oldHTML.apply(this);
	};

	//optional to override real .html() 
	// $.fn.html = $.fn.formhtml;
})(jQuery);


function DisplayDataByGroup(classname, classDdl) {
	/// <summary>Displays Information regarding Control by group</summary> 
	var $ddlGroup = $('.' + classDdl).eq(0);

	$ddlGroup.change(function() {
		$("." + classname).each(function() {
			$(this).fadeOut('1500');
		});

		$("div[name='" + $ddlGroup.val() + "']." + classname).fadeIn('1500');
	});
}


///
///Form Guide
///
function LoadFormGuide() {
	var direction = "+";
	var leftPosition = 100;
	var PositionScrollFG = 0;
	var SizeScrollFG = 100;

	$('#divKOScrollLeft').click(function() {

		ScrollMatchResultIcons(SizeScrollFG, "+", 1000);
	});

	$('#divKOScrollRight').click(function() {
		ScrollMatchResultIcons(SizeScrollFG, "-", 1000);
	});

	$('[id*=ddlResults]').eq(0).change(function() {
		var selectedValue = this.value;

		if (selectedValue == 'All') {
			$('.MatchResultIcon').css({ 'display': 'block', 'float': 'left' });
			$('.MatchResultIcon').css({ 'visibility': 'visible', 'float': 'left' });
		}
		else if (selectedValue == 'HomeResults') {
			$('.HomeResults').css({ 'visibility': 'visible', 'float': 'left' });
			$('.AwayResults').css({ 'visibility': 'hidden', 'float': 'left' });
		}
		else {
			$('.AwayResults').css({ 'visibility': 'visible', 'float': 'left' });
			$('.HomeResults').css({ 'visibility': 'hidden', 'float': 'left' });
		}
	});

	//displays Information regarding FormGuide by group
	DisplayDataByGroup('SingleFormGuide', 'ddlGroupFormGClass');

	function CheckScrollsFG() {
		var position = $('.FixturesResultPanel').eq(0).css('left');
		position = position.replace('px', '');
		if (position > 0) $('#divKOScrollLeft').css('display', 'none');

	}

	function ScrollMatchResultIcons(leftPosition, direction, duration) {
		$('.FixturesResultPanel').each(function() {
			$(this).animate({ left: direction + '=' + leftPosition + 'px' }, (duration) ? duration : 1900
			, null)
		});
	}
}
