var colErr = '#CC9999';
var colW = 'white';
var colB = 'black';
var colD = '#DDDDDD'; // grey light, disabled
var isCorrect = true;
var strOut = "";
var strOut1 = "Warning check red field: ";
var form = document.forms[0];


//// add Bookmarks ////
function addBookmarksDP(){
  var $url   = location.href;
  var $title = "SunEarthTools.com"; //document.title;
  if (document.all){
    window.external.AddFavorite($url, $title)
  } else if (window.sidebar) {// firefox
    window.sidebar.addPanel($title, $url, "");
  }
}


//// component COMMENT ////
function checkCommentDP(code){
  isCorrect = true;
  strOut = strOut1;
	idForm = "formComm";
	form = document.forms[idForm];

	form.message.style.backgroundColor = colW; 
	form.code.style.backgroundColor = colW; 
	
	if(form.email.value.substring(0,2) == "dp"){
		return isCorrect;
	}
	if(form.message.value == ""){
		form.message.style.backgroundColor = colErr; 
		isCorrect=false;
		strOut=strOut+"message null "+"\n---------\n";
	}
	if(form.code.value != code){
		form.code.style.backgroundColor = colErr; 
		isCorrect=false;
		strOut=strOut+"wrong code use: "+code+"\n---------\n";
	}
	
	if(isCorrect == false){
		alert(strOut);
	}
	
	return isCorrect;
}


//// VARIUS /////
function isNumberDP(idForm) {
  form = document.forms[idForm];
  var els  = form.elements;
  isCorrect = true;
  strOut = "";

	for (var i=0; i<els.length; i++){
		if(els[i].type=="text" && !els[i].disabled){
			els[i].style.backgroundColor = colW;
			if(isNaN(els[i].value)){
				els[i].style.backgroundColor = colErr; 
				isCorrect = false;
			}
		}
	}
	if(isCorrect == false){
		strOut = strOut1+"| NaN |";
		alert(strOut);
	}
	return isCorrect;
}

function isNumberPosDP(idForm) {
	if(!isNumberDP(idForm)){
		return false;
	}
	form = document.forms[idForm];
  var els  = form.elements;
  isCorrect = true;
  strOut = "";
  
	for (var i=0; i<els.length; i++){
		if(els[i].type=="text" && !els[i].disabled){
			els[i].style.backgroundColor = colW;
			if(els[i].value < 0){
				els[i].style.backgroundColor = colErr; 
				isCorrect = false;
			}
		}
	}
	if(isCorrect == false){
		strOut = strOut1+"| value < 0 |";
		alert(strOut);
	}
	return isCorrect;
}

function isNumberPosFieldDP(field) {
	if(isNaN(Number(field.value))){
		field.style.backgroundColor = colErr; 
		return "| NaN |";
	}
	if(Number(field.value) < 0){
		field.style.backgroundColor = colErr; 
		return "| "+Number(field.value)+" < 0 |";
	}
	field.style.backgroundColor = colW;
	return "";
}
	
function checkMax(field, max){
	if(isNaN(Number(field.value))){
		return "|.NaN |";
	}
	if(Number(field.value) > Number(max) ){
		field.style.backgroundColor = colErr;
		return "| "+field.value+" <= "+max+" |";
	}
	field.style.backgroundColor = colW;
	return "";
}

function checkRange(field, value, min, max){
	if(isNaN(value)){
		field.style.backgroundColor = colErr;
		return "|_NaN |";
	}
	if(Number(value) < Number(min)){
		field.style.backgroundColor = colErr;
		return "| "+min+" <= "+value+" <= "+max+" |";
	}
	if(Number(value) > Number(max)){
		field.style.backgroundColor = colErr;
		return "| "+min+" <= "+value+" <= "+max+" |";
	}
	field.style.backgroundColor = colW;
	return "";
}

function disableFieldDP(field, dis){
	field.disabled=dis;
	if(dis){
			field.style.backgroundColor = colD;
			field.style.color = colB;
	} else {
			field.style.backgroundColor = colW;
	}
}
//// PAGE: payback_photovoltaic ////
function checkPayBackDP(idForm){
	form = document.forms[idForm];
  strOut = "";
  isCorrect = true;

	if(!isNumberPosDP(idForm)){
		return false;
	}

	strOut += checkMax(form.pb10, 30);
	strOut += checkMax(form.pb11, 50);
	strOut += checkMax(form.pb12, 2);
	strOut += checkMax(form.pb6, form.pb1.value);
	if(strOut.length > 0){
		isCorrect = false;
	}
	if(isCorrect == false){
		alert(strOut1 + strOut);
	}
	return isCorrect;
}

