/**
 * @author gsmith
 */

// When the user changes a textarea, update the result
function update() {

    // input
    var regex = document.getElementById("regex").value;
    var text = document.getElementById("text").value;
    
    // regex arguments
    var args = "";
    if (document.getElementById("m").checked) {
        args += "m";
    }
    if (document.getElementById("i").checked) {
        args += "i";
    }
    if (document.getElementById("g").checked) {
        args += "g";
    }
            
    // create and show the result
    var result;
    var resultArea = document.getElementsByName("matchArea")[0];
    try {
        if (document.getElementById("replace").checked) {
            result = text.replace(new RegExp(regex, args), document.getElementById("replacement").value);
        }
        else { // replace
            result = text.match(new RegExp(regex, args));
        }
        resultArea.style.color = "black";
    }
    // if regex impl provides a useful error on exception, display it
    catch(e) {
        result = e.message;
        resultArea.style.color = "red";
    }
    // message for no matches to valid regex
    if (result === null) {
        result = "No matches";
        resultArea.style.color = "#8B23BF";
    }
    resultArea.value = result;
}

// resizing textareas based on window size. it's a pain since percents don't work right
function resize() {
    var screenHeight;
    var regex, text, replacement, match; // heights for text areas
    
    var extraHeightForDocument = 10 + 5; // body margin
    var extraHeightPerTextarea = 22 + 5 + 1 + 1; // header, margin, padding
    
    // get screenHeight based on browser details
    if (window.innerHeight) {
        screenHeight = window.innerHeight;
    }
    else {
        screenHeight = document.documentElement.clientHeight;
    }
    
    // replace mode resize
    if (document.getElementById("replace").checked) {
        regex = Math.round(screenHeight / 5) - extraHeightPerTextarea;
        text = Math.round(screenHeight / 2.5) - extraHeightPerTextarea;
        replacement = Math.round(screenHeight / 5) - extraHeightPerTextarea;
        match = screenHeight - regex - text - replacement - extraHeightForDocument - (extraHeightPerTextarea * 4);
        document.getElementById("regex").style.height = regex + "px";
        document.getElementById("text").style.height = text + "px";
        document.getElementById("replacement").style.height = replacement + "px";
        document.getElementsByName("matchArea")[0].style.height = match + "px";
    }
    // match mode resize
    else {
        regex = Math.round(screenHeight / 4) - extraHeightPerTextarea;
        text = Math.round(screenHeight / 2) - extraHeightPerTextarea;
        match = screenHeight - regex - text - extraHeightForDocument - (extraHeightPerTextarea * 3);
        document.getElementById("regex").style.height = regex + "px";
        document.getElementById("text").style.height = text + "px";
        document.getElementsByName("matchArea")[0].style.height = match + "px";
    }
}

// switch between replace and match modes
function typeChange() {
    var replacementContainer = document.getElementById("replacementContainer");
    if (document.getElementById("replace").checked) {
        replacementContainer.style.display = "block";
    }
    else {
        replacementContainer.style.display = "none";
    }
    resize();
}

