/* util.js */

/* Author: Daniel Guennel \*/

function roundCommercial(x, n) {
    if (n < 1 || n > 14) return false;
    var e = Math.pow(10, n);
    var k = (Math.round(x * e) / e).toString();
    if (k.indexOf('.') == -1) k += '.';
    k += e.toString().substring(1);
    return k.substring(0, k.indexOf('.') + n+1);
}

function formatNachkomma(value, maxNachkomma) {
    if (value == "") {
      value = "0";
    } else {
      value = "" + value + "";
    }
    var digits = value.split('.');
    var nachKommaLen = 0;
    var nachKommaStr = '';
    if (maxNachkomma > 0) {
      nachKommaStr = '.';
      if (digits.length != 1) {
        nachKommaLen = digits[1].length;
        nachKommaStr += digits[1];
      }
      if (nachKommaLen < maxNachkomma + 1){
        for (i=nachKommaLen; i<maxNachkomma; i++) {
          nachKommaStr += '0';
        }
      } else {
        var tmp = nachKommaStr.substring(0, 1 + maxNachkomma);
        nachKommaStr = tmp;
      }
    }
    return digits[0] + nachKommaStr;
}


/**
 * Function: checkFloat
 * Überprüft ob der übergebene Wert ein Float Wert ist und liefert diesen umformatiert (mit Punkt) zurück
 * 
 * Parameters:
 *   value - Der Wert der in ein Float umgewandelt werden soll
 *   nachKomma (Integer) - Die Nachkomma Stellen die der Float haben soll
 * 
 * Returns:
 *   Der formatierte Float Wert oder null sofern der Wert nicht umgewandelt werden konnte
 */
function checkFloat(value, nachKomma) {
  var val = String(value).replace(/,/, ".");
  if (isNaN(val)) {
    return null;
  }
  var decPos = val.indexOf(".");
  if (val.charAt(0) == '+') {
      val = val.substring(1, val.length);
  }
  if (val.charAt(0) == '.') {
      val = "0"+val;
  }
  return formatNachkomma(val, nachKomma);
}


function isPositiveInteger(intString) {
  var pattern = /^([0-9]*)[1-9]([0-9]*)$/;
  var matchArray = intString.match(pattern);
  return (matchArray != null);
}


function formatFloatWithKomma(floatValue) {
  var digits = floatValue.split('.');
  var resultAsc = "";
  if (digits[0].length > 3) {
      var result = "";
      var counter = 0;
      for (var i=digits[0].length-1; i>=0; i--) {
          counter++;
          if (((counter-1) > 0) && ((counter-1) % 3) == 0) {
              result = result + ".";
          }
          result = result + (digits[0]+"").charAt(i);
      }
      for (var i=result.length-1; i>=0; i--) {
          resultAsc = resultAsc + (result+"").charAt(i);
      }
      resultAsc = resultAsc + "." + digits[1];
      
	  var replacedBefore = false;
	  var result = "";
	  
      for (var i=resultAsc.length-1; i>=0; i--) {
          if (resultAsc.charAt(i) == "." && !replacedBefore) {
              result = result +  ",";
              replacedBefore = true;
          } else {
              result = result + resultAsc.charAt(i);
          }
      }
      resultAsc = "";
      for (var i=result.length-1; i>=0; i--) {
          resultAsc = resultAsc + (result+"").charAt(i);
      }
  } else {
      resultAsc = String(digits[0] + "." + digits[1]).replace(/[.]/,',');
  }
  return resultAsc;
}

// small entity for map pairs
function ent(key, value) {
    this.key   = key;
    this.value = value;
}

// compare function to sort arrays | type ent !!!
function cmpnum(inp1, inp2) {
    return inp1.key - inp2.key;
}



function disableOtherSubmitButtons(submitButton)
{
    if (submitButton == null) {
        var formElements = document.forms[0].elements;
        for(var i=0; i<formElements.length; i++)
        {
            //disable all other submit buttons
            if(formElements[i].type == "submit")
            {
              formElements[i].disabled = "true";
            }
        }
    } else {
        if(!submitButton)
        {
            alert("no object found");
            return;
        }
        
        if(!submitButton.type)
        {
            alert("no type attribute");
            return;
        }
        
        if(submitButton.type != "submit")
        {
            alert("no submit button");
            return;
        }
        
        if(!submitButton.form)
        {
            alert("parentless button (no form)");
            return;
        }
        
        var formElements = submitButton.form.elements;
        
        for(var i=0; i<formElements.length; i++)
        {
            //leave the pressed button as is...
            if(formElements[i] == submitButton)
            continue;
            
            //disable all other submit buttons
            if(formElements[i].type == "submit")
            {
              formElements[i].disabled = "true";
            }
        }
    }
}


/**
 * Opens a url in a popup window
 * 
 * @param address
 * @param windowname
 * @param width
 * @param height
 * @return
 */
function openWindow(address, windowname, width, height) {
	window.open(address, windowname, 'width='+width +',height=' +height +',left=100,top=200,resizable=yes,scrollbars=yes,status=no,menubar=no,dependent=yes');
    return false;
}