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() == "res_" || 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;
                    }
                }
            }
            changeType();
        }
    }
}

function linkToPage() {
var pathName = window.location.pathname;
        
    if (pathName.substr(0,11) == "application") {
        pathName = "/aspect_calc_mobile.xml";
    }
    
    var gettype = document.getElementById('calc').options[document.getElementById('calc').selectedIndex].id;
    
    var page_url= "http://www.digitalrebellion.com" + pathName;
    page_url += "?calc=" + gettype;
    
    switch (gettype) {
        case 'aspect':
            page_url += "&res_w=" + document.getElementById('res_w').value;
            page_url += "&res_h=" + document.getElementById('res_h').value;
            break;
        case 'width':
            page_url += '&cbo_aspect=' + document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id;
            page_url += "&res_h2=" + document.getElementById('res_h2').value;
            
            if (document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id == 'custom_aspect') page_url += "&txt_custom_aspect=" + document.getElementById('txt_custom_aspect').value;
            break;
        case 'height':
            page_url += '&cbo_aspect=' + document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id;
            page_url += "&res_w2=" + document.getElementById('res_w2').value;
            
            if (document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id == 'custom_aspect') page_url += "&txt_custom_aspect=" + document.getElementById('txt_custom_aspect').value;
            break;
    }
    
    window.location.href = page_url;
}

function calculate(gettype, res_w, res_h, aspect_ratio) {
    res_w = parseInt(res_w);
    res_h = parseInt(res_h);
    
    var sub1 = '';
    var sub2 = '';
    
    switch (gettype) {
        case 'aspect':
                    var aspect_full = (res_w / res_h);
                    var vFinal = Math.round((aspect_full) * 100) / 100;
                    var tPixels = res_w * res_h;
                    
                    switch (vFinal) {
                        case 1.33:
                            sub1 = "4:3";
                            break;
                        case 1.37:
                            sub2 = "Academy ratio";
                            break;
                        case 1.43:
                            sub2 = "IMAX format";
                            break;
                        case 1.5:
                            sub1 = "3:2";
                            break;
                        case 1.56:
                            sub1 = "14:9";
                            break;
                        case 1.66:
                            sub2 = "Super16 format";
                            break;
                        case 1.78:
                            sub1 = "16:9";
                            sub2 = "Widescreen video";
                            break;
                        case 1.85:
                            sub2 = "35mm standard";
                            break;
                        case 2.2:
                            sub2 = "70mm standard";
                            break;
                        case 2.35:
                            sub2 = "35mm anamorphic pre-1970";
                            break;
                        case 2.39:
                            sub2 = "35mm anamorphic post-1970";
                            break;
                    }
                    
                    vFinal +=":1";
                    if (sub1.length > 0) vFinal += " (" + sub1 + ")";
                    if (sub2.length > 0) vFinal += "<br /><font size=\"2\"><b>" + sub2 + "</b></font>";
                    document.getElementById('output').innerHTML = "Aspect ratio: " + vFinal;
                    document.getElementById('morestats').innerHTML = "Unrounded aspect ratio: " + aspect_full;

                    // Copy settings to other tabs
                    document.getElementById('res_h2').value = res_h;
                    document.getElementById('res_w2').value = res_w;
                    document.getElementById('txt_custom_aspect').value = aspect_full;
                    document.getElementById('cbo_aspect').selectedIndex = document.getElementById('custom_aspect').index;
                    break;
        case 'height':
                    if (aspect_ratio == 'a133') {
                        aspect_ratio = (4/3);
                    } else if (aspect_ratio == 'a156') {
                        aspect_ratio = (14/9);
                    } else if (aspect_ratio == 'a178') {
                        aspect_ratio = (16/9);
                    } else if (aspect_ratio.substr(0,1) == 'a') {
                        aspect_ratio = (parseInt(aspect_ratio.substr(1)) / 100);
                    } else { // Custom
                        aspect_ratio = document.getElementById('txt_custom_aspect').value;
                    }
                    
                    vFinal = Math.round(res_w / aspect_ratio);
                    var tPixels = res_w * vFinal;

                    document.getElementById('output').innerHTML = "Height: " + vFinal;
                    document.getElementById('morestats').innerHTML = "Height to nearest 16th: " + roundTo16(vFinal);

                    // Copy settings to other tabs
                    document.getElementById('res_h').value = vFinal;
                    document.getElementById('res_h2').value = vFinal;
                    document.getElementById('res_w').value = res_w;
                    break;
        case 'width':
                    if (aspect_ratio == 'a133') {
                        aspect_ratio = (4/3);
                    } else if (aspect_ratio == 'a156') {
                        aspect_ratio = (14/9);
                    } else if (aspect_ratio == 'a178') {
                        aspect_ratio = (16/9);
                    } else if (aspect_ratio.substr(0,1) == 'a') {
                        aspect_ratio = (parseInt(aspect_ratio.substr(1)) / 100);
                    } else { // Custom
                        aspect_ratio = document.getElementById('txt_custom_aspect').value;
                    }
                    
                    vFinal = Math.round(res_h * aspect_ratio);
                    var tPixels = res_h * vFinal;

                    document.getElementById('output').innerHTML = "Width: " + vFinal;
                    document.getElementById('morestats').innerHTML = "Width to nearest 16th: " + roundTo16(vFinal);
                    
                    document.getElementById('res_w').value = vFinal;
                    document.getElementById('res_w2').value = vFinal;
                    document.getElementById('res_h').value = res_h;
                    break;
    }
    
    document.getElementById('output').innerHTML += '<br /><font size="2"><b>' + formatNum(tPixels) + ' pixels</b></font>';
}     

