// VALIDEFORM
// Script by cob SOUS LICENCE GNU
// Verif de form. Librement inspirer (et recodé par mes soins) du script de youngpup.net "Client Validator".

// Donc. Ca fonctionne sur l'id. A chaque champs que l'on désire verifier on attribut un des id suivants. 
// mytexte --> Pour un champs obligatoire.
// mynumber --> Pour une valeur numerique non obligatoire.
// specialchar --> Verifie que le champs contienne que une serie de characteres specifique. 
// pass --> Pour un pass. Va obligatoirement en paire entre un champ "pass" et un "repass". Si ces champs sont absents, la validation s'effectue qd meme sur le reste. 
// mymail --> Pour verifier un mail du style x@x.xx
// myselect --> Pour un liste deroulante
// mypreview --> Pour un GIF de 50*50px. La verif de taille fonctionne que sous IE 5.5++
// myimg --> Poun un doc au format gif, jpg, jpeg, png ou swf
// Et s'il n'y a pas d'id. Pas de verif. C'est tout :)



// On creait les divs qui recevront les images avant les verifs de format et dimensions.
document.write ("<div style='position: absolute; visibility: hidden;'><img src='' id=loadpreview></div>");

var ie = document.all?true:false 

function getImageSize(thePreview){
	
	el_width = thePreview.offsetWidth 
	el_height = thePreview.height
}

function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function isDate (day,month,year) { // function qui valide si la date est correct.
    var today = new Date();
    year = ((!year) ? y2k(today.getYear()):year);
    month = ((!month) ? today.getMonth():month-1);
    if (!day) return false
    var test = new Date(year,month,day);
    if ( (y2k(test.getYear()) == year) &&
         (month == test.getMonth()) &&
         (day == test.getDate()) )
        return true;
    else
        return false
}


function isValid(string) { // function qui verifie que l'id specialchar ne contient que les elements specifiés.
	var allowed = 'abcdefghijklmnopqrstuvwxyz0123456789._'; // Les characters acceptés.
	string = document.getElementById(string).value
    for (var i=0; i< string.length; i++) {
    if (allowed.indexOf(string.charAt(i)) == -1)
    return false;
    }
    return true;
}

function isMail(s) { // function qui valide le mail
	var temp = s.replace(/\s/g, "")
	return (temp.match(/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/)) && temp.charAt(0) != "." && !(temp.match(/\.\./))
}

