﻿/*
*	@author Marjan Sterjev
*/
Rico.loadModule('Accordion','Corner','Effect');

var teams=new Array();
teams["leagueCompetition"]=leagueCompetition;
teams["golemaGrupa"]=golemaGrupa;
teams["malaGrupa"]=malaGrupa;

var leagueResults=new Array();
leagueResults["golemaGrupa"]=golemaGrupaResults;
leagueResults["malaGrupa"]=malaGrupaResults;

var imageCache=null;
var campImageCache=null;

var galeryIdx=0;
var campIdx=0;

var animator =null;

/* Application load script*/
function onAppLoad(){
	animator = new Rico.Effect.Animator()
	Rico.Corner.round("layout",{border:"#ddaa77"});
	getMenu();
	navigate("pages/Home.html");
}

/*Creates round corners for each child content element of the supplied container */
function createRoundCorners(expression){
	var roundCorners = $$(expression);
	if(roundCorners!=null){
		roundCorners.each(function(roundCorner){
			createRoundCorner(roundCorner);
		});
	}
	animate();
}

/*Creates round corners arround single content element*/
function createRoundCorner(roundCorner){
	Rico.Corner.round(roundCorner,{border:"#ddaa77"});
}

function animate(){
	//var animator = new Rico.Effect.Animator()
	animator.play(new Rico.Effect.FadeIn($("content")),{steps:20, duration:1000});
}

/*Prototype, AJAX based content navigation */
function navigate(url){
	var updater = new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: showContent
			});
}

function navigateGalery(url){
	var updater = new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: showGalery
			});
}

function navigateCamp(url){
	var updater = new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: showCamp
			});
}

function navigateTeams(teamsName,teamsHeader){
	showTeams(teamsName,teamsHeader);
}

function navigateLeagueResults(){
	showLeagueResults();
}

function getMenu(){
	var updater = new Ajax.Request(
			"pages/Menu.html", 
			{
				method: 'get', 
				onComplete: showMenu
			});
}

function showMenu(response){
	$("menu").innerHTML=response.responseText;
	new Rico.Accordion($$('div.menuHeader'), $$('div.menuContent'),{panelHeight:70, hoverClass: 'menuHover', selectedClass: 'menuSelected'});
}

function showContent(response){
	$("content").innerHTML=response.responseText;
	createRoundCorners("div#content .rcBox");
	if(imageCache==null){
		imageCache=new Array();
		for(var i=0;i<galeryImages.length;i++){
			var img=new Image();
			imageCache[imageCache.length]=img;
			img.src=galeryImages[i].image;
		}
	}
	if(campImageCache==null){
		campImageCache=new Array();
		for(var i=0;i<campImages.length;i++){
			var img=new Image();
			campImageCache[campImageCache.length]=img;
			img.src=campImages[i].image;
		}
	}
}

function showGalery(response){
	$("content").innerHTML=response.responseText;
	showGaleryImage(false);
	createRoundCorners("div#content .rcBox");
}

function showCamp(response){
	$("content").innerHTML=response.responseText;
	showCampImage(false);
	createRoundCorners("div#content .rcBox");
}

//caching already generated content
var teamsContent=new Array();


