/**
 *  Cuban Council
 *  Global JS
 *
 *  Dependencies
 *  - jQuery
 *
 */

(function($) {
    
    var CubanGlobal = {

        init: function() {

            // menu
            CubanGlobal.menu();
            
            // newsletter
            CubanGlobal.newsletter();

        },
        
        menu: function() {
            
            var menuFadeSpeed = 150;
            var menuBg = $('#cc-nav .nav-over');
            var activeState = null;
            var activeSelector = null;
            var rollOverTimeout;

            menuBg.css('opacity', '0');

            var bindMenu = function(selector, state) {

                if ($(selector).parent().hasClass('on')) {
                    activeState = state;
                    activeSelector = selector;
                }
                
                $(selector).mouseenter(function(){
                    if (activeState != state) {
                        clearTimeout(rollOverTimeout);
                        rollOverTimeout = setTimeout(function() {
                            (function() {
                                menuBg.stop(true).animate({opacity: 0}, menuFadeSpeed, 'easeInQuad', function() {
                                    $(this).css('background-position', 'center ' + (-38 * state) + 'px').animate({opacity: 1}, menuFadeSpeed);
                                });
                            }).apply(this);
                        }, 50);
                    }
                }).mouseleave(function(){
                    if (activeState != state) {
                        clearTimeout(rollOverTimeout);
                        var bgPos = menuBg.css('background-position') || '0 0';
                        if (bgPos.split(' ')[1] == (-38 * activeState) + 'px') {
                            if (menuBg.css('opacity') != '1') {
                                menuBg.stop(true).animate({opacity: 1}, Math.round(menuFadeSpeed * (1 - menuBg.css('opacity'))));
                            }
                        } else {
                            menuBg.stop(true).animate({opacity: 0}, menuFadeSpeed, 'easeInQuad', function() {
                                $(this).css('background-position', 'center ' + (-38 * activeState) + 'px').animate({opacity: 1}, menuFadeSpeed);
                            });
                        }

                    }
                }).click(function(){
                    $(activeSelector).parent().removeClass('on');
                    $(selector).parent().addClass('on');
                    activeSelector = selector;
                    activeState = state;
                });

            }
            
            bindMenu('#cc-nav .propaganda a', 1);
            bindMenu('#cc-nav .work a', 2);
            bindMenu('#cc-nav .heritage a', 3);
            bindMenu('#cc-nav .jobs a', 4);
            bindMenu('#cc-nav .blog a', 5);

            if (activeState) {
                menuBg.css('background-position', 'center ' + (-38 * activeState) + 'px').animate({opacity: 1}, menuFadeSpeed);
            }
            
        },
        
        newsletter: function() {
            
            var nlSubbing = false;
            
            var nlReset = function(selector, state) {
                if (!$('.nl-radio-sub').hasClass('sel')) {
                    $('.nl-radio-sub').addClass('sel');
                }
                if ($('.nl-radio-unsub').hasClass('sel')) {
                    $('.nl-radio-unsub').removeClass('sel');
                }
                $('#nlsub').val('email here');
                $('#f-newsletter').css('display','block');
                nlSubbing = false;
            }
            
            // newsletter icon
            $('.icn-nl').toggle(function(e) {
                e.preventDefault();
                if (!nlSubbing) {
                    nlReset();
                    $('.box-nl').fadeIn(100);
                    $(this).prepend('<span class="open"></span>');
                    $(this).children('.open').fadeIn(100);
                }
            },function(e) {
                e.preventDefault();
                if (!nlSubbing) {
                    $('.box-nl').fadeOut(100);
                    $(this).children('.open').fadeOut(100, function() { 
                        $(this).remove('.open');
                    });
                }
            });
            
            // newsletter radios
            $('.nl-radio-sub').click(function(e) {
                e.preventDefault();
                if (!$(this).hasClass('sel')) {
                    $(this).addClass('sel');
                    if ($(this).hasClass('nl-radio-sub')) {
                        $('.nl-radio-unsub').removeClass('sel');
                    } else {
                        $('.nl-radio-sub').removeClass('sel');
                    }
                }
            });
            $('.nl-radio-unsub').click(function(e) {
                e.preventDefault();
                if (!$(this).hasClass('sel')) {
                    $(this).addClass('sel');
                    if ($(this).hasClass('nl-radio-sub')) {
                        $('.nl-radio-unsub').removeClass('sel');
                    } else {
                        $('.nl-radio-sub').removeClass('sel');
                    }
                }
            });

            // newsletter submit button
            $('.box-nl .btn-sub').click(function(e) {
                e.preventDefault();
                $('#f-newsletter').submit();
            });
            
            // newsletter submit function
            $('#f-newsletter').submit(function() {
                nlSubbing = true;
                var nlemail = $('input[name=nlsub]');
                var nlsubstatus = 'sub';
                if ($('.nl-radio-unsub').hasClass('sel')) {
                    var nlsubstatus = 'unsub';
                }
                // simple form validation
                if ((nlemail.val() == '') || (nlemail.val() == 'email here')) {
                    $('#f-newsletter').css('display','none');
                    $('.box-nl').prepend('<span id="f-status" class="f-error">Please enter a valid email address ...</span>');
                    $('.box-nl #f-status').fadeIn(100).delay(2000).fadeOut(100, function() {
                        $('#f-status').remove();
                        nlReset();
                    });
                } else {
                    var nldata = 'email=' + nlemail.val() + '&substatus=' + nlsubstatus;
                    $.ajax({
                        url: "/newsletter/",
                        type: "POST",
                        data: nldata,
                        cache: false,
                        success: function (html) {                
                            if (html != '403') {
                                // success
                                $('#f-newsletter').css('display','none');
                                $('.box-nl').prepend('<span id="f-status" class="f-success">Thank you!</span>');
                                $('.box-nl #f-status').fadeIn(100).delay(2000).fadeOut(100, function() {
                                    $('#f-status').remove();
                                    $('.box-nl').hide();
                                    $('.icn-nl').children('.open').fadeOut(200, function() { 
                                        $('.icn-nl .open').remove();
                                    });
                                    nlReset();
                                });
                            } else {
                                $('#f-newsletter').css('display','none');
                                $('.box-nl').prepend('<span id="f-status" class="f-error">Something went wrong... try again.</span>');
                                $('.box-nl #f-status').fadeIn(100).delay(2000).fadeOut(100, function() {
                                    $('#f-status').remove();
                                    nlReset();
                                });
                            }           
                        }         
                    });
                }
                return false;
            });
            
        }

    };
    
    var CubanGlobalUtil = {

        init: function() {

            // standard box hover
            $('.stnd-over').each(function() {
                if ($(this).children('.over').length < 1) {
                    $(this).prepend('<span class="over"></span>').children(':first').css({'display':'none'});
                }
                $(this).mouseenter(function(){
                    $(this).children('.over').fadeIn(200);
                }).mouseleave(function(){
                    $(this).children('.over').fadeOut(200);
                });
            });

            // standard box hover w/ png
            // we're removing the "over" class on mouseleave is because we don't want to affect the hit area of the link
            $('.stnd-over-png').each(function() {
                $(this).mouseenter(function(){
                    if ($(this).children('.over').length < 1) {
                        $(this).prepend('<span class="over"></span>').children(':first').css({'display':'none'});
                    }
                    $(this).children('.over').fadeIn(200);
                }).mouseleave(function(){
                    $(this).children('.over').fadeOut(200, function() { 
                        $(this).remove('.over');
                    });
                });
            });

        }

    };

    window.CubanGlobal = CubanGlobal;
    window.CubanGlobalUtil = CubanGlobalUtil;

    $(document).ready(function() {
        CubanGlobal.init();
        CubanGlobalUtil.init();
    });

})(jQuery);
