document.getElementsByAttribute = function(attribute, value, tagName, parentElement) {
	var children = ($(parentElement) || document.body).getElementsByTagName((tagName || '*'));
	return $A(children).inject([], function(elements, child) {
		var attributeValue = child.getAttribute(attribute);
		if(attributeValue != null) {
			if(!value || attributeValue == value) {
				elements.push(child);
			}
		}
		return elements;
	});
}

Castor = function() {}

Castor.prototype.lier = function() {
	var objet = arguments[0];	//premier argument : objet de référence
	var methode = arguments[1]; //méthode appellée
	
	if (methode==undefined) {
		throw("la méthode liée n'existe pas");
	}
	
	var arg = new Array(); //tableau des autres arguments
	for(var i=2; i<arguments.length;i++) {arg.push(arguments[i]);}				
	return function(e) {
		methode.apply(objet, [e].concat(arg)); //rappel
	}
}

Geod = function(data) {
	this.Cs = new Castor();	
	this.i=0;
	this.data=data;
	this.compt = 0;
	this.geocoder = new google.maps.ClientGeocoder();
}

Geod.prototype.def = function(coord) {
if(coord===null) {
	//alert(this.data[this.i].ad);
	this.compt++;
	
	if (this.compt==20) {
		alert(this.data[this.i].ad);
		this.compt=0;
		this.i++;
	}
	} else {
		this.compt=0;
	createMarker(coord, this.data[this.i].ct);	
	this.i++;
}

	this.suivant();
}

Geod.prototype.suivant = function() {
	if (this.data[this.i]!==undefined) {
		this.geocoder.getLatLng(this.data[this.i].ad, this.Cs.lier(this, this.def));
	}
}

function _checkEmail(email) {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email)) {return false;} else {return true;}
}

function getCorrespondants(event) {

	var elt = Event.element(event);	
	Event.stop(event);
	
	//REQUESTER
	new Ajax.Request(DOMAIN+'getCorrespondants.cs',
	{	method: 'post',
		postBody:'',
		onComplete: function(requester) {
				//alert(requester.responseText);
				var data = $A(eval(requester.responseText));
				
								
				var Ge = new Geod(data);
							
				Ge.suivant();
				
			}
		}
	);
}


function initForm() {
	
	var _req = document.getElementsByAttribute('required', 1, 'input', 'candidature');
	
	for (var i=0; i<_req.length; i++) {
		Event.observe($(_req[i].id), "blur", checkRequired);
		new Insertion.Top($(_req[i].id).up(), $('error_html').innerHTML);
	}
	
	var _req = document.getElementsByAttribute('required', 1, 'select', 'candidature');

	for (var i=0; i<_req.length; i++) {
		Event.observe($(_req[i].id), "blur", checkRequired);
		new Insertion.Top($(_req[i].id).up(), $('error_html').innerHTML);
	}
	
	var _chk = document.getElementsByAttribute('check_email', 1, 'input', 'candidature');
	
	for (var i=0; i<_chk.length; i++) {
		Event.observe($(_chk[i].id), "blur", checkEmail);
		new Insertion.Top($(_chk[i].id).up(), $('error_email_html').innerHTML);
	}
	
	var _phn = document.getElementsByAttribute('check_phone', 1, 'input', 'candidature');
	
	for (var i=0; i<_phn.length; i++) {
		Event.observe($(_phn[i].id), "blur", checkPhone);
		new Insertion.Top($(_phn[i].id).up(), $('error_phone_html').innerHTML);
	}
	
}

function initFormDon() {
	
	var _req = document.getElementsByAttribute('required', 1, 'input', 'don');
	
	for (var i=0; i<_req.length; i++) {
		Event.observe($(_req[i].id), "blur", checkRequired);
		new Insertion.Top($(_req[i].id).up(), $('error_html').innerHTML);
	}
	
	var _req = document.getElementsByAttribute('required', 1, 'select', 'don');

	for (var i=0; i<_req.length; i++) {
		Event.observe($(_req[i].id), "blur", checkRequired);
		new Insertion.Top($(_req[i].id).up(), $('error_html').innerHTML);
	}
	
	var _chk = document.getElementsByAttribute('check_email', 1, 'input', 'don');
	
	for (var i=0; i<_chk.length; i++) {
		Event.observe($(_chk[i].id), "blur", checkEmail);
		new Insertion.Top($(_chk[i].id).up(), $('error_email_html').innerHTML);
	}

	
}

function checkRequired(event, elt) {
	
	var _bool = true;
	
	if (event!==null) {
		var elt = Event.element(event);	
		Event.stop(event);
	}

	var error = $A(elt.up().getElementsByClassName('_req')).first();

	if (error!=undefined && $F(elt.id)!="") {			
		Element.removeClassName(error, 'error_visible');
	} else if (event==null) {		
		Element.addClassName(error, 'error_visible');
		_bool = false;
	}	

	return _bool;
}