function showTeams(teamsKey,teamsHeader){
	if(teamsContent[teamsKey]==null)
	{
		var content="<div class='rcBox'>&nbsp;<h3>";
		content+=teamsHeader;
		content+="</h3>";
		var teamsIterator=$H(teams[teamsKey]);
		teamsIterator.each(function(teamEntry){
				var teamKey=teamEntry.key;
				var team=teamEntry.value;
				var coach=team.coach;
				var image=team.image;
				content+="<div class='panelBox'><div class='panelHeader'>"+team.name+"</div><div class='panelContent'>";
				content+="<table width='95%'><tr><td>";
				if(coach!=null){
					content+="Тренер:<br/><a href='#' onclick='showCoach(event,\""+teamsKey+"\",\""+teamKey+"\");return false;'>"+coach.name+"</a><br/><br/>";
				}
				var playersIterator=$H(team.players);
				playersIterator.each(function(playerEntry){
					var playerKey=playerEntry.key;
					var player=playerEntry.value;
					content+="<a href='#' onclick='showPlayer(event,\""+teamsKey+"\",\""+teamKey+"\",\""+playerKey+"\");return false;'>"+player.name+"</a><br/>";
				});
				delete playersIterator;
				content+="</td><td>";
				content+="<table>";
				if(image!=null){
					content+="<tr><td colspan='2'><img src='"+image+"'/></td></tr>";
				}
				/*
				else{
					content+="<tr><td>Одиграни натпревари:</td><td>"+(team.wins+team.losses)+"</td></tr>";
					content+="<tr><td>Победи:</td><td>"+team.wins+"</td></tr>";
					content+="<tr><td>Порази:</td><td>"+team.losses+"</td></tr>";
					content+="<tr><td>Дадени кошеви:</td><td>"+team.pointsScored+"</td></tr>";
					content+="<tr><td>Примени кошеви:</td><td>"+team.pointsConceded+"</td></tr>";
				}
				*/
				content+="</table></td></tr></table></div></div>"
			});
		delete teamsIterator;
		content+="&nbsp;</div>";
		teamsContent[teamsKey]=content;
	}
	$("content").innerHTML=teamsContent[teamsKey];
	createRoundCorners("div#content .rcBox");
	new Rico.Accordion($$('div.panelHeader'), $$('div.panelContent'),{panelHeight:360, hoverClass: 'panelHover', selectedClass: 'panelSelected'});
	
}

var PopupCnt=0;

function showPlayer(e,teamsKey,teamKey,playerKey){
	var team=teams[teamsKey][teamKey];
	var player=team.players[playerKey];
	var options={
		hideOnClick: true,
		zIndex: ++PopupCnt,
		canDragFunc:false
	};
	var popup=new Rico.Popup(options);
	var content="<div class='person'><p>";
	content+="<table class='tableContent'><tr><td width='320'>";
	content+="<table><tr><td align='right'>Име:</td><td>"+player.name;
	content+="</td></tr><tr><td align='right'>Генерација:</td><td>"+player.birthYear;
	content+="</td></tr><tr><td align='right'>Висина:</td><td>"+player.height;
	content+="</td></tr><tr><td align='right'>Позиција:</td><td>"+player.role;
	content+="</td></tr></table></td>";
	content+="<td align='right'><img src='"+player.image+"'/></td>";
	content+="</tr></table></p></div>";
	popup.createWindow("Играч",content,'210px','450px');
	var color='#FFFFFF';
	popup.contentDiv.className="player";
	var x=Math.floor(RicoUtil.windowWidth()/2);
	var y=Math.floor(RicoUtil.windowHeight()/2);
	popup.openPopup(x,y);
	Event.stop(e);
}

function showCoach(e,teamsKey,teamKey){
	var team=teams[teamsKey][teamKey];
	var coach=team.coach;
	var options={
		hideOnClick: true,
		zIndex: ++PopupCnt,
		canDragFunc:false
	};
	var popup=new Rico.Popup(options);
	var content="<div class='person'><p>";
	content+="<table class='tableContent'><tr><td width='320'>";
	content+="<table><tr><td align='right'>Име:</td><td>"+coach.name;
	content+="</td></tr><tr><td align='right'>Генерација:</td><td>"+coach.birthYear;
	content+="</td></tr></table></td>";
	content+="<td align='right'><img src='"+coach.image+"'/></td>";
	content+="</tr></table></p></div>";
	popup.createWindow("Тренер",content,'210px','450px');
	var color='#FFFFFF';
	popup.contentDiv.className="coach";
	var x=Math.floor(RicoUtil.windowWidth()/2);
	var y=Math.floor(RicoUtil.windowHeight()/2);
	popup.openPopup(x,y);
	Event.stop(e);
}

