// JScript source code
// Par Deepak
var SEPARATEUR_HEURE = ":";
var g_heureFin = null;
var g_rows = new Array();

function contruireRow(p_noNoble) {
    /* Obtient la date courante */
    document.getElementById('hrsDepart').value = dateToString(new Date());
    g_rows.push(parseInt(p_noNoble));

    return '<tr>' +
           '    <td>' + p_noNoble + '</td>' +
           '    <td><input type="text" id="description' + p_noNoble + '" size="42" value="Nom du village - type d\'attaque (off,noble,def)"></td> ' +
           '    <td id="heureEnvoi' + p_noNoble + '"></td>' +
           '    <td><input  type="text" onchange="updateAllRows();" id="dureeTrajet' + p_noNoble + '" size="5" value="00:00:00"></td> ' +
           '    <td id="heureArrivee' + p_noNoble + '"></td>' +
           '</tr>';
}

function onRadioHrsDebutClick() {
    document.getElementById('hrsDepart').disabled = '';
    document.getElementById('hrsArrive').disabled = 'disabled';
    updateAllRows();
}

function onRadioHrsFinClick() {
    document.getElementById('hrsDepart').disabled = 'disabled';
    document.getElementById('hrsArrive').disabled = '';
    updateAllRows();
}

function parseDate(p_stringDate) {
    var arrayDateSeparee = p_stringDate.split(SEPARATEUR_HEURE);
    var date = new Date();
    date.setHours(arrayDateSeparee[0], arrayDateSeparee[1], arrayDateSeparee[2], 0);
    return date;
}

function dateToString(p_date) {
    return p_date.getHours() + SEPARATEUR_HEURE + p_date.getMinutes() + SEPARATEUR_HEURE + p_date.getSeconds();
}

function updateAllRows() {
    g_rows.sort();
    
    for (i = 0; i < g_rows.length; ++i)
        updateRow(g_rows[i]);
}

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}


function updateRow(p_noNoble) {
    var dureTrajet = new ClHeure(document.getElementById('dureeTrajet' + p_noNoble).value);
    var heureEnvoi = null;
    var hrsArrive = null;
    
    if (getCheckedValue(document.getElementById('typeDebut')) == 'depart') {
        if (p_noNoble == 1) {
            heureEnvoi = new ClHeure(document.getElementById('hrsDepart').value);
            hrsArrive = heureEnvoi.additionnerHeure(dureTrajet);
            g_heureFin = hrsArrive;
        }
        else {
            hrsArrive = g_heureFin;
            var additionHeure = new ClHeure(parseInt(document.getElementById('nbSecondeEntreAttaque').value) * (p_noNoble - 1));
            hrsArrive = hrsArrive.additionnerHeure(additionHeure);
            heureEnvoi = hrsArrive.soustraireHeure(dureTrajet);
        }
    }
    else {
        if (p_noNoble == 1) {
            hrsArrive = new ClHeure(document.getElementById('hrsArrive').value);
            heureEnvoi = hrsArrive.soustraireHeure(dureTrajet);
            g_heureFin = hrsArrive;
        }
        else {
            hrsArrive = g_heureFin;
            var additionHeure = new ClHeure(parseInt(document.getElementById('nbSecondeEntreAttaque').value) * (p_noNoble - 1));
            hrsArrive = hrsArrive.additionnerHeure(additionHeure);
            heureEnvoi = hrsArrive.soustraireHeure(dureTrajet);
        }
    }

    document.getElementById('heureEnvoi' + p_noNoble).innerHTML = heureEnvoi.toString();
    document.getElementById('heureArrivee' + p_noNoble).innerHTML = hrsArrive.toString();
}


/* Classe Heure */

ClHeure.prototype.m_heure;
ClHeure.prototype.m_minute;
ClHeure.prototype.m_seconde;
ClHeure.prototype.m_surplusHeure;