function isUrl(s) { // function qui valide le mail
	var temp = s.replace(/\s/g, "")
	return (temp.match(/http:\/\/([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}/)) && temp.charAt(0) != "." && !(temp.match(/\.\./))
}

function getFileExtension(theFile){ // function qui reccupere l'extension des fichiers
	theFile = theFile.toLowerCase(); // Convertion en minuscule
	pos = theFile.lastIndexOf("."); // pos du dernier point
	prefixe = theFile.substr(-pos,pos); // Nom du file
	sufixe = theFile.substr(pos+1); // Son extension
}

function loadfile(el_value){ // function qui charge le file de mypreview pour verifier ses dimenssions dans validate()
document.getElementById('loadpreview').src = "file://" + el_value;
}


function validate(myForm) { // START function qui verifie les éléments de la form
myFormName = myForm.name;
nbElements = myForm.elements.length // Combien d'elements dans la form.
var errors = []; // array error. Vide au depart.
i = 0;
datechecked = 0;
while(i < nbElements){ // On fait une boucle pour lister tout les champs de la form.

	// Recup des parametres de base
	el_value = myForm.elements[i].value; // la value de l'element
	el_name = myForm.elements[i].name; // le nom de l'element
	el_type = myForm.elements[i].id; // le type de l'element
	el_checked = myForm.elements[i].checked
	
	if(el_name == 'title') el_name = 'Titre';
	if(el_name == 'description') el_name = 'Description ';
	if(el_name == 'keywords') el_name = 'Mots clefs ';
	if(el_name == 'vignette') el_name = 'Vignette  ';
	if(el_name == 'author') el_name = 'Auteur';
	if(el_name == 'name') el_name = 'Nom';
	if(el_name == 'mail') el_name = 'Mail';
	if(el_name == 'rights') el_name = 'Droits d\'usage';
	if(el_name == 'IDcategorie') el_name = 'Categorie';
	 
	
	// Serie de filtrage en fonction du type
	//if (el_type == "date" && !isDate(myForm.myDay.value,myForm.myMonth.value,myForm.myYear.value)) { errors.push("- Date invalide"); }
     if (el_type == "date" && !isDate(myForm.myDay.value,myForm.myMonth.value,myForm.myYear.value)) { errors.push("- Date invalide"); }

	if (el_type == "mytexte" && el_value == "" | el_value == "example") {errors.push("- "+el_name+" est vide.");} // Si le champ est alpha (id=mytexte) et qui soit vide on ajoute l'erreur dans la liste ... des erreurs.
	
	//if (el_type == "mynumber" && el_value != "") {errors.push("- "+el_name+" est vide.");} // Si le champ n'est pas numerique (id=mynumber) on ajoute l'erreur dans la liste ... des erreurs.
	if (el_type == "mynumber" && el_value != "" && isNaN(el_value)) {errors.push("- "+el_name+" n'est pas numerique, ou contient des espaces");} // Si le champ n'est pas numerique (id=mynumber) on ajoute l'erreur dans la liste ... des erreurs.
	
	if (el_type == "mymail" && !isMail(el_value)) { errors.push("- "+el_name+" n'est pas valide.");} // On verifie le champ mail.
	if (el_type == "pass" && myForm.pass.value=="" | myForm.repass.value!=myForm.pass.value){errors.push("- Vérifiez votre mot de passe.");}
	if (el_type == "myselect" && el_value == "") {errors.push("- "+el_name+" n'est pas selectionné.");} // Si le champ est alpha (id=mytexte) et qui soit vide on ajoute l'erreur dans la liste ... des erreurs.
	
	if (el_name == "renseignement_lien") {
		if (el_type == "myurl" && el_value != "" && el_value != "http://" && !isUrl(el_value)) {errors.push("- url n'est pas valide");} 
	} else if (el_name == "url"){
		if (el_type == "myurl" && el_value != "" && !isUrl(el_value)) {errors.push("- url n'est pas valide");} 
	}
	
	if (el_type == "specialchar" && !isValid(el_type)) {errors.push("- bad chars.");} // Verif du champs si il contient que les elements specifies dans la function isValid(string)

	if (el_type == "mypreview"){ // Verif de la preview si le format est bien en gif et les dimensions sont en 50*50px
		document.getElementById('loadpreview').src = "file://" + el_value;
		getImageSize(document.getElementById('loadpreview'));
		getFileExtension (el_value);
		if (sufixe!="gif" && sufixe!="jpg") {errors.push("- " + el_name + " n'est pas un GIF ni un JPG.");} 
		if (ie){
			if (el_width != "175" && el_height != "115"){errors.push("- " + el_name + " ne fait pas 175*115 pixels.");} 
		}
	}
	
	if (el_type == "myimg") {
	getFileExtension (el_value);
		if (sufixe!="jpg" && sufixe!="gif" && sufixe!="png" && sufixe!="swf" && sufixe!="jpeg") { // Exemple de controle du format
		errors.push("- "+ el_name + " au mauvais format (gif, jpg, jpeg, png ou swf)" );
		}
	}
i ++;
}		
	
	if (errors.length > 0) {  // Si le nombre d'erreur est supperieur a 0, on envoi le message dans <p id=error></p>
	document.getElementById("error").innerHTML = "<br>"+errors.join("<br>") + "<br><br>"; 
	} else{ // Sinon, tout oki, on poursuit.
 	myForm.submit();
	}
} 