function showLeagueResults(){
	var content="<div class='rcBox'>&nbsp;"
	content+=getLeagueResults("golemaGrupa","Градска Лига - Голема Група");
	content+=getLeagueResults("malaGrupa","Градска Лига - Мала Група");
	content+="&nbsp;</div>";
	$("content").innerHTML=content;
	createRoundCorners("div#content .rcBox");
}

function rankTeams(results,rankedTeams,startIndex,endIndex,level){
	var teamMatch=new Array();
	for(var i=startIndex;i<=endIndex;i++){
		var team=rankedTeams[i];
		team.measure=0;
		teamMatch[team.id]="true";
	}
	for(var idx=startIndex;idx<=endIndex;idx++){
		var team=rankedTeams[idx];
		if(level==0){
			for(var i=0;i<results.length;i++){
				var teamId1=results[i].team1;
				var teamId2=results[i].team2;
				var points1=results[i].points1;
				var points2=results[i].points2;
				if(teamMatch[teamId1]=="true" && teamMatch[teamId2]=="true" && (teamId1==team.id || teamId2==team.id)){
					if(teamId1==team.id){
						if(points1>points2)
							team.measure+=2;
						else
							team.measure+=1;
					}
					else{
						if(points2>points1)
							team.measure+=2;
						else
							team.measure+=1;
					}
				}
			}
		}
		else if(level==1){
			for(var i=0;i<results.length;i++){
				var teamId1=results[i].team1;
				var teamId2=results[i].team2;
				var points1=results[i].points1;
				var points2=results[i].points2;
				if(teamMatch[teamId1]=="true" && teamMatch[teamId2]=="true" && (teamId1==team.id || teamId2==team.id)){
					if(teamId1==team.id)
						team.measure+=(points1-points2);
					else
						team.measure+=(points2-points1)
				}
			}
		}
		else if(level==2){
			team.measure=team.pointsScored-team.pointsConceded;
		}
	}
	
	sortTeams(rankedTeams,startIndex,endIndex);

	var s=startIndex;
	var e=startIndex;
	var currentMeasure;
	
	for(var idx=startIndex;idx<=endIndex;idx++){
		var team=rankedTeams[idx];
		if(idx==startIndex){
			currentMeasure=team.measure;
			continue;
		}
		if(team.measure!=currentMeasure){
			var l=e-s;
			if(l>0)
				rankTeams(results,rankedTeams,s,e,0);
			
			currentMeasure=team.measure;
			s=idx;
			e=idx;
		}
		else{
			e=idx;
		}
	}
	var l=e-s;
	if(l==0)
		return;
	if(l>0){
		if(l==(endIndex-startIndex)){
			if(level<2)
				rankTeams(results,rankedTeams,s,e,level+1);
		}
		else
			rankTeams(results,rankedTeams,s,e,0);
	}
}

function sortTeams(rankedTeams,startIndex,endIndex){
	for(var i=startIndex;i<=endIndex-1;i++){
		for(var j=i+1;j<=endIndex;j++){
			var team1=rankedTeams[i];
			var team2=rankedTeams[j];
			if(team1.measure<team2.measure){
				rankedTeams[i]=team2;
				rankedTeams[j]=team1;
			}
		}
	}
}