function formatNum(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function recalculate() {
    var gettype = document.getElementById('calc').options[document.getElementById('calc').selectedIndex].id;
    var getaspect = document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id
    
    switch (gettype) {
        case "aspect":
            calculate(gettype, document.getElementById('res_w').value, document.getElementById('res_h').value, getaspect);
            break;
        case "height":
            calculate(gettype, document.getElementById('res_w2').value, -1, getaspect);
            break;
        case "width":
            calculate(gettype, -1, document.getElementById('res_h2').value, getaspect);
            break;
    }
}

function changeType() {
    var aspect_id = document.getElementById('calc').options[document.getElementById('calc').selectedIndex].id;                                     
    switch (aspect_id) {
        case "aspect":
            document.getElementById('div_aspect').className = 'hide';
            document.getElementById('div_width').className = 'hide';
            document.getElementById('div_height').className = 'hide';
            document.getElementById('div_res').className = 'row';
            break;
        case "height":
            document.getElementById('div_aspect').className = 'row';
            document.getElementById('div_width').className = 'row';
            document.getElementById('div_height').className = 'hide';
            document.getElementById('div_res').className = 'hide';
            break;
        case "width":
            document.getElementById('div_aspect').className = 'row';
            document.getElementById('div_height').className = 'row';
            document.getElementById('div_width').className = 'hide';
            document.getElementById('div_res').className = 'hide';
            break;
    }
    changeAspect();
    recalculate();
}

function changePreset() {
    var index_selected = document.getElementById('res_presets1').selectedIndex;
    
    switch (document.getElementById('res_presets1').options[index_selected].id) {
        case "ntsc": 
            document.getElementById('res_w').value = 640;
            document.getElementById('res_h').value = 480;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "dv_ntsc": 
            document.getElementById('res_w').value = 720;
            document.getElementById('res_h').value = 480;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a150').index;
            break;
        case "dv_pal": 
            document.getElementById('res_w').value = 720;
            document.getElementById('res_h').value = 576;
            break;
        case "ntsc_601": 
            document.getElementById('res_w').value = 720;
            document.getElementById('res_h').value = 486;
            break;
        case "ntsc_601_sq": 
            document.getElementById('res_w').value = 720;
            document.getElementById('res_h').value = 540;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "pal_601_sq": 
            document.getElementById('res_w').value = 768;
            document.getElementById('res_h').value = 576;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "hdtv_720": 
            document.getElementById('res_w').value = 1280;
            document.getElementById('res_h').value = 720;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "hdtv_1080": 
            document.getElementById('res_w').value = 1920;
            document.getElementById('res_h').value = 1080;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "hdv_720": 
            document.getElementById('res_w').value = 1280;
            document.getElementById('res_h').value = 720;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "hdv_1080": 
            document.getElementById('res_w').value = 1440;
            document.getElementById('res_h').value = 1080;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "acad_2k_185": 
            document.getElementById('res_w').value = 1828;
            document.getElementById('res_h').value = 988;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a185').index;
            break;
        case "acad_2k_178": 
            document.getElementById('res_w').value = 1828;
            document.getElementById('res_h').value = 1028;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "acad_2k_166": 
            document.getElementById('res_w').value = 1828;
            document.getElementById('res_h').value = 1102;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a166').index;
            break;
        case "acad_2k": 
            document.getElementById('res_w').value = 1828;
            document.getElementById('res_h').value = 1332;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a137').index;
            break;
        case "acad_2k_scope": 
            document.getElementById('res_w').value = 1828;
            document.getElementById('res_h').value = 1556;
            break;
        case "super_2k_35": 
            document.getElementById('res_w').value = 2048;
            document.getElementById('res_h').value = 872;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a235').index;
            break;
        case "super_2k_185": 
            document.getElementById('res_w').value = 2048;
            document.getElementById('res_h').value = 1107;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a185').index;
            break;
        case "super_2k_178": 
            document.getElementById('res_w').value = 2048;
            document.getElementById('res_h').value = 1152;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "super_2k_166": 
            document.getElementById('res_w').value = 2048;
            document.getElementById('res_h').value = 1234;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a166').index;
            break;
        case "full_2k": 
            document.getElementById('res_w').value = 2048;
            document.getElementById('res_h').value = 1536;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "acad_4k_185": 
            document.getElementById('res_w').value = 3656;
            document.getElementById('res_h').value = 1976;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a185').index;
            break;
        case "acad_4k_178": 
            document.getElementById('res_w').value = 3656;
            document.getElementById('res_h').value = 2056;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "acad_4k_166": 
            document.getElementById('res_w').value = 3656;
            document.getElementById('res_h').value = 2204;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a166').index;
            break;
        case "acad_4k": 
            document.getElementById('res_w').value = 3656;
            document.getElementById('res_h').value = 2664;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a137').index;
            break;
        case "acad_4k_scope": 
            document.getElementById('res_w').value = 3656;
            document.getElementById('res_h').value = 3112;
            break;
        case "super_4k_35": 
            document.getElementById('res_w').value = 4096;
            document.getElementById('res_h').value = 1744;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a235').index;
            break;
        case "super_4k_185": 
            document.getElementById('res_w').value = 4096;
            document.getElementById('res_h').value = 2214;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a185').index;
            break;
        case "super_4k_178": 
            document.getElementById('res_w').value = 4096;
            document.getElementById('res_h').value = 2304;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
        case "super_4k_166": 
            document.getElementById('res_w').value = 4096;
            document.getElementById('res_h').value = 2468;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a166').index;
            break;
        case "full_4k": 
            document.getElementById('res_w').value = 4096;
            document.getElementById('res_h').value = 3072;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a133').index;
            break;
        case "red_2540": 
            document.getElementById('res_w').value = 4520;
            document.getElementById('res_h').value = 2540;
            document.getElementById('cbo_aspect').selectedIndex = document.getElementById('a178').index;
            break;
    }

    document.getElementById('res_h2').value = document.getElementById('res_h').value;
    document.getElementById('res_w2').value = document.getElementById('res_w').value;

    changeAspect();
    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 changeAspect() {
    if (document.getElementById('cbo_aspect').options[document.getElementById('cbo_aspect').selectedIndex].id == 'custom_aspect' && document.getElementById('div_aspect').className == 'row') {
        document.getElementById('div_custom_aspect').className = 'row';
    } else {
        document.getElementById('div_custom_aspect').className = 'hide';
    }
    
    recalculate();
}

function showHideMoreStats() {
    var e_morestats = document.getElementById('morestats');
    var e_morestatslabel = document.getElementById('morestatslabel');
    
    if (e_morestats.className == 'hide') {
        e_morestats.className = 'stats';
        e_morestatslabel.innerHTML = '&#60; Fewer stats';
    } else {
        e_morestats.className = 'hide';
        e_morestatslabel.innerHTML = 'More stats &#62;';
    }
}

function roundTo16(num) {
    return Math.round(num/16)*16
}