 function sortBy(sortBy) { sortMode = sortBy; showPositions(); }

function voodooMagic(airfield, dtf, alt) {
        return (dtf*1000) - (20*(alt-airfield));
}

function showPositions() {

	var lb = sortData();
	var pos=0;

	lb.each(function(l) {
		pos=pos+1;
		gliders[l.pid].position=pos;
	});

	reorderleaderboard();
}


function dtfComparator(a,b) {
	if (!a.f && !b.f) return 0;
    if (a.f && !b.f) return -1;
    if (!a.f && b.f) return 1;
    if (a.f && b.f) return a.f - b.f;    
}

function altComparator(a,b) {
	if (!a.z && !b.z) return 0;
    if (a.z && !b.z) return -1;
    if (!a.z && b.z) return 1;
    if (a.z && b.z) return b.z - a.z;
}

function voodooComparator(a,b) {
	if (!a.z && !b.z) return 0;
    if (a.z && !b.z) return -1;
    if (!a.z && b.z) return 1;
    if (a.z && b.z) return voodooMagic(786, a.f, a.z) - voodooMagic(786, b.f, b.z);
}


function sortData() {

	now = (new Date()-(60*1000*3)) + tcf;

	// build a new array that contains only the latest position for each pilot
	var latest = new Array();
    var data;

    pilotIds.each(function(id) {
    	if(data && data[id] && data[id].last()) {
    		latest.push(data[id].detect(function(n) {
    			n.pid = id;
	        	return n.t > now;
	        }));
    	} else {
    		if (gliders[id]) latest.push({pid: id, z: gliders[id].oldalt, f: gliders[id].f});
    	}
    });

    if (sortMode == "distance to finish") {
    	latest.sort(dtfComparator);
    } else if (sortMode == "altitude") {
    	latest.sort(altComparator);
    } else if (sortMode == "height") {
    	latest.sort(altComparator);
    } else if (sortMode == "voodoo") {
    	latest.sort(voodooComparator);
    }

    return latest;
}



function reorderleaderboard() {
	
	pilotIds.each(function(pilotId) {

			var lbmovement=((gliders[pilotId].position)*lboffset);
			document.getElementById('pos_'+pilotId).innerHTML=gliders[pilotId].position;
		
			// organise leaderboard in order now
			new Effect.Move('pilot_'+pilotId, { x: 1, y: lbmovement , mode: 'absolute' });
			//document.getElementById('pilot_'+pilotId).style.top=gliders[pilotId].position*25+'px';

	});
	
}

function updateleaderboard() {

	pilotIds.each(function(pilotId) {

		if (gliders[pilotId] && gliders[pilotId].s < 500) {

			var climbicon = "/gliding_visuals/images/blank.gif";

			if (gliders[pilotId].a > 5) {var climbicon = "/gliding_visuals/images/up_arrow.gif";}
			if (gliders[pilotId].a < -5) {var climbicon = "/gliding_visuals/images/down_arrow.gif";}

			var lbspeed = 0;
			var lbalt=0;
			var lbrate=0;
			var lbdtf=-1;
		
			lbspeed=gliders[pilotId].s;
		
			lbalt=gliders[pilotId].oldalt;
			if (lbalt > 6000) {lbalt=6000;}
		
		
			lbrate=gliders[pilotId].a;
		
			lbdtf=gliders[pilotId].f;
		
		
			if (lbdtf < 0) {lbdtf = 0;}
	
			if (lbdtf > 10) {lbdtf = Math.round(lbdtf);}
			if (lbdtf < 10 && lbdtf > 0) {lbdtf = Math.round(lbdtf*10)/10;}

			if (/*gliders[pilotId].waitingForData == false &&*/ lbalt < 6000) {
				document.getElementById('alt_'+pilotId).innerHTML=Math.round(lbalt)+"m";
				document.getElementById('rate_'+pilotId).innerHTML=Math.round((lbrate)*10)/10+"&nbsp;<img src='"+climbicon+"'>";
				document.getElementById('spd_'+pilotId).innerHTML=Math.round(lbspeed)+"kph";			
			} else {
				document.getElementById('alt_'+pilotId).innerHTML="---";	
				document.getElementById('rate_'+pilotId).innerHTML="--";
				document.getElementById('spd_'+pilotId).innerHTML="--";			
			}
			
			document.getElementById('dtf_'+pilotId).innerHTML=Math.round(lbdtf);
	}
	changetopbanner();
	 
	});
	showPositions();
}
