$.fn.extend({
	valid: function(type) {
		return $(this).removeAttr('aria-invalid').parent().removeClass();
	},
	invalid: function(type) {
		if(type) {
			return $(this).attr('aria-invalid', 'true').parent().removeClass('empty').addClass('error invalid-' + type);
		} else {
			return $(this).attr('aria-invalid', 'true').parent().removeClass().addClass('error empty');			
		}
	}
})

var Engine = {
	enhancements: {
		contactForm: {
			toggleFields: function() {
				$('#form-contact .checkbox:has(div)').each(function(){
					var div = $('div', this);
					
					if(!$('input', this)[0].checked) {
						div.hide();
					}
					
					$('input:checkbox', this).change(function(){
						if(this.checked) {
							div.show().find('input').first().focus();
						} else {
							div.hide();
						}
					});
				});
			},
			
			checkField: function(field) {
				if(field.id.match('email')) {
					if(field.value.match(/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{1,4}$/)) {
						$(field).valid();
					} else {
						field.value.length > 0 ? $(field).invalid('email') : $(field).invalid();
					}
				} else if(field.id.match('url')) {
					if(field.value.match(/^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w\.-]*)*\/?$/)) {
						$(field).valid();
					} else {
						field.value.length > 0 ? $(field).invalid('url') : $(field).invalid();
					}
				} else {
					field.value ? $(field).valid() : $(field).invalid();
				}
			},
			
			message: function(form) {
				// if no message
				if(!$('.message', form).length) {
					var msg = $('<ul />', {
							'class': 'message error',
							'role': 'alert'
						});
					
					msg.insertAfter('button', this)
				} else {
					var msg = $('.message', form);
				}

				var	fields = $('input[aria-required]', form).parent(),
					required = '<li class="required">Zaznaczone pola są wymagane.</li>',
					email = '<li class="email">Niepoprawny adres e-mail.</li>',
					url = '<li class="url">Niepoprawny adres strony WWW.</li>';
				
				// required fields
				if(fields.filter('.empty').length) {
					if(!$('.required', msg).length) {
						msg.prepend(required);
					}
				} else {
					$('.required', msg).remove();
				}
								
				// valid email?
				if(fields.filter('.invalid-email').length) {
					if(!$('.email', msg).length) {
						 msg.append(email);
					}
				} else {
					$('.email', msg).remove();
				}
				
				// valid url?
				if(fields.filter('.invalid-url').length) {
					if(!$('.url', msg).length) {
						msg.append(url);
					}
				} else {
					$('.url', msg).remove();
				}

				// errors? 
				if($('.error:not(ul)', form).length) {
					return false;
				} else {
					$('.message', form).remove();
					return true;
				}
			},
			
			validate: function() {
				$('input, textarea').blur(function(){
					if($(this).attr('aria-required')) {
						Engine.enhancements.contactForm.checkField(this);
						Engine.enhancements.contactForm.message();
					}
				});
				
				$('#form-contact').submit(function(){
					$('input[aria-required], textarea[aria-required]', this).each(function(){
						Engine.enhancements.contactForm.checkField(this);
					});
					
					return Engine.enhancements.contactForm.message();
				})
			}
		},
		
		clientsRotator : function() {
			var clients = $('.clients ul li'),
				array = [],
				index = 0,
				i = 0;

			 var showClients = function() {
				i++;
				if(i == array.length) {
					i = 0;
				}

				index = array[i];
				clients.filter(':visible').fadeOut(1000, function() {
				  clients.filter(':eq(' + index + ')').fadeIn(1000);
				});
			};

			clients.each(function(index){
			    array.push(index);
			});

			clients.hide().filter(':eq(' + array[0] + ')').fadeIn(1000);
			
			var interval = setInterval(function() {
				showClients();
			}, 6000);

		}
	}
}

$(function(){
	Engine.enhancements.contactForm.toggleFields();
	Engine.enhancements.contactForm.validate();
	Engine.enhancements.clientsRotator();
});

