/* module pattern + jQuery hotness */

function library(module) {
    $(function(){
        if (module.init) {
            module.init();
        }
    });
    return module;
}

var anagram = library(function(){
    var options = {
        shutter_speed: 600,
        fade_speed: 400
    }
    
    var placeholder = {
        name: 'Name',
        email: 'Email Address',
        message: 'Tell us about your project'
    }
    
    var open = function(elements) {
        elements.center_content.fadeOut(options.fade_speed, function(e){
            elements.top.animate({'top': '-195px'}, options.shutter_speed);
            elements.bottom.animate({'bottom': '-195px'}, options.shutter_speed, function(e){
                elements.contact.css({'z-index':14}).fadeIn(options.fade_speed);
                elements.contact_btn.addClass('open');
            });            
        });
    }
    
    var close = function(elements) {
        elements.contact.fadeOut(options.fade_speed, function(){
            elements.contact.css({'z-index':0});
            elements.top.animate({'top': 0}, options.shutter_speed);
            elements.bottom.animate({'bottom': 0}, options.shutter_speed, function(e){
                elements.center_content.fadeIn(options.fade_speed);
            });
            elements.contact_btn.removeClass('open');
        });
    }
    
    var submit_form = function(form, elements) {
        
        var errors = false;
        elements.contact_form.find('input, textarea').each(function(){
            var ele = $(this), 
                ele_id = ele.attr('id'), 
                ele_val = ele.val(),
                pl = placeholder[ele_id.replace('input_', '')];
            
            if(ele_val == pl || !window['valid_'+ele_id](ele_val)) { 
                errors = true; field_error(ele); 
            } else {
                ele.css({'border':'none'});
            }
        });
        
        if(errors) return false;
        
        $.ajax({
            type: 'POST',
            dataType: 'json',
            data: form.serialize(),
            url: form.attr('action'),
            success: function(res) { form_success(res, form, elements); }
        });
    }
    
    var form_success = function(res, form, elements) {
        elements.text_bar.find('p').html('<span class="bl">'+res.name + '</span>, thank you for contacting us.')
        close(elements);
    }
    
    var field_error= function(ele) {
        ele.css({'border':'1px solid red'});
    }
            
    var init_text_fields = function(elements) {
        elements.contact_form.find('input, textarea').each(function(){
            var ele = $(this);
            var pl = placeholder[ele.attr('id').replace('input_', '')];
            if(!ele.val()) ele.val(pl);
            ele.focus(function(){ if(ele.val() == pl) ele.val('');  });
            ele.blur(function(){ if(!ele.val()) ele.val(pl); });
        });
    }
    
    return {
        init: function(){
            
            var elements = {
                top: $('#top'),
                bottom: $('#bottom'),
                contact: $('#contact_container'),
                contact_btn: $('#contact_us'),
                contact_wrap: $('#contact_inner'),
                contact_form: $('#contact_form'),
                text_bar: $('#text_bar'),
                from_line: $('#from_line'),
                center_content: $('#wrapper')
            }
            
            elements.contact_btn.click(function(e){
                e.preventDefault();
                if($(this).hasClass('open')) { close(elements); } else { open(elements); }
            });
            
            elements.contact_form.submit(function(e){
                e.preventDefault();
                submit_form($(this), elements);
            });
            
            elements.contact_btn.hover(
                function(e){elements.contact_wrap.css(
                    {'background-image':'url(/static/images/circle_star_over.png)'}
                )},
                function(e){elements.contact_wrap.css(
                    {'background-image':'url(/static/images/circle_star.png)'}
                )}
            );
            
            init_text_fields(elements);
        }
    };
}());

/* this makes things rotate.. not really the greatest */
function rotate(ele, st_deg, end_deg) {
    if (st_deg == end_deg) return;
    ele.css({
        '-webkit-transform': 'rotate('+ st_deg +'deg)',
        '-moz-transform': 'rotate('+ st_deg +'deg)',
        '-ms-transform': 'rotate('+st_deg+'deg)',
        '-o-transform': 'rotate('+ st_deg+'deg)',
        'transform': 'rotate('+ st_deg+'deg)',
        'zoom': 1
    });
    var next_degree = (end_deg < st_deg) ? --st_deg : ++st_deg;
    setTimeout(function() { rotate(ele, next_degree, end_deg); }, 1);
}

/* dynamically called validation functions */
function valid_input_name(val) {
    return $.trim(val) || false;
}

function valid_input_email (val) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(val);
}

function valid_input_message (val) {
    return $.trim(val) || false;
}
