/*
 * Issila / Issila / I6LA
 * by EXTELLIENT
 *
 * Created on $date by mbard
 * Last modified (CVS Id): $id
 */

/* Methode appelee par defaut lors du chargement de la page,
 ? surcharger eventuellement */
function onLoadIssila() {}

/* Methode appelee par defaut lors du chargement de la page,
 ? surcharger eventuellement */
function onLoadIssila2() {}


/* Pour activer et desactiver les inputs */
function activate(id){
    var t = document.getElementById(id);
    if(t.disabled == '') {
   	    t.disabled = 'disabled';
	} else {
	t.disabled = ''; 
	}
}

function activate2(id_1, id_2){
   activate(id_1);
   activate(id_2);
}
 
/*
 * Copy the email input into the login input
 */
function copyEmailToLogin(){
	//Rajout de la condition : [06/09/2007] Steve ORIOL (Tchi-Tcha)
	if (document.forms[0].elements["login"].value == '')
	document.forms[0].elements["login"].value = document.forms[0].elements["email"].value;
}

/*
 * click all the checkbox of the form
 */
function clickAll(form, checked, attribute_id, activeDisabled){
    for (i=0, n=form.elements.length; i<n; i++){
    	if (form.elements[i].id.indexOf(attribute_id) != -1){
    		form.elements[i].checked = checked;
    		if (activeDisabled) {
    			form.elements[i].disabled = checked;
			}
    	}
    }
}  

function clickDay(idRef){
	
	var elt = document.getElementById(idRef);

	if ( elt.className == 'dayOff' ) elt.className='workingDay';
	else elt.className='dayOff';
}

function clickWeek(idRef, rankDay, idBegin, idEnd){
	
	var elt = document.getElementById(idRef);
	if ( elt.className == 'dayOff' ) {
		elt.className='workingDay';
		var newClassName = 'workingDay';
	}else{
		elt.className='dayOff';	
		var newClassName = 'dayOff';
	}

	var i;
	for (i = idBegin; i <= idEnd; i++){
		if (i%7 == rankDay){
			elt = document.getElementById(i);
			elt.className=newClassName;
		}
	}
}

function clickMonth(idRef, rankSunday, idBegin, idEnd){

	var elt = document.getElementById(idRef);
	if ( elt.className == 'dayOff' ) {
		elt.className='workingDay';
		var newClassName = 'workingDay';
	}else{
		elt.className='dayOff';	
		var newClassName = 'dayOff';
	}
	
	var i;
	for (i = idBegin; i <= idEnd; i++){
		
		if (i%7 != rankSunday){
			elt = document.getElementById(i);
			elt.className = newClassName;
		}
	}
}

function getValues(numberOfDays){
	
	var i, elt, ret="";
	for (i = 1; i <= numberOfDays; i++){
		elt = document.getElementById(i);
		if (elt.className == 'dayOff') ret = ret+"0";
		else ret = ret+"1";
	}
	
	document.AGT_CONF02_04update.calendar.value = ret;
}

function getValuesEntertainmentCenters(numberOfDays){
	
	var i, elt, ret="";
	for (i = 1; i <= numberOfDays; i++){
		elt = document.getElementById(i);
		if (elt.className == 'dayOff') ret = ret+"0";
		else ret = ret+"1";
	}
	
	document.AGT_CONF_LOI01_04update.calendar.value = ret;
}

/**
 * Applique au tr la css line_over pour le survole
 */ 
function lineOver(tr){
	tr.className = 'line_over';
}
/**
 * Applique au tr la css line_out apres avoir quitter survole
 */ 
function lineOut(tr){
	tr.className = 'line_out';
}

/**
 * Desactive ou active les case de ramassage scolaires dans la calendrier
 */
function enableOrDisableSchoolBus(id) {
	var boxSchoolMeal = document.getElementById(id);
	var length = id.length;
	var numBox = parseInt(id.charAt(length - 1));
	// case représentrant la periode avant le repas
	var idBoxSchoolBus1 = 'bus' + (numBox + 6);
	// case représentant la période après le rapas
	var idBoxSchoolBus2 = 'bus' + (numBox + 12);
	// Recuperation des deux cases
	var boxSchoolBus1 = document.getElementById(idBoxSchoolBus1);
	var boxSchoolBus2 = document.getElementById(idBoxSchoolBus2);
	var string = boxSchoolBus1.onclick;
	if(boxSchoolMeal.className == 'workingDay') {
		if((boxSchoolBus1.className).indexOf('disabledBox') == -1) {
			boxSchoolBus1.onclick = function() { clickDay(idBoxSchoolBus1); };
		}
		if((boxSchoolBus2.className).indexOf('disabledBox') == -1) {
			boxSchoolBus2.onclick = function() { clickDay(idBoxSchoolBus2); };
		}
	} else {
		if((boxSchoolBus1.className).indexOf('disabledBox') == -1) {
			boxSchoolBus1.className = 'dayOff';
			boxSchoolBus1.onclick = '';
		}
		if((boxSchoolBus2.className).indexOf('disabledBox') == -1) {
			boxSchoolBus2.className = 'dayOff';
			boxSchoolBus2.onclick = '';
		}
	}
}


