/*
NUMBER CONVERSION

author: Jens Brueckmann
        http://www.j-a-b.net/

      created: 2003-01-20
last modified: 2004-04-26
________________________________________________________________________________
This script is published under a Creative Commons License. For more information 
about this license visit http://creativecommons.org/licenses/by-sa/2.0/
________________________________________________________________________________
Comments are welcome :-) Use contact form or mail me at jens[at]j-a-b.net
________________________________________________________________________________
*/

function calcDOHB(inpDOHB,dhb,lang) {

  var outDez = parseInt(inpDOHB,dhb);
  var hexString="0123456789ABCDEF";
  var i;
  var error_invalid;
  var error_limP1;
  var error_limP2;
  var error_limP3;

  if (lang=='de') {

    error_invalid = "FEHLER:\nung\u00FCltige Eingabe";
    error_limP1   = "FEHLER:\n" + 
                    "Die eingegebene Zahl ist zu gro\u00DF,\n" + 
                    "ihr ";
    error_limP2   = " mu\u00DF kleiner als ";
    error_limP3   = " sein.";
  }

  else {

    error_invalid = "ERROR:\ninvalid input";
    error_limP1   = "ERROR:\n" + 
                    "The number is too large to process.\n" + 
                    "Its ";
    error_limP2   = " must be lesser than ";
    error_limP3   = " .";
  }

  var nameValue = "";
  var maxValue = "";

  if(isNaN(outDez)) {
    alert(error_invalid);
    outDez = "";
    return;
  }

  else if (outDez>2147483647) {

    switch (dhb) {
      case 2:
             if (lang=='de') { nameValue = "Bin\u00E4rwert"; }
             else { nameValue = "binary value"; }
             maxValue = "1111 1111 1111 1111 1111 1111 1111 1111";
             break;
      case 8:
             if (lang=='de') { nameValue = "Octalwert"; }
             else { nameValue = "octal value"; }
             maxValue = "20 000 000 000";
             break;
      case 10:
              if (lang=='de') { nameValue = "Dezimalwert"; }
              else { nameValue = "decimal value"; }
              maxValue = "2 147 483 648";
              break;
      case 16:
              if (lang=='de') { nameValue = "Hexadezimalwert"; }
              else { nameValue = "hexadecimal value"; }
              maxValue = "80 000 000";
              break;
    }

    var error_limit = error_limP1 + nameValue + error_limP2 + maxValue +error_limP3;

    alert(error_limit);
    outDez = "";
    return;
  }

  var tempDez = outDez;
  var outOct  = "";
  var outHex  = "";
  var outBin  = "";

  while(outDez != 0) {
    outOct = hexString.charAt(outDez%8) + outOct;
    outDez = outDez >> 3;
  }

  outDez = tempDez;

  while(outDez != 0) {
    outHex = hexString.charAt(outDez%16) + outHex;
    outDez = outDez >> 4;
  }

  outDez = tempDez;

  while(outDez != 0) {
    outBin = hexString.charAt(outDez%2) + outBin;
    outDez = outDez >> 1;
  }

  outDez = tempDez;

  var start     = 0;
  var startC    = 0;
  var outBinC   = outBin;
  var outNybble = "";
  var out3bit   = "";
  var digits    = outBin.length;
  var digitsC   = outBin.length;

  if (digits%4 != 0) {

    digits = 4 - digits%4;

      for (i=0;i<digits;i++) { outBin = "0" + outBin; }
  }

  var spaceCount = outBin.length/4;

  while (spaceCount > 0 ) {
    outNybble = outNybble + outBin.substr(start,4) + "\u0020";
    spaceCount--;
    start = start + 4;
  }

  if (digitsC%3 != 0) {

    digitsC = 3 - digitsC%3;

      for (i=0;i<digitsC;i++) { outBinC = "0" + outBinC; }
  }

  var spaceCountC = outBinC.length/3;

  while (spaceCountC > 0 ) {
    out3bit = out3bit + outBinC.substr(startC,3) + "\u0020";
    spaceCountC--;
    startC = startC + 3;
  }

  document.getElementById('translateNumbers').deca.value = outDez;
  document.getElementById('translateNumbers').octa.value = outOct;
  document.getElementById('translateNumbers').hexa.value = outHex;
  document.getElementById('translateNumbers').bina.value = outNybble;
  document.getElementById('translateNumbers').binC.value = out3bit;
  document.close();
}

function clearDOHB() {// document.getElementById('translateNumbers').reset();}

  document.getElementById('translateNumbers').deca.value = "";
  document.getElementById('translateNumbers').octa.value = "";
  document.getElementById('translateNumbers').hexa.value = "";
  document.getElementById('translateNumbers').bina.value = "";
  document.getElementById('translateNumbers').binC.value = "";
}

