/*Преобразование  единиц измерения  температура
*
* Сайт budmex.com.ua
* Автор: Виктор Семенюк
* Date:  08.010.2008
*
*/
// загальні функції
function str2number(val){
    var text;
    var lang='ua';
    switch (lang) { 
        case 'ru':
          text = "Введите, пожалуйста, правильное число.";
          break;
        case 'ua':
          text = "Введіть, будь ласка, правильне число.";
          break 
        default:
          text = "Введіть, будь ласка, правильне число.";
    }    
   for (var i=0; i<val.length; i++) {
        var ch = val.substring(i, i + 1);
        if( ch=="," ) { // меняем запятую на точку
            val = val.substring(0,i) + "." + val.substring(i+1,val.length);
        } else if ( ch==" " ) { // подавляем пробелы
            val = val.substring(0,i) + val.substring(i+1,val.length); 
        }        
    } 
    var val2=parseFloat(val);
    if (isNaN(val2)) { // если не число
       alert(text); 
       val=1;
    } else val = val2;
    //if (val <= 1e-11) val=1;
  return val;
};

function round(num,X) {
 //X=(!X?2:X);
 X=(num > 10000?3:X)
 if (num > 10000) X=2;
 else if (num > 1000) X=3;
 else if (num > 100) X=4;
 else if (num > 10) X=5;
 else if (num > 1) X=6;
 //if (num < 1E-7) return num;
 return Math.round(num*Math.pow(10,X))/Math.pow(10,X);
};
var valRound=8;

function key_handler(key_event,fld) {
    var CurEvent;
    if (document.all) {
        //Probably Internet Explorer 4 and later
        CurEvent = event.keyCode;
    }
    else if (document.getElementById) {
        // Probably Netscape 6 and later
        CurEvent=key_event.which;
    }
    else if (document.layers) {
        // Probably Netscape 4
        CurEvent = key_event.which;
    } else return false;
    if (CurEvent == 13) {
       conv_sva2(fld);
    }
    return true;
};

function format_g (result) {
  //Если нужно, разбиваем результат на группы разрядов 
  result= new String(result);
  var i = result.indexOf ( ".")>0 ? result.indexOf ( "." ) : result.length;
  //alert ('i='+i+"; length="+result.length);
    for ( var j=i-3; j>0; j-=3 ) {
        if ( result[j-1] != "-" )
            result = result.substring ( 0, j ) + " " + result.substring (j, result.length );
    }
   return result;
};


// ----------------

var UTemperature = new Array();
UTemperature['Celsius']= new edn(1,1);
UTemperature['Fahrenheit']= new edn('Fahrenheit(val)',0);
UTemperature['Kelvin']= new edn('Kelvin(val)',0);
//Fahrenheit Celsius Kelvin
var TypeCalc=0;

function Kelvin(val){
  if (TypeCalc == 0 )return val+273.15;   //  кельвин
  else return val-273.15;  // цельсий
}


function Fahrenheit(val, type){
  //alert('Fahrenheit '+TypeCalc);
  if (TypeCalc == 0 )return val*1.8+32;   //  фаренгейт
  else return (val-32)/1.8;  // цельсий
}

function edn(relation,base){
  this.relation=relation;
  this.base=base; // 1 - если базовая
};


function conv_up_unit(frm,val,unit) {  
 //if(unit!='ULength') return 0;
 //alert(frm.name)
 for ( var item =0; item < frm.elements.length; item++ ) {
    //alert(item+ '; '+frm.elements[item].type );
    if ( frm.elements[item].type == 'text' ) {
      nm=frm.elements[item].name;      //alert (nm);
      nL=unit+"['"+nm+"'].relation";
      nL=eval(nL);
      //alert(nL+' val='+val);
      if( eval(unit+"['"+nm+"'].base") == 0) {
        result=round(eval(nL),valRound); 
      } else {
        result=round(val,valRound); 
      }
        frm.elements[item].value=format_g (result);
    }     
 }
 return 1;
};

function conv_set_unit(ini){
  // имя фомы соответсвует имени массива
  return ini;
};

function conv_sva2(fld) {
    frm=fld.form
    unit=conv_set_unit(frm.name);
    var val_ini=fld.value;
    val_ini=str2number(val_ini);
    nm=fld.name;
    nL=unit+"['"+nm+"'].relation";    //alert(nL);
    relation=eval(nL);    //alert(relation);
    if( eval(unit+"['"+nm+"'].base") == 1) 
          val= val_ini;
    else {  
       TypeCalc=1;
       val=val_ini;
       val=eval(relation);
       TypeCalc=0; 
    }
    //alert('val='+val);
    return conv_up_unit(frm,val,unit);
};
function conv_up_sva2(frm,val) {
  
  unit=conv_set_unit(frm.name);
  //alert('val='+val);
  return conv_up_unit(frm,val,unit);
};
