   function baseChange(value, baseFr, baseTo) {
    var dbg, decVal, decValTemp, j, place;
    dbg = false;
    value = value.toUpperCase();
    //If not IsNumeric(baseFrom) Then : Response.Write("baseFrom (2nd arg) is not numeric<br>") : Response.End : End If
    //If (baseFrom < 2) Then : Response.Write("baseFrom (2nd arg) must be > 1<br>") : Response.End : End If
    //baseFrom = Int(baseFrom)
    //If not IsNumeric(baseTo) Then : Response.Write("baseTo (3rd arg) is not numeric<br>") : Response.End : End If
    //If (baseTo < 2) Then : Response.Write("baseTo (3rd arg) must be > 1<br>") : Response.End : End If
    //baseTo = Int(baseTo)
    decVal = 0;
    for (j=0; j<value.length; j++) {
     decPow = value.length - j - 1;
     decVal += decDigit(value.charCodeAt(j)) * Math.pow(parseInt(baseFr),decPow);
    }
    thisVal = '';
    place = 0
    decValTemp = decVal
    j = 0
    while ((decValTemp > baseTo - 1) && (j++ < 50)) {
     place++;
     decValTemp = decValTemp / baseTo
     thisValInt = Math.floor((decValTemp - Math.floor(decValTemp)) * baseTo)     //alert('while j=' + j + ' place=' + place + ' baseTo=' + baseTo + ' decValTemp=' + decValTemp + ', thisValInt=' + thisValInt);
     thisVal = '' + baseChangeSymbolSet(thisValInt) + thisVal
     decValTemp = Math.floor(decValTemp)
    }
    thisVal = '' + baseChangeSymbolSet(decValTemp) + thisVal;
    return thisVal;
   }


   function decDigit(dig) {
    var thisDig;
    thisDig = parseInt(dig)
    if (thisDig <= 58) {
     thisDig = thisDig - 48;
    } else {
     thisDig = thisDig - 55;
    } 
    return parseInt(thisDig);
   }    


   function baseChangeSymbolSet(n) {
    if (n < 10) {
     return parseInt(n);
    } else {
     switch (n) {
      case 10: return 'A';
      case 11: return 'B';
      case 12: return 'C';
      case 13: return 'D';
      case 14: return 'E';
      case 15: return 'F';
      case 16: return 'G';
      case 17: return 'H';
      case 18: return 'I';
      case 19: return 'J';
      case 20: return 'K';
      case 21: return 'L';
      case 22: return 'M';
      case 23: return 'N';
      case 24: return 'O';
      case 25: return 'P';
      case 26: return 'Q';
      case 27: return 'R';
      case 28: return 'S';
      case 29: return 'T';
      case 30: return 'U';
      case 31: return 'V';
      case 32: return 'W';
      case 33: return 'X';
      case 34: return 'Y';
      case 35: return 'Z';
      //baseChangeSymbolSet = chr(65 + (n - 10));
     }
    }
   }
