var FormHandler = Class.create({

    // options
    option : {
        form: null
    },

    initialize : function(options) {

        // setup options
        this.options = options;
        this.analyseForm();
        this.selectbox();
    },
    
    selectbox: function() {
		$("select").each(function(){
			$(this).wrap("<div class='selector'></div>");
			
			var spanText = $(this).attr('title');
			var span = "<span class='select'>" + spanText + "</span>";
			
			$(this).before(span)
			.fadeTo(1, 0)
			.focus(function(){
				$(this).parents(".selector").addClass("focus");
			})
			.change(function(){
				$(this).siblings("span").text($(this).children(":selected").text());
			}).click ( function (){
				$(this).siblings("span").text($(this).children(":selected").text());		
			}) 
			.blur(function(){
				$(this).parents(".selector").removeClass("focus");
			});	
		});
		$('select').trigger("change");
    },
    
    analyseForm: function () {
        var rules = {};
        var messages = {};
        $(this.options.form).find('div.entry').each(function(){
            if ($(this).find('div.checkbox').length == 0 && $(this).find('div.select').length == 0 ) {
            	var inputHolder = $(this).find('div.input');
                var elm = $(this).find('input, textarea');
                rules[elm.attr('name')] = {
                    required: $(this).hasClass('required'),
                    email: inputHolder.hasClass('email'),
                    digits: inputHolder.hasClass('number'),
                    notags: true,
                    minlength: 2
                };
                messages[elm.attr('name')] = {
                    required: ($(this).hasClass('required')) ? 'Dit is een verplicht veld' : '',
                    email: 'Vul een geldig emailadres in.',
                    digits: 'Dit veld mag alleen nummers bevatten.',		
                    notags: 'Er mogen geen tags gebruikt worden.',
                    minlength: 'Vul minimaal 2 karakters in.'
                };
            }
        });
        
        $(this.options.form).validate({
            rules: rules,
            messages: messages,
            errorPlacement: function(error, element) {
                var obj = element.parent().next('div.icon');
    			error.insertAfter(obj);
    			obj.attr('class','icon invalid');
            },
            success: function(label) {
            	label.prev('div.icon').attr('class','icon valid');
                label.remove();
            },
            submitHandler: function(form) {
                form.submit();
            }
        });	
    }
});
