var rePractice;

$(function () {
    rePractice = new RegexpPractice();
    
    if (location.search.match(/debug/)) {
        // パラメータにdebugが含まれていた場合デバッグモードで動作
        rePractice.isDebug = true;
    }
    
    // 確認ボタンクリック時の動作
    $(".check").click( function () {
        rePractice.check(this);
    });
    
    // 回答入力時の動作
    $(".inputAnswer").keydown( function (e) {
        rePractice.inputAnswer(this, e);
    });
    
    // 回答例ボタンクリック時の動作
    $(".exCheck").click( function () {
        rePractice.exampleAnswerShow(this);
    });
    
    // 目次作成
    var contents = $("<ul>");
    $("h2").each(function (i) {
        var title = $(this).text();
        var href = $(this).find("a").attr("name");
        // IE7で上手く行かない
        //var li = $("<li>").append(
        //    $("<a>").attr("href", "#" + href).text(title)
        //);
        var li = $("<li>").html(
            '<a href="#' + href + '">&raquo; ' + title + '</a>'
        );
        contents.append(li);
    });
    $("#contents").append(contents);
});

function RegexpPractice() {
    this.isDebug = false;
}

RegexpPractice.prototype.inputAnswer = function (self, e) {
    var code = e.keyCode;
    if (code != 13) {
        // enterキー以外の入力の場合は何もしない
        return;
    }
    
    // 確認ボタンのelementを取得
    var check = $(self).parent().find("input").get(0);
    
    // 確認ボタンクリックの動作を行う
    this.check(check);
}

RegexpPractice.prototype.check = function (self) {
    var input = $(self).parent().parent().parent().find(".input").val();
    var output = $(self).parent().parent().parent().find(".output").val();
    var answer = $(self).parent().find("input").val();

    $(self).parent().parent().find(".result").val('');
    
    if (answer == '') {
        alert('回答を入力して下さい。');
        return false;
    }
    
    var regexp;
    try {
        regexp = new RegExp(answer);
    } catch (e) {
        // 正規表現として不正な文字列だった
        return false;
    }
    var lines = input.split("\n");
    var resultData = '';
    
    for (var i = 0; i < lines.length; i++) {
        var line = lines[i];
        if (line.match(regexp)) {
            resultData += lines[i] + "\n";
        }
    }
    $(self).parent().parent().find(".result").val(resultData);
    
    if (output == resultData) {
        alert('正解です！');
    }
}

RegexpPractice.prototype.exampleAnswerShow = function (self) {
    var answer = $(self).parent().find(".exResult").text();

    alert(answer);
}
