var MODE_PARENT_READONLY = 'readonly_par';

// Active/desactive certains champs en fonction du mode d'entree
// sur la page et en fct des donnees recuperees de la base
function initFieldStep1(readonly) 
{
	var form = document.getElementById('responsibles-form');
	
	// Active/desactive les champs employeurs
	updateUnemployed(form.fatherunemployed);
	updateUnemployed(form.motherunemployed);
	updateUnemployed(form.tutorunemployed);
}

// Active/desactive certains champs en fonction du mode d'entree
// sur la page et en fct des donnees recuperees de la base
function initFieldStep2(mode) 
{
	var form = document.forms[0];
		
	// Desactive les champs en lecture seule
	if( mode==MODE_PARENT_READONLY ) {
		if (!document.getElementsByTagName){ return; }
    	var allInputfields = document.getElementsByTagName("input");
    	for (var i=0; i<allInputfields.length; i++){
    		if( allInputfields[i].type!='hidden' )
    			disableField(allInputfields[i],'disabled');
    	}
    	var allSelectfields = document.getElementsByTagName("select");
    	for (var i=0; i<allSelectfields.length; i++){
    		disableField(allSelectfields[i],'disabled');
    	}
    	
    	// Calendrier associe a la date de naissance desactive
    	if (document.getElementById("trigger_birthday"))
    		document.getElementById("trigger_birthday").disabled = true;
    	
    	// Champs reactiv?s (bouton submit)
    	document.getElementsByName('commit')[0].disabled=false;
	}		
}

// Initialise les emplois du temps
function initTimeUse(parent_id, timeuse) 
{	
	for( i=1; i<=10; i++ ) 
	{
		var bx=document.getElementById( parent_id + 'tu' + i);		
		var day = timeuse.charAt(i-1);		
		if( day=='1' ) {
			bx.className='workingDay';		
		}
		else {
			bx.className='dayOff';
		}
	}
}

// Active/desactive les champs relatifs au payeur (autre)
function updatePaymaster(paymaster) {
	var checked = paymaster.checked;
	var disabled = ( checked? '': 'disabled' );
	var form = paymaster.form;
	
	// Active/desactive les champs relatifs au payeur	
	disableField(form.paymasterlast_name,disabled);
	disableField(form.paymasteraddress,disabled);
	disableField(form.paymasteraddress_complement,disabled);
	disableField(form.paymasterfirst_name,disabled);
	disableField(form.paymasteremail,disabled);
	disableField(form.paymasterzipcode,disabled);
	disableField(form.paymastercity,disabled);
	disableField(form.paymastercity_complement,disabled);
		
	if( checked ) {
		checkOnlyOnePaymaster(paymaster);
	}
}

// Active/desactive les champs relatifs ? l'employeur
function updateUnemployed(unemployed) {
	var checked = unemployed.checked;
	var disabled = ( checked? 'disabled': '' );
	var unemployed_name = unemployed.name;
	
	var prefixUnemployed = unemployed_name.substring(0, unemployed_name.indexOf('unemployed') );
	var form = unemployed.form;
	
	disableField(eval('form.' + prefixUnemployed + 'employer_name'), disabled);
	disableField(eval('form.' + prefixUnemployed + 'employer_phone'), disabled);
	disableField(eval('form.' + prefixUnemployed + 'employer_fax'), disabled);
	disableField(eval('form.' + prefixUnemployed + 'time_use_id'), disabled);	
}
						
// Coche un seul payeur a la fois
function checkOnlyOnePaymaster(paymaster) {
	var checked = paymaster.checked;	
	if( checked ) {	
	
		var form = paymaster.form;
		
		// Liste des payeurs potentiels
		var paymasters = new Array(
					form.fatherpaymaster, 
					form.motherpaymaster, 
					form.tutorpaymaster, 
					form.paymasterpaymaster);
					
		for( i=0; i<paymasters.length; i++ ) {
			if( paymasters[i].name!=paymaster.name ) {
				paymasters[i].checked = false;
				$(paymasters[i]).trigger('change');
			}
		}
//		if( paymaster!=form.paymasterpaymaster ) {
//			updatePaymaster(form.paymasterpaymaster);
//		}
	}
}

