var first_time = true;
var numbering = true;

// Removes leading whitespaces
function LTrim(value) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

// Removes ending whitespaces
function RTrim(value) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

// Removes leading and ending whitespaces
function trim(value) {
	return LTrim(RTrim(value));	
}

function htmlize(value) {
    value = value.replace("<", "&lt;");
    value = value.replace(">", "&gt;");
    return value;
}

function toggle_numbering() {
    if(numbering == false) {
	set_line_numbers();
	numbering = true;
    } else {
	var alldivs =  document.getElementsByTagName("div");
	
	for(var i = 0; i < alldivs.length; i++) {
            if(alldivs[i].className == "code") {
		clearlines(alldivs[i]);
            }
	}
	
	numbering = false;
    }
    first_time = false;
}

function numberlines(block) {
    var html = htmlize(trim(block.innerHTML));
    var lines = html.split("\n");

    // Insert the toggle line if necessary.
    if(first_time == true) {
	block.innerHTML = '<a onclick="toggle_numbering();">Désactiver numérotation</a>\n';
    } else {
	block.innerHTML = "";
    }

    var completion = "0";
    var offset;
    
    if(first_time == true) {
	offset = 1;
    } else {
	offset = 0;
    }

    for(var i = 0; i < lines.length; i++) {
	if(first_time == false && i == 0) {
	    block.innerHTML = '<a onclick="toggle_numbering();">Désactiver numérotation</a>\n';
	    continue;
	}
        if(i + offset > 9) {
	    completion = "";
        }

        block.innerHTML += '<span class="num">' + completion + (i + offset) + ". </span>" + lines[i];

	if(i < lines.length - 1) {
	    block.innerHTML += "\n";
	}
    }
}

function clearlines(block) {
    var html = htmlize(trim(block.innerHTML));
    var lines = html.split("\n");

    // Insert the toggle line if necessary.
    if(first_time == true) {
	block.innerHTML = '<a onclick="toggle_numbering();">Activer numérotation</a>\n';
    } else {
	block.innerHTML = "";
    }

    for(var i = 0; i < lines.length; i++) {
	if(first_time == false && i == 0) {
	    block.innerHTML = '<a onclick="toggle_numbering();">Activer numérotation</a>\n';
	    continue;
	}
        block.innerHTML += lines[i].substr(29);	
	if(i < lines.length - 1) {
	    block.innerHTML += "\n";
	}
    }
}

function set_line_numbers() {
    var alldivs =  document.getElementsByTagName("div");
    
    for(var i = 0; i < alldivs.length; i++) {
        if(alldivs[i].className == "code") {
            numberlines(alldivs[i]);
        }
    }
    first_time = false;
}

