function querystring_calc() {
    var q = window.location.search.substr(1);
        
    if (q.length > 1) {
        var spl = q.split("&");
        
        for (var x = 0; x < spl.length; x++) {
            var spl2 = spl[x].split("=");

            if (spl2.length == 2) {

                if (spl2[0].length > 0 && spl2[1].length > 0) {
                    
                    if (spl2[0].substr(0,4).toLowerCase() == "txt_") {
                        document.getElementById(spl2[0].toLowerCase()).value = spl2[1];
                    } else {
                        document.getElementById(spl2[0].toLowerCase()).selectedIndex = document.getElementById(spl2[1].toLowerCase()).index;
                    }
                }
            }
        }
    }
    changeSensor();
}

function linkToPage() {
var pathName = window.location.pathname;
        
    if (pathName.substr(0,11) == "application") {
        pathName = "/dof_calc_mobile.xml";
    }
    
    
    var page_url= "http://www.digitalrebellion.com" + pathName;
    page_url += '?cbo_type=' + document.getElementById('cbo_type').options[document.getElementById('cbo_type').selectedIndex].id;
    page_url += '&cbo_aperture=' + document.getElementById('cbo_aperture').options[document.getElementById('cbo_aperture').selectedIndex].id;
    page_url += "&txt_focal=" + document.getElementById('txt_focal').value;
    page_url += "&txt_dist=" + document.getElementById('txt_dist').value;
    page_url += '&cbo_dist_type=' + document.getElementById('cbo_dist_type').options[document.getElementById('cbo_dist_type').selectedIndex].id;
    page_url += '&txt_coc=' + document.getElementById('txt_coc').value;

    window.location.href = page_url;
}

function calculate(sensortype, aperture, focal, distance, distancetype) {
    if (focal > 0 && distance > 0) {
    aperture = parseInt(aperture.substr(1)) / 10; // Strip out "f" and convert to aperture
    
    if (distancetype == "feet") distance = distance * 0.3048; // Convert to m
    
    distance = parseFloat(distance) * 1000;
    
    var coc = 0; // Circle of confusion
    
    switch (sensortype) {
        case 's35mm':
            coc = 0.0254;
            break;
        case 'ss16mm':
            coc = 0.0127;
            break;
        case 's16mm':
            coc = 0.01524;
            break;
        case 's65mm':
            coc = 0.03556;
            break;
        case 's13':
            coc = 0.011;
            break;
        case 's14':
            coc = 0.008;
            break;
        case 's23':
            coc = 0.021;
            break;
        case 's12':
            coc = 0.016;
            break;
        case 'customcoc':
            coc = document.getElementById('txt_coc').value;
            break;
    }
    
    if (coc > 0) {
    var hyperfocal = (focal * focal) / (aperture * coc);
    var dof1 = (hyperfocal * distance) / (hyperfocal + (distance - focal));
    var dof2 = (hyperfocal * distance) / (hyperfocal - (distance - focal));
    
    // Convert back to feet if necessary
    if (distancetype == "feet") {
        dof1 = dof1 * 3.280839895013;
        dof2 = dof2 * 3.280839895013;
    }
    
    var totaldof = dof2 - dof1;
    
    dof1 = (Math.round(dof1) / 1000);
    
    if (dof2 < 0) {
        dof2 = "Infinity";
        totaldof = "Infinite";
    } else {
        dof2 = (Math.round(dof2) / 1000) + " " + distancetype;
        totaldof = (Math.round(totaldof) / 1000) + " " + distancetype;
    }
    
    var vFinal = "Near distance: " + dof1 + " " + distancetype + "<br />Far distance: " + dof2 + "<br />Total depth of field: " + totaldof;
    
    document.getElementById('output').innerHTML = vFinal;
    }
}
}     

function recalculate() {
    var sensortype = document.getElementById('cbo_type').options[document.getElementById('cbo_type').selectedIndex].id;
    var aperture = document.getElementById('cbo_aperture').options[document.getElementById('cbo_aperture').selectedIndex].id;
    var focal = document.getElementById('txt_focal').value;
    var distance = document.getElementById('txt_dist').value;
    var distancetype = document.getElementById('cbo_dist_type').options[document.getElementById('cbo_dist_type').selectedIndex].id;
    
    calculate(sensortype, aperture, focal, distance, distancetype);
}

function changePreset() {
    var index_selected = document.getElementById('cbo_preset').options[document.getElementById('cbo_preset').selectedIndex].value;
    
    index_selected = index_selected.substr(1);
    
    document.getElementById('cbo_type').selectedIndex = document.getElementById('s' + index_selected).index;

    recalculate();
}

function IsNumeric(sText)
{
    var ValidChars = "0123456789.";
    var IsNumber=true;
    var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
}
   
function validate_text(getobj) {
    var gettext = document.getElementById(getobj).value;
    
    if (IsNumeric(gettext) && gettext.length > 0) {
        resetTextBox(getobj);
        recalculate();
        document.getElementById(getobj).focus();
    } else {
        document.getElementById(getobj).className="textbox_red";
        document.getElementById(getobj).focus();
    }
}

function resetTextBox(getobj) {
    document.getElementById(getobj).className="textbox_black";
    document.getElementById(getobj).focus();
}

function changeSensor() {
    var sensortype = document.getElementById('cbo_type').options[document.getElementById('cbo_type').selectedIndex].id;

    if (sensortype == 'customcoc') {
        document.getElementById('div_coc').className = 'row';
    } else {
        document.getElementById('div_coc').className = 'hide';
    }
    
    recalculate();
}