/** check_form_activaion.js
 *
 * D??pend de : function.js (fonctions de v??rification formulaire)
 *
 * Fonction permettant de faire la v??rification ?? la vol??e des champs du formulaire d'activation de compte
 *
 */

//var FORM_ID = 'form_activation';
var ERROR_BLOCK_ID = 'span_error';
var LST_INPUT_CHECKED_ID = 'input_checked'; //Champ hidden contenant les id des champs ?? v??rifier s??par??s par des virgules
var IMAGE_VALID = '/design/eqo/images/html/coche_verte.png';
var IMAGE_ERROR = '/design/eqo/images/html/croix_rouge.png';


//LA fonction.
function addEvent(obj, evType, fn){
 if (obj.addEventListener){
	 obj.addEventListener(evType, fn, false);
	 return true;
 } else if (obj.attachEvent){
	 var r = obj.attachEvent("on"+evType, fn);
	 return r;
 } else {
	 return false;
 }
}


//Initialisation des Event Listener
function init_form() {
	var form = document.getElementById( FORM_ID );
	if( form ) {
		if( document.getElementById( LST_INPUT_CHECKED_ID ) ) {
			var reqfields = document.getElementById( LST_INPUT_CHECKED_ID ).value.split( ',' );

			for( var i = 0; i < reqfields.length; i++ )
			{
				// check if required field is there
				var element = document.getElementById( reqfields[i] );
				if( !element ) { continue; }

				switch (reqfields[i]) {
					case 'inscription' :
						addEvent(element, 'blur', check_onp_number );
						check_onp_number( element );
						break;
					case 'email' :
						addEvent(element, 'blur', check_email );
						check_email( element );
						break;
					case 'date_naissance' :
						addEvent(element, 'blur', check_date );
						check_date( element );
						break;
					default:
						//Contr??les standards
						switch(element.type.toLowerCase()) {
							case 'text':
							case 'textarea':
								addEvent(element, 'blur', check_default_value );
								check_default_value( element );
								break;
							case 'checkbox':
								addEvent(element, 'blur', check_checkbox );
								check_checkbox( element );
								break;
							case 'select-one':
								addEvent(element, 'blur', check_select );
								addEvent(element, 'change', check_select );
								check_select( element );
								break;
						}
						break;
				}

				//field_status_image( element, false);

			}
		}
	}
}

//Fonction de mise ?? jour de l'image juxtapos??e ?? un champ de formulaire
function field_status_image(field, flag) {
	if(field.nextSibling && /img/i.test(field.nextSibling.nodeName))
	{
		if(field.parentNode){
			field.parentNode.removeChild(field.nextSibling);
		}
	}

	var img=document.createElement('img');
	if(flag) {
		img.alt = 'Ce champ est valide';
		img.src = IMAGE_VALID;
		img.title = img.alt;
	}else {
		img.alt = 'Ce champ est invalide';
		img.src = IMAGE_ERROR;
		img.title = img.alt;
	}
	
	if(field.parentNode){
		field.parentNode.appendChild( img );
	}
}

function update_field( field, value){
	field.value=value;
}

function check_form_activation(form) {

}


//
//Event listener de v??rification des champs
//
function check_onp_number( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;

	var valid = (field.value != '');

	//if(!valid) create_error_message();

	field_status_image( field, valid );

	return valid;
}

function check_email( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;
	
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9_\-\.])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var valid = filter.test( field.value );

	//if(!valid) create_error_message();

	field_status_image( field, valid );

	return valid;
}

function check_date( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;

	var valid = checkModifyDate( field );

	//if(!valid) create_error_message();
	if(valid){
		update_field( field, valid);
	}
	field_status_image( field, valid );

	return valid;
}

function check_default_value( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;

	var valid = (field.value != '');
	
	//if(!valid) create_error_message();

	field_status_image( field, valid);

	return valid;
}

function check_checkbox( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;

	var valid = field.checked;

	//if(!valid) create_error_message();

	field_status_image( field, valid );

	return valid;
}

function check_select( ev ) {
	if(ev.target) var field =	ev.target ;
	else if(ev.srcElement) var field = ev.srcElement;
	else var field = ev;

	var valid = ( field.selectedIndex && field.selectedIndex != 0 );
	
	//if(!valid) create_error_message();

	field_status_image( field, valid );

	return valid;
}
//
//Fin d??claration des event listener

function create_error_message() {
	var form = document.getElementById( FORM_ID );

	var fieldset = form.getElementsByTagName( 'fieldset' );
	fieldset = fieldset[0];

	if(!document.getElementById( ERROR_BLOCK_ID )) {
		var span = document.createElement('p');
		span.id = ERROR_BLOCK_ID;
		span.className = 'error';
		span.innerHTML = 'Certains champs sont invalides';

		fieldset.appendChild( span );
	}

}


addEvent( window, 'load', init_form );
