/* Autore: Marco Molinari - 2007
 *    www.marcomolinari.it
*/

var sold_num = 40;
var running = false;
var highlighting = true;
var iteration = 0;
var soldiers = '';
var hl = new Array();
var t = '';

function fillSoldiers(num) {
    var sold = new Array();
    for (i = 0; i < num; i++) {
        sold.push('-');
        hl.push(0);
    }
    return sold;
}

function showSoldiers(sold) {
    var tmp = '';
    for (i = 0; i < sold.length; i++) {
        cls = 'nohl';
        if (hl[i] == 'l') {
            cls = 'hll';
        } else if (hl[i] == 'r'){
            cls = 'hlr';
        }
        tmp += '<span class="' + cls + '">' + sold[i] + '</span>';
    }
    var oDiv = document.getElementById('mil');
    oDiv.innerHTML = tmp + '<br>';
    oDiv = document.getElementById('cnt');
    oDiv.innerHTML = iteration;
}

function shuffleSoldiers(sold) {
    var tmp = '';
    for (i = 0; i < sold.length; i++) {
        var rnd = Math.floor(Math.random()*11);
        if (rnd < 5) {
            sold[i] = '>';
        } else {
            sold[i] = '<';
        }
        tmp += sold[i];
    }
    return sold;
}

function countFacingSoldiers(sold) {
    var count = 0;
    for (i = 0; i < sold.length; i++) {
        if (sold[i] == '>') {
            if ((i < (sold.length - 1)) && sold[i + 1] == '<') {
               count++;
               i++;
            }
        }
    }
    return count;
}

function flipFacingSoldiers(sold) {
    var prevSide;
    for (i = 0; i < sold.length; i++) {
        var firstSoldierSide = sold[i];
        var secondSoldierSide = sold[i + 1];
        if ((firstSoldierSide == '>') && (secondSoldierSide == '<')) {
            sold[i] = "<";
            sold[i + 1] = ">";
            hl[i] = hl[i+1] = 0;
            i++;
        }
    }
    return sold;
}

function highlightFacingSoldiers(sold) {
    for (i = 0; i < sold.length; i++) {
        var firstSoldierSide = sold[i];
        var secondSoldierSide = sold[i + 1];
        if ((firstSoldierSide == '>') && (secondSoldierSide == '<')) {
            hl[i] = 'l';
            hl[i+1] = 'r';
            i++;
        }
    }
}

function doIt() {
    if (!running) {
        // disable start button
        var oDiv = document.getElementById('btn');
        oDiv.disabled= true;
        running = !running;
        // shuffle soldiers
        soldiers = shuffleSoldiers(soldiers);
        showSoldiers(soldiers);
        t = setTimeout('doIt()', 700);
        return;
    }
    if (highlighting) {
        highlightFacingSoldiers(soldiers);
        showSoldiers(soldiers);
        highlighting = false;
    } else {
        iteration++;
        soldiers = flipFacingSoldiers(soldiers);
        showSoldiers(soldiers);
        highlighting = true;
    }
    facing = countFacingSoldiers(soldiers);
    if (facing > 0) {
        t = setTimeout('doIt()', 700);
    } else {
        var oDiv = document.getElementById('mil');
        oDiv.style.backgroundColor = 'rgb(150, 255, 150)';
        running = false;
        // enable reset button
        oDiv = document.getElementById('btn');
        oDiv.innerHTML = 'reset';
        oDiv.disabled = false;
        oDiv.onclick= init;
    }
}

function init() {
    var oDiv = document.getElementById('btn');
    oDiv.innerHTML = 'start';
    oDiv.onclick= doIt;
    oDiv = document.getElementById('mil');
    oDiv.style.backgroundColor = 'rgb(255, 255, 255)';
    soldiers = fillSoldiers(sold_num);
    iteration = 0;
    showSoldiers(soldiers);
}
