var ie = false;
// Uncomment following line for debugging IE functionality in standard compliant browsers.
ie = true;

var slDist, slWeight, slTimeh, slTimem, slGrade;
var speed, gender, dist, weight, timeh, timem, timeval, grade;

// For handling IE's lack of standard compliance!
var qspans = new Array();
var qlinks = new Array();
// End of ie handling vars

var sliderDetails = { dist: {left: 0.1, right: 42.2, roundingFactor: 10 },
			weight: {left: 20, right: 200, roundingFactor: 1 },
			timeh: {left: 0, right: 12, roundingFactor: 1 },
			timem: {left: 0, right: 59, roundingFactor: 1 },
			grade: {left: 0, right: 20, roundingFactor: 1 }
		};
var sliderRange = 200;
var RER = 5;
var dist = 14;
var weight = 70;
var timeh = 1;
var timem = 30;
var grade = 0;

function OnSliderChange(offset, sliderDetail) {
	var right, left, value, roundingFactor;
	right = sliderDetail.right;
	left = sliderDetail.left;
	roundingFactor = sliderDetail.roundingFactor;
	value = Math.round(((right * offset + left * sliderRange - offset * left) / sliderRange) * roundingFactor) / roundingFactor;

	return value;
}

function GetSurface() {
	var surface1, surface1check, surface;
	surface1 = document.getElementById("surface1");
	surface1check = surface1.checked;
	if( surface1check === true ) {
		surface = 1;
	} else {
		surface = 1.6;
	}
	
	return surface;

}

function GetExperience() {
	var experience, experience1, experience1check, experience2, experience2check, experience3, experience3check, experience4, experience4check;
	experience1 = document.getElementById("experience1");
	experience1check = experience1.checked;
	experience2 = document.getElementById("experience2");
	experience2check = experience2.checked;
	experience3 = document.getElementById("experience3");
	experience3check = experience3.checked;
	experience4 = document.getElementById("experience4");
	experience4check = experience4.checked;
	if ( experience1check === true ) 
		{
		experience = 1;
		} 
	else if ( experience2check === true )
		{
		experience = 0.93;
		}		
	else if ( experience3check === true )
		{
		experience = 0.87;
		}
	else 
		{
		experience = 0.8;
		}
	
	return experience;

}

function RecalculateExpenditure(runningSpeed) {
	var surface, expenditure, experience, expenditureVal;
	// Get experience and surface
	surface = GetSurface();
	experience = GetExperience();
	// Get the element which will hold the result.
	expenditureVal = document.getElementById("expenditure");
	if (runningSpeed < 4.7) {
		expenditureVal.innerHTML = "<font color=\"red\">greitis mažesnis nei 4,8 km/h!</font>";
	}
	else {
		// Calculate expenditure
		expenditure = RER * (0.2 + 0.9 * grade / 100) * dist * weight * surface * experience;
		expenditure = Math.round(expenditure);
		expenditureVal.innerHTML = expenditure + " kcal";
	}
}

function RecalculateSpeed() {
	var timemin, speedkmh, speedkmhint, speedkmhdec, speedminkm, speedminkmmin, speedminkmsec, speedVal;
	// Calculate speed
	timemin = timeh * 60 + timem;
	//Calculate speed in kmh
	speedkmh = dist * 60 / timemin;
	speedkmhint = Math.floor(speedkmh); //integer part (before comma)
	speedkmhdec = (speedkmh - speedkmhint) * 100; //decimal part (after comma)
	speedkmhdec = Math.round(speedkmhdec);
	//Calculate speed in min:s per km
	speedminkm = timemin / dist;
	speedminkmmin = Math.floor(speedminkm); //minute part (before colon)
	speedminkmsec = (speedminkm - speedminkmmin) * 60; //second part (after collon)
	speedminkmsec = Math.round(speedminkmsec);

	// Get the element which will hold the result.
	speedVal = document.getElementById("speed");
	speedVal.innerHTML = speedkmhint + "," + speedkmhdec + " km/h (" + speedminkmmin + ":" + speedminkmsec + " min:sek)";

	// Recalculate Expenditure
	RecalculateExpenditure(speedkmh);

}

