var POKE = {};

POKE.google_form = function (j) {
    var form = loading = submitted = null;
    var target = 'hidden-target';
    return {
        init : function (form_id, loading_id, submitted_id) {
            form = j('#'+form_id);
            loading = j('#'+loading_id);
            submitted = j('#'+submitted_id);
            form.append('<iframe src="none" id="'+target+'" name="'+target+'" style="width:0px;height:0px;border:0px;"></iframe>');
            form.attr('target', target);
            form.get(0).onsubmit = POKE.google_form.submit;
        },
        submit : function () {
            if (POKE.google_form.validates()){
                loading.show();
                form.css('display', 'none');
                setTimeout(function() {
                    loading.hide();
                    submitted.show();
                    form.find('input[type=text]').val('');
                }, 1000);
                return true;
            }else{
                return false;
            }            
        },
        validates : function () {
            var errors = [];
            j('.error', form).hide();
            j('input[type!=radio], textarea, select', form).each(function(){
                if(!POKE.google_form.is_element_valid(this)){
                    errors.push(j(this).siblings('.error').show().get(0));
                }
            });
            return !errors.length;
        },
		is_element_valid : function (element) {
			for(method_name in POKE.google_form.validators) {
				if($(element).hasClass('v'+method_name)){					
					if(!POKE.google_form.validators[method_name]($(element).val())){
						return false;
					}
				}
			}
			return true;
		},
        validators : {
			required : function (value) {
				return value !== undefined && value.toString().length > 0; 
			},
			email : function (value) {
				if(value === undefined || value.toString() == '') {
					return true;
				}
				return !!value.toString().match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{1,100})+$/);
			},
			password : function (value) {
				if(value === undefined || value.toString() == '') {
					return true;
				}
				return value.toString().length >= 6;
			}
		}
    };
}($);