function changeValue(id,step,add) {
    var min = parseFloat(document.getElementById('min_range_' + id).innerHTML);
    var max = parseFloat(document.getElementById('max_range_' + id).innerHTML);
    var val_str = document.getElementById(id).value;
    var val = parseFloat(val_str);
    var step_int = parseInt(step);
    var step_str = step;
    var step = parseFloat(step);
    if (isNaN(val_str) || val_str == '') {
        val = parseInt(((max-min)/2)+min);
    } else {
        if (step <= 1) {
            var step_multi = 1/step;
            var val_tst = val*step_multi;
        } else {
            val_tst = val;
        }
        if (add == 'up') {
            if (val_tst != parseInt(val_tst)) {
                val = Math.ceil(val*step_multi)/step_multi;
            } else {
                val = val+step;
            }
        } else {
            if ((val_tst) !=  parseInt(val_tst)) {
                val = Math.floor(val*step_multi)/step_multi;
            } else {
                val = val-step;
            }
        }
    }
    if (val <= min) {
        val = min;
    }
    if (val >= max) {
        val = max;
    }
    if (step == step_int) {
        var fix = 0;
    } else {
        var fix = step_str.length-2;
    }
    document.getElementById(id).value = val.toFixed(fix);
}

/* Rundet eine Zahl auf eine bestimmte Stellenzahl */
function RelativesRunden(Wert, Stellen) { 
    if (Wert == 0) 
    return 0
    else
    with (Math) {
        // Bereinigung der Stellenzahl
        Stellen = Math.floor(Math.abs(Stellen))
        if (Stellen == 0) { Stellen = 1 }

        var Exponent = Math.round(Math.log(Math.abs(Wert)) * LOG10E)
        if (Math.abs(Wert) < Math.pow(10, Exponent)) { Exponent-- }
        var Potenz = Math.pow(10, 1 + Exponent - Stellen)
        return ((Wert < 0) ? "-" : "") + Math.round(Math.abs(Wert) / Potenz) * Potenz
    }

 }
                                                   
function triggerPrism(key, side, step, prism, add){
  var prism1 = parseFloat(document.getElementById('correction_' + side + '_basevalues_prism1').value);
  var prism2 = parseFloat(document.getElementById('correction_' + side + '_basevalues_prism2').value);
  var prism = parseFloat(prism);

  var prism1_range = Math.sqrt(Math.pow(prism, 2)-Math.pow(prism2, 2));
  var prism2_range = Math.sqrt(Math.pow(prism, 2)-Math.pow(prism1, 2));
  
  // These 6 lines are for the 0.25 precision calculation of the prism value
  var tmp_prism1 = prism1_range * 4;
  var tmp_prism2 = prism2_range * 4;
  var tmp1_prism1 = tmp_prism1.toFixed(0);
  var tmp1_prism2 = tmp_prism2.toFixed(0);
  var tmp2_prism1 = tmp1_prism1/4;
  var tmp2_prism2 = tmp1_prism2/4;
  
  document.getElementById('correction_' + side + '_basevalues_prism1_range').innerHTML = tmp2_prism1.toPrecision(3);
  document.getElementById('correction_' + side + '_basevalues_prism2_range').innerHTML = tmp2_prism2.toPrecision(3);

  if( key == 'prism1' ){
    var val_str = document.getElementById('correction_' + side + '_basevalues_prism1').value;
    var val = prism1;
    var range = prism1_range;
  }else{
    var val_str = document.getElementById('correction_' + side + '_basevalues_prism2').value;
    var val = prism2;
    var range = prism2_range;
  }
  var step = parseFloat(step);

  if(isNaN(val_str) || val_str == ''){ val = 0; }
  else{
    if(add == 'up'){
//       window.alert ("val/step:  " + val/step + "  parseInt(val/step):  " + parseInt(val/step) + "  Operation: " + ((val/step) !=  parseInt(val/step)));
      if(RelativesRunden((val/step),5) !=  RelativesRunden(parseInt(val/step),5)){  val = Math.ceil(val); }
      
      
      else{ val = val+step; }

    }else{

      if(RelativesRunden((val/step),5) !=  RelativesRunden(parseInt(val/step),5)){  val = Math.ceil(val); }
      
      else{ val = val-step; }

    }
  }

  if(val <= 0){ val = 0; }
  if(val >= range){ val = range; }
  
  document.getElementById('correction_' + side + '_basevalues_' + key).value = val.toFixed(2);
}

function format_prism(side, key){
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_' + key).value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval*20)/20;
    document.getElementById('correction_' + side + '_basevalues_' + key).value = thisval.toFixed(2);
    send_basevalue_then_pricedisplay_update('/Correction/index.php?' + key + '_' + side + '=' + thisval.toFixed(2) + '&basket=1&jspriceupdateside=' +side);        
}