function SlDistChange(offset) {
	var element, distint, distdec;
	sliderRange = 440;
	dist = OnSliderChange(offset, sliderDetails.dist);
	element = document.getElementById("distval");
	distint = Math.floor(dist); //integer part (before comma)
	distdec = (dist - distint) * 10; //decimal part (after comma)
	distdec = Math.round(distdec);
	element.innerHTML = distint + "," + distdec + " km";

	RecalculateSpeed();
}

function SlWeightChange(offset) {
	var element;
	sliderRange = 200;
	weight = OnSliderChange(offset, sliderDetails.weight);
	element = document.getElementById("weightval");
	element.innerHTML = weight + " kg";
	RecalculateSpeed();
}

function SlTimehChange(offset) {
	var element;
	sliderRange = 200;
	timeh = OnSliderChange(offset, sliderDetails.timeh);
	element = document.getElementById("timeval");
	element.innerHTML = timeh + " h: " + timem + "min";
	RecalculateSpeed();
}

function SlTimemChange(offset) {
	var element;
	sliderRange = 200;
	timem = OnSliderChange(offset, sliderDetails.timem);
	element = document.getElementById("timeval");
	element.innerHTML = timeh + " h: " + timem + "min";
	RecalculateSpeed();
}

function SlGradeChange(offset) {
	var element;
	sliderRange = 200;
	grade = OnSliderChange(offset, sliderDetails.grade);
	element = document.getElementById("gradeval");
	element.innerHTML = grade + " %";
	RecalculateSpeed();
}

function SetSlider(slider, sliderDetail, value) {
	var right, left, newpos;
	left = sliderDetail.left;
	right = sliderDetail.right;
	newpos = Math.round((sliderRange * (value - left)) / (right - left));
	slider.setValue(newpos, true, true);
}

function SetSliderDefaults() {
	SetSlider(slWeight, sliderDetails.weight, 70);
	SetSlider(slTimeh, sliderDetails.timeh, 1);
	SetSlider(slTimem, sliderDetails.timem, 30);
	SetSlider(slGrade, sliderDetails.grade, 0.1);
	SetSlider(slDist, sliderDetails.dist, 30.6);
}

function init() {
	slDist = YAHOO.widget.Slider.getHorizSlider("distbg", "distt", 0, 440);
	slDist.onChange = SlDistChange;
	slWeight = YAHOO.widget.Slider.getHorizSlider("weightbg", "weightt", 0, 200);
	slWeight.onChange = SlWeightChange;
	slTimeh = YAHOO.widget.Slider.getHorizSlider("timehbg", "timeht", 0, 200);
	slTimeh.onChange = SlTimehChange;
	slTimem = YAHOO.widget.Slider.getHorizSlider("timembg", "timemt", 0, 200);
	slTimem.onChange = SlTimemChange;
	slGrade = YAHOO.widget.Slider.getHorizSlider("gradebg", "gradet", 0, 200);
	slGrade.onChange = SlGradeChange;

	setTimeout("SetSliderDefaults();", 1);

	// IE handling.
	if( ie ) {
		// Populate an array of the spans that contain the tooltip 'q'.
		var spans = document.getElementsByTagName('span');
		for( ct = 0; ct < spans.length; ++ct ) {
			if( spans[ct].className == 'q' ) {
				qspans[qspans.length] = spans[ct];
			}
		}

		// Populate an array of the links that power the tooltip (even in f*&£&% IE)
		// and the tooltip itself
		for( ct = 0; ct < qspans.length; ++ct ) {
			qlinks[ct] = qspans[ct].parentNode;
		}

		for( ct = 0; ct < qlinks.length; ++ct ) {
			var fn = new Function("HideAllBut(" + ct + ")");
			qlinks[ct].onmouseover = fn;
			qlinks[ct].onmouseout = function () { ReshowAll(); }
		}
	}
}



/**********************************************/
// As IE can't even manage the within a rect calcs correctly we'll just have to hide them all.
function HideAllBut(thisOne) {
	for( ct = 0; ct < qspans.length; ++ct ) {
		if( ct == thisOne ) continue;
		hidee = qspans[ct];
		hidee.className = "q iehide";
	}
}

function ReshowAll() {
	for( ct = 0; ct < qspans.length; ++ct ) {
		hidee = qspans[ct];
		hidee.className = "q";
	}

}


