// JScript source code
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);
}