/**
 * Constructeur : 
 * Argument possible : 
 * 1- ClHeure(p_stringFormatée)
 * 2- ClHeure(p_nbSecondes)
 * 3- ClHeure(p_heure, p_minute, p_seconde)
 */
function ClHeure() {
    if (typeof arguments[0] == 'string' && isNaN(arguments[0])) {
        var arrayDateSeparee = arguments[0].split(SEPARATEUR_HEURE);
        this.m_heure = parseInt(this.corrigerNb(arrayDateSeparee[0], "0"));
        this.m_minute = parseInt(this.corrigerNb(arrayDateSeparee[1], "0"));
        this.m_seconde = parseInt(this.corrigerNb(arrayDateSeparee[2], "0"));
    }
    else
    if (arguments.length == 1) {
        this.m_heure = 0;
        this.m_minute = 0;
        this.m_seconde = parseInt(arguments[0]);
    }
    else {
        this.m_heure = parseInt(this.corrigerNb(arguments[0], "0"));
        this.m_minute = parseInt(this.corrigerNb(arguments[1], "0"));
        this.m_seconde = parseInt(this.corrigerNb(arguments[2], "0"));
    }
    
    this.m_surplusHeure = 0;
    this.corrigerHeure();
}

ClHeure.prototype.corrigerHeure = function() {
    if (this.m_seconde > 60){
        var correctionHeure = parseInt(this.m_seconde / 3600);
        this.m_heure += correctionHeure;
        var correctionMinutes = parseInt((this.m_seconde - (correctionHeure * 3600)) / 60);
        this.m_minute += correctionMinutes;
        this.m_seconde = this.m_seconde - (correctionHeure * 3600) - (correctionMinutes * 60);
    }
    
    if (this.m_minute > 60) {
        this.m_heure += parseInt(this.m_minute / 60);
        this.m_minute += this.m_minute % 60;
    }
    
    if (this.m_heure > 23) {
        this.m_surplusHeure += (this.m_heure - (this.m_heure % 24));
        this.m_heure = this.m_heure % 24;
    }
}

ClHeure.prototype.getHour = function() {
    return this.m_heure;
}

ClHeure.prototype.getMinute = function() {
    return this.m_minute;
}

ClHeure.prototype.getSeconde = function() {
    return this.m_seconde;
}

ClHeure.prototype.soustraireHeure = function(p_heure) {
    var secondesCourante = this.getHeureEnSecondes();
    var secondeHrsASoustraire = p_heure.getHeureEnSecondes();
    var nouvelleHeureEnSeconde = secondesCourante - secondeHrsASoustraire;
    return new ClHeure(nouvelleHeureEnSeconde);
}

ClHeure.prototype.additionnerHeure = function(p_heure) {
    var secondesCourante = this.getHeureEnSecondes();
    var secondeHrsAAdditionner = p_heure.getHeureEnSecondes();
    var nouvelleHeureEnSeconde = secondesCourante + secondeHrsAAdditionner;
    return new ClHeure(nouvelleHeureEnSeconde);
}

ClHeure.prototype.toString = function() {
    var txt =  this.formaterDeuxChiffres(this.m_heure) + SEPARATEUR_HEURE 
               + this.formaterDeuxChiffres(this.m_minute) + SEPARATEUR_HEURE 
               + this.formaterDeuxChiffres(this.m_seconde);

    if (this.m_surplusHeure > 0) {
        txt = txt + " surplus " + this.m_surplusHeure;
    }
    
    return txt;
}

ClHeure.prototype.formaterDeuxChiffres = function(p_nombre) {
    if (p_nombre < 10)
        return "0" + p_nombre;
        
    return p_nombre;
}

ClHeure.prototype.corrigerNb = function(str, chars) {    
	chars = chars || "\\s";
	var valeurRetour = str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	
	if (valeurRetour == "")
	    return 0;
	    
	return valeurRetour;
}


ClHeure.prototype.getHeureEnSecondes = function() {
    return this.m_seconde + (this.m_minute * 60) + (this.m_heure * 60 * 60);
}