var valid = true
function addSampleData(){
 populate('newClients',150)
 populate('turnover',40000000)
 populate('currentLoss',1000000)
 populate('currentLossFactor',2.5)
}

function calculateIncrease(){
  // Refresh all values used
  valid = true
  improvement = 0
  returnObjById('results_1').style.display = 'none'
  returnObjById('errorPane_1').style.display = 'none'
  
  // Get the current values
  turnover = getValidatedValue('turnover')
  currentLossFactor = numberFromNOLocale(getValidatedValue('currentLossFactor'))
  currentLoss = getValidatedValue('currentLoss')
  newClients = getValidatedValue('newClients')
  
  // Calculate
  if(valid){
		if (turnover > 50000000) {
			returnObjById('turnover').className = 'invalidTextField'
      setErrorMessage('1','Kan ikke være over 50.000.000') 
		}
		if (newClients > 10000) {
			returnObjById('newClients').className = 'invalidTextField'
      setErrorMessage('1','Kan ikke være over 10.000')      
		}
    
    forcastLossFactor = 0.3333
    forcastFutureRefusalRatio = 0.1
    degreeOfCoverage = 0.0923
    costPerSearch = 15
    minServiceCost = 6480
    d = (currentLoss / turnover) * (forcastLossFactor);	
    h = turnover * (1 - forcastFutureRefusalRatio);
    i = h - turnover;
    j = (currentLoss) - (h * d);
    k = i * degreeOfCoverage ;
    l = -(newClients * costPerSearch);
    l = (l > -(minServiceCost)) ? (-minServiceCost) : (l)
    m = j + k + l;
    
    result = m + 0.5
    improvement = 1000 * Math.round(result / 1000);

    returnObjById('potential').innerHTML = addSpaces(improvement)
    displayResults(1)
  }
}
function tryAgain(formId){
  returnObjById('results_' + formId).style.display = 'none'
  returnObjById('buttons_' + formId).style.display = 'block'
}
function calculateCredTime(){
    valid = true
    var kreditt = getValidatedValue('kreditt');    
    var fordringsmasse = getValidatedValue('fordringsmasse');
    if(valid){
        var antallDager = 365/ (kreditt/fordringsmasse);  
        returnObjById('Kredittid').value = antallDager.toFixed(0);
    }else{
        returnObjById('Kredittid').value = ""; 
    }
}

function calculateSavings(){
  // Refresh all values used
  valid = true
  returnObjById('results_2').style.display = 'none'

  // Get the current values
  var kreditt = getValidatedValue('kreditt')
  var rentesats = getValidatedValue('rentesats')
  var fordringsmasse = getValidatedValue('fordringsmasse')
  var reduksjon = getValidatedValue('reduksjon')
  // Calculate
  if(valid){
    var antallDager = 365/(kreditt/fordringsmasse)
    var besparelse = (kreditt * rentesats * reduksjon) / 36500
    
    returnObjById('besparelseID').value = besparelse.toFixed(2);
    returnObjById('Kredittid').value = antallDager.toFixed(0);
    
    returnObjById('antallDager').innerHTML = antallDager.toFixed(0);
    returnObjById('besparelse').innerHTML = besparelse.toFixed(2);
    
    //displayResults(2);
    returnObjById('results_2').style.display = 'block'
    //returnObjById('buttons_' + id).style.display = 'none'
  }
}
function displayResults(id){
  returnObjById('results_' + id).style.display = 'block'
  returnObjById('buttons_' + id).style.display = 'none'
}
function setErrorMessage(elemId, message){
  paneElem = returnObjById('errorPane_' + elemId)
  messageElem = returnObjById('errorMessage_' + elemId)
  messageElem.value = message
  paneElem.style.display = 'block'
}

function getValidatedValue(elemId){
  elem = returnObjById(elemId)
  elem.className = 'textField'
  theValue = numberFromNOLocale(elem.value)
  if( theValue == null || theValue == '' || isNaN(theValue) ){
    valid = false
    elem.className = 'invalidTextField'
  }
  return theValue
}

function returnObjById( id )
{
    if (document.getElementById)
        var returnVar = document.getElementById(id);
    else if (document.all)
        var returnVar = document.all[id];
    else if (document.layers)
        var returnVar = document.layers[id];
    return returnVar;
}
function resetForm(formName){
  returnObjById(formName).reset()
}
function displayHelpText(fieldName){
  returnObjById(fieldName).style.display = 'block'
}
function hideHelpText(fieldName){
  returnObjById(fieldName).style.display = 'none'
}
function addSpaces(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ' ' + '$2');
	}
	return x1 + x2;
}

// Populates a field, <field>, with the given value <val>
function populate(field, val) {
  returnObjById(field).value = val;
}

