//
// This function make an hidden element to
// be displayed
//
function show(element){
	if (obj = document.getElementById(element)){
		obj.style.display = "block";
	}
}

//
// This function make a displayed element to
// be hidden
//
function hide(element){
	if (obj = document.getElementById(element)){
		obj.style.display = "none";
	}
}

//
// This function make  an input element to be hidden or displayed
//
function display_type_demande(number){
	if(document.getElementById('demande')){
		if(document.getElementById('demande').value!==false){
			if(document.getElementById('demande').value==number){
				document.getElementById('type').className= 'on required input'; 
			}
			else{
				document.getElementById('type').className = 'off input';
			}
		}
	}
}

/*
 * This function checks all required fields of form with id "formName" and submit it if all fields are OK
 */
function checkAndSubmit(formName){
	if(document.getElementById(formName)){
		if(checkRequiredField(formName)){
			document.getElementById(formName).submit();
		}
	}
}
/*
 * This function checks the required fields before sending datas to the server
 * It also checks the specificity of pseudo and password fields
 *
 * @params : formName [this is the form we must check name. This is to avoid a problem of submition because other form have required fields empty]
 */
function checkRequiredField(formName){
	var requiredElements=[];	//Array of required fields
	var errorFields=[];			//Array of fields in error
	var count=0;				//Counter to fill the required Elements array
	var nbErrorFields=0;		//Counter to fill the error Fields array
	var errorMessage='';		//errorMessage to print
	var result=true;			//The default result to return is true until we found an error
	
	if(document.getElementById(formName)){
		//We must get all fields specified as "required"
		var paragraphelements=document.getElementById(formName).getElementsByTagName('p');
		if(paragraphelements){
			for(var i=0;i<paragraphelements.length;i++){
				if(paragraphelements[i].className){
					if(paragraphelements[i].className.indexOf('required')!=-1){
						requiredElements[count]=paragraphelements[i];
						count++;
					}
				}
			}
		}
		//If there are required elements we start the check
		if(requiredElements.length>0){
			for(var j=0;j<requiredElements.length;j++){
	
				//Case of input "text" & "password"
				if((requiredElements[j].className.indexOf('input')!=-1)||(requiredElements[j].className.indexOf('secret')!=-1)){
					var element=requiredElements[j].getElementsByTagName('input')[0];
					//If the input is empty
					if(!element.value){
						if(element.parentNode){
							if(element.parentNode.getElementsByTagName('label')[0]){
								errorFields[nbErrorFields]=element.parentNode.getElementsByTagName('label')[0].innerHTML;
								if(element.parentNode.className){
									if(element.parentNode.className.indexOf('error')==-1){
										element.parentNode.className+=" error";
									}
								}
								nbErrorFields ++;
								result=false;
							}
						}
					}
					else{
						if(element.getAttribute('id')=='pseudo'){
							var loginMessage=checkLoginField(element);
							if(loginMessage!=-1){
								errorFields[nbErrorFields]=loginMessage;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('id')=='password1'){
							var passwordMessage=checkPasswordField(element);
							if(passwordMessage!=-1){
								errorFields[nbErrorFields]=passwordMessage;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('id')=='password2'){
							var confirmPasswordMessage=checkPasswordConfirmField(document.getElementById("password1"),document.getElementById("password2"));
							if(confirmPasswordMessage!=-1){
								errorFields[nbErrorFields]=confirmPasswordMessage;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('id')=='birth'){
							var checkedDate=checkDate(element);
							if (checkedDate!=1){
								errorFields[nbErrorFields]=checkedDate;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('id')=='date_naissance'){
							var checkedDate=checkModifyDate(element);
							if (!checkedDate){
								errorFields[nbErrorFields]=birthField+wrongBirthDatefield;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('name')=='ContentObjectAttribute_data_text_757'){
							var emailMessage=checkEmail(element);
							if(emailMessage!=-1){
								errorFields[nbErrorFields]=emailField+emailMessage;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else if(element.getAttribute('name')=='email'){
							var emailMessage=checkEmail(element);
							if(emailMessage!=-1){
								errorFields[nbErrorFields]=emailField+emailMessage;
								if(element.parentNode){
									element.parentNode.className+=" error";
								}
								nbErrorFields ++;
								result=false;
							}
							else{
								if(element.parentNode){
									if(element.parentNode.className){
										if(element.parentNode.className.indexOf('error')!=-1){
											element.parentNode.className=replacePattern(element.parentNode.className," error","");
										}
									}
								}
							}
						}
						else{
							if(element.parentNode){
								if(element.parentNode.className){
									if(element.parentNode.className.indexOf('error')!=-1){
										element.parentNode.className=replacePattern(element.parentNode.className," error","");
									}
								}
							}
						}
					}
				}
	
				//Case of textarea
				if((requiredElements[j].className.indexOf('textarea')!=-1)){
					var element=requiredElements[j].getElementsByTagName('textarea')[0];
					//If the input is empty
					if(!element.value){
						if(element.parentNode){
							if(element.parentNode.getElementsByTagName('label')[0]){
								errorFields[nbErrorFields]=element.parentNode.getElementsByTagName('label')[0].innerHTML;
								if(element.parentNode.className){
									if(element.parentNode.className.indexOf('error')==-1){
										element.parentNode.className+=" error";
									}
								}
								nbErrorFields ++;
								result=false;
							}
						}
					}
					else{
						if(element.parentNode){
							if(element.parentNode.className){
								if(element.parentNode.className.indexOf('error')!=-1){
									element.parentNode.className=replacePattern(element.parentNode.className," error","");
								}
							}
						}
					}
				}
	
				//Case of select list & radios buttons
				else if(requiredElements[j].className.indexOf('select1')!=-1){
					var element=requiredElements[j].getElementsByTagName('select')[0];
	
					//Case of select list
					if(element){
						//If no option has been chosen
						if(!element.options[element.options.selectedIndex].value){
							if(element.parentNode){
								if(element.parentNode.getElementsByTagName('label')[0]){
									errorFields[nbErrorFields]=element.parentNode.getElementsByTagName('label')[0].innerHTML;
									if(element.parentNode){
										element.parentNode.className+=" error";
									}
									nbErrorFields ++;
									result=false;
								}
							}
						}
						else{
							if(element.parentNode){
								if(element.parentNode.className){
									if(element.parentNode.className.indexOf('error')!=-1){
										element.parentNode.className=replacePattern(element.parentNode.className," error","");
									}
								}
							}
						}
					}
	
					//Case of radio button
					else{
						var radioElements=requiredElements[j].getElementsByTagName('input');
						var hasSelectedRadio=0;
						for(var t=0;t<radioElements.length;t++){
							if(radioElements[t].checked){
								hasSelectedRadio=1;
								var selectedRadioValue=radioElements[t].value;
							}
						}
						//If no radio bouton had been selected
						if(!hasSelectedRadio){
							errorFields[nbErrorFields]=requiredElements[j].getElementsByTagName('label')[0].innerHTML;
							requiredElements[j].className+=" error";
							nbErrorFields ++;
							result=false;
						}
						//There's a radio button checked
						else{
							if(element.parentNode){
								if(element.parentNode.className){
									if(requiredElements[j].className.indexOf('error')!=-1){
										requiredElements[j].className=replacePattern(requiredElements[j].className," error","");
									}
								}
							}
						}
					}
				}
	
	
				//Case of checkboxes
				else if (requiredElements[j].className.indexOf('select')!=-1){
					var checkboxElements=requiredElements[j].getElementsByTagName('input');
					var hasSelectedCheckbox=0;
					for(var t=0;t<checkboxElements.length;t++){
						if(checkboxElements[t].checked){
							hasSelectedCheckbox=1;
						}
					}
					//If no checkbox had been checked
					if(!hasSelectedCheckbox){
						errorFields[nbErrorFields]=requiredElements[j].getElementsByTagName('label')[0].innerHTML;
						requiredElements[j].className+=" error";
						nbErrorFields ++;
						result=false;
					}
					else{
						if(requiredElements[j].className.indexOf('error')!=-1){
							requiredElements[j].className=replacePattern(requiredElements[j].className," error","");
						}
					}
				}
			}
	
			//alert("nb derreur "+nbErrorFields);
	
	
			if(errorFields.length){
				if(errorFields.length==1){
					errorMessage="<h2>"+fieldnotok+" <span class=\"errorField\">"+errorFields[0]+"</span></h2>";
				}
				else{
					errorMessage="<h2>"+fieldsnotok+" </h2><ul class=\"errorField\">";
					for(var t=0;t<errorFields.length;t++){
						errorMessage+="<li>"+errorFields[t]+"</li>";
					}
					errorMessage +="</ul>";
				}
			}
			if(errorMessage){
				alert(requiredfieldserror);
				addMessageForm(errorMessage);
			}
		}
	}
	return result;
}

/*
 * This function generates an error message at the beginning of the form
 * @params : message [the error message to write]
 */
function addMessageForm(message){
	if(document.getElementById("errorMessage")){
		document.getElementById("errorMessage").innerHTML=message;
	}
	else{
		var div=createNode("div");
		div.id="errorMessage";
		div.appendChild(document.createTextNode(message));
		document.getElementById("fm_inscription").prependChild(div);
		//document.getElementById("fm_inscription").innerHTML="<div id=\"errorMessage\">"+message+"</div>"+document.getElementById("fm_inscription").innerHTML;
	}
}

/*
 * This function checks the length of a field (between minLength and maxLength)
 * @params : Field 			[The field to check]
 *			 minLength 		[The minimum length of the field]
 *			 maxLength 		[The maximum length of the field]
 */
function checkFieldLength(Field,minLength,maxLength){
	if(Field.value.length<minLength){
		return tooshort;
	}
	else if (Field.value.length>maxLength){
		return toolong;
	}
	else{
		return -1;
	}
}

/*
 * This function checks the login field
 * It must have a length between 3 and 16
 * @params : loginField [The login input]
 */
function checkLoginField(loginField){
  	var loginMessage=checkFieldLength(loginField,3,16);
  	if(loginMessage!=-1){
		return loginfield+" "+loginMessage;
	}
	else{
		return -1;
	}
}

/*
 * This function checks the password field
 * It must have a length between 6 and 8
 * @params : passwordField [the password field]
 */
function checkPasswordField(passwordField){
	var passwordMessage=checkFieldLength(passwordField,6,8);
	if(passwordMessage!=-1){
		return passwordfield+" "+passwordMessage;
	}
	else{
		return -1;
	}
}

/*
 * This function checks the confirm password field
 * It must be the same as password field
 * It must have a length between 6 and 8
 */
function checkPasswordConfirmField(passwordField,passwordConfirmField){
	var Message=checkFieldLength(passwordConfirmField,6,8);
	if(passwordField.value!=passwordConfirmField.value){
		return confirmpasswordfielddiffpassword;
	}
	else{
		if(Message!=-1){
			return confirmpasswordfield+" "+Message;
		}
		else{
			return -1;
		}
	}
}

/*
 * This function checks the birth date field
 * It must be a valid date
 * @params : dateField [The date input]
 */
function checkDate(dateField){
	var currentdate = new Date();
	var currentyear=currentdate.getFullYear();
	var datearray=dateField.split('/');
	//If the date is not formatted correctly
	if ((datearray.length != 3) || isNaN(parseInt(datearray[0])) || isNaN(parseInt(datearray[1])) || isNaN(parseInt(datearray[2]))){
		return false;
	}
	//Else
	else{
		//We create a date with the same parameter
		var testDate = new Date(eval(datearray[2]),eval(datearray[1])-1,eval(datearray[0]));
		//If the year is not a 4 digits one we make a correction
		var annee = testDate.getYear();
	    if ((Math.abs(annee)+"").length < 4){
	    	annee = annee + 1900;
	    }
	    //If the testDate is the same as the date enter it's a good date. Else it is not correct
	    if (annee > currentyear) {
	    	return wrongBirthDatefield;
		} else if((testDate.getDate() == eval(datearray[0])) && (testDate.getMonth() == eval(datearray[1])-1) && (annee == eval(datearray[2]))){
	    	return 1;
	    } else{
			return false;
		}
	}
}
/*
 * This function gets a date in DDMMAAAA format or DD/MM/AAAA format and check if it's valid
 * It must be a valid date
 * @params : dateField [The date input]
 */
function checkModifyDate(dateField){
	if(dateField.value){
		if (dateField.value.indexOf('/')==-1){
			if(dateField.value.length==8){
				var day=dateField.value.substring(0,2);
				var month=dateField.value.substring(2,4);
				var year=dateField.value.substring(4,8);
				dateField=day+'/'+month+'/'+year;
				if(checkDate(dateField)){
					return dateField;
				}
				else{
					return false;
				}
			}
			else{
				return false;
			}
		}
		else{
			if(checkDate(dateField.value)){
				return dateField.value;
			}
			else{
				return false;
			}
		}
	}
	else{
		return false;
	}
}
/*
 * this function checks the format of email elements
 *
 * @params : email [The email to check]
 */
function checkEmail( email ) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9_\-\.])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email.value)) return wrongFormatEmailfield;
	return -1;
}

/*
 * This function replace all the occurence of 'a' by 'b' in 'expr'
 *
 * @params : expr [The expression in which we want to replace strings]
 *			  a    [The pattern to replace]
 *			  b    [The pattern to use to replace 'a']
 */
function replacePattern(expr,a,b) {
	var i=0
    while (i!=-1) {
    	i=expr.indexOf(a,i);
        if (i>=0) {
        	expr=expr.substring(0,i)+b+expr.substring(i+a.length);
            if(b.length){
	        	i+=b.length;
	        }
		}
	}
    return expr
}