function format_base(side, key) {
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_' + key).value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval);
    document.getElementById('correction_' + side + '_basevalues_' + key).value = thisval.toFixed(0);
    clientdata_setreqest('/Correction/?basket=1&' + key + '_' + side + '=' + thisval.toFixed(0));        
}

function format_sphere(side) {
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_sphere').value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval*20)/20;
    document.getElementById('correction_' + side + '_basevalues_sphere').value = thisval.toFixed(2);
    send_basevalue_then_pricedisplay_update('/Correction/index.php?sphere_' + side + '=' + thisval.toFixed(2) + '&basket=1&jspriceupdateside=' +side); 
}

function format_cylinder(side) {
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_cylinder').value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval*20)/20;
    document.getElementById('correction_' + side + '_basevalues_cylinder').value = thisval.toFixed(2);
    send_basevalue_then_pricedisplay_update('/Correction/index.php?cylinder_' + side + '=' + thisval.toFixed(2) + '&basket=1&jspriceupdateside=' +side); 
}

function format_addition(side) {
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_addition').value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval*20)/20;
    document.getElementById('correction_' + side + '_basevalues_addition').value = thisval.toFixed(2);
    send_basevalue_then_pricedisplay_update('/Correction/index.php?addition_' + side + '=' + thisval.toFixed(2) + '&basket=1&jspriceupdateside=' +side);         
}

function format_axis(side) {
    var rawvalue = document.getElementById('correction_' + side + '_basevalues_axis').value.replace("'","");
    var thisval = new Number(rawvalue.replace(",","."));
    thisval = Math.round(thisval);
    document.getElementById('correction_' + side + '_basevalues_axis').value = thisval.toFixed(0);
    send_basevalue_then_pricedisplay_update('/Correction/index.php?axis_' + side + '=' + thisval.toFixed(0) + '&basket=1&jspriceupdateside=' +side);  
}