function getLeagueResults(leagueKey,leagueResultHeader){
	var results=leagueResults[leagueKey];
	var rankedTeams=new Array();
	for(var i=0;i<results.length;i++){
		var teamId1=results[i].team1;
		var teamId2=results[i].team2;
		var points1=results[i].points1;
		var points2=results[i].points2;
		var team1=null;
		var team2=null;
		for(var j=0;j<rankedTeams.length;j++){
			if(rankedTeams[j].id==teamId1)
				team1=rankedTeams[j];
			if(rankedTeams[j].id==teamId2)
				team2=rankedTeams[j];
			if(team1!=null && team2!=null)
				break;
		}
		if(team1==null){
			team1={"id":teamId1,"name":teams[leagueKey][teamId1].name};
			team1.wins=0;
			team1.losses=0;
			team1.pointsScored=0;
			team1.pointsConceded=0;
			rankedTeams[rankedTeams.length]=team1;
		}
		if(team2==null){
			team2={"id":teamId2,"name":teams[leagueKey][teamId2].name};
			team2.wins=0;
			team2.losses=0;
			team2.pointsScored=0;
			team2.pointsConceded=0;
			rankedTeams[rankedTeams.length]=team2;
		}
		if(points1>points2){
			team1.wins++;
			team2.losses++;
		}
		else{
			team1.losses++;
			team2.wins++;
		}
		team1.pointsScored+=points1;
		team1.pointsConceded+=points2;
		team2.pointsScored+=points2;
		team2.pointsConceded+=points1;
	}
	
	/*
	for(var i=0;i<rankedTeams.length-1;i++){
		for(var j=i+1;j<rankedTeams.length;j++){
			var team1=rankedTeams[i];
			var team2=rankedTeams[j];
			var score1=2*team1.wins+team1.losses;
			var score2=2*team2.wins+team2.losses;
			if(score1==score2){
				var matchFound=false;
				for(var k=0;k<results.length;k++){
					var teamId1=results[k].team1;
					var teamId2=results[k].team2;
					var points1=results[k].points1;
					var points2=results[k].points2;
					
					if(teamId1==team1.id && teamId2==team2.id){
						if(points1>points2)
							score1++;
						else
							score2++;
						matchFound=true;
					}
					else if(teamId2==team1.id && teamId1==team2.id){
						if(points2>points1)
							score1++;
						else
							score2++;
						matchFound=true;
					}
				}
				if(!matchFound){
					score1+=team1.pointsScored-team1.pointsConceded;
					score2+=team2.pointsScored-team2.pointsConceded;
				}
			}
			if(score1<score2){
				var team=team1;
				rankedTeams[i]=team2;
				rankedTeams[j]=team1;
			}
		}
	}
	*/
		
	rankTeams(results,rankedTeams,0,rankedTeams.length-1,0);

	var content="<h3>"+leagueResultHeader+"</h3>";
	content+="<table cellspacing='0' cellpadding='0' style='width:95%'><tr style='text-align:center'><th>&nbsp;</th><th>Тим</th><th>Бодови</th><th>Победи</th><th>Порази</th><th>Дадени кошеви</th><th>Примени кошеви</th><th>Кош разлика</th></tr>";
	for(var i=0;i<rankedTeams.length;i++){
		var pointsDiff=rankedTeams[i].pointsScored-rankedTeams[i].pointsConceded;
		if(pointsDiff>=0)
			diff="+"+pointsDiff;
		else
			diff=""+pointsDiff;
		if(i%2==0)
			styleClass="darkRow";
		else
			styleClass="lightRow";
		content+="<tr class='"+styleClass+"' ><td>"+(i+1)+".</td><td style='width:150px'><a href='#' onclick='showTeamResults(event,\""+leagueKey+"\",\""+rankedTeams[i].id+"\");return false;'>"+rankedTeams[i].name+"</a></td><td align='right'>"+(rankedTeams[i].wins*2+rankedTeams[i].losses)+"</td>";
		content+="<td align='right'>"+rankedTeams[i].wins+"</td><td align='right'>"+rankedTeams[i].losses+"</td><td align='right'>"+rankedTeams[i].pointsScored+"</td><td align='right'>"+rankedTeams[i].pointsConceded+"</td><td align='right'>"+diff+"</td></tr>";
	}
	content+="</table>";
	return content;
}