// Coche un seul responsable a la fois
function checkOnlyOneResp(responsable) {
	var checked = responsable.checked;	
	if( checked ) {	
	
		var form = responsable.form;
		
		// Liste des payeurs potentiels
		var responsables = new Array(
					form.fatherresp, 
					form.motherresp, 
					form.tutorresp);
					
		for( i=0; i<responsables.length; i++ ) {
			if( responsables[i].name!=responsable.name ) {
				responsables[i].checked = false;
			}
		}
	}
}

// desactive le champ
function disableField(field, disabled) {	
	field.disabled=disabled;
	/*if( disabled='disabled' ) {
		field.value='';
	}*/
}

function showTimeUse(parent_id, timeuse) {
	var unemployed = eval('document.getElementById("responsibles-form").' + parent_id + 'unemployed').checked;
	
	if( !unemployed && timeuse.value!='LBL_FULL_TIME') {
		$('#' + parent_id + '_popup').dialog('open');
	}
}

// Valide l'emploi du temps courant
function validateTimeUse(parent_id) 
{
	// Construction de la chaine composee de 0 et de 1
	var str = '';
	for( i=1; i<=10; i++ ) {
		var bx=document.getElementById( parent_id + 'tu' + i);
		if( bx.className=='workingDay' ) {			
			str += '1';
		}
		else {
			str += '0';
		}
	}
	
	// Maj du champ cache
	
	var timeuse_input = eval( 'document.getElementById("responsibles-form").' + parent_id + 'time_use' );
	timeuse_input.value=str;
	$(timeuse_input).trigger('change');
	
	// On masque la popup
	$('#' + parent_id + '_popup').dialog('close');	
}


// Méthode appelee lorsque le type d'emploi du temps a chang?
// Valide l'emploi du temps courant
function changeTimeUse(parent_id, timeUse) 
{
	if(timeUse.value!='LBL_FULL_TIME') {
		$('#' + parent_id + '_popup').dialog('open');
	}
	else {
		initTimeUse(parent_id, '1111111111');
		validateTimeUse(parent_id);
	}
}


// Initialise les calendriers previsionnels des enfants a partir
// de la string composée de 0 et de 1
function initChildCalendars(prefix, str) 
{	
	var i=1;
	var currentDay = document.getElementById( prefix + i);
	while( currentDay!=null ) {
		// Si restaurant scolaire alors pas de ramassage scolaire pour repas midi
		var boxSchoolMeal = null;
		if(prefix == 'bus') {
			if(i > 6 && i < 13) {
				boxSchoolMeal = document.getElementById('rest' + (i - 6));
			} else {
				boxSchoolMeal = document.getElementById('rest' + (i - 12));
			}
		}
	
		var day = str.charAt(i-1);
		if( day=='1' && (boxSchoolMeal == null || (boxSchoolMeal != null && boxSchoolMeal.className == 'dayOff'))) {
			currentDay.className = 'workingDay';
		} else {
			// On ne change rien si la case est désactivee
			if((currentDay.className).indexOf('disabledBox') == -1) {
				currentDay.className = 'dayOff';
				if((boxSchoolMeal != null && boxSchoolMeal.className == 'workingDay')) {
					currentDay.onclick = null;
				}
			}
		}
		i++;
		currentDay = document.getElementById( prefix + i);
	}	
}