function checkEmail(event, elt) {
	
	var _bool = true;
	
	if (event!==null) {
		var elt = Event.element(event);	
		Event.stop(event);
	}
	
	if ($F(elt.id)=="") {return _bool;}
	
	var error = $A(elt.up().getElementsByClassName('_chk')).first();
	
	if (error!=undefined && _checkEmail($F(elt.id))) {			
		Element.removeClassName(error, 'error_visible');
	} else {
		Element.addClassName(error, 'error_visible');
		_bool = false;
	}
	
	return _bool;
	
}

function checkPhone(event, elt) {

	var _bool = true;
	
	if (event!==null) {
		var elt = Event.element(event);	
		Event.stop(event);
	}
	
	if ($F(elt.id)=="") {return _bool;}
	
	var error = elt.up().getElementsByClassName('_phn').first();
	
	if (error!=undefined && $F(elt.id).length==10 && $F(elt.id).match(/[^0-9]/)==null) {			
		Element.removeClassName(error, 'error_visible');
	} else {
		Element.addClassName(error, 'error_visible');
		_bool = false;
	}
	
	return _bool;
	
}

function checkForm(event) {
	
	var _bool = true;
	
	var elt = Event.element(event);	
	Event.stop(event);

	var _req = document.getElementsByAttribute('required', 1, 'input', 'candidature');

	for (var i=0; i<_req.length; i++) {
		if (!checkRequired(null, _req[i]) && _bool) {_bool=false;}
	}
	
	var _req = document.getElementsByAttribute('required', 1, 'select', 'candidature');

	for (var i=0; i<_req.length; i++) {
		if (!checkRequired(null, _req[i]) && _bool) {_bool=false;}
	}
	
	
	var _chk = document.getElementsByAttribute('check_email', 1, 'input', 'candidature');
	
	for (var i=0; i<_chk.length; i++) {
		if (!checkEmail(null, _chk[i]) && _bool) {_bool=false;}
	}
	
	var _phn = document.getElementsByAttribute('check_phone', 1, 'input', 'candidature');
	
	for (var i=0; i<_phn.length; i++) {
		if (!checkPhone(null, _phn[i]) && _bool) {_bool=false;}
	}
	
	if (_bool == true) {
		$('deposer').disable();
		$('candidature').submit();
	}
	
}

function checkFormDon(event) {
	var _bool = true;
	
	var elt = Event.element(event);	
	Event.stop(event);

	var _req = document.getElementsByAttribute('required', 1, 'input', 'votredon');

	for (var i=0; i<_req.length; i++) {
		if (!checkRequired(null, _req[i]) && _bool) {_bool=false;}
	}
	
	var _req = document.getElementsByAttribute('required', 1, 'select', 'votredon');

	for (var i=0; i<_req.length; i++) {
		if (!checkRequired(null, _req[i]) && _bool) {_bool=false;}
	}
	
	var _chk = document.getElementsByAttribute('check_email', 1, 'input', 'votredon');
	
	for (var i=0; i<_chk.length; i++) {
		if (!checkEmail(null, _chk[i]) && _bool) {_bool=false;}
	}
	
	if (_bool == true) {
		$('paiement').disable();
		
		$('donvalue').enable();
		
		//REQUESTER
		new Ajax.Request(DOMAIN+'getPaiement.cs',
			{method: 'post',
			postBody: Form.serialize($('votredon')),
			onComplete:
				function(requester) {			
					if (requester.responseText!="") {
						$('votredon').style.display="none";
						if (requester.responseText!='error') {
							$('cb').innerHTML = requester.responseText;
						} else {
							$('errorpaiement').style.display="";
						}
					}
				}
			}
		);
		
		$('donvalue').disable();			
	}	
}

function checkSearch(event) {		
	if ($F('search_string').length<3) {
		Event.stop(event);
		Element.addClassName($('search_error'), 'error_visible');
	}	else {
		Element.removeClassName($('search_error'), 'error_visible');
	}
}


function checkRadioDon(event) {
	var elt = Event.element(event);	
	
	var value = $(elt.id).value;
	
	if (value!='') {
		
		$('donvalue').value = value + '.00';
		$('donvalue').disable();
		checkRequired(null, $('donvalue'));
		
	} else {
		$('donvalue').value = '';
		$('donvalue').enable();
		$('donvalue').focus();
	}
	
}

function checkDonValue(event) {
	var elt = Event.element(event);
	
	if ($(elt.id).value=='') {return;}
	
	$(elt.id).value = $(elt.id).value.replace(/,/, '.');
	$(elt.id).value = $(elt.id).value.replace(/[^0-9\.]*/g, '');
	
	var tab = $(elt.id).value.match(/([^\.]*)(\.{0,1})([0-9]{0,2})/);
	
	if (tab[2]=='' || tab[3]=='') {
		$(elt.id).value = tab[1]+'.00';
	} else if (tab[3].length==1) {
		$(elt.id).value = tab[1]+'.'+tab[3]+'0';
	} else {
		$(elt.id).value = tab[1]+'.'+tab[3];
	}
	
	if ($(elt.id).value=='0.00') {
		$(elt.id).value = '';
	}
	
}

