﻿// All sorts of utility functions and class. Created by Ilan 15/10/2011


// See http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array
Array.prototype.hasObject = (
  !Array.indexOf ? function (o)
  {
    var l = this.length + 1;
    while (l -= 1)
    {
        if (this[l - 1] === o)
        {
            return true;
        }
    }
    return false;
  } : function (o)
  {
    return (this.indexOf(o) !== -1);
  }
);


// The constant for the heat types

var  ht10K = 1;
var  ht5K = 2;
var  htMarathon = 3;
var  htHalfMarathon = 4;
var  ht2K = 5;
var  ht15K = 6;
var  htIronman = 7;
var  htHalfIronman = 8;
var  htTriOlympic = 9;
var  htTriSprint = 10;
var htMax = htTriSprint ;

function getHtText( ht )
{
	switch( ht ) 
	{
		case   ht10K: return "10 ק'מ";
		case   ht5K: return "5 ק'מ";
		case   htMarathon: return "מרתון";
		case   htHalfMarathon: return "חצי מרתון";
		case   ht2K: return "2 ק'מ";
		case   ht15K: return "15 ק'מ";
		case   htIronman: return "איש ברזל";
		case   htHalfIronman: return "חצי איש ברזל";
		case   htTriOlympic: return "טריאתלון אולימפי";
		case   htTriSprint: return "טריאתלון ספרינט";
		default: return "לא ידוע";
	}
}

// Provides the order of presentation of the heat types
var htTranslationArray = [5,2,1,6,4,3,10,9,8,7];



function shortResultRecord( ht, id, result, eventname, eventdate )
{
	this.heatType = ht;
	this.id = id;
	this.result = result;	
	this.eventName = eventname;
	this.eventDate = eventdate;
}

var allResultsArray = new Array();


// scans the array allResultsArray and produces a table of best results per heat type.
function getBestResultTable()
{
	var ret = "<table id='bestResultsTable'>";

	var bestResults = new Array();

	for( var i = ht10K ; i <= htMax ; i++ )
		bestResults[i] = -1;		

	var bAtLeastOneResult = false;

	for( var i = 0 ; i < allResultsArray.length ; i++ )
	{
		var record = allResultsArray[i];
		if ( !record ) continue;
		var ht = record.heatType ;
		var result = record.result;
		var en = record.eventName;
		var id = record.id;

		if ( ht < ht10K  || ht > htMax  || result == 0) continue;
		if ( excludeArray.hasObject( id )) continue;

		bAtLeastOneResult = true;

		if ( bestResults[ht] == -1 ) 
		{
			bestResults[ht] = i;
			continue;
		}

		if ( result < allResultsArray[ bestResults[ht]].result )
			bestResults[ht] = i;
		
	}

	if ( !bAtLeastOneResult ) return "";

	ret += "<tr><th colspan='4' style='padding-bottom:10px'><div id='bestResultsText'>התוצאות הטובות</div><div id='bestResultsTextFooter'><!-- Filler --></div></th><tr>";



	for( var i = 0 ; i < bestResults.length  ; i++ )
	{
		var idx = htTranslationArray[i] ;
		if ( bestResults[idx] == -1 ) continue;
		var record = allResultsArray[bestResults[idx] ];
		if ( !record ) continue;
		var id = record.id;
		var en = record.eventName;
		var year = record.eventDate;
		var res = record.result;
		if ( res== -1 ) continue;
		ret += "<tr>";
		ret += "<td class='bestResultsCellName'>" + getHtText(idx) + "</td>";
		ret += "<td  class='bestResultsCellValue'><a href=./?resultid=" + id + ">" + showAsResult( res)  +  "</a></td>";
		ret += "<td  class='bestResultsCellYear'>" +  year   + " </td>";
		ret += "<td  class='bestResultsCellEvent'>" +  en +  " </td>";
		ret += "</tr>";
			
	}



	ret += "</table>";
	return ret;
}

function twoDigits( n )
{
	if ( n >= 0 && n < 10 )
		return "0" + n;
	return n;	
}

function showAsResult( result )
{
	var seconds = result % 60;
	var minutes = ((result - seconds) / 60) % 60;
	var hours = Math.floor( result / 3600 );

	return hours + ":" + twoDigits( minutes) + ":" + twoDigits( seconds);
}

function showPercentGraph( id, percent )
{
	var el = document.getElementById( id );
	if ( !el ) return;
	var div = document.createElement("div" );
	div.style.width=Math.min( el.offsetWidth, 200 ) + "px";
	div.style.height=el.offsetHeight/2 + "px";
	div.setAttribute( "class" , "green" );
	el.appendChild( div );

	var div1 = document.createElement("div" );
	div1.style.width=div.offsetWidth * percent / 100 + "px";
	div1.style.height=div.offsetHeight + "px";
	div1.setAttribute( "class" , "red" );

	div.appendChild( div1 );
	
}

function findPosX(obj)
{
	var curleft = 0;
	if ( obj == null ) return 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if ( obj == null ) return 0;
	if (  obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