function removeInputValue(id) {
	var elementToClean = document.getElementById(id);
	elementToClean.value = '';
}



/*******************************************************************************
 * FONCTIONS UTILITAIRES
 ******************************************************************************/

/*
 * Un readonly pour les champs spéciaux (select et radio)
 * 
 * @param jQueryNode un noued prédécoré par jQuery
 */
function readOnly(jQueryNode) {
  jQueryNode.addClass('ui-state-disabled');
  jQueryNode.attr('originalValue', jQueryNode.val());
  jQueryNode.bind('click', unFocus);
  // Bug #0001871 Champs selects en readonly modifiables 
  jQueryNode.bind('change', readOnlyChanged);

	// Gestion des datepicker
  if (jQueryNode.hasClass('hasDatepick')) {
  	var datepick_icon = jQueryNode[0].nextSibling;
  	datepick_icon.style.display = 'none';
  	if (datepick_icon.nextSibling == null) {
  		var disabled_datepick_icon = document.createElement('IMG');
  		$(disabled_datepick_icon).addClass('datepick-trigger');
  		disabled_datepick_icon.src = datepick_icon.src;
  		disabled_datepick_icon.style.opacity = '0.5';
  		disabled_datepick_icon.style.filter = 'Alpha(Opacity=0.5)';
    	jQueryNode[0].parentNode.appendChild(disabled_datepick_icon);
  	} else {
  		var disabled_datepick_icon = datepick_icon.nextSibling;
  	}
  	disabled_datepick_icon.style.display = '';
  }
  
}
function readOnlyChanged(e) { $(this).val($(this).attr('originalValue'))}

function unReadOnly(jQueryNode) {
  jQueryNode.removeClass('ui-state-disabled');
  jQueryNode.unbind('click', unFocus);
  // Bug #0001871 Champs selects en readonly modifiables 
  jQueryNode.unbind('change', readOnlyChanged);
  if (jQueryNode.hasClass('hasDatepick')) {
  	var datepick_icon = jQueryNode[0].nextSibling;
  	var disabled_datepick_icon = datepick_icon.nextSibling;
  	disabled_datepick_icon.style.display = 'none';
  	datepick_icon.style.display = '';
  }
}
/*
 * bind de la fonction readonly
 * 
 * @param e event 
 */
function unFocus(e) {
  $(this)[0].blur();
  e.stopImmediatePropagation();
  return false;
}

/*
 * Convertit un float en temps
 * 
 * @param float un temps sous la forme 12.5
 * 
 * @return string une heure sous la forme 12h30
 */
function floatToTime(time) {
  if (time !== undefined) {
    var hour = String(Math.floor(time));
    var minute = time - hour;
    minute = Math.round(minute * 60);
    if (minute == 60) {
    	minute = 0;
    	hour++;
    }
    minute = String(minute);
    if (minute.length == 1) {
      minute = '0' + minute;
    }
    if (hour.length == 1) {
      hour = '0' + hour;
    }
    return hour + 'h' + minute;
  }
}

/*
 * Convertit une heure en float
 * 
 * @param param string, une heure sous la forme 12h30
 * 
 * @retrun float, une heure sous la forme 12.50
 * 
 */
function timeToFloat(time) {
  if (time !== undefined) {
  	if (time.search('h') != -1) { // Display time
    time = time.split('h');
    time = parseInt(time[0], 10) + parseInt(time[1], 10) / 60;
    return time;
  	} else if (time.search(':') != -1) {	// DB time
  		return dbTimeToFloat(time);	
  	} else { // Let's assume it's already a float
  		return time;
  	}
  }
}

/*
 * Convertit une heure en float
 * 
 * @param param string, une heure sous la forme 12h30
 * 
 * @retrun float, une heure sous la forme 12.50
 * 
 */
function dbTimeToFloat(time) {
  if (time !== undefined) {
    time = time.split(':');
    time = parseInt(time[0], 10) + parseInt(time[1], 10) / 60; // On ne gère pas les secondes
    return time;
  }
}

function dbTimeToDisplayTime(time) {
  if (time != undefined && time != '' && time.search('h') < 0
      && time.search(':') >= 0) {
    time = time.split(':');
    return time[0] + 'h' + time[1];
  } else {
    return time;
  }
}

function displayTimeToDbTime(time) {
  if (time != undefined && time != '' && time.search(':') < 0
      && time.search('h') >= 0) {
    time = time.split('h');
    return time[0] + ':' + time[1] + ':00';
  } else {
    return time;
  }
}

function floatToDbTime(time) {
  if (time !== undefined) {
    var hour = String(Math.floor(time));
    var minute = time - hour;
    minute = Math.round(minute * 60);
    if (minute == 60) {
    	minute = 0;
    	hour++;
    }
    minute = String(minute);
    if (minute.length == 1) {
      minute = '0' + minute;
    }
    if (hour.length == 1) {
      hour = '0' + hour;
    }
    return hour + ':' + minute +':00'; // On ne gère pas les secondes
  }
}