// Construit les calendriers previsionnels
// entete: entete HTML du tableau
// linesArray: tableau contenant les libellés des plages horaires
// daysArray: tableau contenant les libellés des jours
// className: Style du tableau
// prefixId: prefixe pour le nom des cellules
// mode: mode d'acces à la page
// actives: tableau precisant si la plage est active ou non
function buildCalendar(entete, linesArray, daysArray, className, prefixId, mode, actives)
{
	var content = '<table width="100%" border="0">';
	content += '<tr><td>' + entete + '</td></tr>';
	content += '<tr><td>';
	content += '<table class="' + className + '" border="0">';
	
	// Entete
	content += '<tr>';
	if( linesArray!=null ) {
		content += '<td> </td>';
	}
	for( c=0; c<daysArray.length; c++ ) { 
		content += '<td>' + daysArray[c] + '</td>';
	}
	content += '</tr>';
	
	// check box pour les jours
    content += '<tr>';
    if( linesArray!=null ) {
        content += '<td> </td>';
    }
    readonly = (mode==MODE_PARENT_READONLY);
    for( c=0; c<daysArray.length; c++ ) { 
        var cb_id = prefixId+'_'+c;
        if (readonly) disabled = 'disabled';
        else disabled = '';
        content += '<td><input type="checkbox" name="'+cb_id+'" id="'+cb_id+'" value="1" '+disabled+' /></td>';
    }
    content += '</tr>';
	
	// Lignes
	var countLine = (linesArray==null?1:linesArray.length);
	for( l=0; l<countLine; l++ ) { 
		readonly = (mode==MODE_PARENT_READONLY) || (actives!=null && actives[l]==false);
		content += '<tr>';
		if( linesArray!=null ) {
			content += '<td nowrap="nowrap">' + linesArray[l] + '</td>';
		}
		for( c=1; c<=daysArray.length; c++ ) { 
			var name = prefixId + ( l*daysArray.length + c );
			if(prefixId == 'rest') {
				content += '<td id="' + name + '" class="dayOff"' + (readonly?'':'onClick="clickDay(\'' + name + '\');enableOrDisableSchoolBus(\'' + name + '\');"') + '> </td>\n';
			} else if(prefixId == 'bus') {
				content += '<td id="' + name + '" ' + (readonly?'class="dayOff disabledBox"':'class="dayOff"') + (readonly?'':'onClick="clickDay(\'' + name + '\')"') + '> </td>\n';
			} else {
				content += '<td id="' + name + '" class="dayOff"' + (readonly?'':'onClick="clickDay(\'' + name + '\')"') + '> </td>\n';
			}
		}
		content += '</tr>';
	}
	content += '</table>';
	content += '</td></tr></table>';
	
	return content;
}

// Construit un bouton de validation d'une popup
function buildButton(label, function2call) {
	var content = "<table width='100%' border='0'>";
	content += "<tr><td> </td><td width='150'><a href='#' onClick='"+ function2call + "'><span class='rounded_button' width='100%'>" + label + "</span></a></td><td> </td></tr>";
	content += "</table>";
	return content;
}

function showCalendar() {
	showbox('forcast');
}