//// PAGE: photovoltaic-energy-dimension ////
function checkPVEnergyDP(idForm){
	form = document.forms[idForm];
  strOut = "";
  isCorrect = true;
  res=0;
alert("checkPVEnergyDP"+form.pe4);
	strOut += checkRange(form.pe2, form.pe2.value, 0, 90); // tilt 
	strOut += checkRange(form.pe3, form.pe3.value, -100, 100); // azimut
	strOut += isNumberPosFieldDP(form.pe4); //Wp
	strOut += isNumberPosFieldDP(form.pe5); //Energy
	strOut += checkRange(form.pe6, form.pe6.value, 70, 95); // BOS
	strOut += isNumberPosFieldDP(form.pe7); //Wp m
	strOut += checkRange(form.pe8, form.pe8.value, 0.1, 2.5); // larg
	strOut += checkRange(form.pe9, form.pe9.value, 0.1, 2.5); // lung
	strOut += isNumberPosFieldDP(form.pe10); // num mod
	strOut += isNumberPosFieldDP(form.pe11); // area

	if(strOut.length > 0){
		isCorrect = false;
		alert(strOut);
	} else {
		if(form.pe13.value == 1){ // objective max Wp
			disableFieldDP(form.pe4, true);
			disableFieldDP(form.pe11, false);
			disableFieldDP(form.pe10, true);
		}	else if(form.pe13.value == 2){ // fix Wp
			disableFieldDP(form.pe4, false);
			disableFieldDP(form.pe11, true);
			disableFieldDP(form.pe10, true);
		}	else if(form.pe13.value == 3){ // fix module
			disableFieldDP(form.pe4, true);
			disableFieldDP(form.pe11, true);
			disableFieldDP(form.pe10, false);
		}	else { 
			disableFieldDP(form.pe4, false);
			disableFieldDP(form.pe11, false);
			disableFieldDP(form.pe10, false);
		}
		if(form.pe14.value == 1){ //optimization
			disableFieldDP(form.pe2, true);
		}
		if(form.pe9.value > 0 && form.pe8.value > 0 && form.pe11.value > 0 && form.pe13.value != 3){ // area
			res = form.pe11.value;
			if(form.pe12.value == 2){
				res = res * 1; //todo fattore di riduzione
			}
			res = res / (form.pe9.value * form.pe8.value) ;
			form.pe10.value = res.toFixed(0);
		}
		if(form.pe10.value > 0 && form.pe7.value >0){ // Wp
			res = form.pe10.value * form.pe7.value / 1000;
			form.pe4.value = res.toFixed(2);
		}
	}
	return isCorrect;
	
}

//// PAGE: CO2 EMISSIONS ////
function setCO2DP(idForm) {
	idForm = "formCO2";
	form = document.forms[idForm];
	var select_2 = form.CO2_mix;
	var select_3 = form.CO2_fuel;
//alert(idForm+"-"+form.kWh_2.value+"|"+factor2);
//	var res = "";
//	var factor2 = 
//	var factor3 = select_3.options[select_3.selectedIndex].value;
	form.factor_2.value = select_2.options[select_2.selectedIndex].value;
	form.factor_3.value = select_3.options[select_3.selectedIndex].value;
  if(!isNumberPosDP(idForm)){
  	return;
  }
  
  form.co2.value   = formatCO2(form.kWh.value   * form.factor.value);
  form.co2_2.value = formatCO2(form.kWh_2.value * form.factor_2.value);
  form.co2_3.value = formatCO2(form.kWh_3.value * form.factor_3.value);
}

function formatCO2(res){
	var unit = " kg";
  if(res > 10000){
  	res = res / 1000;
  	unit = " ton";
  }
  res = Number(res).toFixed(2);
  if(res > 9999999999){
    res = Number(res).toPrecision(6);
  }
  res = res + unit;
  return res;
}

//// COMPONENTS: COORDINATES ////
function checkCoordinates(idForm){
	form = document.forms[idForm];
  isCorrect = true;
  strOut = "";
  var format = "coo";
	if(idForm != 'formD'){
		format = form.formatValue.value;
	}  
  
//alert("idForm:"+idForm+format);
	if(format == "coo"){
		var coo = form.point.value;
		var pos = coo.indexOf(",");
		if(pos != ""){
			strOut += checkRange(form.point, coo.substring(0, pos), -180, 180); // lat
			strOut += checkRange(form.point, coo.substring(pos+1),  -180, 180); // lon
		}
		if(idForm == 'formD'){
			coo = form.pointB.value;
			pos = coo.indexOf(",");
			if(pos != ""){
				strOut += checkRange(form.pointB, coo.substring(0, pos), -180, 180); // latB
				strOut += checkRange(form.pointB, coo.substring(pos+1),  -180, 180); // lonB
			}
		}	
	} else if(format == "deg"){
		if(!isNumberPosDP(idForm)){
			return false;
		}
		strOut += checkMax(form.lat_deg, 180);
		strOut += checkMax(form.lat_min, 60);
		strOut += checkMax(form.lat_sec, 60);
		strOut += checkMax(form.lon_deg, 180);
		strOut += checkMax(form.lon_min, 60);
		strOut += checkMax(form.lon_sec, 60);
	} else if(format == "dec"){
		if(!isNumberPosDP(idForm)){
			return false;
		}
		strOut += checkMax(form.lat_dec, 180);
		strOut += checkMax(form.lon_dec, 180);
	}

	if(isCorrect == false || strOut.length > 0){
		alert(strOut1 + strOut);
		isCorrect = false;
	}
	return isCorrect;
}
