/**
 * Contact javascript controls.
 */
Contact = {
    initialize: function() {
        $('.form-1').each(function(idx, elem) {
            $(elem).data('clicked', false);
            $(elem).data('placeholder', $(elem).val());
        });
        $('.form-1').focus(function() {
            if (!$(this).data('clicked')) {
                $(this).val('');
                $(this).data('clicked', true);
            }
        });
        $('.form-1').focusout(function() {
            if ($(this).data('clicked') && $(this).val() == '') {
                $(this).val($(this).data('placeholder'));
                $(this).data('clicked', false);
            }
        });
        
        $('#left_contact_form .submit_button').click(function() {
            $('#left_contact_form').submit();
            return false;
        });
        $('#left_contact_form').submit(Contact.validate_left_contact_form);
        
        $('#mid_contact_form .submit_button').click(function() {
            $('#mid_contact_form').submit();
            return false;
        });
        $('#mid_contact_form').submit(Contact.validate_mid_contact_form);
    },
    validate_left_contact_form: function() {
        var errors = 0;
        var ajuste = 14;
        
        var query = $('#left_contact_form #query');
        query.height(query.height() + query.data('ajuste'));
        
        $('#left_contact_form .name').hide();
        $('#left_contact_form .phone').hide();
        $('#left_contact_form .email').hide();
        $('#left_contact_form .query').hide();
        
        if (!query.data('clicked') || query.val() == '') {
            $('#left_contact_form .query').show('slow');
            query.height(query.height() - ajuste);
            errors++;
        }
        
        var name = $('#left_contact_form #name');
        if (!name.data('clicked') || name.val() == '') {
            $('#left_contact_form .name').show('slow');
            query.height(query.height() - ajuste);
            errors++;
        }
            
        var phone = $('#left_contact_form #phone');
        if (!phone.data('clicked') || phone.val() == '') {
            $('#left_contact_form .phone').show('slow');
            query.height(query.height() - ajuste);
            errors++;
        }
        
        var email = $('#left_contact_form #email');
        if (!email.data('clicked') || email.val() == '' || !Contact.validate_email(email.val())) {
            $('#left_contact_form .email').show('slow');
            query.height(query.height() - ajuste);
            errors++;
        }
        
        if (errors == 0) {
            query.data('ajuste', 0);
            Contact.send({
                params: $('#left_contact_form').serialize(),
                update: '#left_contact_form'
            });
        }
        else {
            query.data('ajuste', ajuste * errors);
        }
        
        return false;
    },
    validate_mid_contact_form: function() {
        var errors = 0;
        
        $('#mid_contact_form .name').hide();
        $('#mid_contact_form .phone').hide();
        $('#mid_contact_form .email').hide();
        $('#mid_contact_form .query').hide();
        
        var query = $('#mid_contact_form #query');
        if (!query.data('clicked') || query.val() == '') {
            $('#mid_contact_form .query').show('slow');
            errors++;
        }
        
        var name = $('#mid_contact_form #name');
        if (!name.data('clicked') || name.val() == '') {
            $('#mid_contact_form .name').show('slow');
            errors++;
        }
            
        var phone = $('#mid_contact_form #phone');
        if (!phone.data('clicked') || phone.val() == '') {
            $('#mid_contact_form .phone').show('slow');
            errors++;
        }
        
        var email = $('#mid_contact_form #email');
        if (!email.data('clicked') || email.val() == '' || !Contact.validate_email(email.val())) {
            $('#mid_contact_form .email').show('slow');
            errors++;
        }
        
        if (errors == 0) {
            query.data('ajuste', 0);
            Contact.send({
                params: $('#mid_contact_form').serialize(),
                update: '#mid_contact_form'
            });
        }
        
        return false;
    },
    validate_email: function(val){

        var filter=/^[A-Za-z][A-Za-z0-9_]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
        if (val.length == 0 ) return true;
           if (filter.test(val))
              return true;
           else
            return false;
    },
    /**
     * Sends contact to admin. 
     * 
     * @example options = {
     *   params : 'paramName=param1&paramValue=value1',
     *   update : '#some_div'
     * } 
     * 
     * @param   options, keys: params and update (strings)
     */
    send: function(options) {
        $.ajax({
            type:     'POST',
            dataType: 'html',
            data:     options.params,
            url:      '/contacto/index.php',
            beforeSend:function(XMLHttpRequest){
                $(options.update + ' .loader').show();
            },
            success: function(data, textStatus){
                $(options.update).html(data);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                console.debug('Error reponse: begin');
                console.debug(XMLHttpRequest);
                console.debug(textStatus);
                console.debug(errorThrown);
                console.debug('Error reponse: end');
            },
            complete:function(XMLHttpRequest, textStatus){
                // does nothing
            }
        });
    }
}

$(document).ready(function() {
   Contact.initialize();
});
