// JavaScript Document

function validateGroup(input) {
    if (!input.value.match(/^[0-9]{0,2}$/)) {
        $(input).addClass("invalidField");
        return false;
    }
    $(input).removeClass("invalidField");
    return true;
}

function validateClass(input) {
    if (!input.value.match(/^[a-zA-Z0-9-]{0,9}$/)) {
        $(input).addClass("invalidField");
        return false;
    }
    $(input).removeClass("invalidField");
    return true;    
}

function validateData() {
    var rows = $("tbody tr");

    var valid = true;

    rows.each(function () {
        var inputs = this.getElementsByTagName("input");
        valid = validateClass(inputs[0]) && valid;
        valid = validateGroup(inputs[1]) && valid;
        valid = validateGroup(inputs[2]) && valid;
    });
    
    return valid;
}

function addRow() {
    $("tbody").append('<tr><td class="sigle"><input type="text" /></td><td class="groupeTheorie"><input type="text" /></td><td class="groupeLabo"><input type="text" /></td></tr>');
}

function getData() {
    var classes = { "sigle": [], "groupeTheorique": [], "groupeLabo": [] };

    var rows = $("tbody tr");

    rows.each(function (i) {
        var inputs = this.getElementsByTagName("input");
        if ((inputs[0].value && inputs[1].value) || (inputs[0].value && inputs[2].value)) {
            classes.sigle.push(inputs[0].value);
            classes.groupeTheorique.push(inputs[1].value);
            classes.groupeLabo.push(inputs[2].value);
        }
    });

    return classes;
}

function manageResponse(response) {
    $("#response p").fadeOut(0);    
    if (response != "") {
        //Idealement faudrait utiliser un parser, mais il est tard et je veux ça marche alors EVAL
        var responseObject = eval('(' + response + ')');

        $("#responseURL").fadeIn(600);
        
        $("#url").text(window.location + responseObject.URL);
        $("a:has(#url)").attr("href", responseObject.URL);

        //var rows = $("tbody tr");
        if (responseObject.erreurs) {
            for (var i = 0; i < responseObject.siglesInvalides.length; ++i) {
                $("tbody tr:eq(" + responseObject.siglesInvalides[i] + ") input:eq(0)").addClass("invalidField");
            }
            for (var i = 0; i < responseObject.groupesTheoInvalides.length; ++i) {
                $("tbody tr:eq(" + responseObject.groupesTheoInvalides[i] + ") input:eq(1)").addClass("invalidField");
            }
            for (var i = 0; i < responseObject.groupesLaboInvalides.length; ++i) {
                $("tbody tr:eq(" + responseObject.groupesLaboInvalides[i] + ") input:eq(2)").addClass("invalidField");
            }
        }
    }
}

function signalError(text){
    
}

function sendRequest() {
    if (!validateData())
        return false;

    var datas = getData()
    $("#response, #response-cap, #response-end").fadeIn(800);
    $("#response p").fadeOut(0);

    if (datas.sigle.length) {
        $("#loading").fadeIn(800);
        $.post("/cal", datas, manageResponse);
    }
    else {
        $("#erreurCours").fadeIn(800);
    }
}

colors = ["#009eff", "#13e813", "#f7931e", "#f71e1e"]

$(document).ready(function () {
    $("#submit, #addRow").mouseenter(function () {
        var spans = $(this).children("span")
        if (!spans.length) {
            //Inspiré de http://dev.jquery.com/~john/ticket/fx-rewrite2/
            $(this).html(jQuery.map($(this).html().split(""), function (letter) {
                return "<span>" + letter + "</span>";
            }).join(""));
        }
        spans = $(this).children("span")
        spans.each(function (i, letter) {
            setTimeout(function (){
                $(letter).animate({ color: colors[i % 4] }, { duration: 100 }).
                animate({ color: "#fff" }, { duration: 100 });
            }, i * 50);
        });
    })
    .mousedown(function () {
        $(this).children("span").css({ "text-decoration": "underline" });
    })
    .mouseup(function () {
        $(this).children("span").css({ "text-decoration": "none" });
    })
    .mouseleave(function(){
        $(this).children("span").css({ "text-decoration": "none" });
    });
});

