//prodcut specs
var reserveMAH = 1500;
var reserveOutV = 3.7;
var circuitryReserveDrawFactor = .25;
var iphoneMAH = 1200;
var panelOutV = 5;

//3G function
var iphoneTalk = 5;
var iphoneStandby = 300;
var iphone3G = 5;
var iphoneWifi = 6;
var iphoneVideo = 7;
var iphoneAudio = 24;
var panelOutMA;

var freeReserveMAH = reserveMAH -(reserveMAH * circuitryReserveDrawFactor);
var hoursToChargeReserve = freeReserveMAH * reserveOutV/(panelOutMA * panelOutV);
var talkConsumption = iphoneMAH / iphoneTalk;
var standbyConsumption = iphoneMAH / iphoneStandby;
var i3GConsumption = iphoneMAH / iphone3G;
var wifiConsumption = iphoneMAH / iphoneWifi;
var videoConsumption = iphoneMAH / iphoneVideo;
var audioConsumption = iphoneMAH / iphoneAudio;

function updateTotals() {
	var tripDays = document.getElementById('days').value;
	var minutesTalking =  document.getElementById('talk').value;
	var minutesVideo = document.getElementById('video').value;
	var minutesAudio = document.getElementById('audio').value;
	var minutesInternet = document.getElementById('internet').value;
	if(!validData(tripDays,minutesTalking, minutesVideo, minutesAudio, minutesInternet))
		return false;
	
	var hoursTalking =  minutesTalking / 60;
	var hoursVideo = minutesVideo / 60;
	var hoursAudio = minutesAudio / 60;
	var hoursInternet = minutesInternet / 60;
	var weather = document.getElementsByName('weather');
	
	if(weather[0].checked == true)
		panelOutMA = 75;
	else if(weather[1].checked == true)
		panelOutMA = 55;
	else
		panelOutMA = 50;
	
	var e2 = standbyConsumption * 24 * tripDays;
	var e3 = talkConsumption * hoursTalking * tripDays;
	var e4 = videoConsumption * hoursVideo * tripDays;
	var e5 = audioConsumption * hoursAudio * tripDays;
	var e6 = (i3GConsumption + wifiConsumption)/2 * hoursInternet * tripDays;
	var e7 = e2 + e3 + e4 + e5 + e6;
	var e8 = e7 / tripDays;
	var f7 = e7 - (freeReserveMAH + iphoneMAH);
	var f8 = Math.max(0,f7/tripDays);
	var calc1 = f8/((panelOutMA * panelOutV)/reserveOutV);
	var calc2 = e8/((panelOutMA * panelOutV)/reserveOutV);
	
	if(calc1 > 7)
		document.getElementById("error-msg").innerHTML = "<b>Note:</b><br />You may want to scale back your phone usage while on this trip if you're looking to keep it self-sufficient with solar energy.";
	document.getElementById('total1').innerHTML = calc1.toFixed(1);
	document.getElementById('total2').innerHTML = calc2.toFixed(1);
}

function validData(days,a,b,c,d) {
	var minutesInDay = 24 * 60;
	
	var dayOK = isNumeric(days);
	var talkOK = isNumeric(a);
	var videoOK = isNumeric(b);
	var audioOK = isNumeric(c);
	var internetOK = isNumeric(d);
	var allOK = dayOK && talkOK && videoOK && audioOK && internetOK;
	
	if(!allOK) {
		if(!dayOK)
			document.getElementById("days").className = "field-error";
		if(!talkOK)
			document.getElementById("talk").className = "field-error";
		if(!videoOK)
			document.getElementById("video").className = "field-error";
		if(!audioOK)
			document.getElementById("audio").className = "field-error";
		if(!internetOK)
			document.getElementById("internet").className = "field-error";
		
		error("Not sure how time works where you come from, but these should be non-negative whole numbers.");
		return false;
	}
	
	if(days < 1) {
		error("Barring time travel, you'll need at least one day.");
		document.getElementById("days").className = "field-error";
		return false;
	}
	
	talkOK = a <= minutesInDay;
	videoOK = b <= minutesInDay;
	audioOK = c <= minutesInDay;
	internetOK = d <= minutesInDay;
	allOK = talkOK && videoOK && audioOK && internetOK;
	
	if(!allOK) {
		if(!dayOK)
			document.getElementById("days").className = "field-error";
		if(!talkOK)
			document.getElementById("talk").className = "field-error";
		if(!videoOK)
			document.getElementById("video").className = "field-error";
		if(!audioOK)
			document.getElementById("audio").className = "field-error";
		if(!internetOK)
			document.getElementById("internet").className = "field-error";
			
		error("There aren't even that many minutes in a day!");
		return false;
	}
	
	return true;
}

function isNumeric(sText) {
	var validChars = "0123456789";
	var isNumber = true;
	var ch;
	var str = "";

	for(i = 0; i < sText.length && isNumber == true; i++) { 
		ch = sText.charAt(i); 
		if (validChars.indexOf(ch) == -1)
			isNumber = false;
	}
	return isNumber;
}

function error(msg) {
	document.getElementById("error-msg").innerHTML = "<b>Error:</b><br />" + msg;
}

function resetValues() {
	document.getElementById('days').value = 0;
	document.getElementById('talk').value = 0;
	document.getElementById('video').value = 0;
	document.getElementById('audio').value = 0;
	document.getElementById('internet').value = 0;
	document.getElementById('total1').innerHTML = 0;
	document.getElementById('total2').innerHTML = 0;
	document.getElementsByName('weather')[0].checked = true;
	
	resetErrors();
}

function resetErrors() {
	document.getElementById("error-msg").innerHTML = "";
	document.getElementById("days").className = "field-normal";
	document.getElementById("talk").className = "field-normal";
	document.getElementById("video").className = "field-normal";
	document.getElementById("audio").className = "field-normal";
	document.getElementById("internet").className = "field-normal";
}