function triggerDiameter(diam_id, side, diam, from_mer, to_mer, from_cyl, to_cyl, cylslope_f, cylslope_t, cyl_prefix) {
    var sphere = parseFloat(document.getElementById('correction_' + side + '_basevalues_sphere').value);
    var cylinder = Math.abs(parseFloat(document.getElementById('correction_' + side + '_basevalues_cylinder').value));
    var diam = parseFloat(diam);
    var from_mer = parseFloat(from_mer);
    var to_mer = parseFloat(to_mer);
    
    var from_cyl = parseFloat(from_cyl);
    var to_cyl = parseFloat(to_cyl);
    var cyl_range = to_cyl-from_cyl;
    
    var cylslope_f = parseFloat(cylslope_f);
    var cylslope_t = parseFloat(cylslope_t);
    
    if (cyl_prefix == "positive") {
        var show = false;
        if (cylslope_f != 0 && cylslope_t != 0) {
            if ((from_mer-cylinder <= sphere) && (to_mer-cylinder >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if (cylslope_f == 0 && cylslope_t != 0) {
            if ((from_mer <= sphere) && (to_mer-cylinder >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if (cylslope_f != 0 && cylslope_t == 0) {
            if ((from_mer-cylinder <= sphere) && (to_mer >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if ((cylslope_f == 0) && (cylslope_t == 0)) {
            if ((from_mer <= sphere) && (to_mer >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        }
    } else {
        var show = false;
        if ((cylslope_f != 0) && (cylslope_t != 0)) {
            if ((from_mer <= sphere) && (to_mer >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if ((cylslope_f == 0) && (cylslope_t != 0)) {
            if ((from_mer+cylinder <= sphere) && (to_mer >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if ((cylslope_f != 0) && (cylslope_t == 0)) {
            if ((from_mer <= sphere) && (to_mer+cylinder >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        } else if ((cylslope_f == 0) && (cylslope_t == 0)) {
            if ((from_mer+cylinder <= sphere) && (to_mer+cylinder >= sphere) && (from_cyl <= cylinder) && (to_cyl >= cylinder)) {
                show = true;
            }
        }
    }
    if (show) {
        if (document.getElementById(diam_id).style.display != "inline") {
            document.getElementById(diam_id).style.display = "inline";
        }
    } else {
        if (document.getElementById(diam_id).style.display != "none") {
            document.getElementById(diam_id).style.display = "none";
            document.getElementById(diam_id).style.background = "url(/.file/diameter_bg.gif) center no-repeat";
            ax('/Correction/index.php/?basket=1&diameter_' + side + '=NULL', document.getElementById('basket_dialogue'));
        }
    }
}

function check_customer_reference(customer_reference_str) {
    if (string.length(customer_reference_str) > 0 ) {
        return true;
    } else {
        return false;
    }
}

function floorCylinderRange(id, min_cyl, max_cyl, cyl_prefix) {
    if (cyl_prefix == "positive") {
        var min_cyl = parseFloat(min_cyl);
        var max_cyl = parseFloat(max_cyl);
        document.getElementById('max_range_' + id).innerHTML = min_cyl.toFixed(2);
        document.getElementById('min_range_' + id).innerHTML = max_cyl.toFixed(2);
    } else {
        var min_cyl = parseFloat(min_cyl)*(-1);
        var max_cyl = parseFloat(max_cyl)*(-1);
        document.getElementById('max_range_' + id).innerHTML = max_cyl.toFixed(2);
        document.getElementById('min_range_' + id).innerHTML = min_cyl.toFixed(2);
    }
}

function triggerCylinderRange(id, side, from_mer, to_mer, from_cyl, to_cyl, cylslope_f, cylslope_t, cyl_prefix) {
    var sphere = parseFloat(document.getElementById('correction_' + side + '_basevalues_sphere').value);
    var from_mer = parseFloat(from_mer);
    var to_mer = parseFloat(to_mer);
    var from_cyl = parseFloat(from_cyl);
    var to_cyl = parseFloat(to_cyl);
    var cyl_range = to_cyl-from_cyl;
    var cylslope_f = parseFloat(cylslope_f);
    var cylslope_t = parseFloat(cylslope_t);
    var max_cyl = "notset";
    var min_cyl = "notset";
    if (cyl_prefix == "positive") {
        if ((to_mer >= sphere) && (sphere > (to_mer-cyl_range))) {
            if (cylslope_t != 0) {
                max_cyl = Math.abs(to_mer-sphere);
                min_cyl = from_cyl;
            } else {
                max_cyl = to_cyl;
                min_cyl = from_cyl;
            }
        } else if(((to_mer-cyl_range) >= sphere) && (sphere >= from_mer)) {
            max_cyl = to_cyl;
            min_cyl = from_cyl;
        } else if ((from_mer > sphere) && (sphere >= (from_mer-cyl_range))) {
            if (cylslope_f != 0) {
                max_cyl = to_cyl;
                min_cyl = Math.abs(sphere-from_mer);
            }
        }
    } else {
        if (((to_mer+cyl_range) >= sphere) && (sphere > to_mer)) {
            if (cylslope_t == 0) {
                max_cyl = to_cyl;
                min_cyl = Math.abs(sphere-to_mer);
            }
        } else if (to_mer >= sphere && sphere >= (from_mer+cyl_range)) {
            max_cyl = to_cyl;
            min_cyl = from_cyl;
        } else if (((from_mer+cyl_range) > sphere) && (sphere >= from_mer)) {
            if (cylslope_f != 0) {
                max_cyl = to_cyl;
                min_cyl = from_cyl;
            } else {
                max_cyl = Math.abs(from_mer-sphere);
                min_cyl = from_cyl;
            }
        }
    }
    var innerHTML_max_cyl = parseFloat(document.getElementById('max_range_' + id).innerHTML);
    var innerHTML_min_cyl = parseFloat(document.getElementById('min_range_' + id).innerHTML);
    if (cyl_prefix == "positive") {
        if ((max_cyl != "notset") && (max_cyl > innerHTML_max_cyl)) {
            document.getElementById('max_range_' + id).innerHTML = max_cyl.toFixed(2);
        }
    } else {
        if (min_cyl != "notset") {
            min_cyl = min_cyl*(-1);
            if (min_cyl > innerHTML_max_cyl) {
                document.getElementById('max_range_' + id).innerHTML = min_cyl.toFixed(2);
            }
        }
    }
    if (cyl_prefix == "positive") {
        if ((min_cyl != "notset") && (min_cyl < innerHTML_min_cyl)) {
            document.getElementById('min_range_' + id).innerHTML = min_cyl.toFixed(2);
        }
    } else {
        if (max_cyl != "notset") {
            max_cyl = max_cyl*(-1);
            if (max_cyl < innerHTML_min_cyl) {
                document.getElementById('min_range_' + id).innerHTML = max_cyl.toFixed(2);
            }
        }
    }
}

function focusThis(id) {
    document.getElementById(id).focus();
    document.getElementById(id).select();
}

function selectPrism(value, side){
    document.getElementById('prism_none_image_' + side).src = "/.file/option.gif";
    document.getElementById('prism_selected_image_' + side).src = "/.file/option.gif";
    if (value == '0') { 
        document.getElementById('prism_none_image_' + side).src = "/.file/option_o.gif";
    } else {
        document.getElementById('prism_selected_image_' + side).src = "/.file/option_o.gif";
    }
    document.getElementById('prism_selected_' + side).value = value;
}

function selectExtra(input_type, side) {
    document.getElementById('extra_none_image_' + side).src = "/.file/option.gif";
    document.getElementById('extra_middle_image_' + side).src = "/.file/option.gif";
    document.getElementById('extra_border_image_' + side).src = "/.file/option.gif";
    document.getElementById('extra_' + input_type + '_image_' + side).src = "/.file/option_o.gif";
    document.getElementById('extra_selected_' + side).value = input_type;
}

function sidecopy() {
    if (document.getElementById('correction_right_basevalues_sphere')) {
        document.getElementById('correction_left_basevalues_sphere').value = document.getElementById('correction_right_basevalues_sphere').value;
    }
    if (document.getElementById('correction_right_basevalues_cylinder')) {
        document.getElementById('correction_left_basevalues_cylinder').value = document.getElementById('correction_right_basevalues_cylinder').value;
    }
    if (document.getElementById('correction_right_basevalues_axis')) {
        document.getElementById('correction_left_basevalues_axis').value = document.getElementById('correction_right_basevalues_axis').value;
    }
    if (document.getElementById('correction_right_basevalues_addition')) {
        document.getElementById('correction_left_basevalues_addition').value = document.getElementById('correction_right_basevalues_addition').value;
    }
    if ((document.getElementById('correction_right_basevalues_prism1')) && (document.getElementById('correction_left_basevalues_prism1'))) {
        document.getElementById('correction_left_basevalues_prism1').value = document.getElementById('correction_right_basevalues_prism1').value;
        focusThis('correction_left_basevalues_prism1');
        selectPrism('1', 'left');
    }
    if ((document.getElementById('correction_right_basevalues_prism2')) && (document.getElementById('correction_left_basevalues_prism2'))) {
        document.getElementById('correction_left_basevalues_prism2').value = document.getElementById('correction_right_basevalues_prism2').value;
        focusThis('correction_left_basevalues_prism2');
        selectPrism('2', 'left');
    }
    if ((document.getElementById('correction_right_basevalues_base1')) && (document.getElementById('correction_left_basevalues_base1'))) {
        document.getElementById('correction_left_basevalues_base1').value = document.getElementById('correction_right_basevalues_base1').value;
    }
    if ((document.getElementById('correction_right_basevalues_base2')) && (document.getElementById('correction_left_basevalues_base2'))) {
        document.getElementById('correction_left_basevalues_base2').value = document.getElementById('correction_right_basevalues_base2').value;
    }
    document.forms[0].diameter_right_button.value = '6570';
    document.forms[0].submit();
}

function correction_pricebar_update(url, side) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Customer Request Error: Write Customer Data');
        alertInhalt = '0';
        return false;
    } else {      
        //alert(url);
        alertInhalt = '1';
    }
    http_request.open('POST', url, true);
    if (side == "right") {
        http_request.onreadystatechange = right_pricebarupdate_response;
    } else if (side == "left") {
        http_request.onreadystatechange = left_pricebarupdate_response;
    }
    http_request.send(null);       
}

function right_pricebarupdate_response() {
    if (http_request.readyState==4 && http_request.status==200) {
        var restonseString = http_request.responseText;
        var prices_Array = restonseString.split("#");
        document.getElementById('right_lens_totalprice_span').innerHTML = prices_Array[0];
        document.getElementById('right_color_totalprice_span').innerHTML = prices_Array[1];
        document.getElementById('right_coating_totalprice_span').innerHTML = prices_Array[2];
        document.getElementById('right_extra_totalprice_span').innerHTML = prices_Array[3];
        document.getElementById('right_side_totalprice_span').innerHTML = prices_Array[4];
    }
}

function left_pricebarupdate_response() {
    if (http_request.readyState==4 && http_request.status==200) {
        var restonseString = http_request.responseText;
        var prices_Array = restonseString.split("#");
        document.getElementById('left_lens_totalprice_span').innerHTML = prices_Array[0];
        document.getElementById('left_color_totalprice_span').innerHTML = prices_Array[1];
        document.getElementById('left_coating_totalprice_span').innerHTML = prices_Array[2];
        document.getElementById('left_extra_totalprice_span').innerHTML = prices_Array[3];
        document.getElementById('left_side_totalprice_span').innerHTML = prices_Array[4];
    }
}

function send_basevalue_then_pricedisplay_update(url) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Customer Request Error: Write Customer Data');
        alertInhalt = '0';
        return false;
    } else {      
        //alert(url);
        alertInhalt = '1';
    }
    http_request.open('POST', url, true);
    http_request.onreadystatechange = run_pricebarupdate_response;
    http_request.send(null);       
}

function run_pricebarupdate_response() {
    if (http_request.readyState==4 && http_request.status==200) {
        var side = http_request.responseText;
        correction_pricebar_update('/Correction/set_customerinput.php?pricedisplayupdate='+side, side);
    }
}





