/*
 * Utlisation de DrFormValidator :
 * 
 * Ajouter la classe "tovalide" sur le formulaire (sur la balise form)
 * Ajouter la classe "need" sur tous les champs obligatoires (sur les balises input) 
 * Ajouter la classe correspondante au type de données a saisir (isint, isfloat, isdate, istext, ismail)
 * Ajouter l'attribut "displayname" pour personnaliser le message d'erreur (facultatif)
 *
 * */

window.addEvent("domready", function() {

	$$('.a_vider').each(function(el, i) {

		el.setProperty('defaultvalue', el.getValue());
		setFocusBlurEvent(el, el.getValue());

	});

	$$(".isfloat").addEvent('keypress', isFloatKey.bindWithEvent());

	$$(".isint").addEvent('keypress', isIntKey.bindWithEvent());

	$$('.isdate').addEvent('keydown', isDateKey.bindWithEvent());
	$$('.isdate').addEvent('keypress', isDateKey.bindWithEvent());

	$$('.istext').addEvent('keydown', istextKey.bindWithEvent());
	$$('.istext').addEvent('change', istextKey.bindWithEvent());

	$$('.isdate').addEvent('click', function(evt) {

		if ($defined(evt.target)) {
			if (evt.target.getValue() == "../../....")
				setCaretPosition(this, 0)

		} else if (evt.srcElement.getValue() == "../../....")
			setCaretPosition(this, 0)

	});
	
	$$('form.tovalide').each(function(el){
		
		el.setProperty('onsubmit', "return false;");
	});
	$$('form.tovalide').addEvent('submit',function(e){
		e = new Event(e);
		e.stop();
		e.stopPropagation();
		e.preventDefault();
		if(valideform(this))
			this.submit();
		else return false;
	});
});

function valideform(conteneur) {
	//console.log(conteneur);

	conteneur = $(conteneur)
	
	vider_avider(conteneur);
	
	var toreturn = true;

	var tovalid = conteneur.getElements("input.need").extend(
			conteneur.getElements("select.need")).extend(
			conteneur.getElements("textarea.need"));

	tovalid.each(function(el, i) {

				if (toreturn) {

					value = el.getValue();
					
					if (el.getValue().length == 0
							|| el.getValue() == el.getProperty('defaultvalue')) {

						if(el.getProperty('displayname') == null){
							alert("le champ \"" + el.getProperty('name')
									+ "\" est obligatoire ");
						}else{
							alert("le champ \"" + el.getProperty('displayname')
									+ "\" est obligatoire ");
						}
						
						el.focus();
						el.fireEvent('focus');

						toreturn = false;
					}

					if (el.hasClass('ismail') && toreturn) {
						
						if (!value.match(/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/)) {
							if(el.getProperty('displayname') == null){
								alert("Le champ \"" + el.getProperty('name')
										+ "\" doit être Valide ");
							}else{
								alert("le champ \"" + el.getProperty('displayname')
										+ "\" doit être Valide ");
							}
							
							el.focus();
							el.fireEvent('focus');
							toreturn = false;

						}
					}

					if (el.hasClass('isint') && toreturn) {

						value = value.replace(',', '.');

						value = parseFloat(value);

						if (value != parseInt(value) || isNaN(value)) {
							if(el.getProperty('displayname') == null){
								alert("Le champ \"" + el.getProperty('name')
										+ "\" doit etre un nombre entier");
							}else{
								alert("Le champ \"" + el.getProperty('displayname')
										+ "\" doit etre un nombre entier");
							}
							
							el.focus();
							el.fireEvent('focus');
							toreturn = false;
						}
					}

					if (el.hasClass('isfloat') && toreturn) {

						value = value.replace(',', '.');

						if (value != parseFloat(value).toString()
								|| isNaN(parseFloat(value))) {
							if(el.getProperty('displayname') == null){
								alert("Le champ \"" + el.getProperty('name')
										+ "\" doit etre un nombre réel");
							}else{
								alert("Le champ \"" + el.getProperty('displayname')
										+ "\" doit etre un nombre réel");
							}
							
							el.focus();
							el.fireEvent('focus');
							toreturn = false;
						}
					}

					if (el.hasClass('isdate') && toreturn) {
						var tab = value.split('/');

						if (value.contains('.') || tab[0] > 31 || tab[1] > 12) {
							if(el.getProperty('displayname') == null){
								alert("Le champ \""
										+ el.getProperty('name')
										+ "\" doit etre une date valide au format ../../....");
							}else{
								alert("Le champ \""
										+ el.getProperty('displayname')
										+ "\" doit etre une date valide au format ../../....");
							}
							
							el.focus();
							el.fireEvent('focus');
							toreturn = false;
						}

					}

					if (el.hasClass('istext')
							&& $defined(el.getProperty('maxchar')) && toreturn) {
						if (el.getValue().length + 1 > el
								.getProperty('maxchar')) {

							el.target.setProperty('value', el.getValue().slice(
									0, el.getProperty('maxchar')));

						}

					}

				}

			});

	return toreturn;
}

function setFocusBlurEvent(el, defaultstring) {

	el.addEvent('focus', function(evt) {
		if (this.getValue() == defaultstring) {
			this.setProperty('value', '');

		}
	});

	el.addEvent('blur', function(evt) {
		if (this.getValue() == '') {
			this.setProperty('value', defaultstring);

		}
	});

}