// Valide les calendriers prévisionnels
// Construit les chaines composées de 0 et de 1 et met à jour les champs cachés
// du formulaire avec ces chaines
function validateCalendar(msgConfirm) 
{
	if (confirm(msgConfirm)) {
	
		// Construction des chaines composees de 0 et de 1
		var calendarSchoolMealStr = buildCalendarString('rest');
		var calendarSchoolBusStr = buildCalendarString('bus');
		var calendarOutSchoolStr = buildCalendarString('out');
		
		// Construction des chaines composees de 0 et de 1 pour les jours coches
        var daySelectedSchoolMealStr = buildDaySelectedStr('rest');
        var daySelectedSchoolBusStr = buildDaySelectedStr('bus');
        var daySelectedOutSchoolStr = buildDaySelectedStr('out');
		
		// Maj des champs caches
		var calendarSchoolMealInput = document.getElementById('calendarSchoolMeal');
		calendarSchoolMealInput.value=calendarSchoolMealStr;
	
		var calendarSchoolBusInput = document.getElementById('calendarSchoolBus');
		calendarSchoolBusInput.value=calendarSchoolBusStr;
	
		var calendarOutSchool = document.getElementById('calendarOutSchool');
		calendarOutSchool.value=calendarOutSchoolStr;
		
		var update_provisionnal = document.getElementById('update_provisionnal');
		if (update_provisionnal) {
			update_provisionnal.value=true;
		}
		
    var daySelectedSchoolMealInput = document.getElementById('daySelectedSchoolMeal');
    daySelectedSchoolMealInput.value = daySelectedSchoolMealStr;
    
    var daySelectedSchoolBusInput = document.getElementById('daySelectedSchoolBus');
    daySelectedSchoolBusInput.value = daySelectedSchoolBusStr;
    
    var daySelectedOutSchoolInput = document.getElementById('daySelectedOutSchool');
    daySelectedOutSchoolInput.value = daySelectedOutSchoolStr;  

		$('#forecast-popup').dialog('close');
		return true;
	} else {
		return false;
	}
}

function closeForcast() {
    hidebox('forcast');
}

// Construit la chaine composee de 0 et de 1 associee au calendrier dont
// le prefixe est pass? en parametre
function buildCalendarString(prefix)
{
	var str = '';
	
	var i=1;
	var currentDay = document.getElementById( prefix + i);
	while( currentDay!=null ) {
		if( currentDay.className=='workingDay' ) {			
			str += '1';
		}
		else {
			str += '0';
		}
		i++;
		currentDay = document.getElementById( prefix + i);
	}	
	return str;
}


// Construit la chaine composee de 0 et de 1 associée aux jours sélectionnés dont
// le prefixe est passé en parametre
function buildDaySelectedStr(prefix) {
    var str = '';
    
    var i=0;
    var day = document.getElementById(prefix+'_'+i);
    while( day!=null ) {
        if( day.checked) {          
            str += '1';
        } else {
            str += '0';
        }
        i++;
        day = document.getElementById( prefix+'_'+i);
    }   
    return str;
}

// Fonction appelee lorsque l'utilisateur valide les donnees saisies
// dans la popup Assurance (Etape 2). Elle recopie les valeurs saisies
// dans la popup dans les champs caches du formulaire
function validateAssurance()
{
	document.getElementById('assuranceName').value = document.getElementById('divAssuranceName').value;
	document.getElementById('assuranceAddress').value = document.getElementById('divAssuranceAddress').value;
	document.getElementById('assuranceZipCode').value = document.getElementById('divAssuranceZipCode').value;
	document.getElementById('assuranceCity').value = document.getElementById('divAssuranceCity').value;
	document.getElementById('assurancePoliceNumber').value = document.getElementById('divAssurancePoliceNumber').value;
	
	$('#insurance-popup').dialog('close');
	return true;
}

// Fonction appelee lorsque l'utilisateur valide les donnees saisies
// dans la popup Personnes a joindre (Etape 2). Elle recopie les valeurs saisies
// dans la popup dans les champs caches du formulaire
function validateJoinablePersons()
{
	for( i=1; i<=4; i++ ) {
		document.getElementById(i + 'joinable_lastname').value = document.getElementById(i + 'joinable_lastname_div').value;
		document.getElementById(i + 'joinable_firstname').value = document.getElementById(i + 'joinable_firstname_div').value;
		document.getElementById(i + 'joinable_phone').value = document.getElementById(i + 'joinable_phone_div').value;
		document.getElementById(i + 'joinable_cellphone').value = document.getElementById(i + 'joinable_cellphone_div').value
		document.getElementById(i + 'joinable_email').value = document.getElementById(i + 'joinable_email_div').value;
		document.getElementById(i + 'joinable_status').value = document.getElementById(i + 'joinable_status_div').value;
	}	
	
	// Efface le message d'erreur eventuel (renseignement des personnes a joindre obligatoire)
	document.getElementById('error_for_message').innerHTML='';
	hidebox('joinable');
}