function dbTimeAdd(time, duration) {
	var f_time = dbTimeToFloat(time);
	var f_duration = dbTimeToFloat(duration);
	return floatToDbTime(f_time+f_duration);
}

function timeAdd(time, duration) {
	var f_time = timeToFloat(time);
	var f_duration = timeToFloat(duration);
	return floatToTime(f_time+f_duration);
}

function timeSubstract(time, duration) {
	var f_time = timeToFloat(time);
	var f_duration = timeToFloat(duration);
	return floatToTime(f_time-f_duration);
	
}

/**
 * Compare time1 et time2, renvoie l'ordre des times 
 * négatif si time1 < time 2, positif si time2 < time1 , 0 si time1 == time2
 * @param time1
 * @param time2
 * @return
 */
function timeDiff(time1, time2) {
	var dTime1 =new Date();
	if (time1.search('h') != -1) {
    time1 = time1.split('h');
	} else {
    time1 = time1.split(':');
  }
  var hour1 = parseInt(time1[0]);
  var minute1 = parseInt(time1[1]);
  dTime1.setMinutes(minute1);
  dTime1.setHours(hour1);

	var dTime2 =new Date();
	if (time2.search('h') != -1) {
    time2 = time2.split('h');
	} else {
    time2 = time2.split(':');
  }
  var hour2 = parseInt(time2[0]);
  var minute2 = parseInt(time2[1]);
  dTime2.setMinutes(minute2);
  dTime2.setHours(hour2);
  if (dTime1 > dTime2) {
  	return 1;
  } else if (dTime1 < dTime2) {
  	return -1;
  } else {
  	return 0;
  }
}

/*
 * fonction qui vire la tooltip et restaure le style des boutons
 * 
 * @param jQueryNode le noeud jQuerysé du bouton
 * @param buttonPlace xtlview-toolbar seulement pour le moment
 */
function cleanlyRemoveXtlToolTip(jQueryNode, buttonPlace) {
	jQueryNode.viewTooltip('destroy'); // obligé de faire un destroy pour pouvoir changer le contenu de la tooltip...
	switch (buttonPlace) {
		case 'xtlview-toolbar': 
				jQueryNode.addClass('ui-corner-all').addClass('xtlview');
				jQueryNode[0].style.backgroundColor = '';
				jQueryNode[0].style.backgroundImage = '';
				jQueryNode[0].style.marginTop = '1px';
				jQueryNode[0].style.borderColor = ''; // IE SUX!!!
			break;
			default:
				jQueryNode.addClass('ui-corner-all').addClass('xtlview');
			break;
		
	}
	 jQueryNode.unbind('mouseout') // Pour virer le casseur de styles du tooltip
	 					 .bind('mouseout', function() {$(this).removeClass('ui-state-hover');}); // Pour restaurer le comportement normal
	 
}

/*
 * fonction qui ajoute la tooltip sans casser le style des boutons
 * 
 * ça améliore le comportement par défaut du viewTooltip mais il reste un petit défaut qui est
 * que la tooltip a un petit delay avant d'être effectivement affichable (de l'ordre d'une seconde)
 * mais je ne trouve pas pourquoi et je n'ais pas le temps pour ça maintenant.
 * 
 * @param jQueryNode le noeud jQuerysé du bouton
 * @param buttonPlace xtlview-toolbar seulement pour le moment
 */
function cleanlyAddXtlToolTip(jQueryNode, buttonPlace, tooltipOptions) {
	// Remove systématique : pour pourvoir changer le contenu d'un tooltip il faut le destroy et le recréer
	cleanlyRemoveXtlToolTip(jQueryNode, buttonPlace);
   switch (buttonPlace) {
  	 	default:
			case 'xtlview-toolbar': 
					jQueryNode.viewTooltip(tooltipOptions);
				break;
		}
}


/*
 * Cette fonction trie un tableau de li par ordre alphabetique
 * chaque entree du tableau doit respecter la structure suivante :
 * <li><span>LABEL SUR LEQUEL S'APPLIQUE LE TRI</span></li>
 * 
 * @param liA : un objet javascript LI tel que decrit ci dessus
 * @param liB : un objet javascript LI tel que decrit ci dessus
 * 
 * @return integer : positif ou negatif selon l'ordre alphabetique trouve
 * 
 */

function sortLi(liA, liB) {
	try {
		return liA.firstChild.textContent.localeCompare(liB.firstChild.textContent);
	} catch (e) {
		return liA.firstChild.innerHTML.localeCompare(liB.firstChild.innerHTML);
	}
}


function getDayEnumIndex(day_enum) {
    switch (day_enum) {
        case 'LBL_MONDAY':
            return 0;
          break;
        case 'LBL_TUESDAY':
            return 1;
          break;
        case 'LBL_WEDNESDAY':
            return 2;
          break;
        case 'LBL_THURSDAY':
            return 3;
          break;
        case 'LBL_FRIDAY':
            return 4;
          break;
        case 'LBL_SATURDAY':
            return 5;
          break;
        case 'LBL_SUNDAY':
            return 6;
          break;
    }
}