


function addListItem(listBox,text,value,isDefaultSelected,isSelected)
{
	var listItem=document.createElement("option");
	listItem.appendChild(document.createTextNode(text));
	listItem.setAttribute("value",value);

	if(isDefaultSelected)listItem.defaultSelected=true;
	else if(isSelected) listItem.selected=true;

	listBox.appendChild(listItem);
}

//----------------------------------------//


function createUnitClass()
{
var classUnitSelect=document.getElementById("unitClasses");
for (var i=0;i<classes.length;i++)
  addListItem(classUnitSelect,classes[i].label,classes[i].id,false,false);
changeUnitClass();
return;
}



//----------------------------------------//
function changeUnitClass()
{
var inputUnitSelect=document.getElementById("inputUnit");
var outputUnitSelect=document.getElementById("outputUnit");
var classUnitSelect=document.getElementById("unitClasses");

	inputUnitSelect.options.length=0;
	outputUnitSelect.options.length=0;



if(classUnitSelect.selectedIndex!=-1)
{
	var i=classUnitSelect.options[classUnitSelect.selectedIndex].value;
		for (var j=0;j<classes[i].unit.length;j++)
		{
			if (classes[i].baseUnitId==classes[i].unit[j].id)
			{
				addListItem(inputUnitSelect,classes[i].unit[j].label,classes[i].unit[j].id,true,true);
			        addListItem(outputUnitSelect,classes[i].unit[j].label,classes[i].unit[j].id,true,true);
			}
			else
			{
				addListItem(inputUnitSelect,classes[i].unit[j].label,classes[i].unit[j].id,false,false);
				addListItem(outputUnitSelect,classes[i].unit[j].label,classes[i].unit[j].id,false,false);
			}
		}
}
return;
}




//----------------------//
function convert()
{
var classUnitSelect=document.getElementById("unitClasses");	
var inputUnitSelect=document.getElementById("inputUnit");
var outputUnitSelect=document.getElementById("outputUnit");
var input=document.getElementById("input");
var output=document.getElementById("output");

var currentClassId;
var currentInputId;
var currentOutputId;


if (input.value!=0&&(isNaN(input.value)||parseFloat(input.value)==0)) alert(inputErrorText);
if (classUnitSelect.selectedIndex!=-1)
	{
		currentClassId=classUnitSelect.options[classUnitSelect.selectedIndex].value;
                if((inputUnitSelect.selectedIndex!=-1)&&(outputUnitSelect.selectedIndex!=-1))
	      	 {
		    currentInputId=inputUnitSelect.options[inputUnitSelect.selectedIndex].value;
		    currentOutputId=outputUnitSelect.options[outputUnitSelect.selectedIndex].value;
		    if (currentInputId==currentOutputId) 
		    {
			    output.firstChild.nodeValue = input.value;
			    return false;
		    }
	      	 }
	}

if(currentClassId==2)
	out=String(temperatureFactor(currentInputId,currentOutputId,input.value));
else
	out=String(factorConvert(currentClassId,currentInputId,currentOutputId,input.value)); 

if (out.indexOf(".")!=-1)
{
 if (out.indexOf("e")!=-1)
   out=out.substring (0,out.indexOf(".")+6)+" "+out.substring(out.indexOf("e"),out.length);
 else
     if (out.length-out.substring(out.indexOf("."),out.length).length>15)
          out=out.substring(0,15)+"e+"+(out.length-15);
     else
        if(out.length>15)
           {
             if(out.indexOf(".")!=14) out=out.substring(0,15);
             else out=out.substring(0,14);
           }
}
else
  if (out.length>15)
    out=out.substring(0,15)+"e+"+(out.length-15);
output.firstChild.nodeValue=out;
return false;

}

function factorConvert(currentClassId,currentInputId,currentOutputId,value)
{
var factorInput =classes[currentClassId].unit[currentInputId].factor;
var factorOutput =1/ classes[currentClassId]. unit[currentOutputId].factor;
return value*factorInput*factorOutput;
}

function temperatureFactor(currentInputId,currentOutputId,value)
{
	var out=0;
	switch (currentInputId)
	{
		case "0":switch(currentOutputId)
			{

				case "1":out=Number(Number(value)*9/5+32);
					break;

		      		case "2": out=Number(Number(value)+273);
					break;
			}		     
		        break;
		case "1":switch(currentOutputId)
		       {
			       case "0":out=Number((Number(value)-32)*5/9);
				      break;
			       case "2":out=Number((Number(value)-32)*5/9+273);
				      break;
		       }
		       break;
		case "2":switch(currentOutputId)
		       {
			       case "0":out=Number(Number(value)-273);
				      break;
			       case "1":out=Number((Number(value)-273)*9/5+32);
				      break;
		       }
		       break;
	}

return out;
}