// Fonction appelee lorsque l'utilisateur change l'ecole dans la liste
// deroulante
function changeSchool() {
	document.getElementById('refresh').value='true';
	document.forms[0].submit();
}

// Ouvre la fenetre contenant le pdf associe au trajet selectionne
function viewSchoolBus(url, idSchoolBus) {
	var fullUrl = url + '/idSchoolBus/' + idSchoolBus;
	 // correction du bug 1427 pour forcer le telechargement, on supprime le target blank
	window.location.href =fullUrl;
	//var target = window.open('',"_new", "resizable=yes; menubar=yes;location =yes");
	//target.location=fullUrl;
	return false;
}

var selectListDefined = true;
// Masque les listes deroulantes de facon a contourner le bug IE faisant
// que les listes apparaissent toujours au-dessus de n'importe quelle div
function showSelectLists(b_display) {
	var ie=(document.all)? true : false;
	var display = 'block';
	if( !b_display ) {
		display = 'none';
	}
	if( ie ) {
		if( document.getElementById('school') ) {
			document.getElementById('school').style.display=display;
			document.getElementById('class').style.display=display;
			if( document.getElementById('traject')!=null ) {
				document.getElementById('traject').style.display=display;
			}
			if( document.getElementById('bus_stop_id')!=null ) {
				document.getElementById('bus_stop_id').style.display=display;
			}
		}
	}	
}


