var movida = {};

movida.defaults = new Class({
	initialize: function(form){
		try {
			$(form).getElements("input[value]").each(function(el){
				el.addEvents({
					'focus': function(){
						if (el.value == '' || el.value == el.defaultValue){
							el.value = '';
						}
					},
					'blur': function(){
						if (el.value == '') {
							el.value = el.defaultValue;
						}
					}
				});
			});
		} catch(E) {}
	}
});

movida.validation = new Class({
	regs: {
		email: /^[A-Za-z0-9-_]{4,}@([A-Za-z0-9-_]{4,}\.)[A-Za-z0-9.]{2,6}$/,
		number: "/\d+/"
	},

	messages: {
		required: "Campo {name} é obrigatório.",
		email: {
			invalid: "Digite um e-mail válido."
		},
		number: {
			invalid: "Digite somente números."	
		}
	},

	initialize: function(form){
		this.blacklist = [];
		this.valid = false;

		this.elements = $(form).getElements(".required");
	},
	
	put: function( element ){
		if (this.blacklist.contains(element) == false){
			this.blacklist.push(element);
			// console.log(this.blacklist);
		}
	},

	del: function( element ){
		if (this.blacklist.contains(element) == true){
			this.blacklist.erase(element);	
			// console.log(this.blacklist);			
		}
	},

	show: function( element, message ){
		var m;
		
		switch(message){
			case "required":
				m = this.messages.required.substitute({name: element.get('name')});
				break;
			case "invalid_email":
				m = this.messages.email.invalid;
				break;
		}

		if(m){ alert(m); }
	},
	
	checkUp: function(){
		if (this.blacklist.length){
			return false;
		}else{return true}
	},

	run: function(){
		this.elements.each(function(el){
				this.validate(el); 
			}.bind(this)
		);
		return this.checkUp();
	},

	validate: function(el){
		var classes = el.get('class').split(' ');
		var result = false;

		if (el.value != '' && el.value != el.defaultValue){
			this.del(el.name);

			$each(classes, function(item){
					switch(item){
						case 'email':
							if (this.regs.email.test(el.value) == false){
								result = false;
								this.put(el.name);
								this.show(el, "invalid_email");
								// console.log(this.valid);
								// console.log(this.blacklist);
							}else{ 
								result = true;
								this.del(el.name);	
								// console.log(this.valid);
								// console.log(this.blacklist);
							}
							break;
					}
				}.bind(this)
			);
		} else {
			this.put(el.name);
			this.show(el, "required");
		}

		return result;
	}
});

window.addEvent('domready', function(){
	var newsletter = $("newsletter");
	var ajaxlog = $("ajaxlog");

	if ($defined(newsletter)){
		var validacao = new movida.validation("newsletter");
		new movida.defaults("newsletter");

		newsletter.addEvent('submit', function(e){
			e.stop();

			if (validacao.run() == true){
				ajaxlog.empty();
				this.set('send', {
					url: this.action,
					method: 'post',
					onSuccess: function(response){
						ajaxlog.set('text', response);
					}					 
				}).send();
			}
		});
	}

	// -------------------------------------------

	var formImovel = $("imvform");
	var logImovel = $("logimovel");

	if ($defined(formImovel)){
		formImovel.addEvent('submit', function(e){
			e.stop();
			logImovel.empty();
			this.set('send', {
				url: this.action,
				method: 'post',
				onSuccess: function(response){
					logImovel.set('html', response);	
				}
			}).send();
		});
	}
});