function showTeamResults(e,leagueKey,teamKey){
	var content="<table style='width:100%'>";
	var results=leagueResults[leagueKey];
	for(var i=0;i<results.length;i++){
		if(results[i].team1!=teamKey && results[i].team2!=teamKey)
			continue;
		var teamId1=results[i].team1;
		var teamId2=results[i].team2;
		var points1=results[i].points1;
		var points2=results[i].points2;
		var statistics=results[i].statistics;
		if(results[i].team1==teamKey){
			var className1=null;
			var className2=null;
			if(points1>points2){
				className1="winner";
				className2="defeated";
			}
			else{
				className1="defeated";
				className2="winner";
			}
			content+="<tr><td class='"+className1+"' style='width:175px' align='right'>["+teams[leagueKey][teamId1].name+"]</td>";
			content+="<td style='width:20px' align='center'>-</td>";
			content+="<td class='"+className2+"' style='width:175px' align='left'>["+teams[leagueKey][teamId2].name+"]</td>";
			content+="<td style='width:50px'><span class='"+className1+"'>"+points1+"</span>:";
			content+="<span class='"+className2+"'>"+points2+"</span></td><td style='font-size:8pt' align='right'>&nbsp;";
			if(statistics!=null){
				var player1=statistics.player1;
				var player2=statistics.player2;
				var p1=statistics.points1;
				var p2=statistics.points2;
				content+="(<span class='"+className1+"'>"+player1+":"+p1+"</span>, <span class='"+className2+"'>"+player2+":"+p2+"</span>)";
			}
			content+="</td></tr>";
		}
		else{
			var className1=null;
			var className2=null;
			if(points1>points2){
				className1="winner";
				className2="defeated";
			}
			else{
				className1="defeated";
				className2="winner";
			}
			content+="<tr><td class='"+className2+"' style='width:175px' align='right'>["+teams[leagueKey][teamId2].name+"]</td>";
			content+="<td style='width:20px' align='center'>-</td>";
			content+="<td class='"+className1+"' style='width:175px' align='left'>["+teams[leagueKey][teamId1].name+"]</td>";
			content+="<td style='width:50px'><span class='"+className2+"'>"+points2+"</span>:";
			content+="<span class='"+className1+"'>"+points1+"</span></td><td style='font-size:8pt' align='right'>&nbsp;";
			if(statistics!=null){
				var player1=statistics.player1;
				var player2=statistics.player2;
				var p1=statistics.points1;
				var p2=statistics.points2;
				content+="(<span class='"+className2+"'>"+player2+":"+p2+"</span>, <span class='"+className1+"'>"+player1+":"+p1+"</span>)";
			}
			content+="</td></tr>";
		}
	}
	content+="</table>";
	var popup= new Rico.Popup({hideOnClick:true,zIndex: 1000,canDragFunc:false});
	popup.createWindow("Резултати",content,'250px','750px');
	popup.contentDiv.className="resultsPopup";
	var x=Math.floor(RicoUtil.windowWidth()/2-375);
	var y=Math.floor(RicoUtil.windowHeight()/2);
	popup.openPopup(x,y);
	Event.stop(e);
}

function galeryMove(next){
	if(next)
		galeryIdx++;
	else
		galeryIdx--;
	if(galeryIdx>galeryImages.length-1)
		galeryIdx=0;
	if(galeryIdx<0)
		galeryIdx=galeryImages.length-1;
	showGaleryImage(true);
}

function showGaleryImage(animate){
	$("galeryImg").src=imageCache[galeryIdx].src;
	$("galeryDescription").innerHTML=galeryImages[galeryIdx].description;
	if(animate){
		animator.play(new Rico.Effect.FadeIn($("galeryImg")),{steps:10, duration:500});
	}
}

function setGaleryImgHref(){
	src=$("galeryImg").src;
	var dotPos=src.lastIndexOf(".");
	$("enlargeGaleryImg").href=src.substring(0,dotPos)+"_L.jpg";
}

function campMove(next){
	if(next)
		campIdx++;
	else
		campIdx--;
	if(campIdx>campImages.length-1)
		campIdx=0;
	if(campIdx<0)
		campIdx=campImages.length-1;
	showCampImage(true);
}

function showCampImage(animate){
	$("campImg").src=campImageCache[campIdx].src;
	$("campDescription").innerHTML=campImages[campIdx].description;
	if(animate){
		animator.play(new Rico.Effect.FadeIn($("campImg")),{steps:10, duration:500});
	}
}

function setCampImgHref(){
	src=$("campImg").src;
	var dotPos=src.lastIndexOf(".");
	$("enlargeCampImg").href=src.substring(0,dotPos)+"_L.jpg";
}









