
   function calculate() {
     var select1 = document.currcalc.from_tkc;
     var select2 = document.currcalc.to_tkc;
     var select1_text = select1[select1.selectedIndex].value;
     var select2_text = select2[select2.selectedIndex].value;
     var amount_curr = document.currcalc.amount.value;
     var amount_fin = 0;
     var currstring = amount_curr.toString();
     var curr;
	 
	 //these error messages are hidden values in the templates
	 //they get translated into foreign languages
	 var errmsg1 = document.currcalc.translation1.value;
	 var errmsg2 = document.currcalc.translation2.value;
	 var errmsg3 = document.currcalc.translation3.value;
     
     if ( (select1_text == 'DECIMAL') && (amount_curr == "" || 
           isNaN  (amount_curr))){
		alert(errmsg2);
		return false;
     }

   
     if ( (select1_text == 'DECIMAL' && select2_text == 'DECIMAL') || 
          (select1_text == 'DEGREE' && select2_text == 'DEGREE') ){
       
         amount_fin = document.currcalc.amount.value;
         
         document.currcalc.outputBox.value = amount_fin;
	     
      }
     else if (select1_text == 'DEGREE' && select2_text == 'DECIMAL') {
            
            if (currstring.match(/\:/)) {
	    curr = currstring.split(':');
             if (curr.length <= 1 && curr.length > 3) {
                alert(errmsg2);

                return false;
              }
            
            var tmpa = parseFloat(curr[0]);
            var tmpb = parseFloat(curr[1]);
            if (curr.length == 3) {
                var tmpc = parseFloat(curr[2]);
            }
            var total = 0;
            
            
            if (tmpb > 60) {
               alert("Limit of minutes = 60");
               return false;
            }
     
            else if (tmpc > 60) {
               alert ("Limit of seconds = 60");
               return false;
            }

            else {	

                if (tmpa < 0) {
                   var x = tmpa * -1;
                   if (curr.length == 3) {
                      total = (x + (tmpb + tmpc/60)/60) * -1;
                   }
                   else {
                      total = (x + tmpb/60) * -1;
                   }
                   if (isNaN(total)) {
                      alert(errmsg2);
	             return false;
                   }
                   else amount_fin = total;        
	       }
  
                else {   
                   if (curr.length == 3) {
                      total = tmpa + (tmpb + tmpc/60)/60;
                   }
                   else { 
                      total = tmpa + tmpb/60;
                   }
                   if (isNaN(total)) {
                      alert(2);
                      return false;
                   }
                   else amount_fin = total;
	       }
              }
	 }
          else {
            alert(errmsg2);
            return false;
         }
         document.currcalc.outputBox.value = toUnit(amount_fin);
                
      }
      else if (select1_text == 'DECIMAL' && select2_text == 'DEGREE') {
        
	var isNegative = 0;
	if (amount_curr < 0) {
		isNegative = 1;
		amount_curr = amount_curr * -1;
	}
        resultArray = new Array(3);
        var degree = truncate(amount_curr);
        resultArray[0] = degree;
        var min = truncate( (amount_curr-degree) * 60);
        resultArray[1] = min;
        var sec = round(((amount_curr-degree) * 60 - min) * 60);
        resultArray[2] = sec;
	if (isNegative == 1) {
        	amount_fin = resultArray[0]*-1 + ":" + resultArray[1] + ":" + resultArray[2];
	}
	else {
		amount_fin = resultArray[0] + ":" + resultArray[1] + ":" + resultArray[2];
	}

        document.currcalc.outputBox.value = amount_fin;
      }
     
      
      else {
         alert(errmsg1);
         return false;
      }

}

function round(num) {
	var x = num * 10000;
	return (Math.round(x) / 10000);
}


function toUnit(num) {
	num = round(num);
	var currstring = num.toString();
	if (currstring.match(/\./)) {
		var curr = currstring.split('.');
	} else {
		var curr = [currstring, "00"];
	}
	curr[1] += "00";
	curr[2] = "";
	var returnval = "";
	var length = curr[0].length;

	// add 0 to decimal if necessary
	for (var i = 0; i < 2; i++)
		curr[2] += curr[1].substr(i, 1);

	// insert commas for readability
	for (i = length; (i - 3) > 0; i = i - 3) {
		returnval = "," + curr[0].substr(i - 3, 3) + returnval;		
	}
	returnval = curr[0].substr(0, i) + returnval + "." + curr[1].substr(0, 4);
	return (returnval);
}

function truncate(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x)
}