function validateMonthlyForecast(url) {
  // Récupération d valeurs des cases
  // Les lignes sont commentées à cause d'une erreur Javascript qui bloquait l'exécution du script. 
  // Il faudrait trouver comment tester l'existence d'un élément HTML...
  // Lundi
  if(document.getElementById('LMB')) {
    var LMB = (document.getElementById('LMB').checked) ? '1' : '0';
  } else {
    var LMB = '0';
  }
  if(document.getElementById('LME')) {
    var LME = (document.getElementById('LME').checked) ? '1' : '0';
  } else {
    var LME = '0';
  }
  if(document.getElementById('LAB')) {
    var LAB = (document.getElementById('LAB').checked) ? '1' : '0';
  } else {
    var LAB = '0';
  }
  if(document.getElementById('LAE')) {
    var LAE = (document.getElementById('LAE').checked) ? '1' : '0';
  } else {
    var LAE = '0';
  }
  var lundi = LMB+LME+LAB+LAE;
  // Mardi
  if(document.getElementById('MaMB')) {
    var MaMB = (document.getElementById('MaMB').checked) ? '1' : '0';
  } else {
    var MaMB = '0';
  }
  if(document.getElementById('MaME')) {
    var MaME = (document.getElementById('MaME').checked) ? '1' : '0';
  } else {
    var MaME = '0';
  }
  if(document.getElementById('MaAB')) {
    var MaAB = (document.getElementById('MaAB').checked) ? '1' : '0';
  } else {
    var MaAB = '0';
  }
  if(document.getElementById('MaAE')) {
    var MaAE = (document.getElementById('MaAE').checked) ? '1' : '0';
  } else {
    var MaAE = '0';
  }
  var mardi = MaMB+MaME+MaAB+MaAE;
  // Mercredi
  if(document.getElementById('MeMB')) {
    var MeMB = (document.getElementById('MeMB').checked) ? '1' : '0';
  } else {
    var MeMB = '0';
  }
  if(document.getElementById('MeME')) {
    var MeME = (document.getElementById('MeME').checked) ? '1' : '0';
  } else {
    var MeME = '0';
  }
  if(document.getElementById('MeAB')) {
    var MeAB = (document.getElementById('MeAB').checked) ? '1' : '0';
  } else {
    var MeAB = '0';
  }
  if(document.getElementById('MeAE')) {
    var MeAE = (document.getElementById('MeAE').checked) ? '1' : '0';
  } else {
    var MeAE = '0';
  }
  var mercredi = MeMB+MeME+MeAB+MeAE;
  // Jeudi
  if(document.getElementById('JMB')) {
    var JMB = (document.getElementById('JMB').checked) ? '1' : '0';
  } else {
    var JMB = '0';
  }
  if(document.getElementById('JME')) {
    var JME = (document.getElementById('JME').checked) ? '1' : '0';
  } else {
    var JME = '0';
  }
  if(document.getElementById('JAB')) {
    var JAB = (document.getElementById('JAB').checked) ? '1' : '0';
  } else {
    var JAB = '0';
  }
  if(document.getElementById('JAE')) {
    var JAE = (document.getElementById('JAE').checked) ? '1' : '0';
  } else {
    var JAE = '0';
  }
  var jeudi = JMB+JME+JAB+JAE;
  // Vendredi
  if(document.getElementById('VMB')) {
    var VMB = (document.getElementById('VMB').checked) ? '1' : '0';
  } else {
    var VMB = '0';
  }
  if(document.getElementById('VME')) {
    var VME = (document.getElementById('VME').checked) ? '1' : '0';
  } else {
    var VME = '0';
  }
  if(document.getElementById('VAB')) {
    var VAB = (document.getElementById('VAB').checked) ? '1' : '0';
  } else {
    var VAB = '0';
  }
  if(document.getElementById('VAE')) {
    var VAE = (document.getElementById('VAE').checked) ? '1' : '0';
  } else {
    var VAE = '0';
  }
  var vendredi = VMB+VME+VAB+VAE;
  // Samedi
  if(document.getElementById('SMB')) {
    var SMB = (document.getElementById('SMB').checked) ? '1' : '0';
  } else {
    var SMB = '0';
  }
  if(document.getElementById('SME')) {
    var SME = (document.getElementById('SME').checked) ? '1' : '0';
  } else {
    var SME = '0';
  }
  if(document.getElementById('SAB')) {
    var SAB = (document.getElementById('SAB').checked) ? '1' : '0';
  } else {
    var SAB = '0';
  }
  if(document.getElementById('SAE')) {
    var SAE = (document.getElementById('SAE').checked) ? '1' : '0';
  } else {
    var SAE = '0';
  }
  var samedi = SMB+SME+SAB+SAE;

  // Construction de l'objet JSON qui va contenir les valeurs
  var inscriptions = '{"Lundi" : "'+lundi+'", "Mardi" : "'+mardi+'", "Mercredi" : "'+mercredi+'", "Jeudi" : "'+jeudi+'", "Vendredi" : "'+vendredi+'", "Samedi" : "'+samedi+'"}';

  var dateDeb = $('#from_date').val();
  var dateFin = $('#thru_date').val();
  var id_child = $('#id_child').val();
  var xhr = getXmlHttpRequest();
  
  xhr.onreadystatechange = function() {
      if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
	  $('#monthly-forecast-popup').dialog('close');
	  location.reload();
      } 
  }

  xhr.open("GET", url+'?id_child='+id_child+'&inscriptions='+inscriptions+'&dateDeb='+dateDeb+'&dateFin='+dateFin, true);
  xhr.send(null);
}

function getXmlHttpRequest() {
  var xhr = null;
  if (window.XMLHttpRequest || window.ActiveXObject) {
      if (window.ActiveXObject) {
	  try {
	      xhr = new ActiveXObject("Msxml2.XMLHTTP");
	  } catch (e){
	      xhr = new ActiveXObject("Microsoft.XMLHTTP");
	  }
      } else {
	  xhr = new XMLHttpRequest();
      }
  } else {
      alert("Votre navigateur ne supporte pas l'objet XMLHttpRequest...");
      return null;
  }
  return xhr;
}