// returns the array number of the selected radio 
// button or -1 if no button is selected
function getSelectedRadio(buttonGroup) {
   // if the button group is an array (one button is not an array)
   if (buttonGroup[0]) {
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            return i
         }
      }
   } else {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }
   // if we get to this point, no radio button is selected
   return -1;
}

// returns the value of the selected radio button or "" 
// if no button is selected
function getSelectedRadioValue(buttonGroup) {
   var i = getSelectedRadio(buttonGroup);
   if (i == -1) {
      return "";
   } else {
      // Make sure the button group is an array (not just one button)
      if (buttonGroup[i]) {
         return buttonGroup[i].value;
      } else {
         // The button group is just the one button, and it is checked
         return buttonGroup.value;
      }
   }
}

// Calculates percent or nok
// nok = turnover * percent / 100
// percent = nok / turnover * 100
function currentLossChange(obj){
	var percentField = document.forms['increaseForm'].currentLossFactor;
	var nokField = document.forms['increaseForm'].currentLoss;
	var unitsField = getSelectedRadioValue(document.forms['increaseForm'].currentLossUnits);
	var inputField = obj;
	var inVal = inputField.value;
	var inp = numberFromNOLocale(inVal);
	var turnoverField = document.forms['increaseForm'].turnover;
	var t = parseInt(turnoverField.value);
	if(isNaN(t))t=0;
	var p;
	if(unitsField == "percent"){	
		var n = numberFromNOLocale(percentField.value);
		if (t!=0 && n!=0) {
		  p = Math.round(t*n/100);
		} 
		else {
		  p = nokField.value="";
		}
		nokField.value = p; 	
	}
	else {
		var n = parseInt(nokField.value);
		if(isNaN(n))n=0;
		if (t!=0 && n!=0) {
		  p = Math.round(n/t*10000)/100.0;
		}
		else {
		  p = percentField.value="";
		}
		p = "" + p;
		p = p.replace(/\./g,",");
		percentField.value = p;
	}
}

// Disables a field and gives its sister focus
function fieldDisable(field){
	field.disabled = true;
	field.style.backgroundColor="#DDDDDD";
    field.style.color="#222222";
}

// Enables a field
function fieldEnable(field){
	field.disabled = false;
	field.style.backgroundColor="#FFFFFF";
    field.style.color="#000000";
}

// Enables the fields to perform submit and calculation correctly
function enableFields(loss,percent) {
	loss.disabled = false;
	percent.disabled = false;
}

// Disables the text field for either percent or nok  
// based on the value of the input parameter <object> 
function disableField(object) {
    if (object == "percent") {
       	fieldDisable(document.forms['increaseForm'].currentLossFactor);
    	fieldEnable(document.forms['increaseForm'].currentLoss);	
    } else {
    	fieldDisable(document.forms['increaseForm'].currentLoss);
    	fieldEnable(document.forms['increaseForm'].currentLossFactor);    	
    }
}

// Called from onload fron the first input form;
// BasicSimulatorInput.jsp. Sets percent as default value of the
// radiobutton, and disables NOK
function setBasicDefaults() {
	document.forms['increaseForm'].currentLossUnits[0].checked=true;
	document.forms['increaseForm'].turnover.focus();
	
    document.forms['increaseForm'].currentLoss.sister = document.forms['increaseForm'].currentLossFactor;
    document.forms['increaseForm'].currentLossFactor.sister = document.forms['increaseForm'].currentLoss;
    disableField(document.forms['increaseForm'].currentLossFactor);
}

// Replaces decimals with dots, as that is how numbers are determined.
// If not a number, 0.0 is returned
function numberFromNOLocale(nbrString){
	if((typeof nbrString)=="number")return nbrString;
	if((typeof nbrString)=="string"){
		var tmpStr = nbrString.replace(/,/g,".");
		var nbrVal = parseFloat(tmpStr);
		if(!isNaN(nbrVal))return nbrVal;
	}
	return 0.0;
}

function doOnLoad() {
  // Make sure that you are taken to the result when it has
  // been calculated
  // Enable / disable percent and nok
  document.forms['increaseForm'].currentLoss.sister = document.forms['increaseForm'].currentLossFactor;
  document.forms['increaseForm'].currentLossFactor.sister = document.forms['increaseForm'].currentLoss;
  var unitsField = getSelectedRadioValue(document.forms['increaseForm'].currentLossUnits);
  if (unitsField == "percent") {
    fieldDisable(document.forms['increaseForm'].currentLoss);
    fieldEnable(document.forms['increaseForm'].currentLossFactor);
  }
  else {
    fieldDisable(document.forms['increaseForm'].currentLossFactor);
    fieldEnable(document.forms['increaseForm'].currentLoss);
  }

}