function isFloatKey(evt) {

	var charCode = evt.code

	// console.log(charCode);

	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46
			&& charCode != 44 && charCode != 45) {
		evt.stop();
		return false;

	}
	return true;
}

function isIntKey(evt) {

	var charCode = evt.code

	// console.log(charCode);

	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45) {
		evt.stop();
		return false;

	}
	return true;
}

function istextKey(evt) {
	evt = new Event(evt);

	if ($defined(evt.target.getProperty('maxchar'))) {
		var charCode = evt.code

		if (charCode == 13 || charCode == 8 || charCode == 37 || charCode == 39)
			return true;

		if (evt.target.getValue().length + 1 > evt.target
				.getProperty('maxchar')) {

			evt.target.setProperty('value', evt.target.getValue().slice(0,
					evt.target.getProperty('maxchar')));

			evt.stop();
			return false;
		}

		return true;
	} else
		return true;

}

function isDateKey(evt) {

	// console.log(evt);

	if (evt.type == "keydown" && evt.code != 8 && evt.code != 46) {

		// console.log('A');

		var charCode = evt.code;

		//console.log(charCode);
		

		if ((evt.code <= 57 && evt.code >= 48 && evt.shift == true) ||(charCode >= 96 && charCode < 106) || charCode == 9 || charCode == 8
				|| charCode == 37 || charCode == 39 || charCode == 46) {

			if (window.ie)
				return true;
			else
				return false;

		} else {
			evt.stop();
			return false
		}

	}

	var target = evt.target;

	if (!$defined(target.tab))
		target.tab = [ '.', '.', '.', '.', '.', '.', '.', '.' ]

	var position = doGetCaretPosition(evt.target);

	// console.log('position : '+position);

	var ref_idx = [ 0, 1, 2, 2, 3, 4, 4, 5, 6, 7, 8 ];
	var ref_pos = [ 1, 3, 4, 6, 7, 8, 9, 10 ];

	var index = ref_idx[position];

	// console.log('index : '+index);

	if (evt.type == "keydown" && evt.code == 8) {

		if (position < 1) {
			evt.stop();
			return false;
		}

		target.tab[index - 1] = '.';

		// console.log(navigator.userAgent);

		var caretdest = ref_pos[index - 2];
	}

	if (evt.type == "keydown" && evt.code == 46) {

		if (position > 9) {
			evt.stop();
			return false;
		}

		target.tab[index] = '.';
		var caretdest = ref_pos[index - 1];
		// console.log('B');
	}

	if (evt.type == "keypress" && evt.code == 8) {
		evt.stop();
		return false;
	}

	if (evt.type == "keypress") {

		if (position > 9) {
			evt.stop();
			return false;
		}

		var charCode = evt.code;

		if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45) {
			// evt.stop();
			// console.log('C');
			return false;

		}

		if (isNumeric(String.fromCharCode(charCode))) {
			target.tab[index] = evt.key;

		}

		var caretdest = ref_pos[index];
	}

	var result = target.tab[0] + target.tab[1] + "/" + target.tab[2]
			+ target.tab[3] + "/" + target.tab[4] + target.tab[5]
			+ target.tab[6] + target.tab[7];
	evt.target.setProperty('value', result);

	// console.log(caretdest);

	setCaretPosition(evt.target, caretdest);

	// console.log('D');

	evt.stop();
	return false;

}

function doGetCaretPosition(ctrl) {
	var CaretPos = 0; // IE Support
	if (document.selection) {
		ctrl.focus();
		var Sel = document.selection.createRange();
		Sel.moveStart('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
	return (CaretPos);
}

function setCaretPosition(ctrl, pos) {

	if (ctrl.setSelectionRange) {
		ctrl.focus();
		ctrl.setSelectionRange(pos, pos);
	} else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}

}

function isNumeric(sText)

{
	var ValidChars = "0123456789.";
	var IsNumber = true;
	var Char;

	for (i = 0; i < sText.length && IsNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}

function vider_avider(conteneur) {
	conteneur.getElements('.a_vider').each(function(el, i) {

		if (el.getValue() == el.getProperty('defaultvalue'))
			el.setProperty('value', '');
	});
}


var timercounter = 0;

function nextImage() {
	var conteneur = $$('.idx-visioneuse-conteneur')[0];

	var current = conteneur.getLast();

	var next = current.getPrevious();

	next.remove();
	next.setStyle('left', '960px');
	next.injectAfter(current);
	var myEffects = new Fx.Styles(next, {
		duration : 500,
		transition : Fx.Transitions.Cubic.easeInOut
	});

	myEffects.start({
		'left' : [ 960, 0 ]
	});

	myEffects.addEvent('onComplete', function() {
		current.remove();
		current.injectTop(conteneur);
	});

	timercounter = 0;

}

function previousImage() {

	var conteneur = $$('.idx-visioneuse-conteneur')[0];

	var current = conteneur.getLast();
	var previous = conteneur.getFirst();

	previous.remove();
	previous.setStyle('left', '-960px');
	previous.injectAfter(current);
	var myEffects = new Fx.Styles(previous, {
		duration : 500,
		transition : Fx.Transitions.Cubic.easeInOut
	});

	myEffects.start({
		'left' : [ -960, 0 ]
	});

	timercounter = 0;
}

function timerExec() {
	timercounter++;

	if (timercounter > 5) {
		nextImage();
	}
}

